2 * Copyright (C) 2005 QSDN,Inc. All rights reserved.
3 * Copyright (C) 2005-2011 Atsushi Konno All rights reserved.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 tag_handlers chxj_tag_handlers[] = {
21 .type = CHXJ_SPEC_UNKNOWN,
25 .type = CHXJ_SPEC_Chtml_1_0,
26 .handler = chtml10_handler,
29 .type = CHXJ_SPEC_Chtml_2_0,
30 .handler = chtml20_handler,
33 .type = CHXJ_SPEC_Chtml_3_0,
34 .handler = chtml30_handler,
37 .type = CHXJ_SPEC_Chtml_4_0,
38 .handler = chtml40_handler,
41 .type = CHXJ_SPEC_Chtml_5_0,
42 .handler = chtml50_handler,
45 .type = CHXJ_SPEC_Chtml_6_0,
46 .handler = ixhtml10_handler,
49 .type = CHXJ_SPEC_Chtml_7_0,
50 .handler = ixhtml10_handler,
53 .type = CHXJ_SPEC_XHtml_Mobile_1_0,
54 .handler = xhtml_handler,
57 .type = CHXJ_SPEC_Hdml,
58 .handler = hdml_handler,
61 .type = CHXJ_SPEC_Jhtml,
62 .handler = jhtml_handler,
65 .type = CHXJ_SPEC_Jxhtml,
66 .handler = jxhtml_handler,
69 .type = CHXJ_SPEC_iPhone2,
70 .handler = iphone_handler,
73 .type = CHXJ_SPEC_iPhone3,
74 .handler = iphone_handler,
77 .type = CHXJ_SPEC_iPhone4,
78 .handler = iphone_handler,
81 .type = CHXJ_SPEC_softbank_android,
82 .handler = android_handler,
85 .type = CHXJ_SPEC_au_android,
86 .handler = android_handler,
89 .type = CHXJ_SPEC_docomo_android,
90 .handler = android_handler,
93 .type = CHXJ_SPEC_android,
94 .handler = android_handler,
97 .type = CHXJ_SPEC_HTML,
104 * It is main processing of conversion from CHTML to XXML.
108 * @param pdoc [i/o] The pointer to the XXML structure is specified.
109 * @param doc [i/o] The pointer to the XXML structure is specified.
110 * @param node [i] The pointer to a current node is specified.
111 * @param indent [i] The depth of the node processing it now is specified.
113 * @return The character string after it converts it is returned.
126 tag_handler *handlers;
129 handlers = chxj_tag_handlers[spec->html_spec_type].handler;
131 /*--------------------------------------------------------------------------*/
132 /* It is the main loop of the conversion processing. */
133 /*--------------------------------------------------------------------------*/
134 for (child = qs_get_child_node(doc,node);
136 child = qs_get_next_node(doc,child)) {
137 char *name = qs_get_node_name(doc,child);
141 /*----------------------------------------------------------------------*/
143 /*----------------------------------------------------------------------*/
144 if (strcasecmp(name, "html") == 0) {
145 if (handlers[tagHTML].start_tag_handler)
146 handlers[tagHTML].start_tag_handler(pdoc, child);
148 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
150 if (handlers[tagHTML].end_tag_handler)
151 handlers[tagHTML].end_tag_handler(pdoc, child);
153 /*----------------------------------------------------------------------*/
155 /*----------------------------------------------------------------------*/
157 if (strcasecmp(name, "head") == 0) {
158 if (handlers[tagHEAD].start_tag_handler)
159 handlers[tagHEAD].start_tag_handler(pdoc, child);
161 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
163 if (handlers[tagHEAD].end_tag_handler)
164 handlers[tagHEAD].end_tag_handler(pdoc, child);
166 /*----------------------------------------------------------------------*/
168 /*----------------------------------------------------------------------*/
170 if (strcasecmp(name, "hr") == 0) {
171 if (handlers[tagHR].start_tag_handler)
172 handlers[tagHR].start_tag_handler(pdoc, child);
174 if (handlers[tagHR].end_tag_handler)
175 handlers[tagHR].end_tag_handler(pdoc, child);
177 /*----------------------------------------------------------------------*/
179 /*----------------------------------------------------------------------*/
181 if (strcasecmp(name, "h1") == 0) {
182 if (handlers[tagH1].start_tag_handler)
183 handlers[tagH1].start_tag_handler(pdoc, child);
185 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
187 if (handlers[tagH1].end_tag_handler)
188 handlers[tagH1].end_tag_handler(pdoc, child);
190 /*----------------------------------------------------------------------*/
192 /*----------------------------------------------------------------------*/
194 if (strcasecmp(name, "h2") == 0) {
195 if (handlers[tagH2].start_tag_handler)
196 handlers[tagH2].start_tag_handler(pdoc, child);
198 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
200 if (handlers[tagH2].end_tag_handler)
201 handlers[tagH2].end_tag_handler(pdoc, child);
203 /*----------------------------------------------------------------------*/
205 /*----------------------------------------------------------------------*/
207 if (strcasecmp(name, "h3") == 0) {
208 if (handlers[tagH3].start_tag_handler)
209 handlers[tagH3].start_tag_handler(pdoc, child);
211 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
213 if (handlers[tagH3].end_tag_handler)
214 handlers[tagH3].end_tag_handler(pdoc, child);
216 /*----------------------------------------------------------------------*/
218 /*----------------------------------------------------------------------*/
220 if (strcasecmp(name, "h4") == 0) {
221 if (handlers[tagH4].start_tag_handler)
222 handlers[tagH4].start_tag_handler(pdoc, child);
224 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
226 if (handlers[tagH4].end_tag_handler)
227 handlers[tagH4].end_tag_handler(pdoc, child);
229 /*----------------------------------------------------------------------*/
231 /*----------------------------------------------------------------------*/
233 if (strcasecmp(name, "h5") == 0) {
234 if (handlers[tagH5].start_tag_handler)
235 handlers[tagH5].start_tag_handler(pdoc, child);
237 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
239 if (handlers[tagH5].end_tag_handler)
240 handlers[tagH5].end_tag_handler(pdoc, child);
242 /*----------------------------------------------------------------------*/
244 /*----------------------------------------------------------------------*/
246 if (strcasecmp(name, "h6") == 0) {
247 if (handlers[tagH6].start_tag_handler)
248 handlers[tagH6].start_tag_handler(pdoc, child);
250 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
252 if (handlers[tagH6].end_tag_handler)
253 handlers[tagH6].end_tag_handler(pdoc, child);
256 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
263 /*----------------------------------------------------------------------*/
265 /*----------------------------------------------------------------------*/
266 if (strcasecmp(name, "p") == 0) {
267 if (handlers[tagP].start_tag_handler)
268 handlers[tagP].start_tag_handler(pdoc, child);
270 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
272 if (handlers[tagP].end_tag_handler)
273 handlers[tagP].end_tag_handler(pdoc, child);
275 /*----------------------------------------------------------------------*/
277 /*----------------------------------------------------------------------*/
278 else if (strcasecmp(name, "pre") == 0) {
279 if (handlers[tagPRE].start_tag_handler)
280 handlers[tagPRE].start_tag_handler(pdoc, child);
282 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
284 if (handlers[tagPRE].end_tag_handler)
285 handlers[tagPRE].end_tag_handler(pdoc, child);
287 /*----------------------------------------------------------------------*/
289 /*----------------------------------------------------------------------*/
290 else if (strcasecmp(name, "plaintext") == 0) {
291 if (handlers[tagPLAINTEXT].start_tag_handler)
292 handlers[tagPLAINTEXT].start_tag_handler(pdoc, child);
294 if (handlers[tagPLAINTEXT].end_tag_handler)
295 handlers[tagPLAINTEXT].end_tag_handler(pdoc, child);
297 /*----------------------------------------------------------------------*/
299 /*----------------------------------------------------------------------*/
300 else if (strcasecmp(name, "param") == 0) {
301 if (handlers[tagPARAM].start_tag_handler)
302 handlers[tagPARAM].start_tag_handler(pdoc, child);
304 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
306 if (handlers[tagPARAM].end_tag_handler)
307 handlers[tagPARAM].end_tag_handler(pdoc, child);
310 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
316 /*----------------------------------------------------------------------*/
318 /*----------------------------------------------------------------------*/
319 if (strcasecmp(name, "nobr") == 0) {
320 if (handlers[tagNOBR].start_tag_handler)
321 handlers[tagNOBR].start_tag_handler(pdoc, child);
323 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
325 if (handlers[tagNOBR].end_tag_handler)
326 handlers[tagNOBR].end_tag_handler(pdoc, child);
329 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
335 /*----------------------------------------------------------------------*/
337 /*----------------------------------------------------------------------*/
338 if (strcasecmp(name, "ul") == 0) {
339 if (handlers[tagUL].start_tag_handler)
340 handlers[tagUL].start_tag_handler(pdoc, child);
342 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
344 if (handlers[tagUL].end_tag_handler)
345 handlers[tagUL].end_tag_handler(pdoc, child);
348 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
354 /*----------------------------------------------------------------------*/
356 /*----------------------------------------------------------------------*/
357 if (strcasecmp(name, "li") == 0) {
358 if (handlers[tagLI].start_tag_handler)
359 handlers[tagLI].start_tag_handler(pdoc, child);
361 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
363 if (handlers[tagLI].end_tag_handler)
364 handlers[tagLI].end_tag_handler(pdoc, child);
367 /*----------------------------------------------------------------------*/
369 /*----------------------------------------------------------------------*/
370 if (strcasecmp(name, "legend") == 0) {
371 if (handlers[tagLEGEND].start_tag_handler)
372 handlers[tagLEGEND].start_tag_handler(pdoc, child);
374 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
376 if (handlers[tagLEGEND].end_tag_handler)
377 handlers[tagLEGEND].end_tag_handler(pdoc, child);
380 /*----------------------------------------------------------------------*/
382 /*----------------------------------------------------------------------*/
383 if (strcasecmp(name, "label") == 0) {
384 if (handlers[tagLABEL].start_tag_handler)
385 handlers[tagLABEL].start_tag_handler(pdoc, child);
387 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
389 if (handlers[tagLABEL].end_tag_handler)
390 handlers[tagLABEL].end_tag_handler(pdoc, child);
393 /*----------------------------------------------------------------------*/
395 /*----------------------------------------------------------------------*/
396 if (strcasecmp(name, "link") == 0) {
397 if (handlers[tagLINK].start_tag_handler)
398 handlers[tagLINK].start_tag_handler(pdoc, child);
400 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
402 if (handlers[tagLINK].end_tag_handler)
403 handlers[tagLINK].end_tag_handler(pdoc, child);
406 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
413 /*----------------------------------------------------------------------*/
415 /*----------------------------------------------------------------------*/
416 if (strcasecmp(name, "ol") == 0) {
417 if (handlers[tagOL].start_tag_handler)
418 handlers[tagOL].start_tag_handler(pdoc, child);
420 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
422 if (handlers[tagOL].end_tag_handler)
423 handlers[tagOL].end_tag_handler(pdoc, child);
426 /*----------------------------------------------------------------------*/
428 /*----------------------------------------------------------------------*/
429 if (strcasecmp(name, "option") == 0) {
430 if (handlers[tagOPTION].start_tag_handler)
431 handlers[tagOPTION].start_tag_handler(pdoc, child);
433 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
435 if (handlers[tagOPTION].end_tag_handler)
436 handlers[tagOPTION].end_tag_handler(pdoc, child);
439 /*----------------------------------------------------------------------*/
441 /*----------------------------------------------------------------------*/
442 if (strcasecmp(name, "object") == 0) {
443 if (handlers[tagOBJECT].start_tag_handler)
444 handlers[tagOBJECT].start_tag_handler(pdoc, child);
446 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
448 if (handlers[tagOBJECT].end_tag_handler)
449 handlers[tagOBJECT].end_tag_handler(pdoc, child);
452 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
459 /*----------------------------------------------------------------------*/
461 /*----------------------------------------------------------------------*/
462 if (strcasecmp(name, "meta") == 0) {
463 if (handlers[tagMETA].start_tag_handler)
464 handlers[tagMETA].start_tag_handler(pdoc, child);
466 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
468 if (handlers[tagMETA].end_tag_handler)
469 handlers[tagMETA].end_tag_handler(pdoc, child);
471 /*----------------------------------------------------------------------*/
473 /*----------------------------------------------------------------------*/
474 else if (strcasecmp(name, "menu") == 0) {
475 if (handlers[tagMENU].start_tag_handler)
476 handlers[tagMENU].start_tag_handler(pdoc, child);
478 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
480 if (handlers[tagMENU].end_tag_handler)
481 handlers[tagMENU].end_tag_handler(pdoc, child);
483 /*----------------------------------------------------------------------*/
485 /*----------------------------------------------------------------------*/
486 else if (strcasecmp(name, "marquee") == 0) {
487 if (handlers[tagMARQUEE].start_tag_handler)
488 handlers[tagMARQUEE].start_tag_handler(pdoc, child);
490 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
492 if (handlers[tagMARQUEE].end_tag_handler)
493 handlers[tagMARQUEE].end_tag_handler(pdoc, child);
496 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
502 /*----------------------------------------------------------------------*/
504 /*----------------------------------------------------------------------*/
505 if (strlen(name) == 1) {
506 if (handlers[tagB].start_tag_handler)
507 handlers[tagB].start_tag_handler(pdoc, child);
509 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
511 if (handlers[tagB].end_tag_handler)
512 handlers[tagB].end_tag_handler(pdoc, child);
515 /*----------------------------------------------------------------------*/
517 /*----------------------------------------------------------------------*/
518 if (strcasecmp(name, "base") == 0) {
519 if (handlers[tagBASE].start_tag_handler)
520 handlers[tagBASE].start_tag_handler(pdoc, child);
522 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
524 if (handlers[tagBASE].end_tag_handler)
525 handlers[tagBASE].end_tag_handler(pdoc, child);
527 /*----------------------------------------------------------------------*/
529 /*----------------------------------------------------------------------*/
531 if (strcasecmp(name, "body") == 0) {
532 if (handlers[tagBODY].start_tag_handler)
533 handlers[tagBODY].start_tag_handler(pdoc, child);
535 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
537 if (handlers[tagBODY].end_tag_handler)
538 handlers[tagBODY].end_tag_handler(pdoc, child);
540 /*----------------------------------------------------------------------*/
542 /*----------------------------------------------------------------------*/
543 else if (strcasecmp(name, "br") == 0) {
544 if (handlers[tagBR].start_tag_handler)
545 handlers[tagBR].start_tag_handler(pdoc, child);
547 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
549 if (handlers[tagBR].end_tag_handler)
550 handlers[tagBR].end_tag_handler(pdoc, child);
552 /*----------------------------------------------------------------------*/
554 /*----------------------------------------------------------------------*/
555 else if (strcasecmp(name, "blockquote") == 0) {
556 if (handlers[tagBLOCKQUOTE].start_tag_handler)
557 handlers[tagBLOCKQUOTE].start_tag_handler(pdoc, child);
559 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
561 if (handlers[tagBLOCKQUOTE].end_tag_handler)
562 handlers[tagBLOCKQUOTE].end_tag_handler(pdoc, child);
564 /*----------------------------------------------------------------------*/
566 /*----------------------------------------------------------------------*/
567 else if (strcasecmp(name, "blink") == 0) {
568 if (handlers[tagBLINK].start_tag_handler)
569 handlers[tagBLINK].start_tag_handler(pdoc, child);
571 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
573 if (handlers[tagBLINK].end_tag_handler)
574 handlers[tagBLINK].end_tag_handler(pdoc, child);
577 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
583 /*----------------------------------------------------------------------*/
585 /*----------------------------------------------------------------------*/
586 if (strcasecmp(name, "a") == 0) {
587 if (handlers[tagA].start_tag_handler)
588 handlers[tagA].start_tag_handler(pdoc, child);
590 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
592 if (handlers[tagA].end_tag_handler)
593 handlers[tagA].end_tag_handler(pdoc, child);
596 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
602 /*----------------------------------------------------------------------*/
604 /*----------------------------------------------------------------------*/
605 if (strcasecmp(name, "font") == 0) {
606 if (handlers[tagFONT].start_tag_handler)
607 handlers[tagFONT].start_tag_handler(pdoc, child);
609 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
611 if (handlers[tagFONT].end_tag_handler)
612 handlers[tagFONT].end_tag_handler(pdoc, child);
614 /*----------------------------------------------------------------------*/
616 /*----------------------------------------------------------------------*/
618 if (strcasecmp(name, "form") == 0) {
619 if (handlers[tagFORM].start_tag_handler)
620 handlers[tagFORM].start_tag_handler(pdoc, child);
622 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
624 if (handlers[tagFORM].end_tag_handler)
625 handlers[tagFORM].end_tag_handler(pdoc, child);
627 /*----------------------------------------------------------------------*/
629 /*----------------------------------------------------------------------*/
631 if (strcasecmp(name, "fieldset") == 0) {
632 if (handlers[tagFIELDSET].start_tag_handler)
633 handlers[tagFIELDSET].start_tag_handler(pdoc, child);
635 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
637 if (handlers[tagFIELDSET].end_tag_handler)
638 handlers[tagFIELDSET].end_tag_handler(pdoc, child);
641 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
647 /*----------------------------------------------------------------------*/
649 /*----------------------------------------------------------------------*/
650 if (strcasecmp(name, "input") == 0) {
651 if (handlers[tagINPUT].start_tag_handler)
652 handlers[tagINPUT].start_tag_handler(pdoc, child);
654 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
656 if (handlers[tagINPUT].end_tag_handler)
657 handlers[tagINPUT].end_tag_handler(pdoc, child);
659 /*----------------------------------------------------------------------*/
661 /*----------------------------------------------------------------------*/
663 if (strcasecmp(name, "img") == 0) {
664 if (handlers[tagIMG].start_tag_handler)
665 handlers[tagIMG].start_tag_handler(pdoc, child);
667 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
669 if (handlers[tagIMG].end_tag_handler)
670 handlers[tagIMG].end_tag_handler(pdoc, child);
673 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
679 /*----------------------------------------------------------------------*/
681 /*----------------------------------------------------------------------*/
682 if (strcasecmp(name, "select") == 0) {
683 if (handlers[tagSELECT].start_tag_handler)
684 handlers[tagSELECT].start_tag_handler(pdoc, child);
686 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
688 if (handlers[tagSELECT].end_tag_handler)
689 handlers[tagSELECT].end_tag_handler(pdoc, child);
691 /*----------------------------------------------------------------------*/
693 /*----------------------------------------------------------------------*/
695 if (strcasecmp(name, "style") == 0) {
696 if (handlers[tagSTYLE].start_tag_handler)
697 handlers[tagSTYLE].start_tag_handler(pdoc, child);
699 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
702 if (handlers[tagSTYLE].end_tag_handler)
703 handlers[tagSTYLE].end_tag_handler(pdoc, child);
705 /*----------------------------------------------------------------------*/
707 /*----------------------------------------------------------------------*/
709 if (strcasecmp(name, "span") == 0) {
710 if (handlers[tagSPAN].start_tag_handler)
711 handlers[tagSPAN].start_tag_handler(pdoc, child);
713 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
715 if (handlers[tagSPAN].end_tag_handler)
716 handlers[tagSPAN].end_tag_handler(pdoc, child);
718 /*----------------------------------------------------------------------*/
720 /*----------------------------------------------------------------------*/
722 if (strcasecmp(name, "small") == 0) {
723 if (handlers[tagSMALL].start_tag_handler)
724 handlers[tagSMALL].start_tag_handler(pdoc, child);
726 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
728 if (handlers[tagSMALL].end_tag_handler)
729 handlers[tagSMALL].end_tag_handler(pdoc, child);
731 /*----------------------------------------------------------------------*/
733 /*----------------------------------------------------------------------*/
735 if (strcasecmp(name, "script") == 0) {
736 /* ignore script block */
739 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
745 /*----------------------------------------------------------------------*/
747 /*----------------------------------------------------------------------*/
748 if (strcasecmp(name, "div") == 0) {
749 if (handlers[tagDIV].start_tag_handler)
750 handlers[tagDIV].start_tag_handler(pdoc, child);
752 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
754 if (handlers[tagDIV].end_tag_handler)
755 handlers[tagDIV].end_tag_handler(pdoc, child);
757 /*----------------------------------------------------------------------*/
759 /*----------------------------------------------------------------------*/
760 else if (strcasecmp(name, "dir") == 0) {
761 if (handlers[tagDIR].start_tag_handler)
762 handlers[tagDIR].start_tag_handler(pdoc, child);
764 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
766 if (handlers[tagDIR].end_tag_handler)
767 handlers[tagDIR].end_tag_handler(pdoc, child);
769 /*----------------------------------------------------------------------*/
771 /*----------------------------------------------------------------------*/
772 else if (strcasecmp(name, "dl") == 0) {
773 if (handlers[tagDL].start_tag_handler)
774 handlers[tagDL].start_tag_handler(pdoc, child);
776 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
778 if (handlers[tagDL].end_tag_handler)
779 handlers[tagDL].end_tag_handler(pdoc, child);
781 /*----------------------------------------------------------------------*/
783 /*----------------------------------------------------------------------*/
784 else if (strcasecmp(name, "dt") == 0) {
785 if (handlers[tagDT].start_tag_handler)
786 handlers[tagDT].start_tag_handler(pdoc, child);
788 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
790 if (handlers[tagDT].end_tag_handler)
791 handlers[tagDT].end_tag_handler(pdoc, child);
793 /*----------------------------------------------------------------------*/
795 /*----------------------------------------------------------------------*/
796 else if (strcasecmp(name, "dd") == 0) {
797 if (handlers[tagDD].start_tag_handler)
798 handlers[tagDD].start_tag_handler(pdoc, child);
800 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
802 if (handlers[tagDD].end_tag_handler)
803 handlers[tagDD].end_tag_handler(pdoc, child);
806 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
812 /*----------------------------------------------------------------------*/
814 /*----------------------------------------------------------------------*/
815 if (strcasecmp(name, QS_PARSE_NL_MARK) == 0) {
816 if (handlers[tagNLMARK].start_tag_handler)
817 handlers[tagNLMARK].start_tag_handler(pdoc, child);
820 /*----------------------------------------------------------------------*/
822 /*----------------------------------------------------------------------*/
823 if (strcasecmp(name, "center") == 0) {
824 if (handlers[tagCENTER].start_tag_handler)
825 handlers[tagCENTER].start_tag_handler(pdoc, child);
827 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
829 if (handlers[tagCENTER].end_tag_handler)
830 handlers[tagCENTER].end_tag_handler(pdoc, child);
833 /*----------------------------------------------------------------------*/
835 /*----------------------------------------------------------------------*/
836 if (strcasecmp(name, "caption") == 0) {
837 if (handlers[tagCAPTION].start_tag_handler)
838 handlers[tagCAPTION].start_tag_handler(pdoc, child);
840 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
842 if (handlers[tagCAPTION].end_tag_handler)
843 handlers[tagCAPTION].end_tag_handler(pdoc, child);
845 /*----------------------------------------------------------------------*/
847 /*----------------------------------------------------------------------*/
849 if (strcasecmp(name, "chxj:if") == 0) {
850 if (chxj_chxjif_is_mine(spec, doc, child)) {
853 parse_attr = qs_get_parse_attr(doc, child, r->pool);
855 if (parse_attr && strcasecmp(parse_attr, "true") == 0) {
856 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
859 if (handlers[tagCHXJIF].start_tag_handler)
860 handlers[tagCHXJIF].start_tag_handler(pdoc, child);
864 /*----------------------------------------------------------------------*/
866 /*----------------------------------------------------------------------*/
868 if (strcasecmp(name, "chxj:raw") == 0) {
869 if (handlers[tagCHXJRAW].start_tag_handler) {
870 handlers[tagCHXJRAW].start_tag_handler(pdoc, child);
874 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
880 /*----------------------------------------------------------------------*/
882 /*----------------------------------------------------------------------*/
883 if (strcasecmp(name, "textarea") == 0) {
884 if (handlers[tagTEXTAREA].start_tag_handler)
885 handlers[tagTEXTAREA].start_tag_handler(pdoc, child);
887 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
889 if (handlers[tagTEXTAREA].end_tag_handler)
890 handlers[tagTEXTAREA].end_tag_handler(pdoc, child);
893 /*----------------------------------------------------------------------*/
895 /*----------------------------------------------------------------------*/
896 if (strcasecmp(name, "title") == 0) {
897 if (handlers[tagTITLE].start_tag_handler)
898 handlers[tagTITLE].start_tag_handler(pdoc, child);
900 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
902 if (handlers[tagTITLE].end_tag_handler)
903 handlers[tagTITLE].end_tag_handler(pdoc, child);
905 /*----------------------------------------------------------------------*/
907 /*----------------------------------------------------------------------*/
909 if (strcasecmp(name, "table") == 0) {
910 if (handlers[tagTABLE].start_tag_handler)
911 handlers[tagTABLE].start_tag_handler(pdoc, child);
913 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
915 if (handlers[tagTABLE].end_tag_handler)
916 handlers[tagTABLE].end_tag_handler(pdoc, child);
918 /*----------------------------------------------------------------------*/
920 /*----------------------------------------------------------------------*/
922 if (strcasecmp(name, "tbody") == 0) {
923 if (handlers[tagTBODY].start_tag_handler)
924 handlers[tagTBODY].start_tag_handler(pdoc, child);
926 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
928 if (handlers[tagTBODY].end_tag_handler)
929 handlers[tagTBODY].end_tag_handler(pdoc, child);
931 /*----------------------------------------------------------------------*/
933 /*----------------------------------------------------------------------*/
935 if (strcasecmp(name, "th") == 0) {
936 if (handlers[tagTH].start_tag_handler)
937 handlers[tagTH].start_tag_handler(pdoc, child);
939 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
941 if (handlers[tagTH].end_tag_handler)
942 handlers[tagTH].end_tag_handler(pdoc, child);
944 /*----------------------------------------------------------------------*/
946 /*----------------------------------------------------------------------*/
948 if (strcasecmp(name, "tr") == 0) {
949 if (handlers[tagTR].start_tag_handler)
950 handlers[tagTR].start_tag_handler(pdoc, child);
952 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
954 if (handlers[tagTR].end_tag_handler)
955 handlers[tagTR].end_tag_handler(pdoc, child);
957 /*----------------------------------------------------------------------*/
959 /*----------------------------------------------------------------------*/
961 if (strcasecmp(name, "td") == 0) {
962 if (handlers[tagTD].start_tag_handler)
963 handlers[tagTD].start_tag_handler(pdoc, child);
965 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
967 if (handlers[tagTD].end_tag_handler)
968 handlers[tagTD].end_tag_handler(pdoc, child);
970 /*----------------------------------------------------------------------*/
972 /*----------------------------------------------------------------------*/
974 if (strcasecmp(name, "text") == 0) {
975 if (handlers[tagTEXT].start_tag_handler)
976 handlers[tagTEXT].start_tag_handler(pdoc, child);
979 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
984 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
993 chxj_node_convert_chxjif_only(
1003 apr_size_t dst_pos = 0;
1006 memset(&doc, 0, sizeof(Doc));
1008 apr_pool_create(&doc.pool, r->pool);
1011 dst = apr_palloc(doc.pool, *len + 1);
1012 memset(dst, 0, *len + 1);
1014 for (ii =0; ii<*len; ii++) {
1015 if (src[ii + 0] == '<') {
1016 apr_size_t endpoint = chxj_cut_tag(&src[ii + 0], *len - ii);
1017 Node *node = qs_parse_tag(&doc, &src[ii], endpoint);
1018 char *name = qs_get_node_name(&doc,node);
1019 if (STRCASEEQ('c','C',"chxj:if", name)) {
1020 if (! chxj_chxjif_is_mine(spec, &doc, node)) {
1025 else if (STRCASEEQ('/','/', "/chxj:if", name)) {
1032 memcpy(&dst[dst_pos], &src[ii], endpoint + 1);
1033 dst_pos += (endpoint + 1);
1035 dst[dst_pos++] = src[ii];
1045 if (is_sjis_kanji(src[ii])) {
1046 dst[dst_pos++] = src[ii++];
1047 dst[dst_pos++] = src[ii];
1050 dst[dst_pos++] = src[ii];