Changeset 62532 in webkit


Ignore:
Timestamp:
Jul 6, 2010 12:35:17 AM (14 years ago)
Author:
abarth@webkit.org
Message:

2010-07-06 Adam Barth <abarth@webkit.org>

Reviewed by Eric Seidel.

Implement defaut cases for InTableMode
https://bugs.webkit.org/show_bug.cgi?id=41656

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::processStartTag): (WebCore::HTMLTreeBuilder::processEndTagForInBody): (WebCore::HTMLTreeBuilder::processEndTag):
  • html/HTMLTreeBuilder.h:

2010-07-06 Adam Barth <abarth@webkit.org>

Reviewed by Eric Seidel.

Implement defaut cases for InTableMode
https://bugs.webkit.org/show_bug.cgi?id=41656

  • html5lib/runner-expected-html5.txt:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r62531 r62532  
     12010-07-06  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Implement defaut cases for InTableMode
     6        https://bugs.webkit.org/show_bug.cgi?id=41656
     7
     8        * html5lib/runner-expected-html5.txt:
     9
    1102010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>
    211
  • trunk/LayoutTests/html5lib/runner-expected-html5.txt

    r62525 r62532  
    251251|         "hello"
    252252|         <table>
     253|           <font>
     254|             <b>
    253255|           <tbody>
    254256|             <tr>
     
    836838|       "aba"
    837839|       <table>
     840|         <a>
     841|           <a>
     842|             href="foo"
    838843|         <tbody>
    839844|           <tr>
     
    896901|   <body>
    897902|     <table>
     903|       <a>
     904|         href="blah"
    898905|       <tbody>
    899906|         <tr>
     
    10081015|     <a>
    10091016|       <table>
     1017|         <a>
     1018|           <a>
    10101019|       <p>
    10111020|         <a>
    1012 |           <a>
    10131021|       <div>
    10141022|         <a>
     
    14321440|   <body>
    14331441|     <table>
    1434 |       <tbody>
    1435 |         <tr>
    1436 |           <td>
     1442|       <plaintext>
    14371443Expected:
    14381444| <html>
     
    22242230|   <body>
    22252231|     <table>
     2232|       <title>
     2233|         "X"
    22262234Expected:
    22272235| <!DOCTYPE html>
     
    22412249|   <body>
    22422250|     <table>
     2251|       <meta>
    22432252Expected:
    22442253| <!DOCTYPE html>
     
    24412450|   <body>
    24422451|     <table>
     2452|       <select>
     2453|         "X"
    24432454|       <tbody>
    24442455|         <tr>
     
    24912502|   <body>
    24922503|     <table>
     2504|       <b>
    24932505|       <tbody>
    24942506|         <tr>
     
    26712683|   <body>
    26722684|     <table>
     2685|       <div>
     2686|         <div>
    26732687Expected:
    26742688| <html>
     
    28162830|   <body>
    28172831|     <table>
     2832|       <math>
    28182833Expected:
    28192834| <!DOCTYPE html>
     
    28322847|   <body>
    28332848|     <table>
     2849|       <math>
     2850|         <mi>
    28342851Expected:
    28352852| <!DOCTYPE html>
     
    28502867|   <body>
    28512868|     <table>
     2869|       <math>
     2870|         <mi>
     2871|         <mi>
    28522872Expected:
    28532873| <!DOCTYPE html>
     
    30963116|   <body>
    30973117|     <table>
     3118|       <select>
     3119|         "foobarbaz"
    30983120|     <p>
    30993121|       "quux"
     
    33193341|   <body>
    33203342|     <table>
     3343|       <svg>
    33213344Expected:
    33223345| <!DOCTYPE html>
     
    33353358|   <body>
    33363359|     <table>
     3360|       <svg>
     3361|         <g>
    33373362Expected:
    33383363| <!DOCTYPE html>
     
    33533378|   <body>
    33543379|     <table>
     3380|       <svg>
     3381|         <g>
     3382|         <g>
    33553383Expected:
    33563384| <!DOCTYPE html>
     
    35993627|   <body>
    36003628|     <table>
     3629|       <select>
     3630|         "foobarbaz"
    36013631|     <p>
    36023632|       "quux"
     
    49024932|   <body>
    49034933|     <table>
     4934|       <meta>
    49044935Expected:
    49054936| <!DOCTYPE html>
     
    49935024|     <div>
    49945025|       <table>
     5026|         <a>
    49955027|         <tbody>
    49965028|           <tr>
     
    50145046187
    50155047188
    5016 189
    50175048
    50185049Test 187 of 189 in resources/tests16.dat failed. Input:
     
    50585089|             <font>
    50595090|               <span>
    5060 
    5061 Test 189 of 189 in resources/tests16.dat failed. Input:
    5062 <!doctype html><form><table></form><form></table></form>
    5063 Got:
    5064 | <!DOCTYPE html>
    5065 | <html>
    5066 |   <head>
    5067 |   <body>
    5068 |     <form>
    5069 |       <table>
    5070 Expected:
    5071 | <!DOCTYPE html>
    5072 | <html>
    5073 |   <head>
    5074 |   <body>
    5075 |     <form>
    5076 |       <table>
    5077 |         <form>
    50785091resources/webkit01.dat: PASS
    50795092
     
    52235236|   <head>
    52245237|   <body>
    5225 |     <table>
     5238|     <p>
     5239|       <a>
     5240|     <table>
     5241|       <a>
    52265242Expected:
    52275243| <html>
     
    52695285|   <body>
    52705286|     <table>
     5287|       <select>
     5288|         <option>
     5289|           "3"
    52715290Expected:
    52725291| <html>
     
    52855304|   <body>
    52865305|     <table>
     5306|       <select>
    52875307Expected:
    52885308| <html>
     
    53005320|   <body>
    53015321|     <table>
     5322|       <select>
    53025323Expected:
    53035324| <html>
     
    53145335|   <body>
    53155336|     <table>
     5337|       <select>
     5338|         <option>
     5339|           "A"
    53165340|       <tbody>
    53175341|         <tr>
  • trunk/WebCore/ChangeLog

    r62531 r62532  
     12010-07-06  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Implement defaut cases for InTableMode
     6        https://bugs.webkit.org/show_bug.cgi?id=41656
     7
     8        * html/HTMLTreeBuilder.cpp:
     9        (WebCore::HTMLTreeBuilder::processStartTag):
     10        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
     11        (WebCore::HTMLTreeBuilder::processEndTag):
     12        * html/HTMLTreeBuilder.h:
     13
    1142010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>
    215
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r62527 r62532  
    864864        if (currentElement()->hasTagName(tableTag) || currentElement()->hasTagName(tbodyTag) || currentElement()->hasTagName(tfootTag) || currentElement()->hasTagName(theadTag) || currentElement()->hasTagName(trTag))
    865865            notImplemented(); // "whenever a node would be inserted into the current node, it must instead be foster parented."
    866         // FIXME: processStartTagForInBody(token);
     866        processStartTagForInBody(token);
    867867        break;
    868868    case InColumnGroupMode:
     
    13011301}
    13021302
     1303void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken& token)
     1304{
     1305    ASSERT(token.type() == HTMLToken::EndTag);
     1306    if (token.name() == bodyTag) {
     1307        processBodyEndTagForInBody(token);
     1308        return;
     1309    }
     1310    if (token.name() == htmlTag) {
     1311        AtomicHTMLToken endBody(HTMLToken::EndTag, bodyTag.localName());
     1312        if (processBodyEndTagForInBody(endBody))
     1313            processEndTag(token);
     1314        return;
     1315    }
     1316    if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == buttonTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == listingTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == preTag || token.name() == sectionTag || token.name() == ulTag) {
     1317        if (!m_openElements.inScope(token.name())) {
     1318            parseError(token);
     1319            return;
     1320        }
     1321        generateImpliedEndTags();
     1322        if (currentElement()->tagQName() != token.name())
     1323            parseError(token);
     1324        m_openElements.popUntil(token.name());
     1325        m_openElements.pop();
     1326    }
     1327    if (token.name() == formTag) {
     1328        RefPtr<Element> node = m_formElement.release();
     1329        if (!node || !m_openElements.inScope(node.get())) {
     1330            parseError(token);
     1331            return;
     1332        }
     1333        generateImpliedEndTags();
     1334        if (currentElement() != node.get())
     1335            parseError(token);
     1336        m_openElements.remove(node.get());
     1337    }
     1338    if (token.name() == pTag) {
     1339        if (!m_openElements.inScope(token.name())) {
     1340            parseError(token);
     1341            notImplemented();
     1342            return;
     1343        }
     1344        generateImpliedEndTagsWithExclusion(token.name());
     1345        if (!currentElement()->hasLocalName(token.name()))
     1346            parseError(token);
     1347        m_openElements.popUntil(token.name());
     1348        m_openElements.pop();
     1349        return;
     1350    }
     1351    if (token.name() == liTag) {
     1352        if (!m_openElements.inListItemScope(token.name())) {
     1353            parseError(token);
     1354            return;
     1355        }
     1356        generateImpliedEndTagsWithExclusion(token.name());
     1357        if (!currentElement()->hasLocalName(token.name()))
     1358            parseError(token);
     1359        m_openElements.popUntil(token.name());
     1360        m_openElements.pop();
     1361        return;
     1362    }
     1363    if (token.name() == ddTag || token.name() == dtTag) {
     1364        if (!m_openElements.inScope(token.name())) {
     1365            parseError(token);
     1366            return;
     1367        }
     1368        generateImpliedEndTagsWithExclusion(token.name());
     1369        if (!currentElement()->hasLocalName(token.name()))
     1370            parseError(token);
     1371        m_openElements.popUntil(token.name());
     1372        m_openElements.pop();
     1373        return;
     1374    }
     1375    if (isNumberedHeaderTag(token.name())) {
     1376        if (!m_openElements.inScope(token.name())) {
     1377            parseError(token);
     1378            return;
     1379        }
     1380        generateImpliedEndTags();
     1381        if (!currentElement()->hasLocalName(token.name()))
     1382            parseError(token);
     1383        m_openElements.popUntil(token.name());
     1384        m_openElements.pop();
     1385        return;
     1386    }
     1387    if (token.name() == "sarcasm") {
     1388        notImplemented(); // Take a deep breath.
     1389        return;
     1390    }
     1391    if (isFormattingTag(token.name())) {
     1392        callTheAdoptionAgency(token);
     1393        return;
     1394    }
     1395    if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) {
     1396        if (!m_openElements.inScope(token.name())) {
     1397            parseError(token);
     1398            return;
     1399        }
     1400        generateImpliedEndTags();
     1401        if (currentElement()->tagQName() != token.name())
     1402            parseError(token);
     1403        m_openElements.popUntil(token.name());
     1404        m_openElements.pop();
     1405        m_activeFormattingElements.clearToLastMarker();
     1406        return;
     1407    }
     1408    if (token.name() == brTag) {
     1409        parseError(token);
     1410        reconstructTheActiveFormattingElements();
     1411        // Notice that we lose the attributes.
     1412        AtomicHTMLToken startBr(HTMLToken::StartTag, token.name());
     1413        insertSelfClosingElement(startBr);
     1414        m_framesetOk = false;
     1415        return;
     1416    }
     1417    processAnyOtherEndTagForInBody(token);
     1418}
     1419
    13031420void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
    13041421{
     
    13481465    case InBodyMode:
    13491466        ASSERT(insertionMode() == InBodyMode);
    1350         if (token.name() == bodyTag) {
    1351             processBodyEndTagForInBody(token);
    1352             return;
    1353         }
    1354         if (token.name() == htmlTag) {
    1355             AtomicHTMLToken endBody(HTMLToken::EndTag, bodyTag.localName());
    1356             if (processBodyEndTagForInBody(endBody))
    1357                 processEndTag(token);
    1358             return;
    1359         }
    1360         if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == buttonTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == listingTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == preTag || token.name() == sectionTag || token.name() == ulTag) {
    1361             if (!m_openElements.inScope(token.name())) {
    1362                 parseError(token);
    1363                 return;
    1364             }
    1365             generateImpliedEndTags();
    1366             if (currentElement()->tagQName() != token.name())
    1367                 parseError(token);
    1368             m_openElements.popUntil(token.name());
    1369             m_openElements.pop();
    1370         }
    1371         if (token.name() == formTag) {
    1372             RefPtr<Element> node = m_formElement.release();
    1373             if (!node || !m_openElements.inScope(node.get())) {
    1374                 parseError(token);
    1375                 return;
    1376             }
    1377             generateImpliedEndTags();
    1378             if (currentElement() != node.get())
    1379                 parseError(token);
    1380             m_openElements.remove(node.get());
    1381         }
    1382         if (token.name() == pTag) {
    1383             if (!m_openElements.inScope(token.name())) {
    1384                 parseError(token);
    1385                 notImplemented();
    1386                 return;
    1387             }
    1388             generateImpliedEndTagsWithExclusion(token.name());
    1389             if (!currentElement()->hasLocalName(token.name()))
    1390                 parseError(token);
    1391             m_openElements.popUntil(token.name());
    1392             m_openElements.pop();
    1393             return;
    1394         }
    1395         if (token.name() == liTag) {
    1396             if (!m_openElements.inListItemScope(token.name())) {
    1397                 parseError(token);
    1398                 return;
    1399             }
    1400             generateImpliedEndTagsWithExclusion(token.name());
    1401             if (!currentElement()->hasLocalName(token.name()))
    1402                 parseError(token);
    1403             m_openElements.popUntil(token.name());
    1404             m_openElements.pop();
    1405             return;
    1406         }
    1407         if (token.name() == ddTag || token.name() == dtTag) {
    1408             if (!m_openElements.inScope(token.name())) {
    1409                 parseError(token);
    1410                 return;
    1411             }
    1412             generateImpliedEndTagsWithExclusion(token.name());
    1413             if (!currentElement()->hasLocalName(token.name()))
    1414                 parseError(token);
    1415             m_openElements.popUntil(token.name());
    1416             m_openElements.pop();
    1417             return;
    1418         }
    1419         if (isNumberedHeaderTag(token.name())) {
    1420             if (!m_openElements.inScope(token.name())) {
    1421                 parseError(token);
    1422                 return;
    1423             }
    1424             generateImpliedEndTags();
    1425             if (!currentElement()->hasLocalName(token.name()))
    1426                 parseError(token);
    1427             m_openElements.popUntil(token.name());
    1428             m_openElements.pop();
    1429             return;
    1430         }
    1431         if (token.name() == "sarcasm") {
    1432             notImplemented(); // Take a deep breath.
    1433             return;
    1434         }
    1435         if (isFormattingTag(token.name())) {
    1436             callTheAdoptionAgency(token);
    1437             return;
    1438         }
    1439         if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) {
    1440             if (!m_openElements.inScope(token.name())) {
    1441                 parseError(token);
    1442                 return;
    1443             }
    1444             generateImpliedEndTags();
    1445             if (currentElement()->tagQName() != token.name())
    1446                 parseError(token);
    1447             m_openElements.popUntil(token.name());
    1448             m_openElements.pop();
    1449             m_activeFormattingElements.clearToLastMarker();
    1450             return;
    1451         }
    1452         if (token.name() == brTag) {
    1453             parseError(token);
    1454             reconstructTheActiveFormattingElements();
    1455             // Notice that we lose the attributes.
    1456             AtomicHTMLToken startBr(HTMLToken::StartTag, token.name());
    1457             insertSelfClosingElement(startBr);
    1458             m_framesetOk = false;
    1459             return;
    1460         }
    1461         processAnyOtherEndTagForInBody(token);
     1467        processEndTagForInBody(token);
    14621468        break;
    14631469    case InTableMode:
     
    14781484            return;
    14791485        }
    1480         notImplemented();
     1486        // FIXME: Do we need to worry about "whenever a node would be inserted into the current node, it must instead be foster parented"?
     1487        processEndTagForInBody(token);
    14811488        break;
    14821489    case AfterBodyMode:
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r62527 r62532  
    124124    bool processStartTagForInHead(AtomicHTMLToken&);
    125125    void processStartTagForInBody(AtomicHTMLToken&);
     126    void processEndTagForInBody(AtomicHTMLToken&);
    126127    PassRefPtr<NamedNodeMap> attributesForIsindexInput(AtomicHTMLToken&);
    127128    void processIsindexStartTagForBody(AtomicHTMLToken&);
Note: See TracChangeset for help on using the changeset viewer.