/[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 192 Revision 195
46 psiconv_text_and_layout paragraphs, const encoding enc); 46 psiconv_text_and_layout paragraphs, const encoding enc);
47static void gen_word(const psiconv_config config, psiconv_list list, 47static 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);
49static void gen_texted(const psiconv_config config, psiconv_list list, 49static 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);
51static 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
53void text(const psiconv_config config,psiconv_list list, 56void 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
99int 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
97void characters(const psiconv_config config, psiconv_list list, 130void 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
164void paragraph(const psiconv_config config, psiconv_list list, 197void 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}

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

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