00001
00024 #include "html/dtd.h"
00025 #include "misc/htmlhashes.h"
00026
00027 using namespace DOM;
00028
00029 #include <kdebug.h>
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 const unsigned short DOM::tagPriority[] = {
00048 0,
00049 5,
00050 1,
00051 1,
00052 3,
00053 1,
00054 0,
00055 1,
00056 0,
00057 0,
00058 1,
00059 1,
00060 5,
00061 10,
00062 0,
00063 1,
00064 5,
00065 5,
00066 1,
00067 1,
00068 0,
00069 1,
00070 3,
00071 1,
00072 1,
00073 5,
00074 4,
00075 4,
00076 3,
00077 1,
00078 0,
00079 3,
00080 5,
00081 3,
00082 0,
00083 10,
00084 5,
00085 5,
00086 5,
00087 5,
00088 5,
00089 5,
00090 10,
00091 0,
00092 11,
00093 1,
00094 1,
00095 0,
00096 0,
00097 1,
00098 0,
00099 1,
00100 0,
00101 5,
00102 1,
00103 1,
00104 1,
00105 3,
00106 0,
00107 1,
00108 3,
00109 5,
00110 0,
00111 1,
00112 10,
00113 10,
00114 3,
00115 1,
00116 5,
00117 5,
00118 1,
00119 2,
00120 3,
00121 0,
00122 5,
00123 5,
00124 1,
00125 1,
00126 1,
00127 1,
00128 6,
00129 1,
00130 1,
00131 1,
00132 1,
00133 1,
00134 1,
00135 1,
00136 9,
00137 8,
00138 6,
00139 1,
00140 8,
00141 6,
00142 8,
00143 1,
00144 7,
00145 1,
00146 1,
00147 5,
00148 1,
00149 1,
00150 5,
00151 0,
00152 };
00153
00154 const tagStatus DOM::endTag[] = {
00155 REQUIRED,
00156 REQUIRED,
00157 REQUIRED,
00158 REQUIRED,
00159 REQUIRED,
00160 REQUIRED,
00161 FORBIDDEN,
00162 REQUIRED,
00163 FORBIDDEN,
00164 FORBIDDEN,
00165 REQUIRED,
00166 REQUIRED,
00167 REQUIRED,
00168 REQUIRED,
00169 FORBIDDEN,
00170 REQUIRED,
00171 REQUIRED,
00172 REQUIRED,
00173 REQUIRED,
00174 REQUIRED,
00175 FORBIDDEN,
00176 OPTIONAL,
00177 OPTIONAL,
00178 REQUIRED,
00179 REQUIRED,
00180 REQUIRED,
00181 REQUIRED,
00182 REQUIRED,
00183 OPTIONAL,
00184 REQUIRED,
00185 REQUIRED,
00186 REQUIRED,
00187 REQUIRED,
00188 REQUIRED,
00189 FORBIDDEN,
00190 REQUIRED,
00191 REQUIRED,
00192 REQUIRED,
00193 REQUIRED,
00194 REQUIRED,
00195 REQUIRED,
00196 REQUIRED,
00197 OPTIONAL,
00198 FORBIDDEN,
00199 REQUIRED,
00200 REQUIRED,
00201 REQUIRED,
00202 FORBIDDEN,
00203 FORBIDDEN,
00204 REQUIRED,
00205 FORBIDDEN,
00206 REQUIRED,
00207 REQUIRED,
00208 REQUIRED,
00209 REQUIRED,
00210 REQUIRED,
00211 REQUIRED,
00212 OPTIONAL,
00213 FORBIDDEN,
00214 REQUIRED,
00215 REQUIRED,
00216 REQUIRED,
00217 FORBIDDEN,
00218 REQUIRED,
00219 REQUIRED,
00220 REQUIRED,
00221 REQUIRED,
00222 REQUIRED,
00223 REQUIRED,
00224 REQUIRED,
00225 REQUIRED,
00226 OPTIONAL,
00227 OPTIONAL,
00228 FORBIDDEN,
00229 REQUIRED,
00230 REQUIRED,
00231 REQUIRED,
00232 REQUIRED,
00233 REQUIRED,
00234 REQUIRED,
00235 REQUIRED,
00236 REQUIRED,
00237 REQUIRED,
00238 REQUIRED,
00239 REQUIRED,
00240 REQUIRED,
00241 REQUIRED,
00242 REQUIRED,
00243 REQUIRED,
00244 OPTIONAL,
00245 OPTIONAL,
00246 REQUIRED,
00247 OPTIONAL,
00248 OPTIONAL,
00249 OPTIONAL,
00250 REQUIRED,
00251 OPTIONAL,
00252 REQUIRED,
00253 REQUIRED,
00254 REQUIRED,
00255 REQUIRED,
00256 REQUIRED,
00257 REQUIRED,
00258 REQUIRED
00259 };
00260
00261
00262 static const ushort tag_list_0[] = {
00263 ID_TEXT,
00264 ID_TT,
00265 ID_I,
00266 ID_B,
00267 ID_U,
00268 ID_S,
00269 ID_STRIKE,
00270 ID_BIG,
00271 ID_SMALL,
00272 ID_EM,
00273 ID_STRONG,
00274 ID_DFN,
00275 ID_CODE,
00276 ID_SAMP,
00277 ID_KBD,
00278 ID_VAR,
00279 ID_CITE,
00280 ID_ABBR,
00281 ID_ACRONYM,
00282 ID_A,
00283 ID_IMG,
00284 ID_APPLET,
00285 ID_OBJECT,
00286 ID_EMBED,
00287 ID_FONT,
00288 ID_BASEFONT,
00289 ID_BR,
00290 ID_SCRIPT,
00291 ID_MAP,
00292 ID_Q,
00293 ID_SUB,
00294 ID_SUP,
00295 ID_SPAN,
00296 ID_BDO,
00297 ID_IFRAME,
00298 ID_INPUT,
00299 ID_SELECT,
00300 ID_TEXTAREA,
00301 ID_LABEL,
00302 ID_BUTTON,
00303 ID_INS,
00304 ID_DEL,
00305 ID_COMMENT,
00306 ID_NOBR,
00307 ID_WBR,
00308 0
00309 };
00310
00311 static const ushort tag_list_1[] = {
00312 ID_P,
00313 ID_H1,
00314 ID_H2,
00315 ID_H3,
00316 ID_H4,
00317 ID_H5,
00318 ID_H6,
00319 ID_UL,
00320 ID_OL,
00321 ID_DIR,
00322 ID_MENU,
00323 ID_PRE,
00324 ID_PLAINTEXT,
00325 ID_DL,
00326 ID_DIV,
00327 ID_LAYER,
00328 ID_CENTER,
00329 ID_NOSCRIPT,
00330 ID_NOFRAMES,
00331 ID_BLOCKQUOTE,
00332 ID_FORM,
00333 ID_ISINDEX,
00334 ID_HR,
00335 ID_TABLE,
00336 ID_FIELDSET,
00337 ID_ADDRESS,
00338 ID_TEXT,
00339 ID_TT,
00340 ID_I,
00341 ID_B,
00342 ID_U,
00343 ID_S,
00344 ID_STRIKE,
00345 ID_BIG,
00346 ID_SMALL,
00347 ID_EM,
00348 ID_STRONG,
00349 ID_DFN,
00350 ID_CODE,
00351 ID_SAMP,
00352 ID_KBD,
00353 ID_VAR,
00354 ID_CITE,
00355 ID_ABBR,
00356 ID_ACRONYM,
00357 ID_A,
00358 ID_IMG,
00359 ID_APPLET,
00360 ID_OBJECT,
00361 ID_EMBED,
00362 ID_FONT,
00363 ID_BASEFONT,
00364 ID_BR,
00365 ID_SCRIPT,
00366 ID_MAP,
00367 ID_Q,
00368 ID_SUB,
00369 ID_SUP,
00370 ID_SPAN,
00371 ID_BDO,
00372 ID_IFRAME,
00373 ID_INPUT,
00374 ID_KEYGEN,
00375 ID_SELECT,
00376 ID_TEXTAREA,
00377 ID_LABEL,
00378 ID_BUTTON,
00379 ID_COMMENT,
00380 ID_LI,
00381 ID_XMP,
00382 ID__KONQBLOCK,
00383 ID_INS,
00384 ID_DEL,
00385 ID_NOBR,
00386 ID_WBR,
00387 ID_MARQUEE,
00388 0
00389 };
00390
00391 static const ushort tag_list_2[] = {
00392 ID_COMMENT,
00393 0
00394 };
00395
00396 static const ushort tag_list_3[] = {
00397 ID_P,
00398 ID_H1,
00399 ID_H2,
00400 ID_H3,
00401 ID_H4,
00402 ID_H5,
00403 ID_H6,
00404 ID_UL,
00405 ID_OL,
00406 ID_DIR,
00407 ID_MENU,
00408 ID_PRE,
00409 ID_PLAINTEXT,
00410 ID_DL,
00411 ID_DIV,
00412 ID_LAYER,
00413 ID_CENTER,
00414 ID_NOSCRIPT,
00415 ID_NOFRAMES,
00416 ID_BLOCKQUOTE,
00417 ID_FORM,
00418 ID_ISINDEX,
00419 ID_HR,
00420 ID_TABLE,
00421 ID_FIELDSET,
00422 ID_ADDRESS,
00423 ID_COMMENT,
00424 ID_LI,
00425 ID_XMP,
00426 ID__KONQBLOCK,
00427 ID_MARQUEE,
00428 0
00429 };
00430
00431 static const ushort tag_list_4[] = {
00432 ID_PARAM,
00433 ID_P,
00434 ID_H1,
00435 ID_H2,
00436 ID_H3,
00437 ID_H4,
00438 ID_H5,
00439 ID_H6,
00440 ID_UL,
00441 ID_OL,
00442 ID_DIR,
00443 ID_MENU,
00444 ID_PRE,
00445 ID_PLAINTEXT,
00446 ID_DL,
00447 ID_DIV,
00448 ID_LAYER,
00449 ID_CENTER,
00450 ID_NOSCRIPT,
00451 ID_NOFRAMES,
00452 ID_BLOCKQUOTE,
00453 ID_FORM,
00454 ID_ISINDEX,
00455 ID_HR,
00456 ID_TABLE,
00457 ID_FIELDSET,
00458 ID_ADDRESS,
00459 ID_TEXT,
00460 ID_TT,
00461 ID_I,
00462 ID_B,
00463 ID_U,
00464 ID_S,
00465 ID_STRIKE,
00466 ID_BIG,
00467 ID_SMALL,
00468 ID_EM,
00469 ID_STRONG,
00470 ID_DFN,
00471 ID_CODE,
00472 ID_SAMP,
00473 ID_KBD,
00474 ID_VAR,
00475 ID_CITE,
00476 ID_ABBR,
00477 ID_ACRONYM,
00478 ID_A,
00479 ID_IMG,
00480 ID_APPLET,
00481 ID_OBJECT,
00482 ID_EMBED,
00483 ID_FONT,
00484 ID_BASEFONT,
00485 ID_BR,
00486 ID_SCRIPT,
00487 ID_MAP,
00488 ID_Q,
00489 ID_SUB,
00490 ID_SUP,
00491 ID_SPAN,
00492 ID_BDO,
00493 ID_IFRAME,
00494 ID_INPUT,
00495 ID_SELECT,
00496 ID_TEXTAREA,
00497 ID_LABEL,
00498 ID_BUTTON,
00499 ID_COMMENT,
00500 ID_LI,
00501 ID_XMP,
00502 ID_MARQUEE,
00503 0
00504 };
00505
00506 static const ushort tag_list_6[] = {
00507 ID_DT,
00508 ID_DD,
00509 ID_COMMENT,
00510 0
00511 };
00512
00513 static const ushort tag_list_7[] = {
00514 ID_OPTGROUP,
00515 ID_OPTION,
00516 ID_COMMENT,
00517 ID_SCRIPT,
00518 0
00519 };
00520
00521 static const ushort tag_list_10[] = {
00522 ID_FRAMESET,
00523 ID_FRAME,
00524 ID_NOFRAMES,
00525 ID_COMMENT,
00526 0
00527 };
00528
00529 static const ushort tag_list_11[] = {
00530 ID_SCRIPT,
00531 ID_STYLE,
00532 ID_META,
00533 ID_LINK,
00534 ID_TITLE,
00535 ID_ISINDEX,
00536 ID_BASE,
00537 ID_COMMENT,
00538 0
00539 };
00540
00541 static bool check_array(ushort child, const ushort *tagList)
00542 {
00543 int i = 0;
00544 while(tagList[i] != 0)
00545 {
00546 if(tagList[i] == child) return true;
00547 i++;
00548 }
00549 return false;
00550 }
00551
00552
00553 bool DOM::checkChild(ushort tagID, ushort childID)
00554 {
00555
00556
00557
00558
00559 if (tagID >= 1000 || childID >= 1000)
00560 return true;
00561
00562 switch(tagID)
00563 {
00564 case ID_TT:
00565 case ID_I:
00566 case ID_B:
00567 case ID_U:
00568 case ID_S:
00569 case ID_STRIKE:
00570 case ID_BIG:
00571 case ID_SMALL:
00572 case ID_EM:
00573 case ID_STRONG:
00574 case ID_DFN:
00575 case ID_CODE:
00576 case ID_SAMP:
00577 case ID_KBD:
00578 case ID_VAR:
00579 case ID_CITE:
00580 case ID_ABBR:
00581 case ID_ACRONYM:
00582 case ID_SUB:
00583 case ID_SUP:
00584 case ID_BDO:
00585 case ID_P:
00586 case ID_H1:
00587 case ID_H2:
00588 case ID_H3:
00589 case ID_H4:
00590 case ID_H5:
00591 case ID_H6:
00592 case ID_Q:
00593 case ID_LEGEND:
00594
00595 return check_array(childID, tag_list_0);
00596 case ID_BASEFONT:
00597 case ID_BR:
00598 case ID_AREA:
00599 case ID_LINK:
00600 case ID_IMG:
00601 case ID_PARAM:
00602 case ID_HR:
00603 case ID_INPUT:
00604 case ID_COL:
00605 case ID_FRAME:
00606 case ID_ISINDEX:
00607 case ID_BASE:
00608 case ID_META:
00609 case ID_COMMENT:
00610
00611 return false;
00612 case ID_BODY:
00613
00614 if( check_array(childID, tag_list_1) ) return true;
00615 return check_array(childID, tag_list_2);
00616 case ID_NOBR:
00617 case ID_WBR:
00618 case ID_ADDRESS:
00619
00620 if( check_array(childID, tag_list_0) ) return true;
00621 return (childID == ID_P);
00622 case ID_FONT:
00623
00624 return check_array(childID, tag_list_3) || check_array(childID, tag_list_0);
00625 case ID__KONQBLOCK:
00626 if ( childID == ID__KONQBLOCK || childID == ID_TABLE ) return false;
00627
00628 case ID_LI:
00629 case ID_DT:
00630 case ID_DIV:
00631 case ID_SPAN:
00632 case ID_LAYER:
00633 case ID_CENTER:
00634 case ID_BLOCKQUOTE:
00635 case ID_INS:
00636 case ID_DEL:
00637 case ID_DD:
00638 case ID_TH:
00639 case ID_TD:
00640 case ID_IFRAME:
00641 case ID_NOFRAMES:
00642 case ID_NOSCRIPT:
00643 case ID_CAPTION:
00644 case ID_MARQUEE:
00645
00646 return check_array(childID, tag_list_1);
00647 case ID_A:
00648
00649 if( check_array(childID, tag_list_0) ) return true;
00650 if ( childID == ID_TABLE ) return false;
00651 if( check_array(childID, tag_list_3) ) return true;
00652 if( childID == ID_ADDRESS ) return true;
00653 return false;
00654 case ID_MAP:
00655
00656 if( check_array(childID, tag_list_3) ) return true;
00657 return (childID == ID_AREA);
00658 case ID_OBJECT:
00659 case ID_EMBED:
00660 case ID_APPLET:
00661
00662 return check_array(childID, tag_list_4);
00663 case ID_PRE:
00664 case ID_XMP:
00665 case ID_PLAINTEXT:
00666
00667 return check_array(childID, tag_list_1);
00668 case ID_DL:
00669
00670 return check_array(childID, tag_list_6);
00671 case ID_OL:
00672 case ID_UL:
00673
00674 if(childID == ID_LI) return true;
00675 return check_array(childID, tag_list_1);
00676 case ID_DIR:
00677 case ID_MENU:
00678
00679 if(childID == ID_LI) return true;
00680 return false;
00681 case ID_FORM:
00682
00683 return check_array(childID, tag_list_1);
00684 case ID_LABEL:
00685
00686 return check_array(childID, tag_list_0);
00687
00688
00689
00690
00691 case ID_KEYGEN:
00692 case ID_SELECT:
00693
00694 return check_array(childID, tag_list_7);
00695 case ID_OPTGROUP:
00696
00697 if(childID == ID_OPTION) return true;
00698 return false;
00699 case ID_OPTION:
00700 case ID_TEXTAREA:
00701 case ID_TITLE:
00702 case ID_STYLE:
00703 case ID_SCRIPT:
00704
00705 if(childID == ID_TEXT) return true;
00706 return false;
00707 case ID_FIELDSET:
00708
00709 if(childID == ID_TEXT) return true;
00710 if(childID == ID_LEGEND) return true;
00711 return check_array(childID, tag_list_1);
00712 case ID_BUTTON:
00713
00714 return check_array(childID, tag_list_1);
00715 case ID_TABLE:
00716
00717 switch(childID)
00718 {
00719 case ID_CAPTION:
00720 case ID_COL:
00721 case ID_COLGROUP:
00722 case ID_THEAD:
00723 case ID_TFOOT:
00724 case ID_TBODY:
00725 return true;
00726 default:
00727 return false;
00728 }
00729 case ID_THEAD:
00730 case ID_TFOOT:
00731 case ID_TBODY:
00732
00733 if(childID == ID_TR) return true;
00734 return false;
00735 case ID_COLGROUP:
00736
00737 if(childID == ID_COL) return true;
00738 return false;
00739 case ID_TR:
00740
00741 return (childID == ID_TH || childID == ID_TD);
00742 case ID_FRAMESET:
00743
00744 return check_array(childID, tag_list_10);
00745 case ID_HEAD:
00746
00747 return check_array(childID, tag_list_11);
00748 case ID_HTML:
00749
00750 switch(childID)
00751 {
00752 case ID_HEAD:
00753 case ID_COMMENT:
00754 case ID_BODY:
00755 case ID_FRAMESET:
00756 case ID_NOFRAMES:
00757 case ID_SCRIPT:
00758 return true;
00759 default:
00760 return false;
00761 }
00762 default:
00763 kdDebug( 6030 ) << "unhandled tag in dtd.cpp:checkChild(): tagID=" << tagID << "!" << endl;
00764 return false;
00765 }
00766 }
00767
00768 void DOM::addForbidden(int tagId, ushort *forbiddenTags)
00769 {
00770 switch(tagId)
00771 {
00772 case ID_A:
00773
00774
00775 break;
00776 case ID_NOBR:
00777 forbiddenTags[ID_PRE]++;
00778
00779 case ID_PRE:
00780 case ID_PLAINTEXT:
00781 case ID_XMP:
00782
00783 forbiddenTags[ID_OBJECT]++;
00784 forbiddenTags[ID_EMBED]++;
00785 forbiddenTags[ID_APPLET]++;
00786
00787
00788
00789
00790
00791 forbiddenTags[ID_BASEFONT]++;
00792 break;
00793 case ID_DIR:
00794 case ID_MENU:
00795 forbiddenTags[ID_P]++;
00796 forbiddenTags[ID_H1]++;
00797 forbiddenTags[ID_H2]++;
00798 forbiddenTags[ID_H3]++;
00799 forbiddenTags[ID_H4]++;
00800 forbiddenTags[ID_H5]++;
00801 forbiddenTags[ID_H6]++;
00802 forbiddenTags[ID_UL]++;
00803 forbiddenTags[ID_OL]++;
00804 forbiddenTags[ID_DIR]++;
00805 forbiddenTags[ID_MENU]++;
00806 forbiddenTags[ID_PRE]++;
00807 forbiddenTags[ID_PLAINTEXT]++;
00808 forbiddenTags[ID_XMP]++;
00809 forbiddenTags[ID_DL]++;
00810 forbiddenTags[ID_DIV]++;
00811 forbiddenTags[ID_CENTER]++;
00812 forbiddenTags[ID_NOSCRIPT]++;
00813 forbiddenTags[ID_NOFRAMES]++;
00814 forbiddenTags[ID_BLOCKQUOTE]++;
00815 forbiddenTags[ID_FORM]++;
00816 forbiddenTags[ID_ISINDEX]++;
00817 forbiddenTags[ID_HR]++;
00818 forbiddenTags[ID_TABLE]++;
00819 forbiddenTags[ID_FIELDSET]++;
00820 forbiddenTags[ID_ADDRESS]++;
00821 break;
00822 case ID_LABEL:
00823 forbiddenTags[ID_LABEL]++;
00824 break;
00825 case ID_BUTTON:
00826 forbiddenTags[ID_A]++;
00827 forbiddenTags[ID_INPUT]++;
00828 forbiddenTags[ID_SELECT]++;
00829 forbiddenTags[ID_TEXTAREA]++;
00830 forbiddenTags[ID_LABEL]++;
00831 forbiddenTags[ID_BUTTON]++;
00832 forbiddenTags[ID_FORM]++;
00833 forbiddenTags[ID_ISINDEX]++;
00834 forbiddenTags[ID_FIELDSET]++;
00835 forbiddenTags[ID_IFRAME]++;
00836 break;
00837 default:
00838 break;
00839 }
00840 }
00841
00842 void DOM::removeForbidden(int tagId, ushort *forbiddenTags)
00843 {
00844 switch(tagId)
00845 {
00846 case ID_A:
00847
00848 break;
00849 case ID_NOBR:
00850 forbiddenTags[ID_PRE]--;
00851
00852 case ID_PRE:
00853 case ID_XMP:
00854 case ID_PLAINTEXT:
00855
00856 forbiddenTags[ID_OBJECT]--;
00857 forbiddenTags[ID_EMBED]--;
00858 forbiddenTags[ID_APPLET]--;
00859
00860
00861
00862
00863 forbiddenTags[ID_BASEFONT]--;
00864 break;
00865 case ID_DIR:
00866 case ID_MENU:
00867 forbiddenTags[ID_P]--;
00868 forbiddenTags[ID_H1]--;
00869 forbiddenTags[ID_H2]--;
00870 forbiddenTags[ID_H3]--;
00871 forbiddenTags[ID_H4]--;
00872 forbiddenTags[ID_H5]--;
00873 forbiddenTags[ID_H6]--;
00874 forbiddenTags[ID_UL]--;
00875 forbiddenTags[ID_OL]--;
00876 forbiddenTags[ID_DIR]--;
00877 forbiddenTags[ID_MENU]--;
00878 forbiddenTags[ID_PRE]--;
00879 forbiddenTags[ID_PLAINTEXT]--;
00880 forbiddenTags[ID_XMP]--;
00881 forbiddenTags[ID_DL]--;
00882 forbiddenTags[ID_DIV]--;
00883 forbiddenTags[ID_CENTER]--;
00884 forbiddenTags[ID_NOSCRIPT]--;
00885 forbiddenTags[ID_NOFRAMES]--;
00886 forbiddenTags[ID_BLOCKQUOTE]--;
00887 forbiddenTags[ID_FORM]--;
00888 forbiddenTags[ID_ISINDEX]--;
00889 forbiddenTags[ID_HR]--;
00890 forbiddenTags[ID_TABLE]--;
00891 forbiddenTags[ID_FIELDSET]--;
00892 forbiddenTags[ID_ADDRESS]--;
00893 break;
00894 case ID_LABEL:
00895 forbiddenTags[ID_LABEL]--;
00896 break;
00897 case ID_BUTTON:
00898 forbiddenTags[ID_A]--;
00899 forbiddenTags[ID_INPUT]--;
00900 forbiddenTags[ID_SELECT]--;
00901 forbiddenTags[ID_TEXTAREA]--;
00902 forbiddenTags[ID_LABEL]--;
00903 forbiddenTags[ID_BUTTON]--;
00904 forbiddenTags[ID_FORM]--;
00905 forbiddenTags[ID_ISINDEX]--;
00906 forbiddenTags[ID_FIELDSET]--;
00907 forbiddenTags[ID_IFRAME]--;
00908 break;
00909 default:
00910 break;
00911 }
00912 }
00913
00914
00915 #if 0
00916
00917
00918 struct attr_priv {
00919 attr_priv() { id = len = 0, val = 0; }
00920 attr_priv(ushort i, const QChar *v, ushort l)
00921 { id =i; len = l, val = v; }
00922 ushort id;
00923 const QChar *val;
00924 ushort len;
00925 };
00926
00927 DOMString find_attr(ushort id, const attr_priv *attrs)
00928 {
00929 int i = 0;
00930 while(attrs[i].id != 0)
00931 {
00932 if(attrs[i].id == id)
00933 return DOMString(attrs[i].val, attrs[i].len);
00934 i++;
00935 }
00936 return DOMString();
00937 }
00938
00939 static const QChar value_1_0 [] = { 'N','O','N','E' };
00940
00941 attr_priv attr_list_1[] = {
00942 attr_priv(ATTR_CLEAR, value_1_0, 4)
00943 };
00944
00945 static const QChar value_2_0 [] = { 'R','E','C','T' };
00946
00947 attr_priv attr_list_2[] = {
00948 attr_priv(ATTR_SHAPE, value_2_0, 4)
00949 };
00950
00951 static const QChar value_3_0 [] = { 'R','E','C','T' };
00952
00953 attr_priv attr_list_3[] = {
00954 attr_priv(ATTR_SHAPE, value_3_0, 4)
00955 };
00956
00957 static const QChar value_4_0 [] = { 'D','A','T','A' };
00958
00959 attr_priv attr_list_4[] = {
00960 attr_priv(ATTR_VALUETYPE, value_4_0, 4)
00961 };
00962
00963 static const QChar value_5_0 [] = { 'G','E','T' };
00964 static const QChar value_5_1 [] = { 'A','P','P','L','I','C','A','T','I','O','N','/','X','-','W','W','W','-','F','O','R','M','-','U','R','L','E','N','C','O','D','E','D' };
00965
00966 attr_priv attr_list_5[] = {
00967 attr_priv(ATTR_METHOD, value_5_0, 3),
00968 attr_priv(ATTR_ENCTYPE, value_5_1, 33)
00969 };
00970
00971 static const QChar value_6_0 [] = { 'T','E','X','T' };
00972
00973 attr_priv attr_list_6[] = {
00974 attr_priv(ATTR_TYPE, value_6_0, 4)
00975 };
00976
00977 static const QChar value_7_0 [] = { 'S','U','B','M','I','T' };
00978
00979 attr_priv attr_list_7[] = {
00980 attr_priv(ATTR_TYPE, value_7_0, 6)
00981 };
00982
00983 static const QChar value_8_0 [] = { '1' };
00984
00985 attr_priv attr_list_8[] = {
00986 attr_priv(ATTR_SPAN, value_8_0, 1)
00987 };
00988
00989 static const QChar value_9_0 [] = { '1' };
00990
00991 attr_priv attr_list_9[] = {
00992 attr_priv(ATTR_SPAN, value_9_0, 1)
00993 };
00994
00995 static const QChar value_10_0 [] = { '1' };
00996 static const QChar value_10_1 [] = { '1' };
00997
00998 attr_priv attr_list_10[] = {
00999 attr_priv(ATTR_ROWSPAN, value_10_0, 1),
01000 attr_priv(ATTR_COLSPAN, value_10_1, 1)
01001 };
01002
01003 static const QChar value_11_0 [] = { '1' };
01004 static const QChar value_11_1 [] = { 'A','U','T','O' };
01005
01006 attr_priv attr_list_11[] = {
01007 attr_priv(ATTR_FRAMEBORDER, value_11_0, 1),
01008 attr_priv(ATTR_SCROLLING, value_11_1, 4)
01009 };
01010
01011 static const QChar value_12_0 [] = { '1' };
01012 static const QChar value_12_1 [] = { 'A','U','T','O' };
01013
01014 attr_priv attr_list_12[] = {
01015 attr_priv(ATTR_FRAMEBORDER, value_12_0, 1),
01016 attr_priv(ATTR_SCROLLING, value_12_1, 4)
01017 };
01018
01019 static const QChar value_13_0 [] = { '-','/','/','W','3','C','/','/','D','T','D' };
01020 static const QChar value_13_1 [] = { 'T','R','A','N','S','I','T','I','O','N','A','L','/','/','E','N' };
01021
01022 attr_priv attr_list_13[] = {
01023 attr_priv(ATTR_VERSION, value_13_0, 11),
01024 attr_priv(ATTR_HTML, value_13_1, 16)
01025 };
01026
01027 DOMString DOM::findDefAttrNone(ushort)
01028 {
01029 return DOMString();
01030 };
01031 DOMString DOM::findDefAttrBR(ushort id)
01032 {
01033 return find_attr(id, attr_list_1);
01034 }
01035 DOMString DOM::findDefAttrA(ushort id)
01036 {
01037 return find_attr(id, attr_list_2);
01038 }
01039 DOMString DOM::findDefAttrAREA(ushort id)
01040 {
01041 return find_attr(id, attr_list_3);
01042 }
01043 DOMString DOM::findDefAttrPARAM(ushort id)
01044 {
01045 return find_attr(id, attr_list_4);
01046 }
01047 DOMString DOM::findDefAttrFORM(ushort id)
01048 {
01049 return find_attr(id, attr_list_5);
01050 }
01051 DOMString DOM::findDefAttrINPUT(ushort id)
01052 {
01053 return find_attr(id, attr_list_6);
01054 }
01055 DOMString DOM::findDefAttrBUTTON(ushort id)
01056 {
01057 return find_attr(id, attr_list_7);
01058 }
01059 DOMString DOM::findDefAttrCOLGROUP(ushort id)
01060 {
01061 return find_attr(id, attr_list_8);
01062 }
01063 DOMString DOM::findDefAttrCOL(ushort id)
01064 {
01065 return find_attr(id, attr_list_9);
01066 }
01067 DOMString DOM::findDefAttrTH(ushort id)
01068 {
01069 return find_attr(id, attr_list_10);
01070 }
01071 DOMString DOM::findDefAttrFRAME(ushort id)
01072 {
01073 return find_attr(id, attr_list_11);
01074 }
01075 DOMString DOM::findDefAttrIFRAME(ushort id)
01076 {
01077 return find_attr(id, attr_list_12);
01078 }
01079 DOMString DOM::findDefAttrHTML(ushort id)
01080 {
01081 return find_attr(id, attr_list_13);
01082 }
01083
01084 #endif