1 #include <textmodel.h>
2 #include <reader.h>
4 #include <vector>
5 #include <assert.h>
7 //#include <fstream>
8 //#include <iostream>
19 }
25 }
34 }
36 /*
37 * This is my current theory of how the StdTextModel storage format works:
38 * byte 0: version
39 * byte 1-5: len (length of piece descriptions)
40 * byte 6-5+len: piece descriptions
41 * byte 6+len-end: pieces (length of each defined in piece descriptions)
42 */
52 //std::cout << "len " << len << " ano " << (int)ano << std::endl;
58 }
61 //std::cout << "Found SChar piece" << std::endl;
63 // NEW(sp); sp.len := len; sp.attr := attr;
64 // sp.file := rd.rider.Base(); sp.org := org; un := sp;
65 // INC(org, len) -- increment org by len ?
67 //std::cout << "Found LChar piece" << std::endl;
70 // len := -len; ASSERT(~ODD(len), 100);
71 // NEW(lp); lp.len := len DIV 2; lp.attr := attr;
72 // lp.file := rd.rider.Base(); lp.org := org; un := lp;
73 // INC(org, len) -- increment org by len ?
75 //std::cout << "Found View piece" << std::endl;
78 // NEW(v); v.len := 1; v.attr := attr;
79 // rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
80 // v.view.InitContext(NewContext(v, t));
81 // un := v; INC(org) -- increment org by one?? WTH?
84 }
86 }
89 }
90 // rd.SetPos(org);
91 }
92 // PROCEDURE (t: StdModel) Internalize (VAR rd: Stores.Reader);
93 // VAR u, un: Run; sp: Piece; lp: LPiece; v: ViewRef;
94 // org, len: INTEGER; ano: BYTE; thisVersion: INTEGER;
95 // attr: Attributes; dict: AttrDict;
96 // BEGIN
97 // ASSERT(t.Domain() = NIL, 20); ASSERT(t.len = 0, 21);
98 // t.Internalize^(rd); IF rd.cancelled THEN RETURN END;
99 // rd.ReadVersion(minVersion, maxStdModelVersion, thisVersion);
100 // IF rd.cancelled THEN RETURN END;
101 // StdInit(t);
102 // dict.len := 0; u := t.trailer;
103 // rd.ReadInt(len); org := rd.Pos() + len;
104 // rd.ReadByte(ano);
105 // WHILE ano # -1 DO
106 // IF ano = dict.len THEN
107 // ReadAttr(rd, attr); Stores.Join(t, attr);
108 // IF dict.len < dictSize THEN dict.attr[dict.len] := attr; INC(dict.len) END
109 // ELSE
110 // attr := dict.attr[ano]
111 // END;
112 // rd.ReadInt(len);
113 // IF len > 0 THEN (* piece *)
114 // NEW(sp); sp.len := len; sp.attr := attr;
115 // sp.file := rd.rider.Base(); sp.org := org; un := sp;
116 // INC(org, len)
117 // ELSIF len < 0 THEN (* longchar piece *)
118 // len := -len; ASSERT(~ODD(len), 100);
119 // NEW(lp); lp.len := len DIV 2; lp.attr := attr;
120 // lp.file := rd.rider.Base(); lp.org := org; un := lp;
121 // INC(org, len)
122 // ELSE (* len = 0 => embedded view *)
123 // NEW(v); v.len := 1; v.attr := attr;
124 // rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
125 // v.view.InitContext(NewContext(v, t));
126 // un := v; INC(org)
127 // END;
128 // INC(t.len, un.len); u.next := un; un.prev := u; u := un;
129 // rd.ReadByte(ano)
130 // END;
131 // rd.SetPos(org);
132 // u.next := t.trailer; t.trailer.prev := u
133 // END Internalize;
134 //
140 }
142 }
148 }
150 }
158 }
164 }
168 }
172 }
176 }
182 }
188 }
192 }
198 }
200 }
204 }
210 }
214 }
218 }
222 }