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