Changeset 142497 in webkit


Ignore:
Timestamp:
Feb 11, 2013 12:41:49 PM (11 years ago)
Author:
eric@webkit.org
Message:

Make WebVTTTokenizer stop inheriting from MarkupTokenizerBase
https://bugs.webkit.org/show_bug.cgi?id=109411

Reviewed by Adam Barth.

Moved InputStreamPreprocessor into its own header file so it can be
used by both WebVTTTokenizer and HTMLTokenizer.

Also split out kEndOfFileMarker from InputStreamPreprocessor<T> so that
it can be used w/o a specific instantiation of the template class.
This also made it possible to fix three old fixmes about wanting to share
that constant.

Again, separating WebVTT code from Markup* base classes made it simpler
at the cost of a little copy/paste code. WebVTT tokenization is remarkably
simple compared to HTML.

This will make it immediately possible to pull MarkupTokenizerBase up into
HTMLTokenizer and further simplify the code.

  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.vcxproj/WebCore.vcxproj:
  • WebCore.vcxproj/WebCore.vcxproj.filters:
  • WebCore.xcodeproj/project.pbxproj:
  • html/parser/BackgroundHTMLParser.cpp:

(WebCore::BackgroundHTMLParser::markEndOfFile):

  • html/parser/HTMLInputStream.h:

(WebCore::HTMLInputStream::markEndOfFile):

  • html/parser/HTMLTokenizer.cpp:

(WebCore::HTMLTokenizer::nextToken):

  • html/parser/InputStreamPreprocessor.h: Added.

(WebCore):
(InputStreamPreprocessor):
(WebCore::InputStreamPreprocessor::InputStreamPreprocessor):
(WebCore::InputStreamPreprocessor::nextInputCharacter):
(WebCore::InputStreamPreprocessor::peek):
(WebCore::InputStreamPreprocessor::advance):
(WebCore::InputStreamPreprocessor::skipNextNewLine):
(WebCore::InputStreamPreprocessor::reset):
(WebCore::InputStreamPreprocessor::shouldTreatNullAsEndOfFileMarker):

  • html/track/WebVTTTokenizer.cpp:

(WebCore::WebVTTTokenizer::WebVTTTokenizer):
(WebCore::WebVTTTokenizer::nextToken):

  • html/track/WebVTTTokenizer.h:

(WebVTTTokenizer):
(WebCore::WebVTTTokenizer::haveBufferedCharacterToken):
(WebCore::WebVTTTokenizer::bufferCharacter):
(WebCore::WebVTTTokenizer::emitAndResumeIn):
(WebCore::WebVTTTokenizer::emitEndOfFile):
(WebCore::WebVTTTokenizer::shouldSkipNullCharacters):

  • xml/parser/MarkupTokenizerBase.h:

(MarkupTokenizerBase):
(WebCore::MarkupTokenizerBase::bufferCharacter):

