Changeset 62914 in webkit


Ignore:
Timestamp:
Jul 9, 2010 1:11:28 AM (14 years ago)
Author:
abarth@webkit.org
Message:

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

Reviewed by Eric Seidel.

Implementing pending table characters
https://bugs.webkit.org/show_bug.cgi?id=41916

This turned out to not be as scary as I thought it would be.

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::processDoctypeToken): (WebCore::HTMLTreeBuilder::processStartTag): (WebCore::HTMLTreeBuilder::processEndTag): (WebCore::HTMLTreeBuilder::processComment): (WebCore::HTMLTreeBuilder::processCharacter): (WebCore::HTMLTreeBuilder::processEndOfFile): (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode):
  • html/HTMLTreeBuilder.h:

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

Reviewed by Eric Seidel.

Implementing pending table characters
https://bugs.webkit.org/show_bug.cgi?id=41916

This doesn't quite fix all the tests, but it fixes a bunch of them.

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

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r62912 r62914  
     12010-07-09  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Implementing pending table characters
     6        https://bugs.webkit.org/show_bug.cgi?id=41916
     7
     8        This doesn't quite fix all the tests, but it fixes a bunch of them.
     9
     10        * html5lib/runner-expected-html5.txt:
     11
    1122010-07-08  Adam Barth  <abarth@webkit.org>
    213
  • trunk/LayoutTests/html5lib/runner-expected-html5.txt

    r62912 r62914  
    6565|       <div>
    6666|         "hello"
     67|         "excite!"
    6768|         <b>
    6869|           "me!"
    6970|         <table>
    70 |           "excite!"
    7171|           <tbody>
    7272|             <tr>
     
    153153|         href="foo"
    154154|         "br"
     155|       "x"
    155156|       <table>
    156157|         <tbody>
    157158|           <tr>
    158159|             <td>
    159 |           "x"
    160160|     "aoe"
    161161Expected:
     
    189189|       href="blah"
    190190|       "aba"
     191|       "x"
    191192|       <table>
    192193|         <tbody>
     
    196197|                 href="foo"
    197198|                 "br"
    198 |           "x"
    199199|       "aoe"
    200200Expected:
     
    223223|       href="blah"
    224224|       "aba"
     225|     "x"
    225226|     <table>
    226227|       <tbody>
     
    230231|               href="foo"
    231232|               "br"
    232 |         "x"
    233233|     "aoe"
    234234Expected:
     
    283283|               <a>
    284284|     <a>
    285 resources/tests2.dat:
    286 13
    287 
    288 Test 13 of 59 in resources/tests2.dat failed. Input:
    289 <!DOCTYPE html><table><tr>TEST
    290 Got:
    291 | <!DOCTYPE html>
    292 | <html>
    293 |   <head>
    294 |   <body>
    295 |     <table>
    296 |       <tbody>
    297 |         <tr>
    298 |           "TEST"
    299 Expected:
    300 | <!DOCTYPE html>
    301 | <html>
    302 |   <head>
    303 |   <body>
    304 |     "TEST"
    305 |     <table>
    306 |       <tbody>
    307 |         <tr>
     285resources/tests2.dat: PASS
     286
    308287resources/tests3.dat:
    30928816
     
    413392
    414393resources/tests6.dat:
    415 26
    41639427
    41739530
     
    42139947
    422400
    423 Test 26 of 51 in resources/tests6.dat failed. Input:
    424 <table><colgroup>foo
    425 Got:
    426 | <html>
    427 |   <head>
    428 |   <body>
    429 |     <table>
    430 |       <colgroup>
    431 |       "foo"
    432 Expected:
    433 | <html>
    434 |   <head>
    435 |   <body>
    436 |     "foo"
    437 |     <table>
    438 |       <colgroup>
    439 
    440401Test 27 of 51 in resources/tests6.dat failed. Input:
    441402foo<col>
     
    493454|   <body>
    494455resources/tests7.dat:
    495 6
    496 16
    49745624
    49845727
     
    50146030
    502461
    503 Test 6 of 30 in resources/tests7.dat failed. Input:
    504 <!doctype html><table>X<tr><td><table> <meta></table></table>
    505 Got:
    506 | <!DOCTYPE html>
    507 | <html>
    508 |   <head>
    509 |   <body>
    510 |     <table>
    511 |       "X"
    512 |       <tbody>
    513 |         <tr>
    514 |           <td>
    515 |             <meta>
    516 |             <table>
    517 |               " "
    518 Expected:
    519 | <!DOCTYPE html>
    520 | <html>
    521 |   <head>
    522 |   <body>
    523 |     "X"
    524 |     <table>
    525 |       <tbody>
    526 |         <tr>
    527 |           <td>
    528 |             <meta>
    529 |             <table>
    530 |               " "
    531 
    532 Test 16 of 30 in resources/tests7.dat failed. Input:
    533 <!doctype html><table>X<input type=hidDEN></table>
    534 Got:
    535 | <!DOCTYPE html>
    536 | <html>
    537 |   <head>
    538 |   <body>
    539 |     <table>
    540 |       "X"
    541 |       <input>
    542 |         type="hidDEN"
    543 Expected:
    544 | <!DOCTYPE html>
    545 | <html>
    546 |   <head>
    547 |   <body>
    548 |     "X"
    549 |     <table>
    550 |       <input>
    551 |         type="hidDEN"
    552 
    553462Test 24 of 30 in resources/tests7.dat failed. Input:
    554463<body>X</body></body>
     
    567476|   <body>
    568477|     <b>
     478|     "bbb"
    569479|     <table>
    570480|       <tbody>
     
    572482|           <td>
    573483|             "aaa"
    574 |         "bbb"
    575484|     "ccc"
    576485Expected:
     
    596505|   <body>
    597506|     "A"
     507|     " B"
     508|     " B"
    598509|     <table>
    599510|       <tbody>
    600511|         <tr>
    601 |           " B"
    602 |         " B"
    603512Expected:
    604513| <html>
     
    617526|   <body>
    618527|     "A"
     528|     " B"
    619529|     <table>
    620530|       <tbody>
    621531|         <tr>
    622 |           " B"
    623532|         " C"
    624533Expected:
     
    654563resources/tests8.dat:
    6555646
    656 7
    657565
    658566Test 6 of 9 in resources/tests8.dat failed. Input:
     
    663571|   <body>
    664572|     "x"
    665 |     <table>
    666 |       "x"
     573|     "x"
     574|     <table>
    667575Expected:
    668576| <html>
     
    670578|   <body>
    671579|     "xx"
    672 |     <table>
    673 
    674 Test 7 of 9 in resources/tests8.dat failed. Input:
    675 x<table><table>x
    676 Got:
    677 | <html>
    678 |   <head>
    679 |   <body>
    680 |     "x"
    681 |     <table>
    682 |     <table>
    683 |       "x"
    684 Expected:
    685 | <html>
    686 |   <head>
    687 |   <body>
    688 |     "x"
    689 |     <table>
    690 |     "x"
    691580|     <table>
    692581resources/tests9.dat:
     
    27802669resources/tests14.dat: PASS
    27812670
    2782 resources/tests15.dat:
    2783 7
    2784 8
    2785 9
    2786 10
    2787 11
    2788 
    2789 Test 7 of 14 in resources/tests15.dat failed. Input:
    2790 <!doctype html><table> X<meta></table>
    2791 Got:
    2792 | <!DOCTYPE html>
    2793 | <html>
    2794 |   <head>
    2795 |   <body>
    2796 |     <meta>
    2797 |     <table>
    2798 |       " X"
    2799 Expected:
    2800 | <!DOCTYPE html>
    2801 | <html>
    2802 |   <head>
    2803 |   <body>
    2804 |     " X"
    2805 |     <meta>
    2806 |     <table>
    2807 
    2808 Test 8 of 14 in resources/tests15.dat failed. Input:
    2809 <!doctype html><table> x</table>
    2810 Got:
    2811 | <!DOCTYPE html>
    2812 | <html>
    2813 |   <head>
    2814 |   <body>
    2815 |     <table>
    2816 |       " x"
    2817 Expected:
    2818 | <!DOCTYPE html>
    2819 | <html>
    2820 |   <head>
    2821 |   <body>
    2822 |     " x"
    2823 |     <table>
    2824 
    2825 Test 9 of 14 in resources/tests15.dat failed. Input:
    2826 <!doctype html><table> x </table>
    2827 Got:
    2828 | <!DOCTYPE html>
    2829 | <html>
    2830 |   <head>
    2831 |   <body>
    2832 |     <table>
    2833 |       " x "
    2834 Expected:
    2835 | <!DOCTYPE html>
    2836 | <html>
    2837 |   <head>
    2838 |   <body>
    2839 |     " x "
    2840 |     <table>
    2841 
    2842 Test 10 of 14 in resources/tests15.dat failed. Input:
    2843 <!doctype html><table><tr> x</table>
    2844 Got:
    2845 | <!DOCTYPE html>
    2846 | <html>
    2847 |   <head>
    2848 |   <body>
    2849 |     <table>
    2850 |       <tbody>
    2851 |         <tr>
    2852 |           " x"
    2853 Expected:
    2854 | <!DOCTYPE html>
    2855 | <html>
    2856 |   <head>
    2857 |   <body>
    2858 |     " x"
    2859 |     <table>
    2860 |       <tbody>
    2861 |         <tr>
    2862 
    2863 Test 11 of 14 in resources/tests15.dat failed. Input:
    2864 <!doctype html><table>X<style> <tr>x </style> </table>
    2865 Got:
    2866 | <!DOCTYPE html>
    2867 | <html>
    2868 |   <head>
    2869 |   <body>
    2870 |     <table>
    2871 |       "X"
    2872 |       <style>
    2873 |         " <tr>x "
    2874 |       " "
    2875 Expected:
    2876 | <!DOCTYPE html>
    2877 | <html>
    2878 |   <head>
    2879 |   <body>
    2880 |     "X"
    2881 |     <table>
    2882 |       <style>
    2883 |         " <tr>x "
    2884 |       " "
     2671resources/tests15.dat: PASS
     2672
    28852673resources/tests16.dat: PASS
    28862674
     
    29502738resources/isindex.dat: PASS
    29512739
    2952 resources/tables01.dat:
    2953 4
    2954 
    2955 Test 4 of 15 in resources/tables01.dat failed. Input:
    2956 <table><colgroup></html>foo
    2957 Got:
    2958 | <html>
    2959 |   <head>
    2960 |   <body>
    2961 |     <table>
    2962 |       <colgroup>
    2963 |       "foo"
    2964 Expected:
    2965 | <html>
    2966 |   <head>
    2967 |   <body>
    2968 |     "foo"
    2969 |     <table>
    2970 |       <colgroup>
     2740resources/tables01.dat: PASS
    29712741#EOF
  • trunk/WebCore/ChangeLog

    r62912 r62914  
     12010-07-09  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Implementing pending table characters
     6        https://bugs.webkit.org/show_bug.cgi?id=41916
     7
     8        This turned out to not be as scary as I thought it would be.
     9
     10        * html/HTMLTreeBuilder.cpp:
     11        (WebCore::HTMLTreeBuilder::processDoctypeToken):
     12        (WebCore::HTMLTreeBuilder::processStartTag):
     13        (WebCore::HTMLTreeBuilder::processEndTag):
     14        (WebCore::HTMLTreeBuilder::processComment):
     15        (WebCore::HTMLTreeBuilder::processCharacter):
     16        (WebCore::HTMLTreeBuilder::processEndOfFile):
     17        (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode):
     18        * html/HTMLTreeBuilder.h:
     19
    1202010-07-08  Adam Barth  <abarth@webkit.org>
    221
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r62912 r62914  
    108108        m_current = m_end;
    109109        return String(start, m_current - start);
     110    }
     111
     112    void giveRemainingTo(Vector<UChar>& recipient)
     113    {
     114        recipient.append(m_current, m_end - m_current);
     115        m_current = m_end;
    110116    }
    111117
     
    532538{
    533539    ASSERT(token.type() == HTMLToken::DOCTYPE);
    534     if (insertionMode() == InitialMode) {
     540    if (m_insertionMode == InitialMode) {
    535541        m_tree.insertDoctype(token);
     542        return;
     543    }
     544    if (m_insertionMode == InTableTextMode) {
     545        processDefaultForInTableTextMode(token);
     546        processDoctypeToken(token);
    536547        return;
    537548    }
     
    13291340        }
    13301341        break;
     1342    case InTableTextMode:
     1343        processDefaultForInTableTextMode(token);
     1344        processStartTag(token);
     1345        break;
    13311346    case TextMode:
    1332     case InTableTextMode:
    13331347    case InForeignContentMode:
    13341348        notImplemented();
     
    21102124        break;
    21112125    case InTableTextMode:
     2126        processDefaultForInTableTextMode(token);
     2127        processEndTag(token);
     2128        break;
    21122129    case InForeignContentMode:
    21132130        notImplemented();
     
    21282145    if (m_insertionMode == AfterBodyMode) {
    21292146        m_tree.insertCommentOnHTMLHtmlElement(token);
     2147        return;
     2148    }
     2149    if (m_insertionMode == InTableTextMode) {
     2150        processDefaultForInTableTextMode(token);
     2151        processComment(token);
    21302152        return;
    21312153    }
     
    22042226    case InRowMode: {
    22052227        ASSERT(insertionMode() == InTableMode || insertionMode() == InTableBodyMode || insertionMode() == InRowMode);
    2206         notImplemented(); // Crazy pending characters.
    2207         m_tree.insertTextNode(buffer.takeRemaining());
    2208         break;
     2228        ASSERT(m_pendingTableCharacters.isEmpty());
     2229        m_originalInsertionMode = m_insertionMode;
     2230        m_insertionMode = InTableTextMode;
     2231        // Fall through.
    22092232    }
    22102233    case InTableTextMode: {
    2211         notImplemented(); // Crazy pending characters.
     2234        buffer.giveRemainingTo(m_pendingTableCharacters);
    22122235        break;
    22132236    }
     
    23452368        processEndOfFile(token);
    23462369        break;
     2370    case InTableTextMode:
     2371        processDefaultForInTableTextMode(token);
     2372        processEndOfFile(token);
     2373        break;
    23472374    case TextMode:
    2348     case InTableTextMode:
    23492375    case InCaptionMode:
    23502376    case InRowMode:
     
    23922418    processStartTag(startBody);
    23932419    m_framesetOk = true;
     2420}
     2421
     2422void HTMLTreeBuilder::processDefaultForInTableTextMode(AtomicHTMLToken& token)
     2423{
     2424    String characters = String::adopt(m_pendingTableCharacters);
     2425    if (hasNonWhitespace(characters)) {
     2426        parseError(token);
     2427        HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement()));
     2428        m_tree.reconstructTheActiveFormattingElements();
     2429        m_tree.insertTextNode(characters);
     2430        m_framesetOk = false;
     2431        m_insertionMode = m_originalInsertionMode;
     2432        return;
     2433    }
     2434    m_tree.insertTextNode(characters);
     2435    m_insertionMode = m_originalInsertionMode;
    23942436}
    23952437
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r62912 r62914  
    151151    void processDefaultForInHeadNoscriptMode(AtomicHTMLToken&);
    152152    void processDefaultForAfterHeadMode(AtomicHTMLToken&);
     153    void processDefaultForInTableTextMode(AtomicHTMLToken&);
    153154
    154155    PassRefPtr<NamedNodeMap> attributesForIsindexInput(AtomicHTMLToken&);
     
    188189    InsertionMode m_originalInsertionMode;
    189190    InsertionMode m_secondaryInsertionMode;
     191
     192    // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#pending-table-character-tokens
     193    Vector<UChar> m_pendingTableCharacters;
    190194
    191195    // HTML5 spec requires that we be able to change the state of the tokenizer
Note: See TracChangeset for help on using the changeset viewer.