/[public]/psiconv/trunk/program/psiconv/gen_html4.c
ViewVC logotype

Diff of /psiconv/trunk/program/psiconv/gen_html4.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 194 Revision 195
94{ 94{
95 output_simple_chars(config,list,"</BODY>\n",enc); 95 output_simple_chars(config,list,"</BODY>\n",enc);
96 output_simple_chars(config,list,"</HTML>\n",enc); 96 output_simple_chars(config,list,"</HTML>\n",enc);
97} 97}
98 98
99int character_layout_equal(const psiconv_character_layout l1,
100 const psiconv_character_layout l2)
101{
102 int font_size1,font_size2;
99 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
100void characters(const psiconv_config config, psiconv_list list, 130void characters(const psiconv_config config, psiconv_list list,
101 const psiconv_string_t textstr, 131 const psiconv_string_t textstr,
102 const psiconv_character_layout layout,const encoding enc) 132 const psiconv_character_layout layout,const encoding enc)
103{ 133{
104 char tempstr[TEMPSTR_LEN]; 134 char tempstr[TEMPSTR_LEN];
165} 195}
166 196
167void paragraph(const psiconv_config config, psiconv_list list, 197void paragraph(const psiconv_config config, psiconv_list list,
168 psiconv_paragraph para, const encoding enc) 198 psiconv_paragraph para, const encoding enc)
169{ 199{
170 int i,charnr; 200 int i,charnr,start,len;
171 psiconv_string_t text; 201 psiconv_string_t text;
172 psiconv_in_line_layout layout; 202 psiconv_in_line_layout layout,next_layout;
173 203
174 204
175 output_simple_chars(config,list, 205 output_simple_chars(config,list,
176 para->base_paragraph->bullet->on?"<UL><LI":"<P",enc); 206 para->base_paragraph->bullet->on?"<UL><LI":"<P",enc);
177 207
183 output_simple_chars(config,list," align=justify",enc); 213 output_simple_chars(config,list," align=justify",enc);
184 214
185 output_simple_chars(config,list,">",enc); 215 output_simple_chars(config,list,">",enc);
186 216
187 if (psiconv_list_length(para->in_lines) == 0) { 217 if (psiconv_list_length(para->in_lines) == 0) {
218 if (psiconv_unicode_strlen(para->text))
188 characters(config,list,para->text,para->base_character,enc); 219 characters(config,list,para->text,para->base_character,enc);
189 } else { 220 } else {
190 charnr = 0; 221 charnr = 0;
222 start = -1;
191 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;
192 if (!(layout = psiconv_list_get(para->in_lines,i))) { 226 if (!(layout = psiconv_list_get(para->in_lines,i))) {
193 fputs("Internal data structures corruption\n",stderr); 227 fputs("Internal data structures corruption\n",stderr);
194 exit(1); 228 exit(1);
195 } 229 }
196 if (!(text = malloc(sizeof (*text) * (layout->length + 1)))) { 230 if (i+1 < psiconv_list_length(para->in_lines)) {
197 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);
198 exit(1); 233 exit(1);
234 }
235 } else {
236 next_layout = NULL;
199 } 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 }
200 memcpy(text,para->text+charnr,layout->length * sizeof(*text)); 249 memcpy(text,para->text+charnr,len * sizeof(*text));
201 text[layout->length] = 0; 250 text[len] = 0;
202 characters(config,list,text,layout->layout,enc); 251 characters(config,list,text,layout->layout,enc);
203 free(text); 252 free(text);
253 }
204 charnr += layout->length; 254 charnr += layout->length;
255 start = -1;
205 } 256 }
206 } 257 }
207 output_simple_chars(config, list, 258 output_simple_chars(config, list,
208 para->base_paragraph->bullet->on?"</UL>\n":"\n",enc); 259 para->base_paragraph->bullet->on?"</UL>\n":"\n",enc);
209} 260}

Legend:
Removed from v.194  
changed lines
  Added in v.195

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