/[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 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
137 int res,i; 143 int res,i;
138 psiconv_buffer extra_buf; 144 psiconv_buffer extra_buf;
139 psiconv_tab 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 || psiconv_compare_color(base->back_color,value->back_color)) { 154 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
149 if ((res = psiconv_write_u8(extra_buf,0x01))) 155 if ((res = psiconv_write_u8(extra_buf,0x01)))
150 goto ERROR; 156 goto ERROR;
176 if (!base || (value->justify_hor != base->justify_hor)) { 182 if (!base || (value->justify_hor != base->justify_hor)) {
177 if ((res = psiconv_write_u8(extra_buf,0x05))) 183 if ((res = psiconv_write_u8(extra_buf,0x05)))
178 goto ERROR; 184 goto ERROR;
179 if ((value->justify_hor < psiconv_justify_left) || 185 if ((value->justify_hor < psiconv_justify_left) ||
180 (value->justify_hor > psiconv_justify_full)) 186 (value->justify_hor > psiconv_justify_full))
181 psiconv_warn(0,psiconv_list_length(buf), 187 psiconv_warn(0,psiconv_buffer_length(buf),
182 "Unknown horizontal justify (%d); assuming left", 188 "Unknown horizontal justify (%d); assuming left",
183 value->justify_hor); 189 value->justify_hor);
184 if ((res = psiconv_write_u8(extra_buf, 190 if ((res = psiconv_write_u8(extra_buf,
185 value->justify_hor == psiconv_justify_centre?1: 191 value->justify_hor == psiconv_justify_centre?1:
186 value->justify_hor == psiconv_justify_right?2: 192 value->justify_hor == psiconv_justify_right?2:
191 if (!base || (value->justify_ver != base->justify_ver)) { 197 if (!base || (value->justify_ver != base->justify_ver)) {
192 if ((res = psiconv_write_u8(extra_buf,0x06))) 198 if ((res = psiconv_write_u8(extra_buf,0x06)))
193 goto ERROR; 199 goto ERROR;
194 if ((value->justify_ver < psiconv_justify_top) || 200 if ((value->justify_ver < psiconv_justify_top) ||
195 (value->justify_ver > psiconv_justify_bottom)) 201 (value->justify_ver > psiconv_justify_bottom))
196 psiconv_warn(0,psiconv_list_length(buf), 202 psiconv_warn(0,psiconv_buffer_length(buf),
197 "Unknown vertical justify (%d); assuming middle", 203 "Unknown vertical justify (%d); assuming middle",
198 value->justify_ver); 204 value->justify_ver);
199 if ((res = psiconv_write_u8(extra_buf, 205 if ((res = psiconv_write_u8(extra_buf,
200 value->justify_ver == psiconv_justify_centre?1: 206 value->justify_ver == psiconv_justify_centre?1:
201 value->justify_ver == psiconv_justify_right?2:0))) 207 value->justify_ver == psiconv_justify_right?2:0)))
256 goto ERROR; 262 goto ERROR;
257 if ((res = psiconv_write_bool(extra_buf,value->no_widow_protection))) 263 if ((res = psiconv_write_bool(extra_buf,value->no_widow_protection)))
258 goto ERROR; 264 goto ERROR;
259 } 265 }
260 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
261 if (!base || (value->border_distance != base->border_distance)) { 274 if (!base || (value->border_distance != base->border_distance)) {
262 if ((res = psiconv_write_u8(extra_buf,0x10))) 275 if ((res = psiconv_write_u8(extra_buf,0x10)))
263 goto ERROR; 276 goto ERROR;
264 if ((res = psiconv_write_length(extra_buf,value->border_distance))) 277 if ((res = psiconv_write_length(extra_buf,value->border_distance)))
265 goto ERROR; 278 goto ERROR;
303 if ((res = psiconv_write_bullet(extra_buf,value->bullet))) 316 if ((res = psiconv_write_bullet(extra_buf,value->bullet)))
304 goto ERROR; 317 goto ERROR;
305 } 318 }
306 319
307 if (!value->tabs || !value->tabs->extras) { 320 if (!value->tabs || !value->tabs->extras) {
308 psiconv_warn(0,psiconv_list_length(buf),"Null tabs"); 321 psiconv_warn(0,psiconv_buffer_length(buf),"Null tabs");
309 res = -PSICONV_E_GENERATE; 322 res = -PSICONV_E_GENERATE;
310 goto ERROR; 323 goto ERROR;
311 } 324 }
312 325
313 /* 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
318 goto ERROR; 331 goto ERROR;
319 if ((res = psiconv_write_length(extra_buf,value->tabs->normal))) 332 if ((res = psiconv_write_length(extra_buf,value->tabs->normal)))
320 goto ERROR; 333 goto ERROR;
321 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { 334 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
322 if (!(tab = psiconv_list_get(value->tabs->extras,i))) { 335 if (!(tab = psiconv_list_get(value->tabs->extras,i))) {
323 psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption"); 336 psiconv_warn(0,psiconv_buffer_length(buf),"Massive memory corruption");
324 res = -PSICONV_E_NOMEM; 337 res = -PSICONV_E_NOMEM;
325 goto ERROR; 338 goto ERROR;
326 } 339 }
327 if ((res = psiconv_write_u8(extra_buf,0x17))) 340 if ((res = psiconv_write_u8(extra_buf,0x17)))
328 goto ERROR; 341 goto ERROR;
329 if ((res = psiconv_write_tab(extra_buf,tab))) 342 if ((res = psiconv_write_tab(extra_buf,tab)))
330 goto ERROR; 343 goto ERROR;
331 } 344 }
332 } 345 }
333 346
334 if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) 347 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
335 goto ERROR; 348 goto ERROR;
336 349
337 res = psiconv_list_concat(buf,extra_buf); 350 res = psiconv_buffer_concat(buf,extra_buf);
338 351
339ERROR: 352ERROR:
340 psiconv_free_buffer(extra_buf); 353 psiconv_buffer_free(extra_buf);
341 return res; 354 return res;
342} 355}
343 356
344int psiconv_write_character_layout_list(psiconv_buffer buf, 357int psiconv_write_character_layout_list(psiconv_buffer buf,
345 psiconv_character_layout value, 358 psiconv_character_layout value,
346 psiconv_character_layout base) 359 psiconv_character_layout base)
347{ 360{
348 int res; 361 int res;
349 psiconv_buffer extra_buf; 362 psiconv_buffer extra_buf;
350 if (!value) { 363 if (!value) {
351 psiconv_warn(0,psiconv_list_length(buf),"Null character layout list"); 364 psiconv_warn(0,psiconv_buffer_length(buf),"Null character layout list");
352 return -PSICONV_E_GENERATE; 365 return -PSICONV_E_GENERATE;
353 } 366 }
354 if (!(extra_buf = psiconv_new_buffer())) 367 if (!(extra_buf = psiconv_buffer_new()))
355 return -PSICONV_E_NOMEM; 368 return -PSICONV_E_NOMEM;
356 369
357 if (!base || psiconv_compare_color(base->color,value->color)) { 370 if (!base || psiconv_compare_color(base->color,value->color)) {
358 if ((res = psiconv_write_u8(extra_buf,0x19))) 371 if ((res = psiconv_write_u8(extra_buf,0x19)))
359 goto ERROR; 372 goto ERROR;
391 404
392 if (!base || (value->super_sub != base->super_sub)) { 405 if (!base || (value->super_sub != base->super_sub)) {
393 if ((value->super_sub != psiconv_superscript) && 406 if ((value->super_sub != psiconv_superscript) &&
394 (value->super_sub != psiconv_subscript) && 407 (value->super_sub != psiconv_subscript) &&
395 (value->super_sub != psiconv_normalscript)) 408 (value->super_sub != psiconv_normalscript))
396 psiconv_warn(0,psiconv_list_length(buf), 409 psiconv_warn(0,psiconv_buffer_length(buf),
397 "Unknown supersubscript (%d); assuming normal", 410 "Unknown supersubscript (%d); assuming normal",
398 value->super_sub); 411 value->super_sub);
399 if ((res = psiconv_write_u8(extra_buf,0x1f))) 412 if ((res = psiconv_write_u8(extra_buf,0x1f)))
400 goto ERROR; 413 goto ERROR;
401 if ((res = psiconv_write_u8(extra_buf, 414 if ((res = psiconv_write_u8(extra_buf,
402 base->super_sub == psiconv_superscript?1: 415 value->super_sub == psiconv_superscript?1:
403 base->super_sub == psiconv_superscript?2:0))) 416 value->super_sub == psiconv_subscript?2:0)))
404 goto ERROR; 417 goto ERROR;
405 } 418 }
406 419
407 if (!base || (value->underline != base->underline)) { 420 if (!base || (value->underline != base->underline)) {
408 if ((res = psiconv_write_u8(extra_buf,0x20))) 421 if ((res = psiconv_write_u8(extra_buf,0x20)))
423 goto ERROR; 436 goto ERROR;
424 if ((res = psiconv_write_font(extra_buf,value->font))) 437 if ((res = psiconv_write_font(extra_buf,value->font)))
425 goto ERROR; 438 goto ERROR;
426 } 439 }
427 440
428 if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) 441 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
429 goto ERROR; 442 goto ERROR;
430 443
431 res = psiconv_list_concat(buf,extra_buf); 444 res = psiconv_buffer_concat(buf,extra_buf);
432 445
433ERROR: 446ERROR:
434 psiconv_free_buffer(extra_buf); 447 psiconv_buffer_free(extra_buf);
435 return res; 448 return res;
436} 449}

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

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