92ff862ade0662c199002db0ecf1b25106947596
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 ?
91 // NEW(v); v.len := 1; v.attr := attr;
92 // rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
93 // v.view.InitContext(NewContext(v, t));
94 // un := v; INC(org) -- increment org by one?? WTH?
97 }
99 }
102 }
103 // rd.SetPos(org);
104 }
105 // PROCEDURE (t: StdModel) Internalize (VAR rd: Stores.Reader);
106 // VAR u, un: Run; sp: Piece; lp: LPiece; v: ViewRef;
107 // org, len: INTEGER; ano: BYTE; thisVersion: INTEGER;
108 // attr: Attributes; dict: AttrDict;
109 // BEGIN
110 // ASSERT(t.Domain() = NIL, 20); ASSERT(t.len = 0, 21);
111 // t.Internalize^(rd); IF rd.cancelled THEN RETURN END;
112 // rd.ReadVersion(minVersion, maxStdModelVersion, thisVersion);
113 // IF rd.cancelled THEN RETURN END;
114 // StdInit(t);
115 // dict.len := 0; u := t.trailer;
116 // rd.ReadInt(len); org := rd.Pos() + len;
117 // rd.ReadByte(ano);
118 // WHILE ano # -1 DO
119 // IF ano = dict.len THEN
120 // ReadAttr(rd, attr); Stores.Join(t, attr);
121 // IF dict.len < dictSize THEN dict.attr[dict.len] := attr; INC(dict.len) END
122 // ELSE
123 // attr := dict.attr[ano]
124 // END;
125 // rd.ReadInt(len);
126 // IF len > 0 THEN (* piece *)
127 // NEW(sp); sp.len := len; sp.attr := attr;
128 // sp.file := rd.rider.Base(); sp.org := org; un := sp;
129 // INC(org, len)
130 // ELSIF len < 0 THEN (* longchar piece *)
131 // len := -len; ASSERT(~ODD(len), 100);
132 // NEW(lp); lp.len := len DIV 2; lp.attr := attr;
133 // lp.file := rd.rider.Base(); lp.org := org; un := lp;
134 // INC(org, len)
135 // ELSE (* len = 0 => embedded view *)
136 // NEW(v); v.len := 1; v.attr := attr;
137 // rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
138 // v.view.InitContext(NewContext(v, t));
139 // un := v; INC(org)
140 // END;
141 // INC(t.len, un.len); u.next := un; un.prev := u; u := un;
142 // rd.ReadByte(ano)
143 // END;
144 // rd.SetPos(org);
145 // u.next := t.trailer; t.trailer.prev := u
146 // END Internalize;
147 //
157 }
168 }
174 }