6ecd89e7ec8718ef0d22d032c4ace512647f6ef8
1 #include <textmodel.h>
2 #include <reader.h>
4 #include <vector>
5 #include <assert.h>
16 }
20 }
24 }
30 }
39 }
43 }
47 }
49 /*
50 * This is my current theory of how the StdTextModel storage format works:
51 * byte 0: version
52 * byte 1-5: len (length of piece descriptions)
53 * byte 6-5+len: piece descriptions
54 * byte 6+len-end: pieces (length of each defined in piece descriptions)
55 */
72 }
77 // NEW(sp); sp.len := len; sp.attr := attr;
78 // sp.file := rd.rider.Base(); sp.org := org; un := sp;
79 // INC(org, len) -- increment org by len ?
84 // len := -len; ASSERT(~ODD(len), 100);
85 // NEW(lp); lp.len := len DIV 2; lp.attr := attr;
86 // lp.file := rd.rider.Base(); lp.org := org; un := lp;
87 // INC(org, len) -- increment org by len ?
92 // NEW(v); v.len := 1; v.attr := attr;
93 // rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
94 // v.view.InitContext(NewContext(v, t));
95 // un := v; INC(org) -- increment org by one?? WTH?
98 }
100 }
103 }
104 // rd.SetPos(org);
105 }
106 // PROCEDURE (t: StdModel) Internalize (VAR rd: Stores.Reader);
107 // VAR u, un: Run; sp: Piece; lp: LPiece; v: ViewRef;
108 // org, len: INTEGER; ano: BYTE; thisVersion: INTEGER;
109 // attr: Attributes; dict: AttrDict;
110 // BEGIN
111 // ASSERT(t.Domain() = NIL, 20); ASSERT(t.len = 0, 21);
112 // t.Internalize^(rd); IF rd.cancelled THEN RETURN END;
113 // rd.ReadVersion(minVersion, maxStdModelVersion, thisVersion);
114 // IF rd.cancelled THEN RETURN END;
115 // StdInit(t);
116 // dict.len := 0; u := t.trailer;
117 // rd.ReadInt(len); org := rd.Pos() + len;
118 // rd.ReadByte(ano);
119 // WHILE ano # -1 DO
120 // IF ano = dict.len THEN
121 // ReadAttr(rd, attr); Stores.Join(t, attr);
122 // IF dict.len < dictSize THEN dict.attr[dict.len] := attr; INC(dict.len) END
123 // ELSE
124 // attr := dict.attr[ano]
125 // END;
126 // rd.ReadInt(len);
127 // IF len > 0 THEN (* piece *)
128 // NEW(sp); sp.len := len; sp.attr := attr;
129 // sp.file := rd.rider.Base(); sp.org := org; un := sp;
130 // INC(org, len)
131 // ELSIF len < 0 THEN (* longchar piece *)
132 // len := -len; ASSERT(~ODD(len), 100);
133 // NEW(lp); lp.len := len DIV 2; lp.attr := attr;
134 // lp.file := rd.rider.Base(); lp.org := org; un := lp;
135 // INC(org, len)
136 // ELSE (* len = 0 => embedded view *)
137 // NEW(v); v.len := 1; v.attr := attr;
138 // rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
139 // v.view.InitContext(NewContext(v, t));
140 // un := v; INC(org)
141 // END;
142 // INC(t.len, un.len); u.next := un; un.prev := u; u := un;
143 // rd.ReadByte(ano)
144 // END;
145 // rd.SetPos(org);
146 // u.next := t.trailer; t.trailer.prev := u
147 // END Internalize;
148 //
158 }
167 }
173 }