… | |
… | |
46 | psiconv_text_and_layout paragraphs, const encoding enc); |
46 | psiconv_text_and_layout paragraphs, const encoding enc); |
47 | static void gen_word(const psiconv_config config, psiconv_list list, |
47 | static void gen_word(const psiconv_config config, psiconv_list list, |
48 | const psiconv_word_f file, const encoding enc); |
48 | const psiconv_word_f file, const encoding enc); |
49 | static void gen_texted(const psiconv_config config, psiconv_list list, |
49 | static void gen_texted(const psiconv_config config, psiconv_list list, |
50 | const psiconv_texted_f file, const encoding enc); |
50 | const psiconv_texted_f file, const encoding enc); |
|
|
51 | static int gen_html4(const psiconv_config config, psiconv_list list, |
|
|
52 | const psiconv_file file, const char *dest, |
|
|
53 | const encoding enc); |
51 | |
54 | |
52 | |
55 | |
53 | void text(const psiconv_config config,psiconv_list list, |
56 | void text(const psiconv_config config,psiconv_list list, |
54 | psiconv_string_t data,const encoding enc) |
57 | psiconv_string_t data,const encoding enc) |
55 | { |
58 | { |
… | |
… | |
57 | for (i = 0; i < psiconv_unicode_strlen(data); i++) { |
60 | for (i = 0; i < psiconv_unicode_strlen(data); i++) { |
58 | if ((data[i] == 0x06) || (data[i] == 0x07) || (data[i] == 0x08)) |
61 | if ((data[i] == 0x06) || (data[i] == 0x07) || (data[i] == 0x08)) |
59 | output_simple_chars(config,list,"<BR>",enc); |
62 | output_simple_chars(config,list,"<BR>",enc); |
60 | else if ((data[i] == 0x0b) || (data[i] == 0x0c)) |
63 | else if ((data[i] == 0x0b) || (data[i] == 0x0c)) |
61 | output_simple_chars(config,list,"-",enc); |
64 | output_simple_chars(config,list,"-",enc); |
62 | else if (data[i] == 0x0f) |
65 | else if ((data[i] == 0x0f) || (data[i] == 0x09) || (data[i] == 0x0a)) |
63 | output_simple_chars(config,list," ",enc); |
66 | output_simple_chars(config,list," ",enc); |
64 | else if (data[i] >= 0x20) |
67 | else if (data[i] >= 0x20) |
65 | output_char(config,list,data[i],enc); |
68 | output_char(config,list,data[i],enc); |
66 | } |
69 | } |
67 | } |
70 | } |
… | |
… | |
91 | { |
94 | { |
92 | output_simple_chars(config,list,"</BODY>\n",enc); |
95 | output_simple_chars(config,list,"</BODY>\n",enc); |
93 | output_simple_chars(config,list,"</HTML>\n",enc); |
96 | output_simple_chars(config,list,"</HTML>\n",enc); |
94 | } |
97 | } |
95 | |
98 | |
|
|
99 | int character_layout_equal(const psiconv_character_layout l1, |
|
|
100 | const psiconv_character_layout l2) |
|
|
101 | { |
|
|
102 | int font_size1,font_size2; |
96 | |
103 | |
|
|
104 | font_size1 = l1->font_size < 8 ?1: |
|
|
105 | l1->font_size < 10 ?2: |
|
|
106 | l1->font_size < 13 ?3: |
|
|
107 | l1->font_size < 17 ?4: |
|
|
108 | l1->font_size < 24 ?5: |
|
|
109 | l1->font_size < 36 ?6:7; |
|
|
110 | font_size2 = l2->font_size < 8 ?1: |
|
|
111 | l2->font_size < 10 ?2: |
|
|
112 | l2->font_size < 13 ?3: |
|
|
113 | l2->font_size < 17 ?4: |
|
|
114 | l2->font_size < 24 ?5: |
|
|
115 | l2->font_size < 36 ?6:7; |
|
|
116 | |
|
|
117 | return (l1 && l2 && |
|
|
118 | (l1->color->red == l2->color->red) && |
|
|
119 | (l1->color->green == l2->color->green) && |
|
|
120 | (l1->color->blue == l2->color->blue) && |
|
|
121 | (font_size1 == font_size2) && |
|
|
122 | (l1->italic == l2->italic) && |
|
|
123 | (l1->bold == l2->bold) && |
|
|
124 | (l1->super_sub == l2->super_sub) && |
|
|
125 | (l1->underline == l2->underline) && |
|
|
126 | (l1->strikethrough == l2->strikethrough) && |
|
|
127 | (l1->font->screenfont == l2->font->screenfont)); |
|
|
128 | } |
|
|
129 | |
97 | void characters(const psiconv_config config, psiconv_list list, |
130 | void characters(const psiconv_config config, psiconv_list list, |
98 | const psiconv_string_t textstr, |
131 | const psiconv_string_t textstr, |
99 | const psiconv_character_layout layout,const encoding enc) |
132 | const psiconv_character_layout layout,const encoding enc) |
100 | { |
133 | { |
101 | char tempstr[TEMPSTR_LEN]; |
134 | char tempstr[TEMPSTR_LEN]; |
… | |
… | |
162 | } |
195 | } |
163 | |
196 | |
164 | void paragraph(const psiconv_config config, psiconv_list list, |
197 | void paragraph(const psiconv_config config, psiconv_list list, |
165 | psiconv_paragraph para, const encoding enc) |
198 | psiconv_paragraph para, const encoding enc) |
166 | { |
199 | { |
167 | int i,charnr; |
200 | int i,charnr,start,len; |
168 | psiconv_string_t text; |
201 | psiconv_string_t text; |
169 | psiconv_in_line_layout layout; |
202 | psiconv_in_line_layout layout,next_layout; |
170 | |
203 | |
171 | |
204 | |
172 | output_simple_chars(config,list, |
205 | output_simple_chars(config,list, |
173 | para->base_paragraph->bullet->on?"<UL><LI":"<P",enc); |
206 | para->base_paragraph->bullet->on?"<UL><LI":"<P",enc); |
174 | |
207 | |
… | |
… | |
180 | output_simple_chars(config,list," align=justify",enc); |
213 | output_simple_chars(config,list," align=justify",enc); |
181 | |
214 | |
182 | output_simple_chars(config,list,">",enc); |
215 | output_simple_chars(config,list,">",enc); |
183 | |
216 | |
184 | if (psiconv_list_length(para->in_lines) == 0) { |
217 | if (psiconv_list_length(para->in_lines) == 0) { |
|
|
218 | if (psiconv_unicode_strlen(para->text)) |
185 | characters(config,list,para->text,para->base_character,enc); |
219 | characters(config,list,para->text,para->base_character,enc); |
186 | } else { |
220 | } else { |
187 | charnr = 0; |
221 | charnr = 0; |
|
|
222 | start = -1; |
188 | for (i = 0; i < psiconv_list_length(para->in_lines); i++) { |
223 | for (i = 0; i < psiconv_list_length(para->in_lines); i++) { |
|
|
224 | if (start < 0) |
|
|
225 | start = charnr; |
189 | if (!(layout = psiconv_list_get(para->in_lines,i))) { |
226 | if (!(layout = psiconv_list_get(para->in_lines,i))) { |
190 | fputs("Internal data structures corruption\n",stderr); |
227 | fputs("Internal data structures corruption\n",stderr); |
191 | exit(1); |
228 | exit(1); |
192 | } |
229 | } |
193 | if (!(text = malloc(sizeof (*text) * (layout->length + 1)))) { |
230 | if (i+1 < psiconv_list_length(para->in_lines)) { |
194 | fputs("Out of memory error\n",stderr); |
231 | if (!(next_layout = psiconv_list_get(para->in_lines,i+1))) { |
|
|
232 | fputs("Internal data structures corruption\n",stderr); |
195 | exit(1); |
233 | exit(1); |
|
|
234 | } |
|
|
235 | } else { |
|
|
236 | next_layout = NULL; |
196 | } |
237 | } |
|
|
238 | if (next_layout && |
|
|
239 | character_layout_equal(layout->layout,next_layout->layout)) { |
|
|
240 | charnr += layout->length; |
|
|
241 | continue; |
|
|
242 | } |
|
|
243 | len = charnr - start + layout->length; |
|
|
244 | if (len) { |
|
|
245 | if (!(text = malloc(sizeof (*text) * (len + 1)))) { |
|
|
246 | fputs("Out of memory error\n",stderr); |
|
|
247 | exit(1); |
|
|
248 | } |
197 | memcpy(text,para->text+charnr,layout->length * sizeof(*text)); |
249 | memcpy(text,para->text+charnr,len * sizeof(*text)); |
198 | text[layout->length] = 0; |
250 | text[len] = 0; |
199 | characters(config,list,text,layout->layout,enc); |
251 | characters(config,list,text,layout->layout,enc); |
200 | free(text); |
252 | free(text); |
|
|
253 | } |
201 | charnr += layout->length; |
254 | charnr += layout->length; |
|
|
255 | start = -1; |
202 | } |
256 | } |
203 | } |
257 | } |
204 | output_simple_chars(config, list, |
258 | output_simple_chars(config, list, |
205 | para->base_paragraph->bullet->on?"</UL>\n":"\n",enc); |
259 | para->base_paragraph->bullet->on?"</UL>\n":"\n",enc); |
206 | } |
260 | } |