
// // Copyright (c) 2006, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 19 Aug 06 Brian Frank Creation // ** ** FUtil provides fcode encoding and decoding utilities. ** class FUtil : FConst { ////////////////////////////////////////////////////////////////////////// // Buf ////////////////////////////////////////////////////////////////////////// static Void writeBuf(OutStream out, Buf buf) { if (buf == null) { out.writeI2(0) } else { out.writeI2(buf.size) out.writeBuf(buf.seek(0)) } } static Buf readBuf(InStream in) { size := in.readU2 if (size === 0) return null return in.readBufFully(null, size) } ////////////////////////////////////////////////////////////////////////// // Doc ////////////////////////////////////////////////////////////////////////// ** ** Write a fandoc item to the specified output stream. The fandoc file ** format is an extremely simple plan text format with left justified ** type/slot qnames, followed by the fandoc content indented two spaces. ** static Void writeDoc(OutStream out, Str key, Str doc) { if (doc == null) return out.print(key).print("\n").print(" ") doc.each |Int ch| { if (ch === '\r') throw ArgErr.make out.writeChar(ch) if (ch === '\n') out.print(" ") } out.print("\n\n") } }