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

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

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