/[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 104
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)))
256 goto ERROR; 257 goto ERROR;
257 if ((res = psiconv_write_bool(extra_buf,value->no_widow_protection))) 258 if ((res = psiconv_write_bool(extra_buf,value->no_widow_protection)))
258 goto ERROR; 259 goto ERROR;
259 } 260 }
260 261
262 if (!base || (value->wrap_to_fit_cell != base->wrap_to_fit_cell)) {
263 if ((res = psiconv_write_u8(extra_buf,0x0f)))
264 goto ERROR;
265 if ((res = psiconv_write_bool(extra_buf,value->wrap_to_fit_cell)))
266 goto ERROR;
267 }
268
261 if (!base || (value->border_distance != base->border_distance)) { 269 if (!base || (value->border_distance != base->border_distance)) {
262 if ((res = psiconv_write_u8(extra_buf,0x10))) 270 if ((res = psiconv_write_u8(extra_buf,0x10)))
263 goto ERROR; 271 goto ERROR;
264 if ((res = psiconv_write_length(extra_buf,value->border_distance))) 272 if ((res = psiconv_write_length(extra_buf,value->border_distance)))
265 goto ERROR; 273 goto ERROR;
303 if ((res = psiconv_write_bullet(extra_buf,value->bullet))) 311 if ((res = psiconv_write_bullet(extra_buf,value->bullet)))
304 goto ERROR; 312 goto ERROR;
305 } 313 }
306 314
307 if (!value->tabs || !value->tabs->extras) { 315 if (!value->tabs || !value->tabs->extras) {
308 psiconv_warn(0,psiconv_list_length(buf),"Null tabs"); 316 psiconv_warn(0,psiconv_buffer_length(buf),"Null tabs");
309 res = -PSICONV_E_GENERATE; 317 res = -PSICONV_E_GENERATE;
310 goto ERROR; 318 goto ERROR;
311 } 319 }
312 320
313 /* It is not entirely clear how tabs are inherited. For now, I assume 321 /* It is not entirely clear how tabs are inherited. For now, I assume
318 goto ERROR; 326 goto ERROR;
319 if ((res = psiconv_write_length(extra_buf,value->tabs->normal))) 327 if ((res = psiconv_write_length(extra_buf,value->tabs->normal)))
320 goto ERROR; 328 goto ERROR;
321 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { 329 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
322 if (!(tab = psiconv_list_get(value->tabs->extras,i))) { 330 if (!(tab = psiconv_list_get(value->tabs->extras,i))) {
323 psiconv_warn(0,psiconv_list_length(buf),"Massive memory corruption"); 331 psiconv_warn(0,psiconv_buffer_length(buf),"Massive memory corruption");
324 res = -PSICONV_E_NOMEM; 332 res = -PSICONV_E_NOMEM;
325 goto ERROR; 333 goto ERROR;
326 } 334 }
327 if ((res = psiconv_write_u8(extra_buf,0x17))) 335 if ((res = psiconv_write_u8(extra_buf,0x17)))
328 goto ERROR; 336 goto ERROR;
329 if ((res = psiconv_write_tab(extra_buf,tab))) 337 if ((res = psiconv_write_tab(extra_buf,tab)))
330 goto ERROR; 338 goto ERROR;
331 } 339 }
332 } 340 }
333 341
334 if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) 342 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
335 goto ERROR; 343 goto ERROR;
336 344
337 res = psiconv_list_concat(buf,extra_buf); 345 res = psiconv_buffer_concat(buf,extra_buf);
338 346
339ERROR: 347ERROR:
340 psiconv_free_buffer(extra_buf); 348 psiconv_buffer_free(extra_buf);
341 return res; 349 return res;
342} 350}
343 351
344int psiconv_write_character_layout_list(psiconv_buffer buf, 352int psiconv_write_character_layout_list(psiconv_buffer buf,
345 psiconv_character_layout value, 353 psiconv_character_layout value,
346 psiconv_character_layout base) 354 psiconv_character_layout base)
347{ 355{
348 int res; 356 int res;
349 psiconv_buffer extra_buf; 357 psiconv_buffer extra_buf;
350 if (!value) { 358 if (!value) {
351 psiconv_warn(0,psiconv_list_length(buf),"Null character layout list"); 359 psiconv_warn(0,psiconv_buffer_length(buf),"Null character layout list");
352 return -PSICONV_E_GENERATE; 360 return -PSICONV_E_GENERATE;
353 } 361 }
354 if (!(extra_buf = psiconv_new_buffer())) 362 if (!(extra_buf = psiconv_buffer_new()))
355 return -PSICONV_E_NOMEM; 363 return -PSICONV_E_NOMEM;
356 364
357 if (!base || psiconv_compare_color(base->color,value->color)) { 365 if (!base || psiconv_compare_color(base->color,value->color)) {
358 if ((res = psiconv_write_u8(extra_buf,0x19))) 366 if ((res = psiconv_write_u8(extra_buf,0x19)))
359 goto ERROR; 367 goto ERROR;
391 399
392 if (!base || (value->super_sub != base->super_sub)) { 400 if (!base || (value->super_sub != base->super_sub)) {
393 if ((value->super_sub != psiconv_superscript) && 401 if ((value->super_sub != psiconv_superscript) &&
394 (value->super_sub != psiconv_subscript) && 402 (value->super_sub != psiconv_subscript) &&
395 (value->super_sub != psiconv_normalscript)) 403 (value->super_sub != psiconv_normalscript))
396 psiconv_warn(0,psiconv_list_length(buf), 404 psiconv_warn(0,psiconv_buffer_length(buf),
397 "Unknown supersubscript (%d); assuming normal", 405 "Unknown supersubscript (%d); assuming normal",
398 value->super_sub); 406 value->super_sub);
399 if ((res = psiconv_write_u8(extra_buf,0x1f))) 407 if ((res = psiconv_write_u8(extra_buf,0x1f)))
400 goto ERROR; 408 goto ERROR;
401 if ((res = psiconv_write_u8(extra_buf, 409 if ((res = psiconv_write_u8(extra_buf,
402 base->super_sub == psiconv_superscript?1: 410 value->super_sub == psiconv_superscript?1:
403 base->super_sub == psiconv_superscript?2:0))) 411 value->super_sub == psiconv_subscript?2:0)))
404 goto ERROR; 412 goto ERROR;
405 } 413 }
406 414
407 if (!base || (value->underline != base->underline)) { 415 if (!base || (value->underline != base->underline)) {
408 if ((res = psiconv_write_u8(extra_buf,0x20))) 416 if ((res = psiconv_write_u8(extra_buf,0x20)))
423 goto ERROR; 431 goto ERROR;
424 if ((res = psiconv_write_font(extra_buf,value->font))) 432 if ((res = psiconv_write_font(extra_buf,value->font)))
425 goto ERROR; 433 goto ERROR;
426 } 434 }
427 435
428 if ((res = psiconv_write_u32(buf,psiconv_list_length(extra_buf)))) 436 if ((res = psiconv_write_u32(buf,psiconv_buffer_length(extra_buf))))
429 goto ERROR; 437 goto ERROR;
430 438
431 res = psiconv_list_concat(buf,extra_buf); 439 res = psiconv_buffer_concat(buf,extra_buf);
432 440
433ERROR: 441ERROR:
434 psiconv_free_buffer(extra_buf); 442 psiconv_buffer_free(extra_buf);
435 return res; 443 return res;
436} 444}

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

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