⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtd.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    ID_HR,    ID_TABLE,    ID_FIELDSET,    ID_ADDRESS,    ID_TEXT,    ID_TT,    ID_I,    ID_B,    ID_U,    ID_S,    ID_STRIKE,    ID_BIG,    ID_SMALL,    ID_EM,    ID_STRONG,    ID_DFN,    ID_CODE,    ID_SAMP,    ID_KBD,    ID_VAR,    ID_CITE,    ID_ABBR,    ID_ACRONYM,    ID_A,    ID_IMG,    ID_APPLET,    ID_OBJECT,    ID_EMBED,    ID_FONT,    ID_BASEFONT,    ID_BR,    ID_SCRIPT,    ID_MAP,    ID_Q,    ID_SUB,    ID_SUP,    ID_SPAN,    ID_BDO,    ID_IFRAME,    ID_INPUT,    ID_SELECT,    ID_TEXTAREA,    ID_LABEL,    ID_BUTTON,    ID_COMMENT,    ID_LI,    ID_XMP,    ID_MARQUEE,    0};static const ushort tag_list_6[] = {    ID_DT,    ID_DD,    ID_COMMENT,    0};static const ushort tag_list_7[] = {    ID_TEXT,    ID_OPTGROUP,    ID_OPTION,    ID_COMMENT,    ID_SCRIPT,    0};static const ushort tag_list_10[] = {    ID_FRAMESET,    ID_FRAME,    ID_NOFRAMES,    ID_COMMENT,    0};static const ushort tag_list_11[] = {    ID_SCRIPT,    ID_STYLE,    ID_META,    ID_LINK,    ID_TITLE,    ID_ISINDEX,    ID_BASE,    ID_COMMENT,    0};static bool check_array(ushort child, const ushort *tagList){    int i = 0;    while(tagList[i] != 0)    {        if(tagList[i] == child) return true;        i++;    }    return false;}bool DOM::checkChild(ushort tagID, ushort childID, bool strict){    //kdDebug( 6030 ) << "checkChild: " << tagID << "/" << childID << endl;    // ### allow comments inside ANY node that can contain children    if (tagID >= 1000 || childID >= 1000)        return true; // one or both of the elements in an XML element; just allow for now    switch(tagID)    {    case ID_TT:    case ID_I:    case ID_B:    case ID_U:    case ID_S:    case ID_STRIKE:    case ID_BIG:    case ID_SMALL:    case ID_EM:    case ID_STRONG:    case ID_DFN:    case ID_CODE:    case ID_SAMP:    case ID_KBD:    case ID_VAR:    case ID_CITE:    case ID_ABBR:    case ID_ACRONYM:    case ID_SUB:    case ID_SUP:    case ID_BDO:    case ID_FONT:    case ID_LEGEND:    case ID_Q:    case ID_A:    case ID_NOBR:    case ID_WBR:        // _1 *        return check_array(childID, tag_list_1) || check_array(childID, tag_list_6);    case ID_P:        // P: ( _0 | TABLE ) *        return check_array(childID, tag_list_0) || (!strict && childID == ID_TABLE);    case ID_H1:    case ID_H2:    case ID_H3:    case ID_H4:    case ID_H5:    case ID_H6:        // _0 *        return check_array(childID, tag_list_0) ||                (!strict && check_array(childID, tag_list_3) && (childID < ID_H1 || childID > ID_H6));    case ID_BASEFONT:    case ID_BR:    case ID_AREA:    case ID_LINK:    case ID_IMG:    case ID_PARAM:    case ID_HR:    case ID_INPUT:    case ID_COL:    case ID_FRAME:    case ID_ISINDEX:    case ID_BASE:    case ID_META:    case ID_COMMENT:        // BASEFONT: EMPTY        return false;    case ID_BODY:        // BODY: _1 * + _2        return check_array(childID, tag_list_1) || check_array(childID, tag_list_2);    case ID_ADDRESS:        // ADDRESS: ( _0 | P ) *        return check_array(childID, tag_list_0) || childID == ID_P;    case ID_DT:        if ( childID == ID_DL ) return false;    case ID_LI:    case ID_DIV:    case ID_SPAN:    case ID_ILAYER:    case ID_LAYER:    case ID_CENTER:    case ID_BLOCKQUOTE:    case ID_INS:    case ID_DEL:    case ID_DD:    case ID_TH:    case ID_TD:    case ID_IFRAME:    case ID_NOFRAMES:    case ID_NOSCRIPT:    case ID_CAPTION:    case ID_MARQUEE:        // DIV: _1 *        return check_array(childID, tag_list_1);    case ID_MAP:	// We accept SCRIPT in client-side image maps as an extension to the DTD.        // MAP: ( _3 + | AREA + | SCRIPT + )        return check_array(childID, tag_list_3) ||            childID == ID_AREA ||            childID == ID_SCRIPT;    case ID_OBJECT:    case ID_EMBED:    case ID_APPLET:        // OBJECT: _4 *        return check_array(childID, tag_list_4);    case ID_PRE:    case ID_XMP:    case ID_PLAINTEXT:        // PRE: _0 * - _5        return check_array(childID, tag_list_1);    case ID_DL:        // DL: _6 +        return check_array(childID, tag_list_6) || check_array(childID, tag_list_1);    case ID_OL:    case ID_UL:        // OL: LI +        return check_array(childID, tag_list_1);    case ID_DIR:    case ID_MENU:        // (DIR|MENU): LI + - _3        if(childID == ID_LI) return true;        return false;    case ID_FORM:        // FORM: _1 * - FORM        return check_array(childID, tag_list_1);    case ID_LABEL:        // LABEL: _1 * - LABEL        return check_array(childID, tag_list_1);        // KEYGEN does not really allow any children        // from outside, just need this to be able        // to add the keylengths ourself        // Yes, consider it a hack (Dirk)    case ID_KEYGEN:    case ID_SELECT:        // SELECT: _7 +        return check_array(childID, tag_list_7);    case ID_OPTGROUP:        // OPTGROUP: OPTION +        if(childID == ID_OPTION) return true;        return false;    case ID_OPTION:    case ID_TEXTAREA:    case ID_TITLE:    case ID_STYLE:    case ID_SCRIPT:        // OPTION: TEXT        if(childID == ID_TEXT) return true;        return false;    case ID_FIELDSET:        // FIELDSET: ( TEXT , LEGEND , _1 * )        if(childID == ID_TEXT) return true;        if(childID == ID_LEGEND) return true;        return check_array(childID, tag_list_1);    case ID_BUTTON:        // BUTTON: _1 * - _8        return check_array(childID, tag_list_1);    case ID_TABLE:        // TABLE: ( CAPTION ? , ( COL * | COLGROUP * ) , THEAD ? , TFOOT ? , TBODY + )        switch(childID)        {        case ID_CAPTION:        case ID_COL:        case ID_COLGROUP:        case ID_THEAD:        case ID_TFOOT:        case ID_TBODY:        case ID_FORM:        case ID_SCRIPT:            return true;        default:            return false;        }    case ID_THEAD:    case ID_TFOOT:    case ID_TBODY:        // THEAD: TR +        if(childID == ID_TR || childID == ID_SCRIPT) return true;        return false;    case ID_COLGROUP:        // COLGROUP: COL *        if(childID == ID_COL) return true;        return false;    case ID_TR:        // TR: (TD, TH)        return (childID == ID_TH || childID == ID_TD || childID == ID_SCRIPT);    case ID_FRAMESET:        // FRAMESET: _10        return check_array(childID, tag_list_10);    case ID_HEAD:        // HEAD: _11        return check_array(childID, tag_list_11);    case ID_HTML:        // HTML: ( HEAD , COMMENT, ( BODY | ( FRAMESET & NOFRAMES ? ) ) )        switch(childID)        {        case ID_HEAD:        case ID_COMMENT:        case ID_BODY:        case ID_FRAMESET:        case ID_NOFRAMES:        case ID_SCRIPT:            return true;        default:            return false;        }    default:        kdDebug( 6030 ) << "unhandled tag in dtd.cpp:checkChild(): tagID=" << tagID << "!" << endl;        return false;    }}void DOM::addForbidden(int tagId, ushort *forbiddenTags){    switch(tagId)    {    case ID_A:        // we allow nested anchors. The innermost one wil be taken...        //forbiddenTags[ID_A]++;        break;    case ID_NOBR:        forbiddenTags[ID_PRE]++;        // fall through    case ID_PRE:    case ID_PLAINTEXT:    case ID_XMP:        //forbiddenTags[ID_IMG]++;        forbiddenTags[ID_OBJECT]++;        forbiddenTags[ID_EMBED]++;        forbiddenTags[ID_APPLET]++;        // why forbid them. We can deal with them in PRE        //forbiddenTags[ID_BIG]++;        //forbiddenTags[ID_SMALL]++;        //forbiddenTags[ID_SUB]++;        //forbiddenTags[ID_SUP]++;        forbiddenTags[ID_BASEFONT]++;        break;    case ID_DIR:    case ID_MENU:        forbiddenTags[ID_P]++;        forbiddenTags[ID_H1]++;        forbiddenTags[ID_H2]++;        forbiddenTags[ID_H3]++;        forbiddenTags[ID_H4]++;        forbiddenTags[ID_H5]++;        forbiddenTags[ID_H6]++;        forbiddenTags[ID_UL]++;        forbiddenTags[ID_OL]++;        forbiddenTags[ID_DIR]++;        forbiddenTags[ID_MENU]++;        forbiddenTags[ID_PRE]++;        forbiddenTags[ID_PLAINTEXT]++;        forbiddenTags[ID_XMP]++;        forbiddenTags[ID_DL]++;        forbiddenTags[ID_DIV]++;        forbiddenTags[ID_CENTER]++;        forbiddenTags[ID_NOSCRIPT]++;        forbiddenTags[ID_NOFRAMES]++;        forbiddenTags[ID_BLOCKQUOTE]++;        forbiddenTags[ID_FORM]++;        forbiddenTags[ID_ISINDEX]++;        forbiddenTags[ID_HR]++;        forbiddenTags[ID_TABLE]++;        forbiddenTags[ID_FIELDSET]++;        forbiddenTags[ID_ADDRESS]++;        break;    case ID_LABEL:        forbiddenTags[ID_LABEL]++;        break;    case ID_BUTTON:        forbiddenTags[ID_A]++;        forbiddenTags[ID_INPUT]++;        forbiddenTags[ID_SELECT]++;        forbiddenTags[ID_TEXTAREA]++;        forbiddenTags[ID_LABEL]++;        forbiddenTags[ID_BUTTON]++;        forbiddenTags[ID_FORM]++;        forbiddenTags[ID_ISINDEX]++;        forbiddenTags[ID_FIELDSET]++;        forbiddenTags[ID_IFRAME]++;        break;    default:        break;    }}void DOM::removeForbidden(int tagId, ushort *forbiddenTags){    switch(tagId)    {    case ID_A:        //forbiddenTags[ID_A]--;        break;    case ID_NOBR:        forbiddenTags[ID_PRE]--;        // fall through    case ID_PRE:    case ID_XMP:    case ID_PLAINTEXT:        //forbiddenTags[ID_IMG]--;        forbiddenTags[ID_OBJECT]--;        forbiddenTags[ID_EMBED]--;        forbiddenTags[ID_APPLET]--;        //forbiddenTags[ID_BIG]--;        //forbiddenTags[ID_SMALL]--;        //forbiddenTags[ID_SUB]--;        //forbiddenTags[ID_SUP]--;        forbiddenTags[ID_BASEFONT]--;        break;    case ID_DIR:    case ID_MENU:        forbiddenTags[ID_P]--;        forbiddenTags[ID_H1]--;        forbiddenTags[ID_H2]--;        forbiddenTags[ID_H3]--;        forbiddenTags[ID_H4]--;        forbiddenTags[ID_H5]--;        forbiddenTags[ID_H6]--;        forbiddenTags[ID_UL]--;        forbiddenTags[ID_OL]--;        forbiddenTags[ID_DIR]--;        forbiddenTags[ID_MENU]--;        forbiddenTags[ID_PRE]--;        forbiddenTags[ID_PLAINTEXT]--;        forbiddenTags[ID_XMP]--;        forbiddenTags[ID_DL]--;        forbiddenTags[ID_DIV]--;        forbiddenTags[ID_CENTER]--;        forbiddenTags[ID_NOSCRIPT]--;        forbiddenTags[ID_NOFRAMES]--;        forbiddenTags[ID_BLOCKQUOTE]--;        forbiddenTags[ID_FORM]--;        forbiddenTags[ID_ISINDEX]--;        forbiddenTags[ID_HR]--;        forbiddenTags[ID_TABLE]--;        forbiddenTags[ID_FIELDSET]--;        forbiddenTags[ID_ADDRESS]--;        break;    case ID_LABEL:        forbiddenTags[ID_LABEL]--;        break;    case ID_BUTTON:        forbiddenTags[ID_A]--;        forbiddenTags[ID_INPUT]--;        forbiddenTags[ID_SELECT]--;        forbiddenTags[ID_TEXTAREA]--;        forbiddenTags[ID_LABEL]--;        forbiddenTags[ID_BUTTON]--;        forbiddenTags[ID_FORM]--;        forbiddenTags[ID_ISINDEX]--;        forbiddenTags[ID_FIELDSET]--;        forbiddenTags[ID_IFRAME]--;        break;    default:        break;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -