/[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 78 Revision 79
25 25
26int psiconv_write_color(psiconv_buffer buf, const psiconv_color value) 26int psiconv_write_color(psiconv_buffer buf, const psiconv_color value)
27{ 27{
28 int res; 28 int res;
29 if (!value) { 29 if (!value) {
30 psiconv_warn(0,psiconv_list_length(buf),"Null color"); 30 psiconv_warn(0,psiconv_buffer_length(buf),"Null color");
31 return -PSICONV_E_GENERATE; 31 return -PSICONV_E_GENERATE;
32 } 32 }
33 if ((res = psiconv_write_u8(buf,value->red))) 33 if ((res = psiconv_write_u8(buf,value->red)))
34 return res; 34 return res;
35 if ((res = psiconv_write_u8(buf,value->green))) 35 if ((res = psiconv_write_u8(buf,value->green)))
39 39
40int psiconv_write_font(psiconv_buffer buf, const psiconv_font value) 40int psiconv_write_font(psiconv_buffer buf, const psiconv_font value)
41{ 41{
42 int res; 42 int res;
43 if (!value) { 43 if (!value) {
44 psiconv_warn(0,psiconv_list_length(buf),"Null font"); 44 psiconv_warn(0,psiconv_buffer_length(buf),"Null font");
45 return -PSICONV_E_GENERATE; 45 return -PSICONV_E_GENERATE;
46 } 46 }
47 if ((res = psiconv_write_string(buf,value->name))) 47 if ((res = psiconv_write_string(buf,value->name)))
48 return res; 48 return res;
49 return psiconv_write_u8(buf,value->screenfont); 49 return psiconv_write_u8(buf,value->screenfont);
52int psiconv_write_border(psiconv_buffer buf, const psiconv_border value) 52int psiconv_write_border(psiconv_buffer buf, const psiconv_border value)
53{ 53{
54 int res; 54 int res;
55 55
56 if (!value) { 56 if (!value) {
57 psiconv_warn(0,psiconv_list_length(buf),"Null border"); 57 psiconv_warn(0,psiconv_buffer_length(buf),"Null border");
58 return -PSICONV_E_GENERATE; 58 return -PSICONV_E_GENERATE;
59 } 59 }
60 if (value->kind > psiconv_border_dotdotdashed) 60 if (value->kind > psiconv_border_dotdotdashed)
61 psiconv_warn(0,psiconv_list_length(buf), 61 psiconv_warn(0,psiconv_buffer_length(buf),
62 "Unknown border kind (%d); assuming none",value->kind); 62 "Unknown border kind (%d); assuming none",value->kind);
63 if ((res =psiconv_write_u8(buf,value->kind == psiconv_border_none?0: 63 if ((res =psiconv_write_u8(buf,value->kind == psiconv_border_none?0:
64 value->kind == psiconv_border_solid?1: 64 value->kind == psiconv_border_solid?1:
65 value->kind == psiconv_border_double?2: 65 value->kind == psiconv_border_double?2:
66 value->kind == psiconv_border_dotted?3: 66 value->kind == psiconv_border_dotted?3:
82int psiconv_write_bullet(psiconv_buffer buf, const psiconv_bullet value) 82int psiconv_write_bullet(psiconv_buffer buf, const psiconv_bullet value)
83{ 83{
84 int res; 84 int res;
85 psiconv_buffer extra_buf; 85 psiconv_buffer extra_buf;
86 if (!value) { 86 if (!value) {
87 psiconv_warn(0,psiconv_list_length(buf),"Null bullet"); 87 psiconv_warn(0,psiconv_buffer_length(buf),"Null bullet");
88 return -PSICONV_E_GENERATE; 88 return -PSICONV_E_GENERATE;
89 } 89 }
90 90
91 if (!(extra_buf = psiconv_new_buffer())) 91 if (!(extra_buf = psiconv_buffer_new(0)))
92 return -PSICONV_E_NOMEM; 92 return -PSICONV_E_NOMEM;
93 if ((res = psiconv_write_size(extra_buf,value->font_size))) 93 if ((res = psiconv_write_size(extra_buf,value->font_size)))
94 goto ERROR; 94 goto ERROR;
95 if ((res = psiconv_write_u8(extra_buf,value->character))) 95 if ((res = psiconv_write_u8(extra_buf,value->character)))
96 goto ERROR; 96 goto ERROR;
101 if ((res = psiconv_write_color(extra_buf,value->color))) 101 if ((res = psiconv_write_color(extra_buf,value->color)))
102 goto ERROR; 102 goto ERROR;
103 if ((res = psiconv_write_font(extra_buf,value->font))) 103 if ((res = psiconv_write_font(extra_buf,value->font)))
104 goto ERROR; 104 goto ERROR;
105 105
106 if ((res = psiconv_write_u8(buf,psiconv_list_length(extra_buf)))) 106 if ((res = psiconv_write_u8(buf,psiconv_buffer_length(extra_buf))))
107 goto ERROR; 107 goto ERROR;
108 res = psiconv_list_concat(buf,extra_buf); 108 res = psiconv_buffer_concat(buf,extra_buf);
109 109
110ERROR: 110ERROR:
111 psiconv_free_buffer(extra_buf); 111 psiconv_buffer_free(extra_buf);
112 return res; 112 return res;
113} 113}
114 114
115int psiconv_write_tab(psiconv_buffer buf,psiconv_tab value) 115int psiconv_write_tab(psiconv_buffer buf,psiconv_tab value)
116{ 116{
117 int res; 117 int res;
118 if (!value) { 118 if (!value) {
119 psiconv_warn(0,psiconv_list_length(buf),"Null tab"); 119 psiconv_warn(0,psiconv_buffer_length(buf),"Null tab");
120 return -PSICONV_E_GENERATE; 120 return -PSICONV_E_GENERATE;
121 } 121 }
122 if ((res = psiconv_write_length(buf,value->location))) 122 if ((res = psiconv_write_length(buf,value->location)))
123 return res; 123 return res;
124 if ((value->kind != psiconv_tab_left) && 124 if ((value->kind != psiconv_tab_left) &&
125 (value->kind != psiconv_tab_right) && 125 (value->kind != psiconv_tab_right) &&
126 (value->kind != psiconv_tab_centre)) 126 (value->kind != psiconv_tab_centre))
127 psiconv_warn(0,psiconv_list_length(buf), 127 psiconv_warn(0,psiconv_buffer_length(buf),
128 "Unknown tab kind (%d); assuming left",value->kind); 128 "Unknown tab kind (%d); assuming left",value->kind);
129 return psiconv_write_u8(buf, value->kind == psiconv_tab_right?2: 129 return psiconv_write_u8(buf, value->kind == psiconv_tab_right?2:
130 value->kind == psiconv_tab_centre?3:1); 130 value->kind == psiconv_tab_centre?3:1);
131} 131}
132 132
137 int res,i; 137 int res,i;
138 psiconv_buffer extra_buf; 138 psiconv_buffer extra_buf;
139 psiconv_tab tab; 139 psiconv_tab tab;
140 140
141 if (!value) { 141 if (!value) {
142 psiconv_warn(0,psiconv_list_length(buf),"Null paragraph layout list"); 142 psiconv_warn(0,psiconv_buffer_length(buf),"Null paragraph layout list");
143 return -PSICONV_E_GENERATE; 143 return -PSICONV_E_GENERATE;
144 } 144 }
145 if (!(extra_buf = psiconv_new_buffer())) 145 if (!(extra_buf = psiconv_buffer_new(0)))
146 return -PSICONV_E_NOMEM; 146 return -PSICONV_E_NOMEM;
147 147
148 if (!base || psiconv_compare_color(base->back_color,value->back_color)) { 148 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
149 if ((res = psiconv_write_u8(extra_buf,0x01))) 149 if ((res = psiconv_write_u8(extra_buf,0x01)))
150 goto ERROR; 150 goto ERROR;
176 if (!base || (value->justify_hor != base->justify_hor)) { 176 if (!base || (value->justify_hor != base->justify_hor)) {
177 if ((res = psiconv_write_u8(extra_buf,0x05))) 177 if ((res = psiconv_write_u8(extra_buf,0x05)))
178 goto ERROR; 178 goto ERROR;
179 if ((value->justify_hor < psiconv_justify_left) || 179 if ((value->justify_hor < psiconv_justify_left) ||
180 (value->justify_hor > psiconv_justify_full)) 180 (value->justify_hor > psiconv_justify_full))
181 psiconv_warn(0,psiconv_list_length(buf), 181 psiconv_warn(0,psiconv_buffer_length(buf),
182 "Unknown horizontal justify (%d); assuming left", 182 "Unknown horizontal justify (%d); assuming left",
183 value->justify_hor); 183 value->justify_hor);
184 if ((res = psiconv_write_u8(extra_buf, 184 if ((res = psiconv_write_u8(extra_buf,
185 value->justify_hor == psiconv_justify_centre?1: 185 value->justify_hor == psiconv_justify_centre?1:
186 value->justify_hor == psiconv_justify_right?2: 186 value->justify_hor == psiconv_justify_right?2:
191 if (!base || (value->justify_ver != base->justify_ver)) { 191 if (!base || (value->justify_ver != base->justify_ver)) {
192 if ((res = psiconv_write_u8(extra_buf,0x06))) 192 if ((res = psiconv_write_u8(extra_buf,0x06)))
193 goto ERROR; 193 goto ERROR;
194 if ((value->justify_ver < psiconv_justify_top) || 194 if ((value->justify_ver < psiconv_justify_top) ||
195 (value->justify_ver > psiconv_justify_bottom)) 195 (value->justify_ver > psiconv_justify_bottom))
196 psiconv_warn(0,psiconv_list_length(buf), 196 psiconv_warn(0,psiconv_buffer_length(buf),
197 "Unknown vertical justify (%d); assuming middle", 197 "Unknown vertical justify (%d); assuming middle",
198 value->justify_ver); 198 value->justify_ver);
199 if ((res = psiconv_write_u8(extra_buf, 199 if ((res = psiconv_write_u8(extra_buf,
200 value->justify_ver == psiconv_justify_centre?1: 200 value->justify_ver == psiconv_justify_centre?1:
201 value->justify_ver == psiconv_justify_right?2:0))) 201 value->justify_ver == psiconv_justify_right?2:0)))
303 if ((res = psiconv_write_bullet(extra_buf,value->bullet))) 303 if ((res = psiconv_write_bullet(extra_buf,value->bullet)))
304 goto ERROR; 304 goto ERROR;
305 } 305 }
306 306
307 if (!value->tabs || !value->tabs->extras) { 307 if (!value->tabs || !value->tabs->extras) {
308 psiconv_warn(0,psiconv_list_length(buf),"Null tabs"); 308 psiconv_warn(0,psiconv_buffer_length(buf),"Null tabs");
309 res = -PSICONV_E_GENERATE; 309 res = -PSICONV_E_GENERATE;
310 goto ERROR; 310 goto ERROR;
311 } 311 }
312 312
313 /* It is not entirely clear how tabs are inherited. For now, I assume 313 /* It is not entirely clear how tabs are inherited. For now, I assume
318 goto ERROR; 318 goto ERROR;
319 if ((res = psiconv_write_length(extra_buf,value->tabs->normal))) 319 if ((res = psiconv_write_length(extra_buf,value->tabs->normal)))
320 goto ERROR; 320 goto ERROR;
321 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { 321 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
322 if (!(tab = psiconv_list_get(value->tabs->extras,i))) { 322 if (!(tab = psiconv_list_get(value->tabs->extras,i))) {
323 psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption"); 323 psiconv_warn(0,psiconv_buffer_length(buf),"Massive memory corruption");
324 res = -PSICONV_E_NOMEM; 324 res = -PSICONV_E_NOMEM;
325 goto ERROR; 325 goto ERROR;
326 } 326 }
327 if ((res = psiconv_write_u8(extra_buf,0x17))) 327 if ((res = psiconv_write_u8(extra_buf,0x17)))
328 goto ERROR; 328 goto ERROR;
329 if ((res = psiconv_write_tab(extra_buf,tab))) 329 if ((res = psiconv_write_tab(extra_buf,tab)))
330 goto ERROR; 330 goto ERROR;
331 } 331 }
332 } 332 }
333 333
334 if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) 334 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
335 goto ERROR; 335 goto ERROR;
336 336
337 res = psiconv_list_concat(buf,extra_buf); 337 res = psiconv_buffer_concat(buf,extra_buf);
338 338
339ERROR: 339ERROR:
340 psiconv_free_buffer(extra_buf); 340 psiconv_buffer_free(extra_buf);
341 return res; 341 return res;
342} 342}
343 343
344int psiconv_write_character_layout_list(psiconv_buffer buf, 344int psiconv_write_character_layout_list(psiconv_buffer buf,
345 psiconv_character_layout value, 345 psiconv_character_layout value,
346 psiconv_character_layout base) 346 psiconv_character_layout base)
347{ 347{
348 int res; 348 int res;
349 psiconv_buffer extra_buf; 349 psiconv_buffer extra_buf;
350 if (!value) { 350 if (!value) {
351 psiconv_warn(0,psiconv_list_length(buf),"Null character layout list"); 351 psiconv_warn(0,psiconv_buffer_length(buf),"Null character layout list");
352 return -PSICONV_E_GENERATE; 352 return -PSICONV_E_GENERATE;
353 } 353 }
354 if (!(extra_buf = psiconv_new_buffer())) 354 if (!(extra_buf = psiconv_buffer_new(0)))
355 return -PSICONV_E_NOMEM; 355 return -PSICONV_E_NOMEM;
356 356
357 if (!base || psiconv_compare_color(base->color,value->color)) { 357 if (!base || psiconv_compare_color(base->color,value->color)) {
358 if ((res = psiconv_write_u8(extra_buf,0x19))) 358 if ((res = psiconv_write_u8(extra_buf,0x19)))
359 goto ERROR; 359 goto ERROR;
391 391
392 if (!base || (value->super_sub != base->super_sub)) { 392 if (!base || (value->super_sub != base->super_sub)) {
393 if ((value->super_sub != psiconv_superscript) && 393 if ((value->super_sub != psiconv_superscript) &&
394 (value->super_sub != psiconv_subscript) && 394 (value->super_sub != psiconv_subscript) &&
395 (value->super_sub != psiconv_normalscript)) 395 (value->super_sub != psiconv_normalscript))
396 psiconv_warn(0,psiconv_list_length(buf), 396 psiconv_warn(0,psiconv_buffer_length(buf),
397 "Unknown supersubscript (%d); assuming normal", 397 "Unknown supersubscript (%d); assuming normal",
398 value->super_sub); 398 value->super_sub);
399 if ((res = psiconv_write_u8(extra_buf,0x1f))) 399 if ((res = psiconv_write_u8(extra_buf,0x1f)))
400 goto ERROR; 400 goto ERROR;
401 if ((res = psiconv_write_u8(extra_buf, 401 if ((res = psiconv_write_u8(extra_buf,
423 goto ERROR; 423 goto ERROR;
424 if ((res = psiconv_write_font(extra_buf,value->font))) 424 if ((res = psiconv_write_font(extra_buf,value->font)))
425 goto ERROR; 425 goto ERROR;
426 } 426 }
427 427
428 if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) 428 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
429 goto ERROR; 429 goto ERROR;
430 430
431 res = psiconv_list_concat(buf,extra_buf); 431 res = psiconv_buffer_concat(buf,extra_buf);
432 432
433ERROR: 433ERROR:
434 psiconv_free_buffer(extra_buf); 434 psiconv_buffer_free(extra_buf);
435 return res; 435 return res;
436} 436}

Legend:
Removed from v.78  
changed lines
  Added in v.79

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