/[public]/psiconv/trunk/lib/psiconv/generate_layout.c
ViewVC logotype

Diff of /psiconv/trunk/lib/psiconv/generate_layout.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 230 Revision 231
36 int res; 36 int res;
37 37
38 psiconv_progress(config,lev,0,"Writing color"); 38 psiconv_progress(config,lev,0,"Writing color");
39 39
40 if (!value) { 40 if (!value) {
41 psiconv_error(config,0,psiconv_buffer_length(buf),"Null color"); 41 psiconv_error(config,lev,0,"Null color");
42 return -PSICONV_E_GENERATE; 42 res = -PSICONV_E_GENERATE;
43 goto ERROR;
43 } 44 }
44 if ((res = psiconv_write_u8(config,buf,lev+1,value->red))) 45 if ((res = psiconv_write_u8(config,buf,lev+1,value->red)))
45 return res; 46 goto ERROR;
46 if ((res = psiconv_write_u8(config,buf,lev+1,value->green))) 47 if ((res = psiconv_write_u8(config,buf,lev+1,value->green)))
48 goto ERROR;
49 if ((res = psiconv_write_u8(config,buf,lev+1,value->blue)))
50 goto ERROR;
51 psiconv_progress(config,lev,0,"End of color");
52 return 0;
53
54ERROR:
55 psiconv_error(config,lev,0,"Writing of color failed");
47 return res; 56 return res;
48 return psiconv_write_u8(config,buf,lev+1,value->blue);
49} 57}
50 58
51int psiconv_write_font(const psiconv_config config, psiconv_buffer buf, 59int psiconv_write_font(const psiconv_config config, psiconv_buffer buf,
52 int lev, const psiconv_font value) 60 int lev, const psiconv_font value)
53{ 61{
54 int res,len; 62 int res,len;
55 63
56 psiconv_progress(config,lev,0,"Writing font"); 64 psiconv_progress(config,lev,0,"Writing font");
57 if (!value) { 65 if (!value) {
58 psiconv_error(config,0,psiconv_buffer_length(buf),"Null font"); 66 psiconv_error(config,0,psiconv_buffer_length(buf),"Null font");
59 return -PSICONV_E_GENERATE; 67 res = -PSICONV_E_GENERATE;
68 goto ERROR;
60 } 69 }
61 len = psiconv_unicode_strlen(value->name); 70 len = psiconv_unicode_strlen(value->name);
62 if ((res = psiconv_write_u8(config,buf,lev+1,len+1))) 71 if ((res = psiconv_write_u8(config,buf,lev+1,len+1)))
63 return res; 72 goto ERROR;
64 if ((res = psiconv_write_charlist(config,buf,lev+1,value->name))) 73 if ((res = psiconv_write_charlist(config,buf,lev+1,value->name)))
74 goto ERROR;
75 if ((res = psiconv_write_u8(config,buf,lev+1,value->screenfont)))
76 goto ERROR;
77 psiconv_progress(config,lev,0,"End of font");
78 return 0;
79
80ERROR:
81 psiconv_error(config,lev,0,"Writing of font failed");
65 return res; 82 return res;
66 return psiconv_write_u8(config,buf,lev+1,value->screenfont);
67} 83}
68 84
69int psiconv_write_border(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_border value) 85int psiconv_write_border(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_border value)
70{ 86{
71 int res; 87 int res;
72 88
73 psiconv_progress(config,lev,0,"Writing border"); 89 psiconv_progress(config,lev,0,"Writing border");
74 90
75 if (!value) { 91 if (!value) {
76 psiconv_error(config,0,psiconv_buffer_length(buf),"Null border"); 92 psiconv_error(config,lev,0,"Null border");
77 return -PSICONV_E_GENERATE; 93 res = -PSICONV_E_GENERATE;
94 goto ERROR;
78 } 95 }
79 if (value->kind > psiconv_border_dotdotdashed) 96 if (value->kind > psiconv_border_dotdotdashed)
80 psiconv_warn(config,0,psiconv_buffer_length(buf), 97 psiconv_warn(config,lev,0,
81 "Unknown border kind (%d); assuming none",value->kind); 98 "Unknown border kind (%d); assuming none",value->kind);
82 if ((res =psiconv_write_u8(config,buf,lev+1, 99 if ((res =psiconv_write_u8(config,buf,lev+1,
83 value->kind == psiconv_border_none?0: 100 value->kind == psiconv_border_none?0:
84 value->kind == psiconv_border_solid?1: 101 value->kind == psiconv_border_solid?1:
85 value->kind == psiconv_border_double?2: 102 value->kind == psiconv_border_double?2:
86 value->kind == psiconv_border_dotted?3: 103 value->kind == psiconv_border_dotted?3:
87 value->kind == psiconv_border_dashed?4: 104 value->kind == psiconv_border_dashed?4:
88 value->kind == psiconv_border_dotdashed?5: 105 value->kind == psiconv_border_dotdashed?5:
89 value->kind == psiconv_border_dotdotdashed?6: 106 value->kind == psiconv_border_dotdotdashed?6:
90 0))) 107 0)))
91 return res; 108 goto ERROR;
92 if ((res = psiconv_write_size(config,buf,lev+1,(value->kind == psiconv_border_solid) || 109 if ((res = psiconv_write_size(config,buf,lev+1,
110 (value->kind == psiconv_border_solid) ||
93 (value->kind == psiconv_border_double) ? 111 (value->kind == psiconv_border_double) ?
94 value->thickness:1.0/20.0))) 112 value->thickness:1.0/20.0)))
95 return res; 113 goto ERROR;
96 if ((res = psiconv_write_color(config,buf,lev+1,value->color))) 114 if ((res = psiconv_write_color(config,buf,lev+1,value->color)))
97 return res; 115 goto ERROR;
98 /* Unknown byte */ 116 /* Unknown byte */
99 return psiconv_write_u8(config,buf,lev+1,1); 117 if ((res = psiconv_write_u8(config,buf,lev+1,1)))
118 goto ERROR;
119 psiconv_progress(config,lev,0,"End of border");
120 return 0;
121
122ERROR:
123 psiconv_error(config,lev,0,"Writing of border failed");
124 return res;
100} 125}
101 126
102int psiconv_write_bullet(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_bullet value) 127int psiconv_write_bullet(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_bullet value)
103{ 128{
104 int res; 129 int res;
106 131
107 psiconv_progress(config,lev,0,"Writing bullet"); 132 psiconv_progress(config,lev,0,"Writing bullet");
108 133
109 if (!value) { 134 if (!value) {
110 psiconv_error(config,0,psiconv_buffer_length(buf),"Null bullet"); 135 psiconv_error(config,0,psiconv_buffer_length(buf),"Null bullet");
111 return -PSICONV_E_GENERATE; 136 res = -PSICONV_E_GENERATE;
137 goto ERROR1;
112 } 138 }
113 139
114 if (!(extra_buf = psiconv_buffer_new())) 140 if (!(extra_buf = psiconv_buffer_new())) {
115 return -PSICONV_E_NOMEM; 141 res = -PSICONV_E_NOMEM;
142 goto ERROR1;
143 }
116 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size))) 144 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size)))
117 goto ERROR; 145 goto ERROR2;
118 if ((res = psiconv_unicode_write_char(config,extra_buf,lev+1, 146 if ((res = psiconv_unicode_write_char(config,extra_buf,lev+1,
119 value->character))) 147 value->character)))
120 goto ERROR; 148 goto ERROR2;
121 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->indent))) 149 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->indent)))
122 goto ERROR; 150 goto ERROR2;
123 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color))) 151 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color)))
124 goto ERROR; 152 goto ERROR2;
125 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font))) 153 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font)))
126 goto ERROR; 154 goto ERROR2;
127 155
128 if ((res = psiconv_write_u8(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 156 if ((res = psiconv_write_u8(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
129 goto ERROR; 157 goto ERROR2;
130 res = psiconv_buffer_concat(buf,extra_buf); 158 res = psiconv_buffer_concat(buf,extra_buf);
131 159
132ERROR: 160ERROR2:
133 psiconv_buffer_free(extra_buf); 161 psiconv_buffer_free(extra_buf);
162ERROR1:
163 if (res)
164 psiconv_error(config,lev,0,"Writing of bullet failed");
165 else
166 psiconv_progress(config,lev,0,"End of bullet");
134 return res; 167 return res;
135} 168}
136 169
137int psiconv_write_tab(const psiconv_config config, psiconv_buffer buf,int lev, psiconv_tab value) 170int psiconv_write_tab(const psiconv_config config, psiconv_buffer buf,int lev, psiconv_tab value)
138{ 171{
139 int res; 172 int res;
140 173
141 psiconv_progress(config,lev,0,"Writing tab"); 174 psiconv_progress(config,lev,0,"Writing tab");
142 175
143 if (!value) { 176 if (!value) {
144 psiconv_error(config,0,psiconv_buffer_length(buf),"Null tab"); 177 psiconv_error(config,lev,0,"Null tab");
145 return -PSICONV_E_GENERATE; 178 res = -PSICONV_E_GENERATE;
179 goto ERROR;
146 } 180 }
147 if ((res = psiconv_write_length(config,buf,lev+1,value->location))) 181 if ((res = psiconv_write_length(config,buf,lev+1,value->location)))
148 return res; 182 goto ERROR;
149 if ((value->kind != psiconv_tab_left) && 183 if ((value->kind != psiconv_tab_left) &&
150 (value->kind != psiconv_tab_right) && 184 (value->kind != psiconv_tab_right) &&
151 (value->kind != psiconv_tab_centre)) 185 (value->kind != psiconv_tab_centre))
152 psiconv_warn(config,0,psiconv_buffer_length(buf), 186 psiconv_warn(config,lev,0,
153 "Unknown tab kind (%d); assuming left",value->kind); 187 "Unknown tab kind (%d); assuming left",value->kind);
154 return psiconv_write_u8(config,buf,lev+1, value->kind == psiconv_tab_right?2: 188 if ((res = psiconv_write_u8(config,buf,lev+1,
189 value->kind == psiconv_tab_right?2:
155 value->kind == psiconv_tab_centre?3:1); 190 value->kind == psiconv_tab_centre?3:1)))
191 goto ERROR;
192 psiconv_progress(config,lev,0,"End of tab");
193 return 0;
194ERROR:
195 psiconv_error(config,lev,0,"Writing of tab failed");
196 return res;
156} 197}
157 198
158int psiconv_write_paragraph_layout_list(const psiconv_config config, 199int psiconv_write_paragraph_layout_list(const psiconv_config config,
159 psiconv_buffer buf,int lev, 200 psiconv_buffer buf,int lev,
160 psiconv_paragraph_layout value, 201 psiconv_paragraph_layout value,
165 psiconv_tab tab; 206 psiconv_tab tab;
166 207
167 psiconv_progress(config,lev,0,"Writing paragraph layout list"); 208 psiconv_progress(config,lev,0,"Writing paragraph layout list");
168 209
169 if (!value) { 210 if (!value) {
170 psiconv_error(config,0,psiconv_buffer_length(buf),"Null paragraph layout list"); 211 psiconv_error(config,lev,0,"Null paragraph layout list");
171 return -PSICONV_E_GENERATE; 212 res = -PSICONV_E_GENERATE;
213 goto ERROR1;
172 } 214 }
173 if (!(extra_buf = psiconv_buffer_new())) 215 if (!(extra_buf = psiconv_buffer_new())) {
174 return -PSICONV_E_NOMEM; 216 res = -PSICONV_E_NOMEM;
217 goto ERROR1;
218 }
175 219
176 if (!base || psiconv_compare_color(base->back_color,value->back_color)) { 220 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
177 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x01))) 221 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x01)))
178 goto ERROR; 222 goto ERROR2;
179 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color))) 223 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color)))
180 goto ERROR; 224 goto ERROR2;
181 } 225 }
182 226
183 if (!base || (value->indent_left != base->indent_left)) { 227 if (!base || (value->indent_left != base->indent_left)) {
184 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x02))) 228 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x02)))
185 goto ERROR; 229 goto ERROR2;
186 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_left))) 230 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_left)))
187 goto ERROR; 231 goto ERROR2;
188 } 232 }
189 233
190 if (!base || (value->indent_right != base->indent_right)) { 234 if (!base || (value->indent_right != base->indent_right)) {
191 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x03))) 235 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x03)))
192 goto ERROR; 236 goto ERROR2;
193 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_right))) 237 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_right)))
194 goto ERROR; 238 goto ERROR2;
195 } 239 }
196 240
197 if (!base || (value->indent_first != base->indent_first)) { 241 if (!base || (value->indent_first != base->indent_first)) {
198 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x04))) 242 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x04)))
199 goto ERROR; 243 goto ERROR2;
200 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_first))) 244 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_first)))
201 goto ERROR; 245 goto ERROR2;
202 } 246 }
203 247
204 if (!base || (value->justify_hor != base->justify_hor)) { 248 if (!base || (value->justify_hor != base->justify_hor)) {
205 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x05))) 249 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x05)))
206 goto ERROR; 250 goto ERROR2;
207 if ((value->justify_hor < psiconv_justify_left) || 251 if ((value->justify_hor < psiconv_justify_left) ||
208 (value->justify_hor > psiconv_justify_full)) 252 (value->justify_hor > psiconv_justify_full))
209 psiconv_warn(config,0,psiconv_buffer_length(buf), 253 psiconv_warn(config,lev,0,
210 "Unknown horizontal justify (%d); assuming left", 254 "Unknown horizontal justify (%d); assuming left",
211 value->justify_hor); 255 value->justify_hor);
212 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 256 if ((res = psiconv_write_u8(config,extra_buf,lev+1,
213 value->justify_hor == psiconv_justify_centre?1: 257 value->justify_hor == psiconv_justify_centre?1:
214 value->justify_hor == psiconv_justify_right?2: 258 value->justify_hor == psiconv_justify_right?2:
215 value->justify_hor == psiconv_justify_full?3:0))) 259 value->justify_hor == psiconv_justify_full?3:0)))
216 goto ERROR; 260 goto ERROR2;
217 } 261 }
218 262
219 if (!base || (value->justify_ver != base->justify_ver)) { 263 if (!base || (value->justify_ver != base->justify_ver)) {
220 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x06))) 264 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x06)))
221 goto ERROR; 265 goto ERROR2;
222 if ((value->justify_ver < psiconv_justify_top) || 266 if ((value->justify_ver < psiconv_justify_top) ||
223 (value->justify_ver > psiconv_justify_bottom)) 267 (value->justify_ver > psiconv_justify_bottom))
224 psiconv_warn(config,0,psiconv_buffer_length(buf), 268 psiconv_warn(config,0,psiconv_buffer_length(buf),
225 "Unknown vertical justify (%d); assuming middle", 269 "Unknown vertical justify (%d); assuming middle",
226 value->justify_ver); 270 value->justify_ver);
227 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 271 if ((res = psiconv_write_u8(config,extra_buf,lev+1,
228 value->justify_ver == psiconv_justify_centre?1: 272 value->justify_ver == psiconv_justify_centre?1:
229 value->justify_ver == psiconv_justify_right?2:0))) 273 value->justify_ver == psiconv_justify_right?2:0)))
230 goto ERROR; 274 goto ERROR2;
231 } 275 }
232 276
233 if (!base || (value->linespacing != base->linespacing)) { 277 if (!base || (value->linespacing != base->linespacing)) {
234 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x07))) 278 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x07)))
235 goto ERROR; 279 goto ERROR2;
236 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->linespacing))) 280 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->linespacing)))
237 goto ERROR; 281 goto ERROR2;
238 } 282 }
239 283
240 if (!base || (value->linespacing_exact != base->linespacing_exact)) { 284 if (!base || (value->linespacing_exact != base->linespacing_exact)) {
241 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x08))) 285 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x08)))
242 goto ERROR; 286 goto ERROR2;
243 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->linespacing_exact))) 287 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->linespacing_exact)))
244 goto ERROR; 288 goto ERROR2;
245 } 289 }
246 290
247 if (!base || (value->space_above != base->space_above)) { 291 if (!base || (value->space_above != base->space_above)) {
248 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x09))) 292 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x09)))
249 goto ERROR; 293 goto ERROR2;
250 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_above))) 294 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_above)))
251 goto ERROR; 295 goto ERROR2;
252 } 296 }
253 297
254 if (!base || (value->space_below != base->space_below)) { 298 if (!base || (value->space_below != base->space_below)) {
255 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0a))) 299 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0a)))
256 goto ERROR; 300 goto ERROR2;
257 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_below))) 301 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_below)))
258 goto ERROR; 302 goto ERROR2;
259 } 303 }
260 304
261 if (!base || (value->keep_together != base->keep_together)) { 305 if (!base || (value->keep_together != base->keep_together)) {
262 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0b))) 306 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0b)))
263 goto ERROR; 307 goto ERROR2;
264 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_together))) 308 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_together)))
265 goto ERROR; 309 goto ERROR2;
266 } 310 }
267 311
268 if (!base || (value->keep_with_next != base->keep_with_next)) { 312 if (!base || (value->keep_with_next != base->keep_with_next)) {
269 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0c))) 313 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0c)))
270 goto ERROR; 314 goto ERROR2;
271 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_with_next))) 315 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_with_next)))
272 goto ERROR; 316 goto ERROR2;
273 } 317 }
274 318
275 if (!base || (value->on_next_page != base->on_next_page)) { 319 if (!base || (value->on_next_page != base->on_next_page)) {
276 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0d))) 320 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0d)))
277 goto ERROR; 321 goto ERROR2;
278 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->on_next_page))) 322 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->on_next_page)))
279 goto ERROR; 323 goto ERROR2;
280 } 324 }
281 325
282 if (!base || (value->no_widow_protection != base->no_widow_protection)) { 326 if (!base || (value->no_widow_protection != base->no_widow_protection)) {
283 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0e))) 327 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0e)))
284 goto ERROR; 328 goto ERROR2;
285 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->no_widow_protection))) 329 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->no_widow_protection)))
286 goto ERROR; 330 goto ERROR2;
287 } 331 }
288 332
289 if (!base || (value->wrap_to_fit_cell != base->wrap_to_fit_cell)) { 333 if (!base || (value->wrap_to_fit_cell != base->wrap_to_fit_cell)) {
290 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0f))) 334 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0f)))
291 goto ERROR; 335 goto ERROR2;
292 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->wrap_to_fit_cell))) 336 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->wrap_to_fit_cell)))
293 goto ERROR; 337 goto ERROR2;
294 } 338 }
295 339
296 if (!base || (value->border_distance != base->border_distance)) { 340 if (!base || (value->border_distance != base->border_distance)) {
297 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x10))) 341 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x10)))
298 goto ERROR; 342 goto ERROR2;
299 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->border_distance))) 343 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->border_distance)))
300 goto ERROR; 344 goto ERROR2;
301 } 345 }
302 346
303 if (!base || psiconv_compare_border(value->top_border,base->top_border)) { 347 if (!base || psiconv_compare_border(value->top_border,base->top_border)) {
304 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x11))) 348 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x11)))
305 goto ERROR; 349 goto ERROR2;
306 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->top_border))) 350 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->top_border)))
307 goto ERROR; 351 goto ERROR2;
308 } 352 }
309 353
310 if (!base || psiconv_compare_border(value->bottom_border, 354 if (!base || psiconv_compare_border(value->bottom_border,
311 base->bottom_border)) { 355 base->bottom_border)) {
312 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x12))) 356 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x12)))
313 goto ERROR; 357 goto ERROR2;
314 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->bottom_border))) 358 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->bottom_border)))
315 goto ERROR; 359 goto ERROR2;
316 } 360 }
317 361
318 if (!base || psiconv_compare_border(value->left_border, 362 if (!base || psiconv_compare_border(value->left_border,
319 base->left_border)) { 363 base->left_border)) {
320 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x13))) 364 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x13)))
321 goto ERROR; 365 goto ERROR2;
322 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->left_border))) 366 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->left_border)))
323 goto ERROR; 367 goto ERROR2;
324 } 368 }
325 369
326 if (!base || psiconv_compare_border(value->right_border, 370 if (!base || psiconv_compare_border(value->right_border,
327 base->right_border)) { 371 base->right_border)) {
328 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x14))) 372 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x14)))
329 goto ERROR; 373 goto ERROR2;
330 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->right_border))) 374 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->right_border)))
331 goto ERROR; 375 goto ERROR2;
332 } 376 }
333 377
334 if (!base || psiconv_compare_bullet(value->bullet, 378 if (!base || psiconv_compare_bullet(value->bullet,
335 base->bullet)) { 379 base->bullet)) {
336 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x15))) 380 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x15)))
337 goto ERROR; 381 goto ERROR2;
338 if ((res = psiconv_write_bullet(config,extra_buf,lev+1,value->bullet))) 382 if ((res = psiconv_write_bullet(config,extra_buf,lev+1,value->bullet)))
339 goto ERROR; 383 goto ERROR2;
340 } 384 }
341 385
342 if (!value->tabs || !value->tabs->extras) { 386 if (!value->tabs || !value->tabs->extras) {
343 psiconv_error(config,0,psiconv_buffer_length(buf),"Null tabs"); 387 psiconv_error(config,0,psiconv_buffer_length(buf),"Null tabs");
344 res = -PSICONV_E_GENERATE; 388 res = -PSICONV_E_GENERATE;
345 goto ERROR; 389 goto ERROR2;
346 } 390 }
347 391
348 /* It is not entirely clear how tabs are inherited. For now, I assume 392 /* It is not entirely clear how tabs are inherited. For now, I assume
349 if there is any difference at all, we will have to generate both 393 if there is any difference at all, we will have to generate both
350 the normal tab-interval, and all specific tabs */ 394 the normal tab-interval, and all specific tabs */
351 if (!base || psiconv_compare_all_tabs(value->tabs,base->tabs)) { 395 if (!base || psiconv_compare_all_tabs(value->tabs,base->tabs)) {
352 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x16))) 396 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x16)))
353 goto ERROR; 397 goto ERROR2;
354 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->tabs->normal))) 398 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->tabs->normal)))
355 goto ERROR; 399 goto ERROR2;
356 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { 400 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
357 if (!(tab = psiconv_list_get(value->tabs->extras,i))) { 401 if (!(tab = psiconv_list_get(value->tabs->extras,i))) {
358 psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); 402 psiconv_error(config,lev+1,0,"Massive memory corruption");
359 res = -PSICONV_E_NOMEM; 403 res = -PSICONV_E_NOMEM;
360 goto ERROR; 404 goto ERROR2;
361 } 405 }
362 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x17))) 406 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x17)))
363 goto ERROR; 407 goto ERROR2;
364 if ((res = psiconv_write_tab(config,extra_buf,lev+1,tab))) 408 if ((res = psiconv_write_tab(config,extra_buf,lev+1,tab)))
365 goto ERROR; 409 goto ERROR2;
366 } 410 }
367 } 411 }
368 412
369 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 413 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
370 goto ERROR; 414 goto ERROR2;
371 415
372 res = psiconv_buffer_concat(buf,extra_buf); 416 res = psiconv_buffer_concat(buf,extra_buf);
373 417
374ERROR: 418ERROR2:
375 psiconv_buffer_free(extra_buf); 419 psiconv_buffer_free(extra_buf);
420ERROR1:
421 if (res)
422 psiconv_error(config,lev,0,"Writing of paragraph layout list failed");
423 else
424 psiconv_progress(config,lev,0,"End of paragraph layout list");
376 return res; 425 return res;
377} 426}
378 427
379int psiconv_write_character_layout_list(const psiconv_config config, 428int psiconv_write_character_layout_list(const psiconv_config config,
380 psiconv_buffer buf,int lev, 429 psiconv_buffer buf,int lev,
385 psiconv_buffer extra_buf; 434 psiconv_buffer extra_buf;
386 435
387 psiconv_progress(config,lev,0,"Writing character layout list"); 436 psiconv_progress(config,lev,0,"Writing character layout list");
388 437
389 if (!value) { 438 if (!value) {
390 psiconv_error(config,0,psiconv_buffer_length(buf),"Null character layout list"); 439 psiconv_error(config,lev,0,"Null character layout list");
391 return -PSICONV_E_GENERATE; 440 res = -PSICONV_E_GENERATE;
441 goto ERROR1;
392 } 442 }
393 if (!(extra_buf = psiconv_buffer_new())) 443 if (!(extra_buf = psiconv_buffer_new())) {
394 return -PSICONV_E_NOMEM; 444 res = -PSICONV_E_NOMEM;
445 goto ERROR1;
446 }
395 447
396 if (!base || psiconv_compare_color(base->color,value->color)) { 448 if (!base || psiconv_compare_color(base->color,value->color)) {
397 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x19))) 449 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x19)))
398 goto ERROR; 450 goto ERROR2;
399 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color))) 451 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color)))
400 goto ERROR; 452 goto ERROR2;
401 } 453 }
402 454
403 if (!base || psiconv_compare_color(base->back_color,value->back_color)) { 455 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
404 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1a))) 456 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1a)))
405 goto ERROR; 457 goto ERROR2;
406 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color))) 458 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color)))
407 goto ERROR; 459 goto ERROR2;
408 } 460 }
409 461
410 if (!base || (value->font_size != base->font_size)) { 462 if (!base || (value->font_size != base->font_size)) {
411 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1c))) 463 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1c)))
412 goto ERROR; 464 goto ERROR2;
413 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size))) 465 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size)))
414 goto ERROR; 466 goto ERROR2;
415 } 467 }
416 468
417 if (!base || (value->italic != base->italic)) { 469 if (!base || (value->italic != base->italic)) {
418 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1d))) 470 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1d)))
419 goto ERROR; 471 goto ERROR2;
420 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->italic))) 472 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->italic)))
421 goto ERROR; 473 goto ERROR2;
422 } 474 }
423 475
424 if (!base || (value->bold != base->bold)) { 476 if (!base || (value->bold != base->bold)) {
425 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1e))) 477 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1e)))
426 goto ERROR; 478 goto ERROR2;
427 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->bold))) 479 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->bold)))
428 goto ERROR; 480 goto ERROR2;
429 } 481 }
430 482
431 if (!base || (value->super_sub != base->super_sub)) { 483 if (!base || (value->super_sub != base->super_sub)) {
432 if ((value->super_sub != psiconv_superscript) && 484 if ((value->super_sub != psiconv_superscript) &&
433 (value->super_sub != psiconv_subscript) && 485 (value->super_sub != psiconv_subscript) &&
434 (value->super_sub != psiconv_normalscript)) 486 (value->super_sub != psiconv_normalscript))
435 psiconv_warn(config,0,psiconv_buffer_length(buf), 487 psiconv_warn(config,lev,0,"Unknown supersubscript (%d); assuming normal",
436 "Unknown supersubscript (%d); assuming normal",
437 value->super_sub); 488 value->super_sub);
438 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1f))) 489 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1f)))
439 goto ERROR; 490 goto ERROR2;
440 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 491 if ((res = psiconv_write_u8(config,extra_buf,lev+1,
441 value->super_sub == psiconv_superscript?1: 492 value->super_sub == psiconv_superscript?1:
442 value->super_sub == psiconv_subscript?2:0))) 493 value->super_sub == psiconv_subscript?2:0)))
443 goto ERROR; 494 goto ERROR2;
444 } 495 }
445 496
446 if (!base || (value->underline != base->underline)) { 497 if (!base || (value->underline != base->underline)) {
447 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x20))) 498 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x20)))
448 goto ERROR; 499 goto ERROR2;
449 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->underline))) 500 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->underline)))
450 goto ERROR; 501 goto ERROR2;
451 } 502 }
452 503
453 if (!base || (value->strikethrough != base->strikethrough)) { 504 if (!base || (value->strikethrough != base->strikethrough)) {
454 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x21))) 505 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x21)))
455 goto ERROR; 506 goto ERROR2;
456 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->strikethrough))) 507 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->strikethrough)))
457 goto ERROR; 508 goto ERROR2;
458 } 509 }
459 510
460 if (!base || psiconv_compare_font(base->font,value->font)) { 511 if (!base || psiconv_compare_font(base->font,value->font)) {
461 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x22))) 512 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x22)))
462 goto ERROR; 513 goto ERROR2;
463 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font))) 514 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font)))
464 goto ERROR; 515 goto ERROR2;
465 } 516 }
466 517
467 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 518 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
468 goto ERROR; 519 goto ERROR2;
469 520
470 res = psiconv_buffer_concat(buf,extra_buf); 521 res = psiconv_buffer_concat(buf,extra_buf);
471 522
472ERROR: 523ERROR2:
473 psiconv_buffer_free(extra_buf); 524 psiconv_buffer_free(extra_buf);
525ERROR1:
526 if (res)
527 psiconv_error(config,lev,0,"Writing of character layout list failed");
528 else
529 psiconv_progress(config,lev,0,"End of character layout list");
474 return res; 530 return res;
475} 531}

Legend:
Removed from v.230  
changed lines
  Added in v.231

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26