1 //
2 // Copyright (c) 2006, Brian Frank and Andy Frank
3 // Licensed under the Academic Free License version 3.0
4 //
5 // History:
6 // 19 Aug 06 Brian Frank Creation
7 //
8
9 **
10 ** FUtil provides fcode encoding and decoding utilities.
11 **
12 class FUtil : FConst
13 {
14
15 //////////////////////////////////////////////////////////////////////////
16 // Buf
17 //////////////////////////////////////////////////////////////////////////
18
19 static Void writeBuf(OutStream out, Buf buf)
20 {
21 if (buf == null)
22 {
23 out.writeI2(0)
24 }
25 else
26 {
27 out.writeI2(buf.size)
28 out.writeBuf(buf.seek(0))
29 }
30 }
31
32 static Buf readBuf(InStream in)
33 {
34 size := in.readU2
35 if (size === 0) return null
36 return in.readBufFully(null, size)
37 }
38
39 //////////////////////////////////////////////////////////////////////////
40 // Doc
41 //////////////////////////////////////////////////////////////////////////
42
43 **
44 ** Write a fandoc item to the specified output stream. The fandoc file
45 ** format is an extremely simple plan text format with left justified
46 ** type/slot qnames, followed by the fandoc content indented two spaces.
47 **
48 static Void writeDoc(OutStream out, Str key, Str doc)
49 {
50 if (doc == null) return
51 out.print(key).print("\n").print(" ")
52 doc.each |Int ch|
53 {
54 if (ch === '\r') throw ArgErr.make
55 out.writeChar(ch)
56 if (ch === '\n') out.print(" ")
57 }
58 out.print("\n\n")
59 }
60
61 }
2 // Copyright (c) 2006, Brian Frank and Andy Frank
3 // Licensed under the Academic Free License version 3.0
4 //
5 // History:
6 // 19 Aug 06 Brian Frank Creation
7 //
8
9 **
10 ** FUtil provides fcode encoding and decoding utilities.
11 **
12 class FUtil : FConst
13 {
14
15 //////////////////////////////////////////////////////////////////////////
16 // Buf
17 //////////////////////////////////////////////////////////////////////////
18
19 static Void writeBuf(OutStream out, Buf buf)
20 {
21 if (buf == null)
22 {
23 out.writeI2(0)
24 }
25 else
26 {
27 out.writeI2(buf.size)
28 out.writeBuf(buf.seek(0))
29 }
30 }
31
32 static Buf readBuf(InStream in)
33 {
34 size := in.readU2
35 if (size === 0) return null
36 return in.readBufFully(null, size)
37 }
38
39 //////////////////////////////////////////////////////////////////////////
40 // Doc
41 //////////////////////////////////////////////////////////////////////////
42
43 **
44 ** Write a fandoc item to the specified output stream. The fandoc file
45 ** format is an extremely simple plan text format with left justified
46 ** type/slot qnames, followed by the fandoc content indented two spaces.
47 **
48 static Void writeDoc(OutStream out, Str key, Str doc)
49 {
50 if (doc == null) return
51 out.print(key).print("\n").print(" ")
52 doc.each |Int ch|
53 {
54 if (ch === '\r') throw ArgErr.make
55 out.writeChar(ch)
56 if (ch === '\n') out.print(" ")
57 }
58 out.print("\n\n")
59 }
60
61 }