/[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 196 Revision 233
36 int res; 36 int res;
37 37
38 psiconv_progress(config,lev,0,"Writing color"); 38 psiconv_progress(config,lev,0,"Writing color");
39 39
40 if (!value) { 40 if (!value) {
41 psiconv_error(config,0,psiconv_buffer_length(buf),"Null color"); 41 psiconv_error(config,lev,0,"Null color");
42 return -PSICONV_E_GENERATE; 42 res = -PSICONV_E_GENERATE;
43 goto ERROR;
43 } 44 }
44 if ((res = psiconv_write_u8(config,buf,lev+1,value->red))) 45 if ((res = psiconv_write_u8(config,buf,lev+1,value->red)))
45 return res; 46 goto ERROR;
46 if ((res = psiconv_write_u8(config,buf,lev+1,value->green))) 47 if ((res = psiconv_write_u8(config,buf,lev+1,value->green)))
48 goto ERROR;
49 if ((res = psiconv_write_u8(config,buf,lev+1,value->blue)))
50 goto ERROR;
51 psiconv_progress(config,lev,0,"End of color");
52 return 0;
53
54ERROR:
55 psiconv_error(config,lev,0,"Writing of color failed");
47 return res; 56 return res;
48 return psiconv_write_u8(config,buf,lev+1,value->blue);
49} 57}
50 58
51int psiconv_write_font(const psiconv_config config, psiconv_buffer buf, 59int psiconv_write_font(const psiconv_config config, psiconv_buffer buf,
52 int lev, const psiconv_font value) 60 int lev, const psiconv_font value)
53{ 61{
54 int res,len; 62 int res,len;
55 63
56 psiconv_progress(config,lev,0,"Writing font"); 64 psiconv_progress(config,lev,0,"Writing font");
57 if (!value) { 65 if (!value) {
58 psiconv_error(config,0,psiconv_buffer_length(buf),"Null font"); 66 psiconv_error(config,0,psiconv_buffer_length(buf),"Null font");
59 return -PSICONV_E_GENERATE; 67 res = -PSICONV_E_GENERATE;
68 goto ERROR;
60 } 69 }
61 len = psiconv_unicode_strlen(value->name); 70 len = psiconv_unicode_strlen(value->name);
62 if ((res = psiconv_write_u8(config,buf,lev+1,len+1))) 71 if ((res = psiconv_write_u8(config,buf,lev+1,len+1)))
63 return res; 72 goto ERROR;
64 if ((res = psiconv_write_charlist(config,buf,lev+1,value->name))) 73 if ((res = psiconv_write_charlist(config,buf,lev+1,value->name)))
74 goto ERROR;
75 if ((res = psiconv_write_u8(config,buf,lev+1,value->screenfont)))
76 goto ERROR;
77 psiconv_progress(config,lev,0,"End of font");
78 return 0;
79
80ERROR:
81 psiconv_error(config,lev,0,"Writing of font failed");
65 return res; 82 return res;
66 return psiconv_write_u8(config,buf,lev+1,value->screenfont);
67} 83}
68 84
69int psiconv_write_border(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_border value) 85int psiconv_write_border(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_border value)
70{ 86{
71 int res; 87 int res;
72 88
73 psiconv_progress(config,lev,0,"Writing border"); 89 psiconv_progress(config,lev,0,"Writing border");
74 90
75 if (!value) { 91 if (!value) {
76 psiconv_error(config,0,psiconv_buffer_length(buf),"Null border"); 92 psiconv_error(config,lev,0,"Null border");
77 return -PSICONV_E_GENERATE; 93 res = -PSICONV_E_GENERATE;
94 goto ERROR;
78 } 95 }
79 if (value->kind > psiconv_border_dotdotdashed) 96 if (value->kind > psiconv_border_dotdotdashed)
80 psiconv_warn(config,0,psiconv_buffer_length(buf), 97 psiconv_warn(config,lev,0,
81 "Unknown border kind (%d); assuming none",value->kind); 98 "Unknown border kind (%d); assuming none",value->kind);
82 if ((res =psiconv_write_u8(config,buf,lev+1, 99 if ((res =psiconv_write_u8(config,buf,lev+1,
83 value->kind == psiconv_border_none?0: 100 value->kind == psiconv_border_none?0:
84 value->kind == psiconv_border_solid?1: 101 value->kind == psiconv_border_solid?1:
85 value->kind == psiconv_border_double?2: 102 value->kind == psiconv_border_double?2:
86 value->kind == psiconv_border_dotted?3: 103 value->kind == psiconv_border_dotted?3:
87 value->kind == psiconv_border_dashed?4: 104 value->kind == psiconv_border_dashed?4:
88 value->kind == psiconv_border_dotdashed?5: 105 value->kind == psiconv_border_dotdashed?5:
89 value->kind == psiconv_border_dotdotdashed?6: 106 value->kind == psiconv_border_dotdotdashed?6:
90 0))) 107 0)))
91 return res; 108 goto ERROR;
92 if ((res = psiconv_write_size(config,buf,lev+1,(value->kind == psiconv_border_solid) || 109 if ((res = psiconv_write_size(config,buf,lev+1,
110 (value->kind == psiconv_border_solid) ||
93 (value->kind == psiconv_border_double) ? 111 (value->kind == psiconv_border_double) ?
94 value->thickness:1.0/20.0))) 112 value->thickness:1.0/20.0)))
95 return res; 113 goto ERROR;
96 if ((res = psiconv_write_color(config,buf,lev+1,value->color))) 114 if ((res = psiconv_write_color(config,buf,lev+1,value->color)))
97 return res; 115 goto ERROR;
98 /* Unknown byte */ 116 /* Unknown byte */
99 return psiconv_write_u8(config,buf,lev+1,1); 117 if ((res = psiconv_write_u8(config,buf,lev+1,1)))
118 goto ERROR;
119 psiconv_progress(config,lev,0,"End of border");
120 return 0;
121
122ERROR:
123 psiconv_error(config,lev,0,"Writing of border failed");
124 return res;
100} 125}
101 126
102int psiconv_write_bullet(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_bullet value) 127int psiconv_write_bullet(const psiconv_config config, psiconv_buffer buf,int lev, const psiconv_bullet value)
103{ 128{
104 int res; 129 int res;
106 131
107 psiconv_progress(config,lev,0,"Writing bullet"); 132 psiconv_progress(config,lev,0,"Writing bullet");
108 133
109 if (!value) { 134 if (!value) {
110 psiconv_error(config,0,psiconv_buffer_length(buf),"Null bullet"); 135 psiconv_error(config,0,psiconv_buffer_length(buf),"Null bullet");
111 return -PSICONV_E_GENERATE; 136 res = -PSICONV_E_GENERATE;
137 goto ERROR1;
112 } 138 }
113 139
114 if (!(extra_buf = psiconv_buffer_new())) 140 if (!(extra_buf = psiconv_buffer_new())) {
141 psiconv_error(config,lev+1,0,"Out of memory error");
115 return -PSICONV_E_NOMEM; 142 res = -PSICONV_E_NOMEM;
143 goto ERROR1;
144 }
116 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size))) 145 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size)))
117 goto ERROR; 146 goto ERROR2;
118 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 147 if ((res = psiconv_unicode_write_char(config,extra_buf,lev+1,
119 psiconv_unicode_to_char(config,value->character)))) 148 value->character)))
120 goto ERROR; 149 goto ERROR2;
121 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->indent))) 150 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->indent)))
122 goto ERROR; 151 goto ERROR2;
123 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color))) 152 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color)))
124 goto ERROR; 153 goto ERROR2;
125 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font))) 154 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font)))
126 goto ERROR; 155 goto ERROR2;
127 156
128 if ((res = psiconv_write_u8(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 157 if ((res = psiconv_write_u8(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
129 goto ERROR; 158 goto ERROR2;
130 res = psiconv_buffer_concat(buf,extra_buf); 159 if ((res = psiconv_buffer_concat(buf,extra_buf))) {
160 psiconv_error(config,lev+1,0,"Out of memory error");
161 goto ERROR2;
162 }
131 163
132ERROR: 164ERROR2:
133 psiconv_buffer_free(extra_buf); 165 psiconv_buffer_free(extra_buf);
166ERROR1:
167 if (res)
168 psiconv_error(config,lev,0,"Writing of bullet failed");
169 else
170 psiconv_progress(config,lev,0,"End of bullet");
134 return res; 171 return res;
135} 172}
136 173
137int psiconv_write_tab(const psiconv_config config, psiconv_buffer buf,int lev, psiconv_tab value) 174int psiconv_write_tab(const psiconv_config config, psiconv_buffer buf,int lev, psiconv_tab value)
138{ 175{
139 int res; 176 int res;
140 177
141 psiconv_progress(config,lev,0,"Writing tab"); 178 psiconv_progress(config,lev,0,"Writing tab");
142 179
143 if (!value) { 180 if (!value) {
144 psiconv_error(config,0,psiconv_buffer_length(buf),"Null tab"); 181 psiconv_error(config,lev,0,"Null tab");
145 return -PSICONV_E_GENERATE; 182 res = -PSICONV_E_GENERATE;
183 goto ERROR;
146 } 184 }
147 if ((res = psiconv_write_length(config,buf,lev+1,value->location))) 185 if ((res = psiconv_write_length(config,buf,lev+1,value->location)))
148 return res; 186 goto ERROR;
149 if ((value->kind != psiconv_tab_left) && 187 if ((value->kind != psiconv_tab_left) &&
150 (value->kind != psiconv_tab_right) && 188 (value->kind != psiconv_tab_right) &&
151 (value->kind != psiconv_tab_centre)) 189 (value->kind != psiconv_tab_centre))
152 psiconv_warn(config,0,psiconv_buffer_length(buf), 190 psiconv_warn(config,lev,0,
153 "Unknown tab kind (%d); assuming left",value->kind); 191 "Unknown tab kind (%d); assuming left",value->kind);
154 return psiconv_write_u8(config,buf,lev+1, value->kind == psiconv_tab_right?2: 192 if ((res = psiconv_write_u8(config,buf,lev+1,
193 value->kind == psiconv_tab_right?2:
155 value->kind == psiconv_tab_centre?3:1); 194 value->kind == psiconv_tab_centre?3:1)))
195 goto ERROR;
196 psiconv_progress(config,lev,0,"End of tab");
197 return 0;
198ERROR:
199 psiconv_error(config,lev,0,"Writing of tab failed");
200 return res;
156} 201}
157 202
158int psiconv_write_paragraph_layout_list(const psiconv_config config, 203int psiconv_write_paragraph_layout_list(const psiconv_config config,
159 psiconv_buffer buf,int lev, 204 psiconv_buffer buf,int lev,
160 psiconv_paragraph_layout value, 205 psiconv_paragraph_layout value,
165 psiconv_tab tab; 210 psiconv_tab tab;
166 211
167 psiconv_progress(config,lev,0,"Writing paragraph layout list"); 212 psiconv_progress(config,lev,0,"Writing paragraph layout list");
168 213
169 if (!value) { 214 if (!value) {
170 psiconv_error(config,0,psiconv_buffer_length(buf),"Null paragraph layout list"); 215 psiconv_error(config,lev,0,"Null paragraph layout list");
171 return -PSICONV_E_GENERATE; 216 res = -PSICONV_E_GENERATE;
217 goto ERROR1;
172 } 218 }
173 if (!(extra_buf = psiconv_buffer_new())) 219 if (!(extra_buf = psiconv_buffer_new())) {
174 return -PSICONV_E_NOMEM; 220 res = -PSICONV_E_NOMEM;
221 goto ERROR1;
222 }
175 223
176 if (!base || psiconv_compare_color(base->back_color,value->back_color)) { 224 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
177 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x01))) 225 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x01)))
178 goto ERROR; 226 goto ERROR2;
179 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color))) 227 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color)))
180 goto ERROR; 228 goto ERROR2;
181 } 229 }
182 230
183 if (!base || (value->indent_left != base->indent_left)) { 231 if (!base || (value->indent_left != base->indent_left)) {
184 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x02))) 232 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x02)))
185 goto ERROR; 233 goto ERROR2;
186 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_left))) 234 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_left)))
187 goto ERROR; 235 goto ERROR2;
188 } 236 }
189 237
190 if (!base || (value->indent_right != base->indent_right)) { 238 if (!base || (value->indent_right != base->indent_right)) {
191 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x03))) 239 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x03)))
192 goto ERROR; 240 goto ERROR2;
193 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_right))) 241 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_right)))
194 goto ERROR; 242 goto ERROR2;
195 } 243 }
196 244
197 if (!base || (value->indent_first != base->indent_first)) { 245 if (!base || (value->indent_first != base->indent_first)) {
198 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x04))) 246 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x04)))
199 goto ERROR; 247 goto ERROR2;
200 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_first))) 248 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->indent_first)))
201 goto ERROR; 249 goto ERROR2;
202 } 250 }
203 251
204 if (!base || (value->justify_hor != base->justify_hor)) { 252 if (!base || (value->justify_hor != base->justify_hor)) {
205 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x05))) 253 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x05)))
206 goto ERROR; 254 goto ERROR2;
207 if ((value->justify_hor < psiconv_justify_left) || 255 if ((value->justify_hor < psiconv_justify_left) ||
208 (value->justify_hor > psiconv_justify_full)) 256 (value->justify_hor > psiconv_justify_full))
209 psiconv_warn(config,0,psiconv_buffer_length(buf), 257 psiconv_warn(config,lev,0,
210 "Unknown horizontal justify (%d); assuming left", 258 "Unknown horizontal justify (%d); assuming left",
211 value->justify_hor); 259 value->justify_hor);
212 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 260 if ((res = psiconv_write_u8(config,extra_buf,lev+1,
213 value->justify_hor == psiconv_justify_centre?1: 261 value->justify_hor == psiconv_justify_centre?1:
214 value->justify_hor == psiconv_justify_right?2: 262 value->justify_hor == psiconv_justify_right?2:
215 value->justify_hor == psiconv_justify_full?3:0))) 263 value->justify_hor == psiconv_justify_full?3:0)))
216 goto ERROR; 264 goto ERROR2;
217 } 265 }
218 266
219 if (!base || (value->justify_ver != base->justify_ver)) { 267 if (!base || (value->justify_ver != base->justify_ver)) {
220 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x06))) 268 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x06)))
221 goto ERROR; 269 goto ERROR2;
222 if ((value->justify_ver < psiconv_justify_top) || 270 if ((value->justify_ver < psiconv_justify_top) ||
223 (value->justify_ver > psiconv_justify_bottom)) 271 (value->justify_ver > psiconv_justify_bottom))
224 psiconv_warn(config,0,psiconv_buffer_length(buf), 272 psiconv_warn(config,0,psiconv_buffer_length(buf),
225 "Unknown vertical justify (%d); assuming middle", 273 "Unknown vertical justify (%d); assuming middle",
226 value->justify_ver); 274 value->justify_ver);
227 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 275 if ((res = psiconv_write_u8(config,extra_buf,lev+1,
228 value->justify_ver == psiconv_justify_centre?1: 276 value->justify_ver == psiconv_justify_centre?1:
229 value->justify_ver == psiconv_justify_right?2:0))) 277 value->justify_ver == psiconv_justify_right?2:0)))
230 goto ERROR; 278 goto ERROR2;
231 } 279 }
232 280
233 if (!base || (value->linespacing != base->linespacing)) { 281 if (!base || (value->linespacing != base->linespacing)) {
234 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x07))) 282 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x07)))
235 goto ERROR; 283 goto ERROR2;
236 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->linespacing))) 284 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->linespacing)))
237 goto ERROR; 285 goto ERROR2;
238 } 286 }
239 287
240 if (!base || (value->linespacing_exact != base->linespacing_exact)) { 288 if (!base || (value->linespacing_exact != base->linespacing_exact)) {
241 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x08))) 289 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x08)))
242 goto ERROR; 290 goto ERROR2;
243 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->linespacing_exact))) 291 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->linespacing_exact)))
244 goto ERROR; 292 goto ERROR2;
245 } 293 }
246 294
247 if (!base || (value->space_above != base->space_above)) { 295 if (!base || (value->space_above != base->space_above)) {
248 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x09))) 296 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x09)))
249 goto ERROR; 297 goto ERROR2;
250 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_above))) 298 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_above)))
251 goto ERROR; 299 goto ERROR2;
252 } 300 }
253 301
254 if (!base || (value->space_below != base->space_below)) { 302 if (!base || (value->space_below != base->space_below)) {
255 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0a))) 303 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0a)))
256 goto ERROR; 304 goto ERROR2;
257 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_below))) 305 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->space_below)))
258 goto ERROR; 306 goto ERROR2;
259 } 307 }
260 308
261 if (!base || (value->keep_together != base->keep_together)) { 309 if (!base || (value->keep_together != base->keep_together)) {
262 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0b))) 310 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0b)))
263 goto ERROR; 311 goto ERROR2;
264 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_together))) 312 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_together)))
265 goto ERROR; 313 goto ERROR2;
266 } 314 }
267 315
268 if (!base || (value->keep_with_next != base->keep_with_next)) { 316 if (!base || (value->keep_with_next != base->keep_with_next)) {
269 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0c))) 317 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0c)))
270 goto ERROR; 318 goto ERROR2;
271 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_with_next))) 319 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->keep_with_next)))
272 goto ERROR; 320 goto ERROR2;
273 } 321 }
274 322
275 if (!base || (value->on_next_page != base->on_next_page)) { 323 if (!base || (value->on_next_page != base->on_next_page)) {
276 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0d))) 324 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0d)))
277 goto ERROR; 325 goto ERROR2;
278 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->on_next_page))) 326 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->on_next_page)))
279 goto ERROR; 327 goto ERROR2;
280 } 328 }
281 329
282 if (!base || (value->no_widow_protection != base->no_widow_protection)) { 330 if (!base || (value->no_widow_protection != base->no_widow_protection)) {
283 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0e))) 331 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0e)))
284 goto ERROR; 332 goto ERROR2;
285 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->no_widow_protection))) 333 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->no_widow_protection)))
286 goto ERROR; 334 goto ERROR2;
287 } 335 }
288 336
289 if (!base || (value->wrap_to_fit_cell != base->wrap_to_fit_cell)) { 337 if (!base || (value->wrap_to_fit_cell != base->wrap_to_fit_cell)) {
290 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0f))) 338 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x0f)))
291 goto ERROR; 339 goto ERROR2;
292 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->wrap_to_fit_cell))) 340 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->wrap_to_fit_cell)))
293 goto ERROR; 341 goto ERROR2;
294 } 342 }
295 343
296 if (!base || (value->border_distance != base->border_distance)) { 344 if (!base || (value->border_distance != base->border_distance)) {
297 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x10))) 345 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x10)))
298 goto ERROR; 346 goto ERROR2;
299 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->border_distance))) 347 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->border_distance)))
300 goto ERROR; 348 goto ERROR2;
301 } 349 }
302 350
303 if (!base || psiconv_compare_border(value->top_border,base->top_border)) { 351 if (!base || psiconv_compare_border(value->top_border,base->top_border)) {
304 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x11))) 352 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x11)))
305 goto ERROR; 353 goto ERROR2;
306 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->top_border))) 354 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->top_border)))
307 goto ERROR; 355 goto ERROR2;
308 } 356 }
309 357
310 if (!base || psiconv_compare_border(value->bottom_border, 358 if (!base || psiconv_compare_border(value->bottom_border,
311 base->bottom_border)) { 359 base->bottom_border)) {
312 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x12))) 360 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x12)))
313 goto ERROR; 361 goto ERROR2;
314 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->bottom_border))) 362 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->bottom_border)))
315 goto ERROR; 363 goto ERROR2;
316 } 364 }
317 365
318 if (!base || psiconv_compare_border(value->left_border, 366 if (!base || psiconv_compare_border(value->left_border,
319 base->left_border)) { 367 base->left_border)) {
320 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x13))) 368 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x13)))
321 goto ERROR; 369 goto ERROR2;
322 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->left_border))) 370 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->left_border)))
323 goto ERROR; 371 goto ERROR2;
324 } 372 }
325 373
326 if (!base || psiconv_compare_border(value->right_border, 374 if (!base || psiconv_compare_border(value->right_border,
327 base->right_border)) { 375 base->right_border)) {
328 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x14))) 376 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x14)))
329 goto ERROR; 377 goto ERROR2;
330 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->right_border))) 378 if ((res = psiconv_write_border(config,extra_buf,lev+1,value->right_border)))
331 goto ERROR; 379 goto ERROR2;
332 } 380 }
333 381
334 if (!base || psiconv_compare_bullet(value->bullet, 382 if (!base || psiconv_compare_bullet(value->bullet,
335 base->bullet)) { 383 base->bullet)) {
336 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x15))) 384 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x15)))
337 goto ERROR; 385 goto ERROR2;
338 if ((res = psiconv_write_bullet(config,extra_buf,lev+1,value->bullet))) 386 if ((res = psiconv_write_bullet(config,extra_buf,lev+1,value->bullet)))
339 goto ERROR; 387 goto ERROR2;
340 } 388 }
341 389
342 if (!value->tabs || !value->tabs->extras) { 390 if (!value->tabs || !value->tabs->extras) {
343 psiconv_error(config,0,psiconv_buffer_length(buf),"Null tabs"); 391 psiconv_error(config,0,psiconv_buffer_length(buf),"Null tabs");
344 res = -PSICONV_E_GENERATE; 392 res = -PSICONV_E_GENERATE;
345 goto ERROR; 393 goto ERROR2;
346 } 394 }
347 395
348 /* It is not entirely clear how tabs are inherited. For now, I assume 396 /* 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 397 if there is any difference at all, we will have to generate both
350 the normal tab-interval, and all specific tabs */ 398 the normal tab-interval, and all specific tabs */
351 if (!base || psiconv_compare_all_tabs(value->tabs,base->tabs)) { 399 if (!base || psiconv_compare_all_tabs(value->tabs,base->tabs)) {
352 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x16))) 400 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x16)))
353 goto ERROR; 401 goto ERROR2;
354 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->tabs->normal))) 402 if ((res = psiconv_write_length(config,extra_buf,lev+1,value->tabs->normal)))
355 goto ERROR; 403 goto ERROR2;
356 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) { 404 for (i = 0; i < psiconv_list_length(value->tabs->extras); i++) {
357 if (!(tab = psiconv_list_get(value->tabs->extras,i))) { 405 if (!(tab = psiconv_list_get(value->tabs->extras,i))) {
358 psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); 406 psiconv_error(config,lev+1,0,"Data structure corruption");
359 res = -PSICONV_E_NOMEM; 407 res = -PSICONV_E_NOMEM;
360 goto ERROR; 408 goto ERROR2;
361 } 409 }
362 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x17))) 410 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x17)))
363 goto ERROR; 411 goto ERROR2;
364 if ((res = psiconv_write_tab(config,extra_buf,lev+1,tab))) 412 if ((res = psiconv_write_tab(config,extra_buf,lev+1,tab)))
365 goto ERROR; 413 goto ERROR2;
366 } 414 }
367 } 415 }
368 416
369 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 417 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
370 goto ERROR; 418 goto ERROR2;
371 419
372 res = psiconv_buffer_concat(buf,extra_buf); 420 if ((res = psiconv_buffer_concat(buf,extra_buf))) {
421 psiconv_error(config,lev+1,0,"Out of memory error");
422 goto ERROR2;
423 }
373 424
374ERROR: 425ERROR2:
375 psiconv_buffer_free(extra_buf); 426 psiconv_buffer_free(extra_buf);
427ERROR1:
428 if (res)
429 psiconv_error(config,lev,0,"Writing of paragraph layout list failed");
430 else
431 psiconv_progress(config,lev,0,"End of paragraph layout list");
376 return res; 432 return res;
377} 433}
378 434
379int psiconv_write_character_layout_list(const psiconv_config config, 435int psiconv_write_character_layout_list(const psiconv_config config,
380 psiconv_buffer buf,int lev, 436 psiconv_buffer buf,int lev,
385 psiconv_buffer extra_buf; 441 psiconv_buffer extra_buf;
386 442
387 psiconv_progress(config,lev,0,"Writing character layout list"); 443 psiconv_progress(config,lev,0,"Writing character layout list");
388 444
389 if (!value) { 445 if (!value) {
390 psiconv_error(config,0,psiconv_buffer_length(buf),"Null character layout list"); 446 psiconv_error(config,lev,0,"Null character layout list");
391 return -PSICONV_E_GENERATE; 447 res = -PSICONV_E_GENERATE;
448 goto ERROR1;
392 } 449 }
393 if (!(extra_buf = psiconv_buffer_new())) 450 if (!(extra_buf = psiconv_buffer_new())) {
394 return -PSICONV_E_NOMEM; 451 res = -PSICONV_E_NOMEM;
452 goto ERROR1;
453 }
395 454
396 if (!base || psiconv_compare_color(base->color,value->color)) { 455 if (!base || psiconv_compare_color(base->color,value->color)) {
397 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x19))) 456 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x19)))
398 goto ERROR; 457 goto ERROR2;
399 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color))) 458 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->color)))
400 goto ERROR; 459 goto ERROR2;
401 } 460 }
402 461
403 if (!base || psiconv_compare_color(base->back_color,value->back_color)) { 462 if (!base || psiconv_compare_color(base->back_color,value->back_color)) {
404 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1a))) 463 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1a)))
405 goto ERROR; 464 goto ERROR2;
406 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color))) 465 if ((res = psiconv_write_color(config,extra_buf,lev+1,value->back_color)))
407 goto ERROR; 466 goto ERROR2;
408 } 467 }
409 468
410 if (!base || (value->font_size != base->font_size)) { 469 if (!base || (value->font_size != base->font_size)) {
411 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1c))) 470 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1c)))
412 goto ERROR; 471 goto ERROR2;
413 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size))) 472 if ((res = psiconv_write_size(config,extra_buf,lev+1,value->font_size)))
414 goto ERROR; 473 goto ERROR2;
415 } 474 }
416 475
417 if (!base || (value->italic != base->italic)) { 476 if (!base || (value->italic != base->italic)) {
418 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1d))) 477 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1d)))
419 goto ERROR; 478 goto ERROR2;
420 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->italic))) 479 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->italic)))
421 goto ERROR; 480 goto ERROR2;
422 } 481 }
423 482
424 if (!base || (value->bold != base->bold)) { 483 if (!base || (value->bold != base->bold)) {
425 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1e))) 484 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1e)))
426 goto ERROR; 485 goto ERROR2;
427 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->bold))) 486 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->bold)))
428 goto ERROR; 487 goto ERROR2;
429 } 488 }
430 489
431 if (!base || (value->super_sub != base->super_sub)) { 490 if (!base || (value->super_sub != base->super_sub)) {
432 if ((value->super_sub != psiconv_superscript) && 491 if ((value->super_sub != psiconv_superscript) &&
433 (value->super_sub != psiconv_subscript) && 492 (value->super_sub != psiconv_subscript) &&
434 (value->super_sub != psiconv_normalscript)) 493 (value->super_sub != psiconv_normalscript))
435 psiconv_warn(config,0,psiconv_buffer_length(buf), 494 psiconv_warn(config,lev,0,"Unknown supersubscript (%d); assuming normal",
436 "Unknown supersubscript (%d); assuming normal",
437 value->super_sub); 495 value->super_sub);
438 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1f))) 496 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x1f)))
439 goto ERROR; 497 goto ERROR2;
440 if ((res = psiconv_write_u8(config,extra_buf,lev+1, 498 if ((res = psiconv_write_u8(config,extra_buf,lev+1,
441 value->super_sub == psiconv_superscript?1: 499 value->super_sub == psiconv_superscript?1:
442 value->super_sub == psiconv_subscript?2:0))) 500 value->super_sub == psiconv_subscript?2:0)))
443 goto ERROR; 501 goto ERROR2;
444 } 502 }
445 503
446 if (!base || (value->underline != base->underline)) { 504 if (!base || (value->underline != base->underline)) {
447 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x20))) 505 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x20)))
448 goto ERROR; 506 goto ERROR2;
449 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->underline))) 507 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->underline)))
450 goto ERROR; 508 goto ERROR2;
451 } 509 }
452 510
453 if (!base || (value->strikethrough != base->strikethrough)) { 511 if (!base || (value->strikethrough != base->strikethrough)) {
454 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x21))) 512 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x21)))
455 goto ERROR; 513 goto ERROR2;
456 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->strikethrough))) 514 if ((res = psiconv_write_bool(config,extra_buf,lev+1,value->strikethrough)))
457 goto ERROR; 515 goto ERROR2;
458 } 516 }
459 517
460 if (!base || psiconv_compare_font(base->font,value->font)) { 518 if (!base || psiconv_compare_font(base->font,value->font)) {
461 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x22))) 519 if ((res = psiconv_write_u8(config,extra_buf,lev+1,0x22)))
462 goto ERROR; 520 goto ERROR2;
463 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font))) 521 if ((res = psiconv_write_font(config,extra_buf,lev+1,value->font)))
464 goto ERROR; 522 goto ERROR2;
465 } 523 }
466 524
467 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 525 if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
468 goto ERROR; 526 goto ERROR2;
469 527
470 res = psiconv_buffer_concat(buf,extra_buf); 528 res = psiconv_buffer_concat(buf,extra_buf);
471 529
472ERROR: 530ERROR2:
473 psiconv_buffer_free(extra_buf); 531 psiconv_buffer_free(extra_buf);
532ERROR1:
533 if (res)
534 psiconv_error(config,lev,0,"Writing of character layout list failed");
535 else
536 psiconv_progress(config,lev,0,"End of character layout list");
474 return res; 537 return res;
475} 538}

Legend:
Removed from v.196  
changed lines
  Added in v.233

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