… | |
… | |
23 | #include <stdlib.h> |
23 | #include <stdlib.h> |
24 | |
24 | |
25 | #include "generate_routines.h" |
25 | #include "generate_routines.h" |
26 | #include "error.h" |
26 | #include "error.h" |
27 | |
27 | |
|
|
28 | #ifdef DMALLOC |
|
|
29 | #include <dmalloc.h> |
|
|
30 | #endif |
|
|
31 | |
|
|
32 | |
28 | |
33 | |
29 | int psiconv_write_texted_section(psiconv_buffer buf, |
34 | int psiconv_write_texted_section(psiconv_buffer buf, |
30 | psiconv_texted_section value, |
35 | const psiconv_texted_section value, |
31 | psiconv_character_layout base_char, |
36 | const psiconv_character_layout base_char, |
32 | psiconv_paragraph_layout base_para) |
37 | const psiconv_paragraph_layout base_para, |
|
|
38 | psiconv_buffer *extra_buf) |
33 | { |
39 | { |
34 | int res; |
40 | int res,with_layout_section=0; |
|
|
41 | psiconv_u32 layout_id; |
35 | |
42 | |
36 | if (!value) { |
43 | if (!value) { |
37 | psiconv_warn(0,psiconv_buffer_length(buf),"Null TextEd section"); |
44 | psiconv_warn(0,psiconv_buffer_length(buf),"Null TextEd section"); |
38 | return -PSICONV_E_GENERATE; |
45 | res = -PSICONV_E_GENERATE; |
|
|
46 | goto ERROR1; |
39 | } |
47 | } |
40 | |
48 | |
|
|
49 | if (!(*extra_buf = psiconv_buffer_new())) { |
|
|
50 | res = -PSICONV_E_NOMEM; |
|
|
51 | goto ERROR1; |
|
|
52 | } |
|
|
53 | |
|
|
54 | layout_id = psiconv_buffer_unique_id(); |
|
|
55 | psiconv_buffer_add_target(*extra_buf,layout_id); |
|
|
56 | |
|
|
57 | if (psiconv_list_length(value->paragraphs)) { |
|
|
58 | with_layout_section = 1; |
|
|
59 | if ((res = psiconv_write_styleless_layout_section(*extra_buf, |
|
|
60 | value->paragraphs, |
|
|
61 | base_char,base_para))) |
|
|
62 | goto ERROR2; |
|
|
63 | } |
|
|
64 | |
41 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_BODY))) |
65 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_BODY))) |
42 | return res; |
66 | goto ERROR2; |
43 | |
67 | |
44 | /* Dummy TextEd Jumptable */ |
68 | /* Partly dummy TextEd Jumptable */ |
45 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_REPLACEMENT))) |
69 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_REPLACEMENT))) |
46 | return res; |
70 | goto ERROR2; |
47 | if ((res = psiconv_write_u32(buf,0))) |
71 | if ((res = psiconv_write_u32(buf,0))) |
48 | return res; |
72 | goto ERROR2; |
49 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_UNKNOWN))) |
73 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_UNKNOWN))) |
50 | return res; |
74 | goto ERROR2; |
51 | if ((res = psiconv_write_u32(buf,0))) |
75 | if ((res = psiconv_write_u32(buf,0))) |
52 | return res; |
76 | goto ERROR2; |
53 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_LAYOUT))) |
77 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_LAYOUT))) |
54 | return res; |
78 | goto ERROR2; |
|
|
79 | if (with_layout_section) { |
|
|
80 | if ((res = psiconv_write_offset(buf,layout_id))) |
|
|
81 | goto ERROR2; |
|
|
82 | } else { |
55 | if ((res = psiconv_write_u32(buf,0))) |
83 | if ((res = psiconv_write_u32(buf,0))) |
56 | return res; |
84 | goto ERROR2; |
|
|
85 | } |
57 | |
86 | |
58 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_TEXT))) |
87 | if ((res = psiconv_write_u32(buf,PSICONV_ID_TEXTED_TEXT))) |
59 | return res; |
88 | goto ERROR2; |
60 | |
89 | |
61 | return psiconv_write_text_section(buf,value->paragraphs); |
90 | return psiconv_write_text_section(buf,value->paragraphs); |
62 | |
91 | |
|
|
92 | ERROR2: |
|
|
93 | psiconv_buffer_free(*extra_buf); |
|
|
94 | ERROR1: |
|
|
95 | return res; |
63 | } |
96 | } |