Location:
trunk/Source/WebCore
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r142492 r142497  
     12013-02-11  Eric Seidel  <eric@webkit.org>
     2
     3        Make WebVTTTokenizer stop inheriting from MarkupTokenizerBase
     4        https://bugs.webkit.org/show_bug.cgi?id=109411
     5
     6        Reviewed by Adam Barth.
     7
     8        Moved InputStreamPreprocessor into its own header file so it can be
     9        used by both WebVTTTokenizer and HTMLTokenizer.
     10
     11        Also split out kEndOfFileMarker from InputStreamPreprocessor<T> so that
     12        it can be used w/o a specific instantiation of the template class.
     13        This also made it possible to fix three old fixmes about wanting to share
     14        that constant.
     15
     16        Again, separating WebVTT code from Markup* base classes made it simpler
     17        at the cost of a little copy/paste code.  WebVTT tokenization is remarkably
     18        simple compared to HTML.
     19
     20        This will make it immediately possible to pull MarkupTokenizerBase up into
     21        HTMLTokenizer and further simplify the code.
     22
     23        * GNUmakefile.list.am:
     24        * Target.pri:
     25        * WebCore.gypi:
     26        * WebCore.vcproj/WebCore.vcproj:
     27        * WebCore.vcxproj/WebCore.vcxproj:
     28        * WebCore.vcxproj/WebCore.vcxproj.filters:
     29        * WebCore.xcodeproj/project.pbxproj:
     30        * html/parser/BackgroundHTMLParser.cpp:
     31        (WebCore::BackgroundHTMLParser::markEndOfFile):
     32        * html/parser/HTMLInputStream.h:
     33        (WebCore::HTMLInputStream::markEndOfFile):
     34        * html/parser/HTMLTokenizer.cpp:
     35        (WebCore::HTMLTokenizer::nextToken):
     36        * html/parser/InputStreamPreprocessor.h: Added.
     37        (WebCore):
     38        (InputStreamPreprocessor):
     39        (WebCore::InputStreamPreprocessor::InputStreamPreprocessor):
     40        (WebCore::InputStreamPreprocessor::nextInputCharacter):
     41        (WebCore::InputStreamPreprocessor::peek):
     42        (WebCore::InputStreamPreprocessor::advance):
     43        (WebCore::InputStreamPreprocessor::skipNextNewLine):
     44        (WebCore::InputStreamPreprocessor::reset):
     45        (WebCore::InputStreamPreprocessor::shouldTreatNullAsEndOfFileMarker):
     46        * html/track/WebVTTTokenizer.cpp:
     47        (WebCore::WebVTTTokenizer::WebVTTTokenizer):
     48        (WebCore::WebVTTTokenizer::nextToken):
     49        * html/track/WebVTTTokenizer.h:
     50        (WebVTTTokenizer):
     51        (WebCore::WebVTTTokenizer::haveBufferedCharacterToken):
     52        (WebCore::WebVTTTokenizer::bufferCharacter):
     53        (WebCore::WebVTTTokenizer::emitAndResumeIn):
     54        (WebCore::WebVTTTokenizer::emitEndOfFile):
     55        (WebCore::WebVTTTokenizer::shouldSkipNullCharacters):
     56        * xml/parser/MarkupTokenizerBase.h:
     57        (MarkupTokenizerBase):
     58        (WebCore::MarkupTokenizerBase::bufferCharacter):
     59
    1602013-02-11  Adam Barth  <abarth@webkit.org>
    261
  • trunk/Source/WebCore/GNUmakefile.list.am

    r142460 r142497  
    36193619        Source/WebCore/html/parser/HTMLViewSourceParser.cpp \
    36203620        Source/WebCore/html/parser/HTMLViewSourceParser.h \
     3621        Source/WebCore/html/parser/InputStreamPreprocessor.h \
    36213622        Source/WebCore/html/parser/NestingLevelIncrementer.h \
    36223623        Source/WebCore/html/parser/TextDocumentParser.cpp \
  • trunk/Source/WebCore/Target.pri

    r142460 r142497  
    19361936    html/parser/HTMLTreeBuilder.h \
    19371937    html/parser/HTMLViewSourceParser.h \
     1938    html/parser/InputStreamPreprocessor.h \
    19381939    html/parser/XSSAuditor.h \
    19391940    html/parser/XSSAuditorDelegate.h \
  • trunk/Source/WebCore/WebCore.gypi

    r142474 r142497  
    34283428            'html/parser/HTMLViewSourceParser.cpp',
    34293429            'html/parser/HTMLViewSourceParser.h',
     3430            'html/parser/InputStreamPreprocessor.h',
    34303431            'html/parser/NestingLevelIncrementer.h',
    34313432            'html/parser/TextDocumentParser.cpp',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r142474 r142497  
    6501165011                                </File>
    6501265012                                <File
     65013                                        RelativePath="..\html\parser\InputStreamPreprocessor.h"
     65014                                        >
     65015                                </File>
     65016                                <File
    6501365017                                        RelativePath="..\html\parser\NestingLevelIncrementer.h"
    6501465018                                        >
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r142460 r142497  
    79547954    <ClInclude Include="..\html\parser\HTMLTreeBuilder.h" />
    79557955    <ClInclude Include="..\html\parser\HTMLViewSourceParser.h" />
     7956    <ClInclude Include="..\html\parser\InputStreamPreprocessor.h" />
    79567957    <ClInclude Include="..\html\parser\NestingLevelIncrementer.h" />
    79577958    <ClInclude Include="..\html\parser\TextDocumentParser.h" />
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r142460 r142497  
    1261312613      <Filter>html\parser</Filter>
    1261412614    </ClInclude>
     12615    <ClInclude Include="..\html\parser\InputStreamPreprocessor.h">
     12616      <Filter>html\parser</Filter>
     12617    </ClInclude>
    1261512618    <ClInclude Include="..\html\parser\NestingLevelIncrementer.h">
    1261612619      <Filter>html\parser</Filter>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r142460 r142497  
    15621562                510D4A37103165EE0049EA54 /* SocketStreamHandleBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 510D4A31103165EE0049EA54 /* SocketStreamHandleBase.h */; };
    15631563                510D4A38103165EE0049EA54 /* SocketStreamHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */; };
     1564                5112935F3D54B4B52FAF973F /* InspectorHeapProfilerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */; };
     1565                511293603D60B4B52FAF973F /* InspectorHeapProfilerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */; };
    15641566                511F23170DC160DA004F0032 /* StorageTask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511F23130DC160DA004F0032 /* StorageTask.cpp */; };
    15651567                511F23180DC160DA004F0032 /* StorageTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F23140DC160DA004F0032 /* StorageTask.h */; };
     
    38163818                9F0D6B2E121BFEBA006C0288 /* InspectorProfilerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */; };
    38173819                9F0D6B2F121BFEBA006C0288 /* InspectorProfilerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */; };
    3818                 5112935F3D54B4B52FAF973F /* InspectorHeapProfilerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */; };
    3819                 511293603D60B4B52FAF973F /* InspectorHeapProfilerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */; };
    38203820                9F3B947E12241758005304E7 /* ScriptHeapSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3B947D12241758005304E7 /* ScriptHeapSnapshot.h */; };
    38213821                9F6FC1961122E82A00E80196 /* ScriptDebugServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */; };
     
    89778977                510D4A31103165EE0049EA54 /* SocketStreamHandleBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketStreamHandleBase.h; sourceTree = "<group>"; };
    89788978                510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketStreamHandleClient.h; sourceTree = "<group>"; };
     8979                511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorHeapProfilerAgent.cpp; sourceTree = "<group>"; };
     8980                511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorHeapProfilerAgent.h; sourceTree = "<group>"; };
    89798981                511F23130DC160DA004F0032 /* StorageTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageTask.cpp; sourceTree = "<group>"; };
    89808982                511F23140DC160DA004F0032 /* StorageTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageTask.h; sourceTree = "<group>"; };
     
    1128311285                9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorProfilerAgent.cpp; sourceTree = "<group>"; };
    1128411286                9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorProfilerAgent.h; sourceTree = "<group>"; };
    11285                 511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorHeapProfilerAgent.cpp; sourceTree = "<group>"; };
    11286                 511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorHeapProfilerAgent.h; sourceTree = "<group>"; };
    1128711287                9F3B947D12241758005304E7 /* ScriptHeapSnapshot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptHeapSnapshot.h; sourceTree = "<group>"; };
    1128811288                9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptDebugServer.cpp; sourceTree = "<group>"; };
     
    1171811718                A8748D6612CC3763001FBA41 /* ImageOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageOrientation.h; sourceTree = "<group>"; };
    1171911719                A8748D7412CC3F89001FBA41 /* ImageOrientation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageOrientation.cpp; sourceTree = "<group>"; };
     11720                A8805AF116C96AEA000E9D98 /* InputStreamPreprocessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InputStreamPreprocessor.h; path = parser/InputStreamPreprocessor.h; sourceTree = "<group>"; };
    1172011721                A882DA1F1593846A000115ED /* CSSToStyleMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSToStyleMap.cpp; sourceTree = "<group>"; };
    1172111722                A882DA221593848D000115ED /* CSSToStyleMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSToStyleMap.h; sourceTree = "<group>"; };
     
    1486514866                        isa = PBXGroup;
    1486614867                        children = (
    14867                                 CDA98DCD1601515C00FEA3B1 /* EncryptedMedia */,
    1486814868                                A83B79100CCB001B000B0825 /* Core */,
    1486914869                                A83B790E0CCAFF97000B0825 /* CSS */,
     14870                                CDA98DCD1601515C00FEA3B1 /* EncryptedMedia */,
    1487014871                                A83B79120CCB003F000B0825 /* Events */,
    1487114872                                89878576122CA1DA003AABDA /* FileAPI */,
     
    1557015571                                A7BE7EDD14C9175A0014489D /* MallocStatistics.h */,
    1557115572                                A7BE7EDE14C9175A0014489D /* MallocStatistics.idl */,
     15573                                CDC26B3C160A62B00026757B /* MockCDM.cpp */,
     15574                                CDC26B3D160A62B00026757B /* MockCDM.h */,
    1557215575                                EB081CD81696084400553730 /* TypeConversions.h */,
    1557315576                                EB081CD91696084400553730 /* TypeConversions.idl */,
    15574                                 CDC26B3C160A62B00026757B /* MockCDM.cpp */,
    15575                                 CDC26B3D160A62B00026757B /* MockCDM.h */,
    1557615577                        );
    1557715578                        path = testing;
     
    1874918750                                977B3860122883E900B81FF8 /* HTMLViewSourceParser.cpp */,
    1875018751                                977B3861122883E900B81FF8 /* HTMLViewSourceParser.h */,
     18752                                A8805AF116C96AEA000E9D98 /* InputStreamPreprocessor.h */,
    1875118753                                8A309C9E123950BE00CB9204 /* NestingLevelIncrementer.h */,
    1875218754                                97BC84811236FD93000C6161 /* TextDocumentParser.cpp */,
     
    2153921541                                C5BAC16F14E30E4700008837 /* PlatformPasteboard.h */,
    2154021542                                BCEC01D60C274EB4009F4EC9 /* PlatformScreen.h */,
     21543                                2527CC9516BF95DD009DDAC0 /* PlatformSpeechSynthesisUtterance.cpp */,
     21544                                2527CC9116BF8BA1009DDAC0 /* PlatformSpeechSynthesisUtterance.h */,
     21545                                2527CC9316BF92EC009DDAC0 /* PlatformSpeechSynthesisVoice.cpp */,
     21546                                2527CC9216BF90B4009DDAC0 /* PlatformSpeechSynthesisVoice.h */,
    2154121547                                297BE3D916C043D8003316BD /* PlatformSpeechSynthesizer.cpp */,
    2154221548                                29E4D8DF16B0940F00C84704 /* PlatformSpeechSynthesizer.h */,
    21543                                 2527CC9316BF92EC009DDAC0 /* PlatformSpeechSynthesisVoice.cpp */,
    21544                                 2527CC9216BF90B4009DDAC0 /* PlatformSpeechSynthesisVoice.h */,
    21545                                 2527CC9516BF95DD009DDAC0 /* PlatformSpeechSynthesisUtterance.cpp */,
    21546                                 2527CC9116BF8BA1009DDAC0 /* PlatformSpeechSynthesisUtterance.h */,
    2154721549                                1AD8F81A11CAB9E900E93E54 /* PlatformStrategies.cpp */,
    2154821550                                1AD8F81911CAB9E900E93E54 /* PlatformStrategies.h */,
     
    2163421636                        isa = PBXGroup;
    2163521637                        children = (
     21638                                CDA98E091603CD5900FEA3B1 /* CDM.cpp */,
     21639                                CDA98E0A1603CD5900FEA3B1 /* CDM.h */,
    2163621640                                CDA98DD516025BED00FEA3B1 /* MediaKeyMessageEvent.cpp */,
    2163721641                                CDA98DD616025BED00FEA3B1 /* MediaKeyMessageEvent.h */,
     
    2164621650                                CDA98DC816014F2C00FEA3B1 /* MediaKeySession.h */,
    2164721651                                CDA98DC916014F4000FEA3B1 /* MediaKeySession.idl */,
    21648                                 CDA98E091603CD5900FEA3B1 /* CDM.cpp */,
    21649                                 CDA98E0A1603CD5900FEA3B1 /* CDM.h */,
    2165021652                                CDA98E0C1603CF3C00FEA3B1 /* Modules/encryptedmedia/CDMPrivate.h */,
    2165121653                        );
     
    2308823090                                A740B59514C935AB00A77FA4 /* JSMallocStatistics.h in Headers */,
    2308923091                                EBF5121D1696496C0056BD25 /* JSTypeConversions.h in Headers */,
     23092                                CDC26B41160A8CCE0026757B /* MockCDM.h in Headers */,
    2309023093                                41815C1F138319830057AAA4 /* WebCoreTestSupport.h in Headers */,
    23091                                 CDC26B41160A8CCE0026757B /* MockCDM.h in Headers */,
    2309223094                        );
    2309323095                        runOnlyForDeploymentPostprocessing = 0;
     
    2682326825                                A740B59714C935AF00A77FA4 /* JSMallocStatistics.cpp in Sources */,
    2682426826                                EBF5121C1696496C0056BD25 /* JSTypeConversions.cpp in Sources */,
     26827                                CDC26B40160A8CC60026757B /* MockCDM.cpp in Sources */,
    2682526828                                41815C1E138319830057AAA4 /* WebCoreTestSupport.cpp in Sources */,
    26826                                 CDC26B40160A8CC60026757B /* MockCDM.cpp in Sources */,
    2682726829                        );
    2682826830                        runOnlyForDeploymentPostprocessing = 0;
     
    2698126983                                079D086C162F21F900DB8658 /* CaptionUserPreferencesMac.mm in Sources */,
    2698226984                                6550B69D099DF0270090D781 /* CDATASection.cpp in Sources */,
     26985                                CDA98E0B1603CD6000FEA3B1 /* CDM.cpp in Sources */,
    2698326986                                97BC69DC1505F076001B74AC /* ChangeVersionWrapper.cpp in Sources */,
    2698426987                                FD315FFE12B0267600C1A359 /* ChannelMergerNode.cpp in Sources */,
     
    2829228295                                FD23A12513F5FA5900F67001 /* JSMediaElementAudioSourceNode.cpp in Sources */,
    2829328296                                E44614180CD6826900FADA75 /* JSMediaError.cpp in Sources */,
     28297                                CDA98DA31601464100FEA3B1 /* JSMediaKeyError.cpp in Sources */,
    2829428298                                CDB859FA160D494900E5B07F /* JSMediaKeyEvent.cpp in Sources */,
     28299                                CDA98DDF16026A3700FEA3B1 /* JSMediaKeyMessageEvent.cpp in Sources */,
     28300                                CDA98DE016026A3700FEA3B1 /* JSMediaKeyNeededEvent.cpp in Sources */,
     28301                                CDA98E0416039E1A00FEA3B1 /* JSMediaKeys.cpp in Sources */,
     28302                                CDA98E0616039E1F00FEA3B1 /* JSMediaKeySession.cpp in Sources */,
    2829528303                                BC3C39B60C0D3D8D005F4D7A /* JSMediaList.cpp in Sources */,
    2829628304                                1464E06C135EC10600FDB00A /* JSMediaListCustom.cpp in Sources */,
     
    2871128719                                07A6D1EB1491137700051D0C /* MediaFragmentURIParser.cpp in Sources */,
    2871228720                                CDB859F7160D48A400E5B07F /* MediaKeyEvent.cpp in Sources */,
     28721                                CDA98DD816025BEF00FEA3B1 /* MediaKeyMessageEvent.cpp in Sources */,
     28722                                CD1B4A65160786AE00282DF9 /* MediaKeyNeededEvent.cpp in Sources */,
     28723                                CDA98E0D1603FE4A00FEA3B1 /* MediaKeys.cpp in Sources */,
     28724                                CDA98E0E1603FE5800FEA3B1 /* MediaKeySession.cpp in Sources */,
    2871328725                                A8EA80090A19516E00A8EF5F /* MediaList.cpp in Sources */,
    2871428726                                E44613E30CD6819F00FADA75 /* MediaPlayer.cpp in Sources */,
     
    2885628868                                C598902E14E9B0F800E8D18B /* PlatformPasteboardMac.mm in Sources */,
    2885728869                                BC94D1080C274F88006BC617 /* PlatformScreenMac.mm in Sources */,
     28870                                2934940B16C02C0A00901318 /* PlatformSpeechSynthesisUtterance.cpp in Sources */,
    2885828871                                2934940A16C02C0700901318 /* PlatformSpeechSynthesisVoice.cpp in Sources */,
    28859                                 2934940B16C02C0A00901318 /* PlatformSpeechSynthesisUtterance.cpp in Sources */,
     28872                                297BE3DA16C043D8003316BD /* PlatformSpeechSynthesizer.cpp in Sources */,
    2886028873                                297BE3D816C03CCE003316BD /* PlatformSpeechSynthesizerMac.mm in Sources */,
    28861                                 297BE3DA16C043D8003316BD /* PlatformSpeechSynthesizer.cpp in Sources */,
    2886228874                                1AD8F81C11CAB9E900E93E54 /* PlatformStrategies.cpp in Sources */,
    2886328875                                A9C6E4F30D745E48006442E9 /* PluginData.cpp in Sources */,
     
    2967229684                                977E2E0E12F0FC9C00C13380 /* XSSAuditorDelegate.cpp in Sources */,
    2967329685                                FD537352137B651800008DCE /* ZeroPole.cpp in Sources */,
    29674                                 CDA98DA31601464100FEA3B1 /* JSMediaKeyError.cpp in Sources */,
    29675                                 CDA98DD816025BEF00FEA3B1 /* MediaKeyMessageEvent.cpp in Sources */,
    29676                                 CDA98DDF16026A3700FEA3B1 /* JSMediaKeyMessageEvent.cpp in Sources */,
    29677                                 CDA98DE016026A3700FEA3B1 /* JSMediaKeyNeededEvent.cpp in Sources */,
    29678                                 CDA98E0416039E1A00FEA3B1 /* JSMediaKeys.cpp in Sources */,
    29679                                 CDA98E0616039E1F00FEA3B1 /* JSMediaKeySession.cpp in Sources */,
    29680                                 CDA98E0B1603CD6000FEA3B1 /* CDM.cpp in Sources */,
    29681                                 CDA98E0D1603FE4A00FEA3B1 /* MediaKeys.cpp in Sources */,
    29682                                 CDA98E0E1603FE5800FEA3B1 /* MediaKeySession.cpp in Sources */,
    29683                                 CD1B4A65160786AE00282DF9 /* MediaKeyNeededEvent.cpp in Sources */,
    2968429686                        );
    2968529687                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebCore/html/parser/BackgroundHTMLParser.cpp

    r142363 r142497  
    107107void BackgroundHTMLParser::markEndOfFile()
    108108{
    109     // FIXME: This should use InputStreamPreprocessor::endOfFileMarker
    110     // once InputStreamPreprocessor is split off into its own header.
    111     const LChar endOfFileMarker = 0;
    112 
    113109    ASSERT(!m_input.current().isClosed());
    114     m_input.append(String(&endOfFileMarker, 1));
     110    m_input.append(String(&kEndOfFileMarker, 1));
    115111    m_input.close();
    116112}
  • trunk/Source/WebCore/html/parser/HTMLInputStream.h

    r124679 r142497  
    2727#define HTMLInputStream_h
    2828
     29#include "InputStreamPreprocessor.h"
    2930#include "SegmentedString.h"
    3031
     
    7374    void markEndOfFile()
    7475    {
    75         // FIXME: This should use InputStreamPreprocessor::endOfFileMarker
    76         // once InputStreamPreprocessor is split off into its own header.
    77         static const LChar endOfFileMarker = 0;
    78         m_last->append(SegmentedString(String(&endOfFileMarker, 1)));
     76        m_last->append(SegmentedString(String(&kEndOfFileMarker, 1)));
    7977        m_last->close();
    8078    }
  • trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp

    r142480 r142497  
    254254            }
    255255            HTML_ADVANCE_TO(TagOpenState);
    256         } else if (cc == InputStreamPreprocessor::endOfFileMarker)
     256        } else if (cc == kEndOfFileMarker)
    257257            return emitEndOfFile(source);
    258258        else {
     
    275275        else if (cc == '<')
    276276            HTML_ADVANCE_TO(RCDATALessThanSignState);
    277         else if (cc == InputStreamPreprocessor::endOfFileMarker)
     277        else if (cc == kEndOfFileMarker)
    278278            return emitEndOfFile(source);
    279279        else {
     
    294294        if (cc == '<')
    295295            HTML_ADVANCE_TO(RAWTEXTLessThanSignState);
    296         else if (cc == InputStreamPreprocessor::endOfFileMarker)
     296        else if (cc == kEndOfFileMarker)
    297297            return emitEndOfFile(source);
    298298        else {
     
    306306        if (cc == '<')
    307307            HTML_ADVANCE_TO(ScriptDataLessThanSignState);
    308         else if (cc == InputStreamPreprocessor::endOfFileMarker)
     308        else if (cc == kEndOfFileMarker)
    309309            return emitEndOfFile(source);
    310310        else {
     
    316316
    317317    HTML_BEGIN_STATE(PLAINTEXTState) {
    318         if (cc == InputStreamPreprocessor::endOfFileMarker)
     318        if (cc == kEndOfFileMarker)
    319319            return emitEndOfFile(source);
    320         else
    321             bufferCharacter(cc);
     320        bufferCharacter(cc);
    322321        HTML_ADVANCE_TO(PLAINTEXTState);
    323322    }
     
    361360            parseError();
    362361            HTML_ADVANCE_TO(DataState);
    363         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     362        } else if (cc == kEndOfFileMarker) {
    364363            parseError();
    365364            bufferCharacter('<');
     
    385384            m_token->appendToName(toLowerCase(cc));
    386385            HTML_ADVANCE_TO(TagNameState);
    387         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     386        } else if (cc == kEndOfFileMarker) {
    388387            parseError();
    389388            HTML_RECONSUME_IN(DataState);
     
    618617        } else if (cc == '<')
    619618            HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState);
    620         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     619        else if (cc == kEndOfFileMarker) {
    621620            parseError();
    622621            HTML_RECONSUME_IN(DataState);
     
    634633        } else if (cc == '<')
    635634            HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState);
    636         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     635        else if (cc == kEndOfFileMarker) {
    637636            parseError();
    638637            HTML_RECONSUME_IN(DataState);
     
    653652            bufferCharacter(cc);
    654653            HTML_ADVANCE_TO(ScriptDataState);
    655         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     654        } else if (cc == kEndOfFileMarker) {
    656655            parseError();
    657656            HTML_RECONSUME_IN(DataState);
     
    767766            bufferCharacter(cc);
    768767            HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState);
    769         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     768        } else if (cc == kEndOfFileMarker) {
    770769            parseError();
    771770            HTML_RECONSUME_IN(DataState);
     
    784783            bufferCharacter(cc);
    785784            HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState);
    786         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     785        } else if (cc == kEndOfFileMarker) {
    787786            parseError();
    788787            HTML_RECONSUME_IN(DataState);
     
    804803            bufferCharacter(cc);
    805804            HTML_ADVANCE_TO(ScriptDataState);
    806         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     805        } else if (cc == kEndOfFileMarker) {
    807806            parseError();
    808807            HTML_RECONSUME_IN(DataState);
     
    858857            m_token->appendToAttributeName(toLowerCase(cc));
    859858            HTML_ADVANCE_TO(AttributeNameState);
    860         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     859        } else if (cc == kEndOfFileMarker) {
    861860            parseError();
    862861            HTML_RECONSUME_IN(DataState);
     
    891890            m_token->appendToAttributeName(toLowerCase(cc));
    892891            HTML_ADVANCE_TO(AttributeNameState);
    893         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     892        } else if (cc == kEndOfFileMarker) {
    894893            parseError();
    895894            m_token->endAttributeName(source.numberOfCharactersConsumed());
     
    920919            m_token->appendToAttributeName(toLowerCase(cc));
    921920            HTML_ADVANCE_TO(AttributeNameState);
    922         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     921        } else if (cc == kEndOfFileMarker) {
    923922            parseError();
    924923            HTML_RECONSUME_IN(DataState);
     
    949948            parseError();
    950949            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    951         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     950        } else if (cc == kEndOfFileMarker) {
    952951            parseError();
    953952            HTML_RECONSUME_IN(DataState);
     
    969968            m_additionalAllowedCharacter = '"';
    970969            HTML_ADVANCE_TO(CharacterReferenceInAttributeValueState);
    971         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     970        } else if (cc == kEndOfFileMarker) {
    972971            parseError();
    973972            m_token->endAttributeValue(source.numberOfCharactersConsumed());
     
    987986            m_additionalAllowedCharacter = '\'';
    988987            HTML_ADVANCE_TO(CharacterReferenceInAttributeValueState);
    989         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     988        } else if (cc == kEndOfFileMarker) {
    990989            parseError();
    991990            m_token->endAttributeValue(source.numberOfCharactersConsumed());
     
    10081007            m_token->endAttributeValue(source.numberOfCharactersConsumed());
    10091008            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1010         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1009        } else if (cc == kEndOfFileMarker) {
    10111010            parseError();
    10121011            m_token->endAttributeValue(source.numberOfCharactersConsumed());
     
    10581057        else if (m_options.usePreHTML5ParserQuirks && cc == '<')
    10591058            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
    1060         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1059        else if (cc == kEndOfFileMarker) {
    10611060            parseError();
    10621061            HTML_RECONSUME_IN(DataState);
     
    10721071            m_token->setSelfClosing();
    10731072            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1074         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1073        } else if (cc == kEndOfFileMarker) {
    10751074            parseError();
    10761075            HTML_RECONSUME_IN(DataState);
     
    10911090        if (cc == '>')
    10921091            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1093         else if (cc == InputStreamPreprocessor::endOfFileMarker)
     1092        else if (cc == kEndOfFileMarker)
    10941093            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
    10951094        else {
     
    11391138            parseError();
    11401139            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1141         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1140        } else if (cc == kEndOfFileMarker) {
    11421141            parseError();
    11431142            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
     
    11551154            parseError();
    11561155            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1157         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1156        } else if (cc == kEndOfFileMarker) {
    11581157            parseError();
    11591158            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
     
    11691168        if (cc == '-')
    11701169            HTML_ADVANCE_TO(CommentEndDashState);
    1171         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1170        else if (cc == kEndOfFileMarker) {
    11721171            parseError();
    11731172            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
     
    11821181        if (cc == '-')
    11831182            HTML_ADVANCE_TO(CommentEndState);
    1184         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1183        else if (cc == kEndOfFileMarker) {
    11851184            parseError();
    11861185            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
     
    12031202            m_token->appendToComment('-');
    12041203            HTML_ADVANCE_TO(CommentEndState);
    1205         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1204        } else if (cc == kEndOfFileMarker) {
    12061205            parseError();
    12071206            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
     
    12241223        } else if (cc == '>')
    12251224            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1226         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1225        else if (cc == kEndOfFileMarker) {
    12271226            parseError();
    12281227            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
     
    12401239        if (isTokenizerWhitespace(cc))
    12411240            HTML_ADVANCE_TO(BeforeDOCTYPENameState);
    1242         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1241        else if (cc == kEndOfFileMarker) {
    12431242            parseError();
    12441243            m_token->beginDOCTYPE();
     
    12631262            m_token->setForceQuirks();
    12641263            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1265         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1264        } else if (cc == kEndOfFileMarker) {
    12661265            parseError();
    12671266            m_token->beginDOCTYPE();
     
    12831282            m_token->appendToName(toLowerCase(cc));
    12841283            HTML_ADVANCE_TO(DOCTYPENameState);
    1285         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1284        } else if (cc == kEndOfFileMarker) {
    12861285            parseError();
    12871286            m_token->setForceQuirks();
     
    12991298        if (cc == '>')
    13001299            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1301         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1300        else if (cc == kEndOfFileMarker) {
    13021301            parseError();
    13031302            m_token->setForceQuirks();
     
    13431342            m_token->setForceQuirks();
    13441343            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1345         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1344        } else if (cc == kEndOfFileMarker) {
    13461345            parseError();
    13471346            m_token->setForceQuirks();
     
    13681367            m_token->setForceQuirks();
    13691368            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1370         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1369        } else if (cc == kEndOfFileMarker) {
    13711370            parseError();
    13721371            m_token->setForceQuirks();
     
    13871386            m_token->setForceQuirks();
    13881387            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1389         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1388        } else if (cc == kEndOfFileMarker) {
    13901389            parseError();
    13911390            m_token->setForceQuirks();
     
    14051404            m_token->setForceQuirks();
    14061405            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1407         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1406        } else if (cc == kEndOfFileMarker) {
    14081407            parseError();
    14091408            m_token->setForceQuirks();
     
    14291428            m_token->setSystemIdentifierToEmptyString();
    14301429            HTML_ADVANCE_TO(DOCTYPESystemIdentifierSingleQuotedState);
    1431         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1430        } else if (cc == kEndOfFileMarker) {
    14321431            parseError();
    14331432            m_token->setForceQuirks();
     
    14521451            m_token->setSystemIdentifierToEmptyString();
    14531452            HTML_ADVANCE_TO(DOCTYPESystemIdentifierSingleQuotedState);
    1454         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1453        } else if (cc == kEndOfFileMarker) {
    14551454            parseError();
    14561455            m_token->setForceQuirks();
     
    14791478            m_token->setForceQuirks();
    14801479            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1481         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1480        } else if (cc == kEndOfFileMarker) {
    14821481            parseError();
    14831482            m_token->setForceQuirks();
     
    15041503            m_token->setForceQuirks();
    15051504            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1506         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1505        } else if (cc == kEndOfFileMarker) {
    15071506            parseError();
    15081507            m_token->setForceQuirks();
     
    15231522            m_token->setForceQuirks();
    15241523            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1525         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1524        } else if (cc == kEndOfFileMarker) {
    15261525            parseError();
    15271526            m_token->setForceQuirks();
     
    15411540            m_token->setForceQuirks();
    15421541            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1543         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1542        } else if (cc == kEndOfFileMarker) {
    15441543            parseError();
    15451544            m_token->setForceQuirks();
     
    15571556        else if (cc == '>')
    15581557            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1559         else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     1558        else if (cc == kEndOfFileMarker) {
    15601559            parseError();
    15611560            m_token->setForceQuirks();
     
    15711570        if (cc == '>')
    15721571            return emitAndResumeIn(source, HTMLTokenizerState::DataState);
    1573         else if (cc == InputStreamPreprocessor::endOfFileMarker)
     1572        else if (cc == kEndOfFileMarker)
    15741573            return emitAndReconsumeIn(source, HTMLTokenizerState::DataState);
    15751574        HTML_ADVANCE_TO(BogusDOCTYPEState);
     
    15801579        if (cc == ']')
    15811580            HTML_ADVANCE_TO(CDATASectionRightSquareBracketState);
    1582         else if (cc == InputStreamPreprocessor::endOfFileMarker)
     1581        else if (cc == kEndOfFileMarker)
    15831582            HTML_RECONSUME_IN(DataState);
    15841583        else {
  • trunk/Source/WebCore/html/track/WebVTTTokenizer.cpp

    r133995 r142497  
    4343
    4444WebVTTTokenizer::WebVTTTokenizer()
     45    : m_inputStreamPreprocessor(this)
    4546{
    4647    reset();
    47 }
    48 
    49 template<>
    50 inline bool MarkupTokenizerBase<WebVTTToken, WebVTTTokenizerState>::shouldSkipNullCharacters() const
    51 {
    52     return true;
    5348}
    5449
     
    9691            else
    9792                return emitAndResumeIn(source, WebVTTTokenizerState::TagState);
    98         } else if (cc == InputStreamPreprocessor::endOfFileMarker)
     93        } else if (cc == kEndOfFileMarker)
    9994            return emitEndOfFile(source);
    10095        else {
     
    122117            m_buffer.append(static_cast<LChar>(cc));
    123118            WEBVTT_ADVANCE_TO(EscapeState);
    124         } else if (cc == InputStreamPreprocessor::endOfFileMarker) {
     119        } else if (cc == kEndOfFileMarker) {
    125120            m_token->appendToCharacter(m_buffer);
    126121            return emitEndOfFile(source);
     
    146141            m_token->beginTimestampTag(cc);
    147142            WEBVTT_ADVANCE_TO(TimestampTagState);
    148         } else if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker) {
     143        } else if (cc == '>' || cc == kEndOfFileMarker) {
    149144            m_token->beginEmptyStartTag();
    150145            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
     
    161156        else if (cc == '.')
    162157            WEBVTT_ADVANCE_TO(StartTagClassState);
    163         else if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker)
     158        else if (cc == '>' || cc == kEndOfFileMarker)
    164159            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
    165160        else {
     
    177172            m_token->addNewClass();
    178173            WEBVTT_ADVANCE_TO(StartTagClassState);
    179         } else if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker) {
     174        } else if (cc == '>' || cc == kEndOfFileMarker) {
    180175            m_token->addNewClass();
    181176            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
     
    189184
    190185    WEBVTT_BEGIN_STATE(StartTagAnnotationState) {
    191         if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker) {
     186        if (cc == '>' || cc == kEndOfFileMarker) {
    192187            m_token->addNewAnnotation();
    193188            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
     
    199194   
    200195    WEBVTT_BEGIN_STATE(EndTagOpenState) {
    201         if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker) {
     196        if (cc == '>' || cc == kEndOfFileMarker) {
    202197            m_token->beginEndTag('\0');
    203198            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
     
    209204
    210205    WEBVTT_BEGIN_STATE(EndTagState) {
    211         if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker)
     206        if (cc == '>' || cc == kEndOfFileMarker)
    212207            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
    213208        m_token->appendToName(cc);
     
    217212
    218213    WEBVTT_BEGIN_STATE(TimestampTagState) {
    219         if (cc == '>' || cc == InputStreamPreprocessor::endOfFileMarker)
     214        if (cc == '>' || cc == kEndOfFileMarker)
    220215            return emitAndResumeIn(source, WebVTTTokenizerState::DataState);
    221216        m_token->appendToTimestamp(cc);
  • trunk/Source/WebCore/html/track/WebVTTTokenizer.h

    r131311 r142497  
    3434#if ENABLE(VIDEO_TRACK)
    3535
    36 #include "MarkupTokenizerBase.h"
    37 #include "SegmentedString.h"
     36#include "InputStreamPreprocessor.h"
    3837#include "WebVTTToken.h"
     38#include <wtf/PassOwnPtr.h>
    3939
    4040namespace WebCore {
     
    5555};
    5656
    57 class WebVTTTokenizer : MarkupTokenizerBase<WebVTTToken, WebVTTTokenizerState> {
     57class WebVTTTokenizer {
    5858    WTF_MAKE_NONCOPYABLE(WebVTTTokenizer);
    5959    WTF_MAKE_FAST_ALLOCATED;
     
    6161    static PassOwnPtr<WebVTTTokenizer> create() { return adoptPtr(new WebVTTTokenizer); }
    6262
     63    typedef WebVTTTokenizerState State;
     64
    6365    void reset();
    6466   
    6567    bool nextToken(SegmentedString&, WebVTTToken&);
    6668
     69    inline bool haveBufferedCharacterToken()
     70    {
     71        return m_token->type() == WebVTTToken::Type::Character;
     72    }
     73
     74    inline void bufferCharacter(UChar character)
     75    {
     76        ASSERT(character != kEndOfFileMarker);
     77        m_token->ensureIsCharacterToken();
     78        m_token->appendToCharacter(character);
     79    }
     80
     81    inline bool emitAndResumeIn(SegmentedString& source, State::State state)
     82    {
     83        m_state = state;
     84        source.advanceAndUpdateLineNumber();
     85        return true;
     86    }
     87
     88    inline bool emitEndOfFile(SegmentedString& source)
     89    {
     90        if (haveBufferedCharacterToken())
     91            return true;
     92        m_state = State::DataState;
     93        source.advanceAndUpdateLineNumber();
     94        m_token->clear();
     95        m_token->makeEndOfFile();
     96        return true;
     97    }
     98
     99    bool shouldSkipNullCharacters() const { return true; }
     100
    67101private:
    68102    WebVTTTokenizer();
    69    
     103
     104    // m_token is owned by the caller. If nextToken is not on the stack,
     105    // this member might be pointing to unallocated memory.
     106    WebVTTToken* m_token;
     107    WebVTTTokenizerState::State m_state;
     108
    70109    Vector<LChar, 32> m_buffer;
     110
     111    // ://www.whatwg.org/specs/web-apps/current-work/#preprocessing-the-input-stream
     112    InputStreamPreprocessor<WebVTTTokenizer> m_inputStreamPreprocessor;
    71113};
    72114
  • trunk/Source/WebCore/xml/parser/MarkupTokenizerBase.h

    r139497 r142497  
    2929#define MarkupTokenizerBase_h
    3030
    31 #include "SegmentedString.h"
    32 #include <wtf/Noncopyable.h>
     31#include "InputStreamPreprocessor.h"
    3332#include <wtf/PassOwnPtr.h>
    3433#include <wtf/Vector.h>
     
    5655
    5756protected:
    58     // http://www.whatwg.org/specs/web-apps/current-work/#preprocessing-the-input-stream
    59     class InputStreamPreprocessor {
    60         WTF_MAKE_NONCOPYABLE(InputStreamPreprocessor);
    61     public:
    62         InputStreamPreprocessor(MarkupTokenizerBase<Token, State>* tokenizer)
    63             : m_tokenizer(tokenizer)
    64         {
    65             reset();
    66         }
    67 
    68         ALWAYS_INLINE UChar nextInputCharacter() const { return m_nextInputCharacter; }
    69 
    70         // Returns whether we succeeded in peeking at the next character.
    71         // The only way we can fail to peek is if there are no more
    72         // characters in |source| (after collapsing \r\n, etc).
    73         ALWAYS_INLINE bool peek(SegmentedString& source)
    74         {
    75         PeekAgain:
    76             m_nextInputCharacter = source.currentChar();
    77 
    78             // Every branch in this function is expensive, so we have a
    79             // fast-reject branch for characters that don't require special
    80             // handling. Please run the parser benchmark whenever you touch
    81             // this function. It's very hot.
    82             static const UChar specialCharacterMask = '\n' | '\r' | '\0';
    83             if (m_nextInputCharacter & ~specialCharacterMask) {
    84                 m_skipNextNewLine = false;
    85                 return true;
    86             }
    87 
    88             if (m_nextInputCharacter == '\n' && m_skipNextNewLine) {
    89                 m_skipNextNewLine = false;
    90                 source.advancePastNewlineAndUpdateLineNumber();
    91                 if (source.isEmpty())
    92                     return false;
    93                 m_nextInputCharacter = source.currentChar();
    94             }
    95             if (m_nextInputCharacter == '\r') {
    96                 m_nextInputCharacter = '\n';
    97                 m_skipNextNewLine = true;
    98             } else {
    99                 m_skipNextNewLine = false;
    100                 // FIXME: The spec indicates that the surrogate pair range as well as
    101                 // a number of specific character values are parse errors and should be replaced
    102                 // by the replacement character. We suspect this is a problem with the spec as doing
    103                 // that filtering breaks surrogate pair handling and causes us not to match Minefield.
    104                 if (m_nextInputCharacter == '\0' && !shouldTreatNullAsEndOfFileMarker(source)) {
    105                     if (m_tokenizer->shouldSkipNullCharacters()) {
    106                         source.advancePastNonNewline();
    107                         if (source.isEmpty())
    108                             return false;
    109                         goto PeekAgain;
    110                     }
    111                     m_nextInputCharacter = 0xFFFD;
    112                 }
    113             }
    114             return true;
    115         }
    116 
    117         // Returns whether there are more characters in |source| after advancing.
    118         ALWAYS_INLINE bool advance(SegmentedString& source)
    119         {
    120             source.advanceAndUpdateLineNumber();
    121             if (source.isEmpty())
    122                 return false;
    123             return peek(source);
    124         }
    125 
    126         bool skipNextNewLine() const { return m_skipNextNewLine; }
    127 
    128         void reset(bool skipNextNewLine = false)
    129         {
    130             m_nextInputCharacter = '\0';
    131             m_skipNextNewLine = skipNextNewLine;
    132         }
    133 
    134         static const UChar endOfFileMarker = 0;
    135 
    136     private:
    137         bool shouldTreatNullAsEndOfFileMarker(SegmentedString& source) const
    138         {
    139             return source.isClosed() && source.length() == 1;
    140         }
    141 
    142         MarkupTokenizerBase<Token, State>* m_tokenizer;
    143 
    144         // http://www.whatwg.org/specs/web-apps/current-work/#next-input-character
    145         UChar m_nextInputCharacter;
    146         bool m_skipNextNewLine;
    147     };
    148 
    14957    MarkupTokenizerBase() : m_inputStreamPreprocessor(this) { reset(); }
    15058
    15159    inline void bufferCharacter(UChar character)
    15260    {
    153         ASSERT(character != InputStreamPreprocessor::endOfFileMarker);
     61        ASSERT(character != kEndOfFileMarker);
    15462        m_token->ensureIsCharacterToken();
    15563        m_token->appendToCharacter(character);
     
    207115
    208116    // http://www.whatwg.org/specs/web-apps/current-work/#preprocessing-the-input-stream
    209     InputStreamPreprocessor m_inputStreamPreprocessor;
     117    InputStreamPreprocessor<MarkupTokenizerBase<Token, State> > m_inputStreamPreprocessor;
    210118};
    211119
Note: See TracChangeset for help on using the changeset viewer.