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

📄 dtd.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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_7[] = {    ID_TEXT,    ID_OPTGROUP,    ID_OPTION,    ID_COMMENT,    ID_SCRIPT,    0};static const ushort tag_list_9[] = {    ID_TH,    ID_TD,    ID_COMMENT,    0};static const ushort tag_list_10[] = {    ID_FRAMESET,    ID_FRAME,    ID_COMMENT,    0};static const ushort tag_list_11[] = {    ID_TEXT,    ID_SCRIPT,    ID_STYLE,    ID_META,    ID_LINK,    ID_COMMENT,    0};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){    //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_Q:    case ID_LEGEND:    case ID_FONT:    case ID_A:    case ID_NOBR:    case ID_WBR:        return check_array(childID, tag_list_1);    case ID_P:        // P: ( _0 | TABLE ) *        return check_array(childID, tag_list_0) || childID == ID_TABLE;    case ID_H1:    case ID_H2:    case ID_H3:    case ID_H4:    case ID_H5:    case ID_H6:        return check_array(childID, tag_list_1) && (childID < ID_H1 || childID > ID_H6);    case ID_BASEFONT:    case ID_BR:    case ID_AREA:    case ID_LINK:    case ID_CANVAS:    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_LI:    case ID_DT:    case ID_DIV:    case ID_SPAN:    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:    case ID_UL:    case ID_OL:    case ID_DIR:    case ID_MENU:        // 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_1);    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 childs        // 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_TEXT:        case ID_FORM:        case ID_COMMENT:        case ID_SCRIPT:            return true;        default:            return false;        }    case ID_THEAD:    case ID_TFOOT:    case ID_TBODY:        // THEAD: TR +        if(childID == ID_FORM || childID == ID_TR || childID == ID_COMMENT ||           childID == ID_SCRIPT)            return true;        return false;    case ID_COLGROUP:        // COLGROUP: COL *        if(childID == ID_COL || childID == ID_COMMENT) return true;        return false;    case ID_TR:        // TR: _9 +        if (childID == ID_SCRIPT || childID == ID_FORM)            return true;        return check_array(childID, tag_list_9);    case ID_FRAMESET:        // FRAMESET: ( _10 + & NOFRAMES ? )        return check_array(childID, tag_list_10);        return (childID == ID_NOFRAMES);    case ID_HEAD:        // HEAD: ( TITLE & ISINDEX ? & BASE ? ) + _11        if(childID == ID_TITLE || childID == ID_ISINDEX || childID == ID_BASE)            return true;        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_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_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;    }}#if 0struct attr_priv {    attr_priv() { id = len = 0, val = 0; }    attr_priv(ushort i, const QChar *v, ushort l)    { id =i; len = l, val = v; }    ushort id;    const QChar *val;    ushort len;};DOMString find_attr(ushort id, const attr_priv *attrs){    int i = 0;    while(attrs[i].id != 0)    {        if(attrs[i].id == id)            return DOMString(attrs[i].val, attrs[i].len);        i++;    }    return DOMString();}static const QChar value_1_0 [] = { 'N','O','N','E' };attr_priv attr_list_1[] = {    attr_priv(ATTR_CLEAR, value_1_0, 4)};static const QChar value_2_0 [] = { 'R','E','C','T' };attr_priv attr_list_2[] = {    attr_priv(ATTR_SHAPE, value_2_0, 4)};static const QChar value_3_0 [] = { 'R','E','C','T' };attr_priv attr_list_3[] = {    attr_priv(ATTR_SHAPE, value_3_0, 4)};static const QChar value_4_0 [] = { 'D','A','T','A' };attr_priv attr_list_4[] = {    attr_priv(ATTR_VALUETYPE, value_4_0, 4)};static const QChar value_5_0 [] = { 'G','E','T' };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' };attr_priv attr_list_5[] = {    attr_priv(ATTR_METHOD, value_5_0, 3),    attr_priv(ATTR_ENCTYPE, value_5_1, 33)};static const QChar value_6_0 [] = { 'T','E','X','T' };attr_priv attr_list_6[] = {    attr_priv(ATTR_TYPE, value_6_0, 4)};static const QChar value_7_0 [] = { 'S','U','B','M','I','T' };attr_priv attr_list_7[] = {    attr_priv(ATTR_TYPE, value_7_0, 6)};static const QChar value_8_0 [] = { '1' };attr_priv attr_list_8[] = {    attr_priv(ATTR_SPAN, value_8_0, 1)};static const QChar value_9_0 [] = { '1' };attr_priv attr_list_9[] = {    attr_priv(ATTR_SPAN, value_9_0, 1)};static const QChar value_10_0 [] = { '1' };static const QChar value_10_1 [] = { '1' };attr_priv attr_list_10[] = {    attr_priv(ATTR_ROWSPAN, value_10_0, 1),    attr_priv(ATTR_COLSPAN, value_10_1, 1)};static const QChar value_11_0 [] = { '1' };static const QChar value_11_1 [] = { 'A','U','T','O' };attr_priv attr_list_11[] = {    attr_priv(ATTR_FRAMEBORDER, value_11_0, 1),    attr_priv(ATTR_SCROLLING, value_11_1, 4)};static const QChar value_12_0 [] = { '1' };static const QChar value_12_1 [] = { 'A','U','T','O' };attr_priv attr_list_12[] = {    attr_priv(ATTR_FRAMEBORDER, value_12_0, 1),    attr_priv(ATTR_SCROLLING, value_12_1, 4)};static const QChar value_13_0 [] = { '-','/','/','W','3','C','/','/','D','T','D' };static const QChar value_13_1 [] = { 'T','R','A','N','S','I','T','I','O','N','A','L','/','/','E','N' };attr_priv attr_list_13[] = {    attr_priv(ATTR_VERSION, value_13_0, 11),    attr_priv(ATTR_HTML, value_13_1, 16)};DOMString DOM::findDefAttrNone(ushort){    return DOMString();};DOMString DOM::findDefAttrBR(ushort id){    return find_attr(id, attr_list_1);}DOMString DOM::findDefAttrA(ushort id){    return find_attr(id, attr_list_2);}DOMString DOM::findDefAttrAREA(ushort id){    return find_attr(id, attr_list_3);}DOMString DOM::findDefAttrPARAM(ushort id){    return find_attr(id, attr_list_4);}DOMString DOM::findDefAttrFORM(ushort id){    return find_attr(id, attr_list_5);}DOMString DOM::findDefAttrINPUT(ushort id){    return find_attr(id, attr_list_6);}DOMString DOM::findDefAttrBUTTON(ushort id){    return find_attr(id, attr_list_7);}DOMString DOM::findDefAttrCOLGROUP(ushort id){    return find_attr(id, attr_list_8);}DOMString DOM::findDefAttrCOL(ushort id){    return find_attr(id, attr_list_9);}DOMString DOM::findDefAttrTH(ushort id){    return find_attr(id, attr_list_10);}DOMString DOM::findDefAttrFRAME(ushort id){    return find_attr(id, attr_list_11);}DOMString DOM::findDefAttrIFRAME(ushort id){    return find_attr(id, attr_list_12);}DOMString DOM::findDefAttrHTML(ushort id){    return find_attr(id, attr_list_13);}#endif

⌨️ 快捷键说明

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