2 * Copyright (C) 2005-2009 QSDN,Inc. All rights reserved.
3 * Copyright (C) 2005 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_HTML,
76 * It is main processing of conversion from CHTML to XXML.
80 * @param pdoc [i/o] The pointer to the XXML structure is specified.
81 * @param doc [i/o] The pointer to the XXML structure is specified.
82 * @param node [i] The pointer to a current node is specified.
83 * @param indent [i] The depth of the node processing it now is specified.
85 * @return The character string after it converts it is returned.
98 tag_handler *handlers;
101 handlers = chxj_tag_handlers[spec->html_spec_type].handler;
103 /*--------------------------------------------------------------------------*/
104 /* It is the main loop of the conversion processing. */
105 /*--------------------------------------------------------------------------*/
106 for (child = qs_get_child_node(doc,node);
108 child = qs_get_next_node(doc,child)) {
109 char *name = qs_get_node_name(doc,child);
113 /*----------------------------------------------------------------------*/
115 /*----------------------------------------------------------------------*/
116 if (strcasecmp(name, "html") == 0) {
117 if (handlers[tagHTML].start_tag_handler)
118 handlers[tagHTML].start_tag_handler(pdoc, child);
120 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
122 if (handlers[tagHTML].end_tag_handler)
123 handlers[tagHTML].end_tag_handler(pdoc, child);
125 /*----------------------------------------------------------------------*/
127 /*----------------------------------------------------------------------*/
129 if (strcasecmp(name, "head") == 0) {
130 if (handlers[tagHEAD].start_tag_handler)
131 handlers[tagHEAD].start_tag_handler(pdoc, child);
133 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
135 if (handlers[tagHEAD].end_tag_handler)
136 handlers[tagHEAD].end_tag_handler(pdoc, child);
138 /*----------------------------------------------------------------------*/
140 /*----------------------------------------------------------------------*/
142 if (strcasecmp(name, "hr") == 0) {
143 if (handlers[tagHR].start_tag_handler)
144 handlers[tagHR].start_tag_handler(pdoc, child);
146 if (handlers[tagHR].end_tag_handler)
147 handlers[tagHR].end_tag_handler(pdoc, child);
149 /*----------------------------------------------------------------------*/
151 /*----------------------------------------------------------------------*/
153 if (strcasecmp(name, "h1") == 0) {
154 if (handlers[tagH1].start_tag_handler)
155 handlers[tagH1].start_tag_handler(pdoc, child);
157 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
159 if (handlers[tagH1].end_tag_handler)
160 handlers[tagH1].end_tag_handler(pdoc, child);
162 /*----------------------------------------------------------------------*/
164 /*----------------------------------------------------------------------*/
166 if (strcasecmp(name, "h2") == 0) {
167 if (handlers[tagH2].start_tag_handler)
168 handlers[tagH2].start_tag_handler(pdoc, child);
170 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
172 if (handlers[tagH2].end_tag_handler)
173 handlers[tagH2].end_tag_handler(pdoc, child);
175 /*----------------------------------------------------------------------*/
177 /*----------------------------------------------------------------------*/
179 if (strcasecmp(name, "h3") == 0) {
180 if (handlers[tagH3].start_tag_handler)
181 handlers[tagH3].start_tag_handler(pdoc, child);
183 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
185 if (handlers[tagH3].end_tag_handler)
186 handlers[tagH3].end_tag_handler(pdoc, child);
188 /*----------------------------------------------------------------------*/
190 /*----------------------------------------------------------------------*/
192 if (strcasecmp(name, "h4") == 0) {
193 if (handlers[tagH4].start_tag_handler)
194 handlers[tagH4].start_tag_handler(pdoc, child);
196 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
198 if (handlers[tagH4].end_tag_handler)
199 handlers[tagH4].end_tag_handler(pdoc, child);
201 /*----------------------------------------------------------------------*/
203 /*----------------------------------------------------------------------*/
205 if (strcasecmp(name, "h5") == 0) {
206 if (handlers[tagH5].start_tag_handler)
207 handlers[tagH5].start_tag_handler(pdoc, child);
209 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
211 if (handlers[tagH5].end_tag_handler)
212 handlers[tagH5].end_tag_handler(pdoc, child);
214 /*----------------------------------------------------------------------*/
216 /*----------------------------------------------------------------------*/
218 if (strcasecmp(name, "h6") == 0) {
219 if (handlers[tagH6].start_tag_handler)
220 handlers[tagH6].start_tag_handler(pdoc, child);
222 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
224 if (handlers[tagH6].end_tag_handler)
225 handlers[tagH6].end_tag_handler(pdoc, child);
228 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
235 /*----------------------------------------------------------------------*/
237 /*----------------------------------------------------------------------*/
238 if (strcasecmp(name, "p") == 0) {
239 if (handlers[tagP].start_tag_handler)
240 handlers[tagP].start_tag_handler(pdoc, child);
242 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
244 if (handlers[tagP].end_tag_handler)
245 handlers[tagP].end_tag_handler(pdoc, child);
247 /*----------------------------------------------------------------------*/
249 /*----------------------------------------------------------------------*/
250 else if (strcasecmp(name, "pre") == 0) {
251 if (handlers[tagPRE].start_tag_handler)
252 handlers[tagPRE].start_tag_handler(pdoc, child);
254 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
256 if (handlers[tagPRE].end_tag_handler)
257 handlers[tagPRE].end_tag_handler(pdoc, child);
259 /*----------------------------------------------------------------------*/
261 /*----------------------------------------------------------------------*/
262 else if (strcasecmp(name, "plaintext") == 0) {
263 if (handlers[tagPLAINTEXT].start_tag_handler)
264 handlers[tagPLAINTEXT].start_tag_handler(pdoc, child);
266 if (handlers[tagPLAINTEXT].end_tag_handler)
267 handlers[tagPLAINTEXT].end_tag_handler(pdoc, child);
269 /*----------------------------------------------------------------------*/
271 /*----------------------------------------------------------------------*/
272 else if (strcasecmp(name, "param") == 0) {
273 if (handlers[tagPARAM].start_tag_handler)
274 handlers[tagPARAM].start_tag_handler(pdoc, child);
276 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
278 if (handlers[tagPARAM].end_tag_handler)
279 handlers[tagPARAM].end_tag_handler(pdoc, child);
282 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
288 /*----------------------------------------------------------------------*/
290 /*----------------------------------------------------------------------*/
291 if (strcasecmp(name, "nobr") == 0) {
292 if (handlers[tagNOBR].start_tag_handler)
293 handlers[tagNOBR].start_tag_handler(pdoc, child);
295 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
297 if (handlers[tagNOBR].end_tag_handler)
298 handlers[tagNOBR].end_tag_handler(pdoc, child);
301 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
307 /*----------------------------------------------------------------------*/
309 /*----------------------------------------------------------------------*/
310 if (strcasecmp(name, "ul") == 0) {
311 if (handlers[tagUL].start_tag_handler)
312 handlers[tagUL].start_tag_handler(pdoc, child);
314 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
316 if (handlers[tagUL].end_tag_handler)
317 handlers[tagUL].end_tag_handler(pdoc, child);
320 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
326 /*----------------------------------------------------------------------*/
328 /*----------------------------------------------------------------------*/
329 if (strcasecmp(name, "li") == 0) {
330 if (handlers[tagLI].start_tag_handler)
331 handlers[tagLI].start_tag_handler(pdoc, child);
333 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
335 if (handlers[tagLI].end_tag_handler)
336 handlers[tagLI].end_tag_handler(pdoc, child);
339 /*----------------------------------------------------------------------*/
341 /*----------------------------------------------------------------------*/
342 if (strcasecmp(name, "legend") == 0) {
343 if (handlers[tagLEGEND].start_tag_handler)
344 handlers[tagLEGEND].start_tag_handler(pdoc, child);
346 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
348 if (handlers[tagLEGEND].end_tag_handler)
349 handlers[tagLEGEND].end_tag_handler(pdoc, child);
352 /*----------------------------------------------------------------------*/
354 /*----------------------------------------------------------------------*/
355 if (strcasecmp(name, "label") == 0) {
356 if (handlers[tagLABEL].start_tag_handler)
357 handlers[tagLABEL].start_tag_handler(pdoc, child);
359 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
361 if (handlers[tagLABEL].end_tag_handler)
362 handlers[tagLABEL].end_tag_handler(pdoc, child);
365 /*----------------------------------------------------------------------*/
367 /*----------------------------------------------------------------------*/
368 if (strcasecmp(name, "link") == 0) {
369 if (handlers[tagLINK].start_tag_handler)
370 handlers[tagLINK].start_tag_handler(pdoc, child);
372 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
374 if (handlers[tagLINK].end_tag_handler)
375 handlers[tagLINK].end_tag_handler(pdoc, child);
378 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
385 /*----------------------------------------------------------------------*/
387 /*----------------------------------------------------------------------*/
388 if (strcasecmp(name, "ol") == 0) {
389 if (handlers[tagOL].start_tag_handler)
390 handlers[tagOL].start_tag_handler(pdoc, child);
392 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
394 if (handlers[tagOL].end_tag_handler)
395 handlers[tagOL].end_tag_handler(pdoc, child);
398 /*----------------------------------------------------------------------*/
400 /*----------------------------------------------------------------------*/
401 if (strcasecmp(name, "option") == 0) {
402 if (handlers[tagOPTION].start_tag_handler)
403 handlers[tagOPTION].start_tag_handler(pdoc, child);
405 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
407 if (handlers[tagOPTION].end_tag_handler)
408 handlers[tagOPTION].end_tag_handler(pdoc, child);
411 /*----------------------------------------------------------------------*/
413 /*----------------------------------------------------------------------*/
414 if (strcasecmp(name, "object") == 0) {
415 if (handlers[tagOBJECT].start_tag_handler)
416 handlers[tagOBJECT].start_tag_handler(pdoc, child);
418 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
420 if (handlers[tagOBJECT].end_tag_handler)
421 handlers[tagOBJECT].end_tag_handler(pdoc, child);
424 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
431 /*----------------------------------------------------------------------*/
433 /*----------------------------------------------------------------------*/
434 if (strcasecmp(name, "meta") == 0) {
435 if (handlers[tagMETA].start_tag_handler)
436 handlers[tagMETA].start_tag_handler(pdoc, child);
438 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
440 if (handlers[tagMETA].end_tag_handler)
441 handlers[tagMETA].end_tag_handler(pdoc, child);
443 /*----------------------------------------------------------------------*/
445 /*----------------------------------------------------------------------*/
446 else if (strcasecmp(name, "menu") == 0) {
447 if (handlers[tagMENU].start_tag_handler)
448 handlers[tagMENU].start_tag_handler(pdoc, child);
450 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
452 if (handlers[tagMENU].end_tag_handler)
453 handlers[tagMENU].end_tag_handler(pdoc, child);
455 /*----------------------------------------------------------------------*/
457 /*----------------------------------------------------------------------*/
458 else if (strcasecmp(name, "marquee") == 0) {
459 if (handlers[tagMARQUEE].start_tag_handler)
460 handlers[tagMARQUEE].start_tag_handler(pdoc, child);
462 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
464 if (handlers[tagMARQUEE].end_tag_handler)
465 handlers[tagMARQUEE].end_tag_handler(pdoc, child);
468 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
474 /*----------------------------------------------------------------------*/
476 /*----------------------------------------------------------------------*/
477 if (strlen(name) == 1) {
478 if (handlers[tagB].start_tag_handler)
479 handlers[tagB].start_tag_handler(pdoc, child);
481 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
483 if (handlers[tagB].end_tag_handler)
484 handlers[tagB].end_tag_handler(pdoc, child);
487 /*----------------------------------------------------------------------*/
489 /*----------------------------------------------------------------------*/
490 if (strcasecmp(name, "base") == 0) {
491 if (handlers[tagBASE].start_tag_handler)
492 handlers[tagBASE].start_tag_handler(pdoc, child);
494 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
496 if (handlers[tagBASE].end_tag_handler)
497 handlers[tagBASE].end_tag_handler(pdoc, child);
499 /*----------------------------------------------------------------------*/
501 /*----------------------------------------------------------------------*/
503 if (strcasecmp(name, "body") == 0) {
504 if (handlers[tagBODY].start_tag_handler)
505 handlers[tagBODY].start_tag_handler(pdoc, child);
507 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
509 if (handlers[tagBODY].end_tag_handler)
510 handlers[tagBODY].end_tag_handler(pdoc, child);
512 /*----------------------------------------------------------------------*/
514 /*----------------------------------------------------------------------*/
515 else if (strcasecmp(name, "br") == 0) {
516 if (handlers[tagBR].start_tag_handler)
517 handlers[tagBR].start_tag_handler(pdoc, child);
519 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
521 if (handlers[tagBR].end_tag_handler)
522 handlers[tagBR].end_tag_handler(pdoc, child);
524 /*----------------------------------------------------------------------*/
526 /*----------------------------------------------------------------------*/
527 else if (strcasecmp(name, "blockquote") == 0) {
528 if (handlers[tagBLOCKQUOTE].start_tag_handler)
529 handlers[tagBLOCKQUOTE].start_tag_handler(pdoc, child);
531 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
533 if (handlers[tagBLOCKQUOTE].end_tag_handler)
534 handlers[tagBLOCKQUOTE].end_tag_handler(pdoc, child);
536 /*----------------------------------------------------------------------*/
538 /*----------------------------------------------------------------------*/
539 else if (strcasecmp(name, "blink") == 0) {
540 if (handlers[tagBLINK].start_tag_handler)
541 handlers[tagBLINK].start_tag_handler(pdoc, child);
543 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
545 if (handlers[tagBLINK].end_tag_handler)
546 handlers[tagBLINK].end_tag_handler(pdoc, child);
549 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
555 /*----------------------------------------------------------------------*/
557 /*----------------------------------------------------------------------*/
558 if (strcasecmp(name, "a") == 0) {
559 if (handlers[tagA].start_tag_handler)
560 handlers[tagA].start_tag_handler(pdoc, child);
562 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
564 if (handlers[tagA].end_tag_handler)
565 handlers[tagA].end_tag_handler(pdoc, child);
568 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
574 /*----------------------------------------------------------------------*/
576 /*----------------------------------------------------------------------*/
577 if (strcasecmp(name, "font") == 0) {
578 if (handlers[tagFONT].start_tag_handler)
579 handlers[tagFONT].start_tag_handler(pdoc, child);
581 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
583 if (handlers[tagFONT].end_tag_handler)
584 handlers[tagFONT].end_tag_handler(pdoc, child);
586 /*----------------------------------------------------------------------*/
588 /*----------------------------------------------------------------------*/
590 if (strcasecmp(name, "form") == 0) {
591 if (handlers[tagFORM].start_tag_handler)
592 handlers[tagFORM].start_tag_handler(pdoc, child);
594 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
596 if (handlers[tagFORM].end_tag_handler)
597 handlers[tagFORM].end_tag_handler(pdoc, child);
599 /*----------------------------------------------------------------------*/
601 /*----------------------------------------------------------------------*/
603 if (strcasecmp(name, "fieldset") == 0) {
604 if (handlers[tagFIELDSET].start_tag_handler)
605 handlers[tagFIELDSET].start_tag_handler(pdoc, child);
607 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
609 if (handlers[tagFIELDSET].end_tag_handler)
610 handlers[tagFIELDSET].end_tag_handler(pdoc, child);
613 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
619 /*----------------------------------------------------------------------*/
621 /*----------------------------------------------------------------------*/
622 if (strcasecmp(name, "input") == 0) {
623 if (handlers[tagINPUT].start_tag_handler)
624 handlers[tagINPUT].start_tag_handler(pdoc, child);
626 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
628 if (handlers[tagINPUT].end_tag_handler)
629 handlers[tagINPUT].end_tag_handler(pdoc, child);
631 /*----------------------------------------------------------------------*/
633 /*----------------------------------------------------------------------*/
635 if (strcasecmp(name, "img") == 0) {
636 if (handlers[tagIMG].start_tag_handler)
637 handlers[tagIMG].start_tag_handler(pdoc, child);
639 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
641 if (handlers[tagIMG].end_tag_handler)
642 handlers[tagIMG].end_tag_handler(pdoc, child);
645 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
651 /*----------------------------------------------------------------------*/
653 /*----------------------------------------------------------------------*/
654 if (strcasecmp(name, "select") == 0) {
655 if (handlers[tagSELECT].start_tag_handler)
656 handlers[tagSELECT].start_tag_handler(pdoc, child);
658 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
660 if (handlers[tagSELECT].end_tag_handler)
661 handlers[tagSELECT].end_tag_handler(pdoc, child);
663 /*----------------------------------------------------------------------*/
665 /*----------------------------------------------------------------------*/
667 if (strcasecmp(name, "style") == 0) {
668 if (handlers[tagSTYLE].start_tag_handler)
669 handlers[tagSTYLE].start_tag_handler(pdoc, child);
671 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
674 if (handlers[tagSTYLE].end_tag_handler)
675 handlers[tagSTYLE].end_tag_handler(pdoc, child);
677 /*----------------------------------------------------------------------*/
679 /*----------------------------------------------------------------------*/
681 if (strcasecmp(name, "span") == 0) {
682 if (handlers[tagSPAN].start_tag_handler)
683 handlers[tagSPAN].start_tag_handler(pdoc, child);
685 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
687 if (handlers[tagSPAN].end_tag_handler)
688 handlers[tagSPAN].end_tag_handler(pdoc, child);
690 /*----------------------------------------------------------------------*/
692 /*----------------------------------------------------------------------*/
694 if (strcasecmp(name, "small") == 0) {
695 if (handlers[tagSMALL].start_tag_handler)
696 handlers[tagSMALL].start_tag_handler(pdoc, child);
698 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
700 if (handlers[tagSMALL].end_tag_handler)
701 handlers[tagSMALL].end_tag_handler(pdoc, child);
703 /*----------------------------------------------------------------------*/
705 /*----------------------------------------------------------------------*/
707 if (strcasecmp(name, "script") == 0) {
708 /* ignore script block */
711 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
717 /*----------------------------------------------------------------------*/
719 /*----------------------------------------------------------------------*/
720 if (strcasecmp(name, "div") == 0) {
721 if (handlers[tagDIV].start_tag_handler)
722 handlers[tagDIV].start_tag_handler(pdoc, child);
724 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
726 if (handlers[tagDIV].end_tag_handler)
727 handlers[tagDIV].end_tag_handler(pdoc, child);
729 /*----------------------------------------------------------------------*/
731 /*----------------------------------------------------------------------*/
732 else if (strcasecmp(name, "dir") == 0) {
733 if (handlers[tagDIR].start_tag_handler)
734 handlers[tagDIR].start_tag_handler(pdoc, child);
736 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
738 if (handlers[tagDIR].end_tag_handler)
739 handlers[tagDIR].end_tag_handler(pdoc, child);
741 /*----------------------------------------------------------------------*/
743 /*----------------------------------------------------------------------*/
744 else if (strcasecmp(name, "dl") == 0) {
745 if (handlers[tagDL].start_tag_handler)
746 handlers[tagDL].start_tag_handler(pdoc, child);
748 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
750 if (handlers[tagDL].end_tag_handler)
751 handlers[tagDL].end_tag_handler(pdoc, child);
753 /*----------------------------------------------------------------------*/
755 /*----------------------------------------------------------------------*/
756 else if (strcasecmp(name, "dt") == 0) {
757 if (handlers[tagDT].start_tag_handler)
758 handlers[tagDT].start_tag_handler(pdoc, child);
760 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
762 if (handlers[tagDT].end_tag_handler)
763 handlers[tagDT].end_tag_handler(pdoc, child);
765 /*----------------------------------------------------------------------*/
767 /*----------------------------------------------------------------------*/
768 else if (strcasecmp(name, "dd") == 0) {
769 if (handlers[tagDD].start_tag_handler)
770 handlers[tagDD].start_tag_handler(pdoc, child);
772 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
774 if (handlers[tagDD].end_tag_handler)
775 handlers[tagDD].end_tag_handler(pdoc, child);
778 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
784 /*----------------------------------------------------------------------*/
786 /*----------------------------------------------------------------------*/
787 if (strcasecmp(name, QS_PARSE_NL_MARK) == 0) {
788 if (handlers[tagNLMARK].start_tag_handler)
789 handlers[tagNLMARK].start_tag_handler(pdoc, child);
792 /*----------------------------------------------------------------------*/
794 /*----------------------------------------------------------------------*/
795 if (strcasecmp(name, "center") == 0) {
796 if (handlers[tagCENTER].start_tag_handler)
797 handlers[tagCENTER].start_tag_handler(pdoc, child);
799 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
801 if (handlers[tagCENTER].end_tag_handler)
802 handlers[tagCENTER].end_tag_handler(pdoc, child);
805 /*----------------------------------------------------------------------*/
807 /*----------------------------------------------------------------------*/
808 if (strcasecmp(name, "caption") == 0) {
809 if (handlers[tagCAPTION].start_tag_handler)
810 handlers[tagCAPTION].start_tag_handler(pdoc, child);
812 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
814 if (handlers[tagCAPTION].end_tag_handler)
815 handlers[tagCAPTION].end_tag_handler(pdoc, child);
817 /*----------------------------------------------------------------------*/
819 /*----------------------------------------------------------------------*/
821 if (strcasecmp(name, "chxj:if") == 0) {
822 if (chxj_chxjif_is_mine(spec, doc, child)) {
825 parse_attr = qs_get_parse_attr(doc, child, r->pool);
827 if (parse_attr && strcasecmp(parse_attr, "true") == 0) {
828 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
831 if (handlers[tagCHXJIF].start_tag_handler)
832 handlers[tagCHXJIF].start_tag_handler(pdoc, child);
836 /*----------------------------------------------------------------------*/
838 /*----------------------------------------------------------------------*/
840 if (strcasecmp(name, "chxj:raw") == 0) {
841 if (handlers[tagCHXJRAW].start_tag_handler) {
842 handlers[tagCHXJRAW].start_tag_handler(pdoc, child);
846 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
852 /*----------------------------------------------------------------------*/
854 /*----------------------------------------------------------------------*/
855 if (strcasecmp(name, "textarea") == 0) {
856 if (handlers[tagTEXTAREA].start_tag_handler)
857 handlers[tagTEXTAREA].start_tag_handler(pdoc, child);
859 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
861 if (handlers[tagTEXTAREA].end_tag_handler)
862 handlers[tagTEXTAREA].end_tag_handler(pdoc, child);
865 /*----------------------------------------------------------------------*/
867 /*----------------------------------------------------------------------*/
868 if (strcasecmp(name, "title") == 0) {
869 if (handlers[tagTITLE].start_tag_handler)
870 handlers[tagTITLE].start_tag_handler(pdoc, child);
872 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
874 if (handlers[tagTITLE].end_tag_handler)
875 handlers[tagTITLE].end_tag_handler(pdoc, child);
877 /*----------------------------------------------------------------------*/
879 /*----------------------------------------------------------------------*/
881 if (strcasecmp(name, "table") == 0) {
882 if (handlers[tagTABLE].start_tag_handler)
883 handlers[tagTABLE].start_tag_handler(pdoc, child);
885 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
887 if (handlers[tagTABLE].end_tag_handler)
888 handlers[tagTABLE].end_tag_handler(pdoc, child);
890 /*----------------------------------------------------------------------*/
892 /*----------------------------------------------------------------------*/
894 if (strcasecmp(name, "tbody") == 0) {
895 if (handlers[tagTBODY].start_tag_handler)
896 handlers[tagTBODY].start_tag_handler(pdoc, child);
898 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
900 if (handlers[tagTBODY].end_tag_handler)
901 handlers[tagTBODY].end_tag_handler(pdoc, child);
903 /*----------------------------------------------------------------------*/
905 /*----------------------------------------------------------------------*/
907 if (strcasecmp(name, "th") == 0) {
908 if (handlers[tagTH].start_tag_handler)
909 handlers[tagTH].start_tag_handler(pdoc, child);
911 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
913 if (handlers[tagTH].end_tag_handler)
914 handlers[tagTH].end_tag_handler(pdoc, child);
916 /*----------------------------------------------------------------------*/
918 /*----------------------------------------------------------------------*/
920 if (strcasecmp(name, "tr") == 0) {
921 if (handlers[tagTR].start_tag_handler)
922 handlers[tagTR].start_tag_handler(pdoc, child);
924 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
926 if (handlers[tagTR].end_tag_handler)
927 handlers[tagTR].end_tag_handler(pdoc, child);
929 /*----------------------------------------------------------------------*/
931 /*----------------------------------------------------------------------*/
933 if (strcasecmp(name, "td") == 0) {
934 if (handlers[tagTD].start_tag_handler)
935 handlers[tagTD].start_tag_handler(pdoc, child);
937 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
939 if (handlers[tagTD].end_tag_handler)
940 handlers[tagTD].end_tag_handler(pdoc, child);
942 /*----------------------------------------------------------------------*/
944 /*----------------------------------------------------------------------*/
946 if (strcasecmp(name, "text") == 0) {
947 if (handlers[tagTEXT].start_tag_handler)
948 handlers[tagTEXT].start_tag_handler(pdoc, child);
951 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
956 chxj_node_convert(spec, r, pdoc, doc, child, indent+1);
965 chxj_node_convert_chxjif_only(
975 apr_size_t dst_pos = 0;
978 memset(&doc, 0, sizeof(Doc));
980 apr_pool_create(&doc.pool, r->pool);
983 dst = apr_palloc(doc.pool, *len + 1);
984 memset(dst, 0, *len + 1);
986 for (ii =0; ii<*len; ii++) {
987 if (src[ii + 0] == '<') {
988 apr_size_t endpoint = chxj_cut_tag(&src[ii + 0], *len - ii);
989 Node *node = qs_parse_tag(&doc, &src[ii], endpoint);
990 char *name = qs_get_node_name(&doc,node);
991 if (STRCASEEQ('c','C',"chxj:if", name)) {
992 if (! chxj_chxjif_is_mine(spec, &doc, node)) {
997 else if (STRCASEEQ('/','/', "/chxj:if", name)) {
1004 memcpy(&dst[dst_pos], &src[ii], endpoint + 1);
1005 dst_pos += (endpoint + 1);
1007 dst[dst_pos++] = src[ii];
1017 if (is_sjis_kanji(src[ii])) {
1018 dst[dst_pos++] = src[ii++];
1019 dst[dst_pos++] = src[ii];
1022 dst[dst_pos++] = src[ii];