/[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 72 Revision 142
21#include "compat.h" 21#include "compat.h"
22 22
23#include "generate_routines.h" 23#include "generate_routines.h"
24#include "error.h" 24#include "error.h"
25 25
26#ifdef DMALLOC
27#include <dmalloc.h>
28#endif
29
30
26int psiconv_write_color(psiconv_buffer buf, const psiconv_color value) 31int psiconv_write_color(psiconv_buffer buf, const psiconv_color value)
27{ 32{
28 int res; 33 int res;
29 if (!value) { 34 if (!value) {
30 psiconv_warn(0,psiconv_list_length(buf),"Null color"); 35 psiconv_warn(0,psiconv_buffer_length(buf),"Null color");
31 return -PSICONV_E_GENERATE; 36 return -PSICONV_E_GENERATE;
32 } 37 }
33 if ((res = psiconv_write_u8(buf,value->red))) 38 if ((res = psiconv_write_u8(buf,value->red)))
34 return res; 39 return res;
35 if ((res = psiconv_write_u8(buf,value->green))) 40 if ((res = psiconv_write_u8(buf,value->green)))
37 return psiconv_write_u8(buf,value->blue); 42 return psiconv_write_u8(buf,value->blue);
38} 43}
39 44
40int psiconv_write_font(psiconv_buffer buf, const psiconv_font value) 45int psiconv_write_font(psiconv_buffer buf, const psiconv_font value)
41{ 46{
47 int res,i;
48 if (!value) {
49 psiconv_warn(0,psiconv_buffer_length(buf),"Null font");
50 return -PSICONV_E_GENERATE;
51 }
52 if ((res = psiconv_write_u8(buf,strlen(value->name)+1)))
53 return res;
54 for (i = 0; i < strlen(value->name); i++)
55 if ((res = psiconv_write_u8(buf,value->name[i])))
56 return res;
57 return psiconv_write_u8(buf,value->screenfont);
58}
59
60int psiconv_write_border(psiconv_buffer buf, const psiconv_border value)
61{
42 int res; 62 int res;
43 if (!value) {
44 psiconv_warn(0,psiconv_list_length(buf),"Null font");
45 return -PSICONV_E_GENERATE;
46 }
47 if ((res = psiconv_write_string(buf,value->name)))
48 return res;
49 return psiconv_write_u8(buf,value->screenfont);
50}
51 63
52int psiconv_write_border(psiconv_buffer buf, const psiconv_border value)
53{
54 int res;
55
56 if (!value) { 64 if (!value) {
57 psiconv_warn(0,psiconv_list_length(buf),"Null border"); 65 psiconv_warn(0,psiconv_buffer_length(buf),"Null border");
58 return -PSICONV_E_GENERATE; 66 return -PSICONV_E_GENERATE;
59 } 67 }
60 if (value->kind > psiconv_border_dotdotdashed) 68 if (value->kind > psiconv_border_dotdotdashed)
61 psiconv_warn(0,psiconv_list_length(buf), 69 psiconv_warn(0,psiconv_buffer_length(buf),
62 "Unknown border kind (%d); assuming none",value->kind); 70 "Unknown border kind (%d); assuming none",value->kind);
63 if ((res =psiconv_write_u8(buf,value->kind == psiconv_border_none?0: 71 if ((res =psiconv_write_u8(buf,value->kind == psiconv_border_none?0:
64 value->kind == psiconv_border_solid?1: 72 value->kind == psiconv_border_solid?1:
65 value->kind == psiconv_border_double?2: 73 value->kind == psiconv_border_double?2:
66 value->kind == psiconv_border_dotted?3: 74 value->kind == psiconv_border_dotted?3:
82int psiconv_write_bullet(psiconv_buffer buf, const psiconv_bullet value) 90int psiconv_write_bullet(psiconv_buffer buf, const psiconv_bullet value)
83{ 91{
84 int res; 92 int res;
85 psiconv_buffer extra_buf; 93 psiconv_buffer extra_buf;
86 if (!value) { 94 if (!value) {
87 psiconv_warn(0,psiconv_list_length(buf),"Null bullet"); 95 psiconv_warn(0,psiconv_buffer_length(buf),"Null bullet");
88 return -PSICONV_E_GENERATE; 96 return -PSICONV_E_GENERATE;
89 } 97 }
90 98
91 if (!(extra_buf = psiconv_new_buffer())) 99 if (!(extra_buf = psiconv_buffer_new()))
92 return -PSICONV_E_NOMEM; 100 return -PSICONV_E_NOMEM;
93 if ((res = psiconv_write_size(extra_buf,value->font_size))) 101 if ((res = psiconv_write_size(extra_buf,value->font_size)))
94 goto ERROR; 102 goto ERROR;
95 if ((res = psiconv_write_u8(extra_buf,value->character))) 103 if ((res = psiconv_write_u8(extra_buf,value->character)))
96 goto ERROR; 104 goto ERROR;
97 if ((res = psiconv_write_bool(extra_buf,value->on)))
98 goto ERROR;
99 if ((res = psiconv_write_bool(extra_buf,value->indent))) 105 if ((res = psiconv_write_bool(extra_buf,value->indent)))
100 goto ERROR; 106 goto ERROR;
101 if ((res = psiconv_write_color(extra_buf,value->color))) 107 if ((res = psiconv_write_color(extra_buf,value->color)))
102 goto ERROR; 108 goto ERROR;
103 if ((res = psiconv_write_font(extra_buf,value->font))) 109 if ((res = psiconv_write_font(extra_buf,value->font)))
104 goto ERROR; 110 goto ERROR;
105 111
106 if ((res = psiconv_write_u8(buf,psiconv_list_length(extra_buf)))) 112 if ((res = psiconv_write_u8(buf,psiconv_buffer_length(extra_buf))))
107 goto ERROR; 113 goto ERROR;
108 res = psiconv_list_concat(buf,extra_buf); 114 res = psiconv_buffer_concat(buf,extra_buf);
109 115
110ERROR: 116ERROR:
111 psiconv_free_buffer(extra_buf); 117 psiconv_buffer_free(extra_buf);
112 return res; 118 return res;
113} 119}
114 120
115int psiconv_write_tab(psiconv_buffer buf,psiconv_tab value) 121int psiconv_write_tab(psiconv_buffer buf,psiconv_tab value)
116{ 122{
117 int res; 123 int res;
118 if (!value) { 124 if (!value) {
119 psiconv_warn(0,psiconv_list_length(buf),"Null tab"); 125 psiconv_warn(0,psiconv_buffer_length(buf),"Null tab");
120 return -PSICONV_E_GENERATE; 126 return -PSICONV_E_GENERATE;
121 } 127 }
122 if ((res = psiconv_write_length(buf,value->location))) 128 if ((res = psiconv_write_length(buf,value->location)))
123 return res; 129 return res;
124 if ((value->kind != psiconv_tab_left) && 130 if ((value->kind != psiconv_tab_left) &&
125 (value->kind != psiconv_tab_right) && 131 (value->kind != psiconv_tab_right) &&
126 (value->kind != psiconv_tab_centre)) 132 (value->kind != psiconv_tab_centre))
127 psiconv_warn(0,psiconv_list_length(buf), 133 psiconv_warn(0,psiconv_buffer_length(buf),
128 "Unknown tab kind (%d); assuming left",value->kind); 134 "Unknown tab kind (%d); assuming left",value->kind);
129 return psiconv_write_u8(buf, value->kind == psiconv_tab_right?2: 135 return psiconv_write_u8(buf, value->kind == psiconv_tab_right?2:
130 value->kind == psiconv_tab_centre?3:1); 136 value->kind == psiconv_tab_centre?3:1);
131} 137}
132 138
133int psiconv_write_paragraph_layout_list(psiconv_buffer buf, 139int psiconv_write_paragraph_layout_list(psiconv_buffer buf,
134 psiconv_paragraph_layout value, 140 psiconv_paragraph_layout value,
135 psiconv_paragraph_layout base) 141 psiconv_paragraph_layout base)
136{ 142{
137 int res,i,tabs_different; 143 int res,i;
138 psiconv_buffer extra_buf; 144 psiconv_buffer extra_buf;
139 psiconv_tab value_tab,base_tab; 145 psiconv_tab tab;
140 146
141 if (!value) { 147 if (!value) {
142 psiconv_warn(0,psiconv_list_length(buf),"Null paragraph layout list"); 148 psiconv_warn(0,psiconv_buffer_length(buf),"Null paragraph layout list");
143 return -PSICONV_E_GENERATE; 149 return -PSICONV_E_GENERATE;
144 } 150 }
145 if (!(extra_buf = psiconv_new_buffer())) 151 if (!(extra_buf = psiconv_buffer_new()))
146 return -PSICONV_E_NOMEM; 152 return -PSICONV_E_NOMEM;
147 153
148 if (!base || !base->back_color || !value->back_color || 154 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
149 (value->back_color->red != base->back_color->red) ||
150 (value->back_color->green != base->back_color->green) ||
151 (value->back_color->blue != base->back_color->blue)) {
152 if ((res = psiconv_write_u8(extra_buf,0x01))) 155 if ((res = psiconv_write_u8(extra_buf,0x01)))
153 goto ERROR; 156 goto ERROR;
154 if ((res = psiconv_write_color(extra_buf,value->back_color))) 157 if ((res = psiconv_write_color(extra_buf,value->back_color)))
155 goto ERROR; 158 goto ERROR;
156 } 159 }
179 if (!base || (value->justify_hor != base->justify_hor)) { 182 if (!base || (value->justify_hor != base->justify_hor)) {
180 if ((res = psiconv_write_u8(extra_buf,0x05))) 183 if ((res = psiconv_write_u8(extra_buf,0x05)))
181 goto ERROR; 184 goto ERROR;
182 if ((value->justify_hor < psiconv_justify_left) || 185 if ((value->justify_hor < psiconv_justify_left) ||
183 (value->justify_hor > psiconv_justify_full)) 186 (value->justify_hor > psiconv_justify_full))
184 psiconv_warn(0,psiconv_list_length(buf), 187 psiconv_warn(0,psiconv_buffer_length(buf),
185 "Unknown horizontal justify (%d); assuming left", 188 "Unknown horizontal justify (%d); assuming left",
186 value->justify_hor); 189 value->justify_hor);
187 if ((res = psiconv_write_u8(extra_buf, 190 if ((res = psiconv_write_u8(extra_buf,
188 value->justify_hor == psiconv_justify_centre?1: 191 value->justify_hor == psiconv_justify_centre?1:
189 value->justify_hor == psiconv_justify_right?2: 192 value->justify_hor == psiconv_justify_right?2:
194 if (!base || (value->justify_ver != base->justify_ver)) { 197 if (!base || (value->justify_ver != base->justify_ver)) {
195 if ((res = psiconv_write_u8(extra_buf,0x06))) 198 if ((res = psiconv_write_u8(extra_buf,0x06)))
196 goto ERROR; 199 goto ERROR;
197 if ((value->justify_ver < psiconv_justify_top) || 200 if ((value->justify_ver < psiconv_justify_top) ||
198 (value->justify_ver > psiconv_justify_bottom)) 201 (value->justify_ver > psiconv_justify_bottom))
199 psiconv_warn(0,psiconv_list_length(buf), 202 psiconv_warn(0,psiconv_buffer_length(buf),
200 "Unknown vertical justify (%d); assuming middle", 203 "Unknown vertical justify (%d); assuming middle",
201 value->justify_ver); 204 value->justify_ver);
202 if ((res = psiconv_write_u8(extra_buf, 205 if ((res = psiconv_write_u8(extra_buf,
203 value->justify_ver == psiconv_justify_centre?1: 206 value->justify_ver == psiconv_justify_centre?1:
204 value->justify_ver == psiconv_justify_right?2:0))) 207 value->justify_ver == psiconv_justify_right?2:0)))
259 goto ERROR; 262 goto ERROR;
260 if ((res = psiconv_write_bool(extra_buf,value->no_widow_protection))) 263 if ((res = psiconv_write_bool(extra_buf,value->no_widow_protection)))
261 goto ERROR; 264 goto ERROR;
262 } 265 }
263 266
267 if (!base || (value->wrap_to_fit_cell != base->wrap_to_fit_cell)) {
268 if ((res = psiconv_write_u8(extra_buf,0x0f)))
269 goto ERROR;
270 if ((res = psiconv_write_bool(extra_buf,value->wrap_to_fit_cell)))
271 goto ERROR;
272 }
273
264 if (!base || (value->border_distance != base->border_distance)) { 274 if (!base || (value->border_distance != base->border_distance)) {
265 if ((res = psiconv_write_u8(extra_buf,0x10))) 275 if ((res = psiconv_write_u8(extra_buf,0x10)))
266 goto ERROR; 276 goto ERROR;
267 if ((res = psiconv_write_length(extra_buf,value->border_distance))) 277 if ((res = psiconv_write_length(extra_buf,value->border_distance)))
268 goto ERROR; 278 goto ERROR;
269 } 279 }
270 280
271 if (!base || !value->top_border || !base->top_border || 281 if (!base || psiconv_compare_border(value->top_border,base->top_border)) {
272 !value->top_border->color || !base->top_border->color ||
273 (value->top_border->kind != base->top_border->kind) ||
274 (value->top_border->thickness != base->top_border->thickness) ||
275 (value->top_border->color->red != base->top_border->color->red) ||
276 (value->top_border->color->green != base->top_border->color->green) ||
277 (value->top_border->color->blue != base->top_border->color->blue))
278 if ((res = psiconv_write_u8(extra_buf,0x11))) 282 if ((res = psiconv_write_u8(extra_buf,0x11)))
279 goto ERROR; 283 goto ERROR;
280 if ((res = psiconv_write_border(extra_buf,value->top_border))) { 284 if ((res = psiconv_write_border(extra_buf,value->top_border)))
281 goto ERROR; 285 goto ERROR;
282 } 286 }
283 287
284 if (!base || !value->top_border || !base->top_border || 288 if (!base || psiconv_compare_border(value->bottom_border,
285 !value->top_border->color || !base->top_border->color || 289 base->bottom_border)) {
286 (value->top_border->kind != base->top_border->kind) ||
287 (value->top_border->thickness != base->top_border->thickness) ||
288 (value->top_border->color->red != base->top_border->color->red) ||
289 (value->top_border->color->green != base->top_border->color->green) ||
290 (value->top_border->color->blue != base->top_border->color->blue)) {
291 if ((res = psiconv_write_u8(extra_buf,0x12))) 290 if ((res = psiconv_write_u8(extra_buf,0x12)))
292 goto ERROR; 291 goto ERROR;
293 if ((res = psiconv_write_border(extra_buf,value->top_border))) 292 if ((res = psiconv_write_border(extra_buf,value->bottom_border)))
294 goto ERROR; 293 goto ERROR;
295 } 294 }
296 295
297 if (!base || !value->left_border || !base->left_border || 296 if (!base || psiconv_compare_border(value->left_border,
298 !value->left_border->color || !base->left_border->color || 297 base->left_border)) {
299 (value->left_border->kind != base->left_border->kind) ||
300 (value->left_border->thickness != base->left_border->thickness) ||
301 (value->left_border->color->red != base->left_border->color->red) ||
302 (value->left_border->color->green != base->left_border->color->green) ||
303 (value->left_border->color->blue != base->left_border->color->blue)) {
304 if ((res = psiconv_write_u8(extra_buf,0x13))) 298 if ((res = psiconv_write_u8(extra_buf,0x13)))
305 goto ERROR; 299 goto ERROR;
306 if ((res = psiconv_write_border(extra_buf,value->left_border))) 300 if ((res = psiconv_write_border(extra_buf,value->left_border)))
307 goto ERROR; 301 goto ERROR;
308 } 302 }
309 303
310 if (!base || !value->right_border || !base->right_border || 304 if (!base || psiconv_compare_border(value->right_border,
311 !value->right_border->color || !base->right_border->color ||
312 (value->right_border->kind != base->right_border->kind) ||
313 (value->right_border->thickness != base->right_border->thickness) ||
314 (value->right_border->color->red != base->right_border->color->red) ||
315 (value->right_border->color->green !=
316 base->right_border->color->green) || 305 base->right_border)) {
317 (value->right_border->color->blue != base->right_border->color->blue)) {
318 if ((res = psiconv_write_u8(extra_buf,0x14))) 306 if ((res = psiconv_write_u8(extra_buf,0x14)))
319 goto ERROR; 307 goto ERROR;
320 if ((res = psiconv_write_border(extra_buf,value->right_border))) 308 if ((res = psiconv_write_border(extra_buf,value->right_border)))
321 goto ERROR; 309 goto ERROR;
322 } 310 }
323 311
324 if (!base || !value->bullet || !base->bullet || 312 if (!base || psiconv_compare_bullet(value->bullet,
325 !value->bullet->color || !base->bullet->color || 313 base->bullet)) {
326 !value->bullet->font || !base->bullet->font ||
327 !value->bullet->font->name || !base->bullet->font->name ||
328 (value->bullet->on != base->bullet->on) ||
329 (value->bullet->font_size != base->bullet->font_size) ||
330 (value->bullet->character != base->bullet->character) ||
331 (value->bullet->indent != base->bullet->indent) ||
332 (value->bullet->color->red != base->bullet->color->red) ||
333 (value->bullet->color->green != base->bullet->color->green) ||
334 (value->bullet->color->blue != base->bullet->color->blue) ||
335 (value->bullet->font->screenfont != base->bullet->font->screenfont) ||
336 strcmp(value->bullet->font->name,base->bullet->font->name)) {
337 if ((res = psiconv_write_u8(extra_buf,0x15))) 314 if ((res = psiconv_write_u8(extra_buf,0x15)))
338 goto ERROR; 315 goto ERROR;
339 if ((res = psiconv_write_bullet(extra_buf,value->bullet))) 316 if ((res = psiconv_write_bullet(extra_buf,value->bullet)))
340 goto ERROR; 317 goto ERROR;
341 } 318 }
342 319
343 if (!value->tabs || !value->tabs->extras) { 320 if (!value->tabs || !value->tabs->extras) {
344 psiconv_warn(0,psiconv_list_length(buf),"Null tabs"); 321 psiconv_warn(0,psiconv_buffer_length(buf),"Null tabs");
345 res = -PSICONV_E_GENERATE; 322 res = -PSICONV_E_GENERATE;
346 goto ERROR; 323 goto ERROR;
347 } 324 }
325
348 /* It is not entirely clear how tabs are inherited. For now, I assume 326 /* 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 327 if there is any difference at all, we will have to generate both
350 the normal tab-interval, and all specific tabs */ 328 the normal tab-interval, and all specific tabs */
351 tabs_different = 0; 329 if (!base || psiconv_compare_all_tabs(value->tabs,base->tabs)) {
352 if (!base || !base->tabs || !base->tabs->extras || 330 if ((res = psiconv_write_u8(extra_buf,0x16)))
353 (value->tabs->normal != base->tabs->normal) || 331 goto ERROR;
354 (psiconv_list_length(value->tabs->extras) != 332 if ((res = psiconv_write_length(extra_buf,value->tabs->normal)))
355 psiconv_list_length(base->tabs->extras))) 333 goto ERROR;
356 tabs_different = 1;
357 else {
358 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { 334 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
359 value_tab = psiconv_list_get(value->tabs->extras,i);
360 base_tab = psiconv_list_get(base->tabs->extras,i);
361 if (!value_tab || !base_tab) {
362 psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption");
363 res = -PSICONV_E_NOMEM;
364 goto ERROR;
365 }
366 if ((value_tab->kind != base_tab->kind) ||
367 (value_tab->location != base_tab->location)) {
368 tabs_different = 1;
369 break;
370 }
371 }
372 }
373
374 if (tabs_different) {
375 if ((res = psiconv_write_u8(extra_buf,0x16)))
376 goto ERROR;
377 if ((res = psiconv_write_length(extra_buf,value->tabs->normal)))
378 goto ERROR;
379 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
380 if (!(value_tab = psiconv_list_get(value->tabs->extras,i))) { 335 if (!(tab = psiconv_list_get(value->tabs->extras,i))) {
381 psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption"); 336 psiconv_warn(0,psiconv_buffer_length(buf),"Massive memory corruption");
382 res = -PSICONV_E_NOMEM; 337 res = -PSICONV_E_NOMEM;
383 goto ERROR; 338 goto ERROR;
384 } 339 }
385 if ((res = psiconv_write_u8(extra_buf,0x17))) 340 if ((res = psiconv_write_u8(extra_buf,0x17)))
386 goto ERROR; 341 goto ERROR;
387 if ((res = psiconv_write_tab(extra_buf,value_tab))) 342 if ((res = psiconv_write_tab(extra_buf,tab)))
388 goto ERROR; 343 goto ERROR;
389 } 344 }
390 } 345 }
391 346
347 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
348 goto ERROR;
349
392 res = psiconv_list_concat(buf,extra_buf); 350 res = psiconv_buffer_concat(buf,extra_buf);
393 351
394ERROR: 352ERROR:
395 psiconv_free_buffer(extra_buf); 353 psiconv_buffer_free(extra_buf);
396 return res; 354 return res;
397} 355}
398 356
399int psiconv_write_character_layout_list(psiconv_buffer buf, 357int psiconv_write_character_layout_list(psiconv_buffer buf,
400 psiconv_character_layout value, 358 psiconv_character_layout value,
401 psiconv_character_layout base) 359 psiconv_character_layout base)
402{ 360{
403 int res; 361 int res;
404 psiconv_buffer extra_buf; 362 psiconv_buffer extra_buf;
405 if (!value) { 363 if (!value) {
406 psiconv_warn(0,psiconv_list_length(buf),"Null character layout list"); 364 psiconv_warn(0,psiconv_buffer_length(buf),"Null character layout list");
407 return -PSICONV_E_GENERATE; 365 return -PSICONV_E_GENERATE;
408 } 366 }
409 if (!(extra_buf = psiconv_new_buffer())) 367 if (!(extra_buf = psiconv_buffer_new()))
410 return -PSICONV_E_NOMEM; 368 return -PSICONV_E_NOMEM;
411 369
412 if (!base || !base->color || !value->color || 370 if (!base || psiconv_compare_color(base->color,value->color)) {
413 (value->color->red != base->color->red) ||
414 (value->color->green != base->color->green) ||
415 (value->color->blue != base->color->blue)) {
416 if ((res = psiconv_write_u8(extra_buf,0x19))) 371 if ((res = psiconv_write_u8(extra_buf,0x19)))
417 goto ERROR; 372 goto ERROR;
418 if ((res = psiconv_write_color(extra_buf,value->color))) 373 if ((res = psiconv_write_color(extra_buf,value->color)))
419 goto ERROR; 374 goto ERROR;
420 } 375 }
421 376
422 if (!base || !base->back_color || !value->back_color || 377 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
423 (value->back_color->red != base->back_color->red) ||
424 (value->back_color->green != base->back_color->green) ||
425 (value->back_color->blue != base->back_color->blue)) {
426 if ((res = psiconv_write_u8(extra_buf,0x1a))) 378 if ((res = psiconv_write_u8(extra_buf,0x1a)))
427 goto ERROR; 379 goto ERROR;
428 if ((res = psiconv_write_color(extra_buf,value->back_color))) 380 if ((res = psiconv_write_color(extra_buf,value->back_color)))
429 goto ERROR; 381 goto ERROR;
430 } 382 }
452 404
453 if (!base || (value->super_sub != base->super_sub)) { 405 if (!base || (value->super_sub != base->super_sub)) {
454 if ((value->super_sub != psiconv_superscript) && 406 if ((value->super_sub != psiconv_superscript) &&
455 (value->super_sub != psiconv_subscript) && 407 (value->super_sub != psiconv_subscript) &&
456 (value->super_sub != psiconv_normalscript)) 408 (value->super_sub != psiconv_normalscript))
457 psiconv_warn(0,psiconv_list_length(buf), 409 psiconv_warn(0,psiconv_buffer_length(buf),
458 "Unknown supersubscript (%d); assuming normal", 410 "Unknown supersubscript (%d); assuming normal",
459 value->super_sub); 411 value->super_sub);
460 if ((res = psiconv_write_u8(extra_buf,0x1f))) 412 if ((res = psiconv_write_u8(extra_buf,0x1f)))
461 goto ERROR; 413 goto ERROR;
462 if ((res = psiconv_write_u8(extra_buf, 414 if ((res = psiconv_write_u8(extra_buf,
463 base->super_sub == psiconv_superscript?1: 415 value->super_sub == psiconv_superscript?1:
464 base->super_sub == psiconv_superscript?2:0))) 416 value->super_sub == psiconv_subscript?2:0)))
465 goto ERROR; 417 goto ERROR;
466 } 418 }
467 419
468 if (!base || (value->underline != base->underline)) { 420 if (!base || (value->underline != base->underline)) {
469 if ((res = psiconv_write_u8(extra_buf,0x20))) 421 if ((res = psiconv_write_u8(extra_buf,0x20)))
477 goto ERROR; 429 goto ERROR;
478 if ((res = psiconv_write_bool(extra_buf,value->strikethrough))) 430 if ((res = psiconv_write_bool(extra_buf,value->strikethrough)))
479 goto ERROR; 431 goto ERROR;
480 } 432 }
481 433
482 if (!base || !value->font || !base->font || 434 if (!base || psiconv_compare_font(base->font,value->font)) {
483 (value->font->screenfont != base->font->screenfont) ||
484 strcmp(value->font->name,base->font->name)) {
485 if ((res = psiconv_write_u8(extra_buf,0x22))) 435 if ((res = psiconv_write_u8(extra_buf,0x22)))
486 goto ERROR; 436 goto ERROR;
487 if ((res = psiconv_write_font(extra_buf,value->font))) 437 if ((res = psiconv_write_font(extra_buf,value->font)))
488 goto ERROR; 438 goto ERROR;
489 } 439 }
490 440
441 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
442 goto ERROR;
443
491 res = psiconv_list_concat(buf,extra_buf); 444 res = psiconv_buffer_concat(buf,extra_buf);
492 445
493ERROR: 446ERROR:
494 psiconv_free_buffer(extra_buf); 447 psiconv_buffer_free(extra_buf);
495 return res; 448 return res;
496} 449}

Legend:
Removed from v.72  
changed lines
  Added in v.142

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