Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(466)

Unified Diff: Source/core/css/parser/NewCSSTokenizer.h

Issue 123053002: Add very basic CSS3 Syntax compatible tokenizer Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add CSSToken file Created 6 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/css/parser/NewCSSTokenizer.h
diff --git a/Source/core/html/URLRegistry.h b/Source/core/css/parser/NewCSSTokenizer.h
similarity index 54%
copy from Source/core/html/URLRegistry.h
copy to Source/core/css/parser/NewCSSTokenizer.h
index 660acb92852636ea136d2c49dfa68c31e268946b..74cbf9c3468fb9862ff3721e5795ed80a8d12d44 100644
--- a/Source/core/html/URLRegistry.h
+++ b/Source/core/css/parser/NewCSSTokenizer.h
@@ -28,34 +28,73 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef URLRegistry_h
-#define URLRegistry_h
+#ifndef NewCSSTokenizer_h
+#define NewCSSTokenizer_h
+#include "core/css/parser/CSSToken.h"
+#include "core/html/parser/InputStreamPreprocessor.h"
#include "wtf/text/WTFString.h"
namespace WebCore {
-class KURL;
-class SecurityOrigin;
-class URLRegistry;
-
-class URLRegistrable {
+// The CSS Syntax spec is written as a (fixed size) look-ahead
+// tokenizer instead of a state-machine like HTML
+// so we have our own input stream class. :(
+class CSSInputStream {
+ WTF_MAKE_NONCOPYABLE(CSSInputStream);
+ WTF_MAKE_FAST_ALLOCATED;
public:
- virtual ~URLRegistrable() { }
- virtual URLRegistry& registry() const = 0;
+ CSSInputStream(String input);
+
+ UChar currentInputChar();
+ UChar nextInputChar(); // peek1();
+ UChar peek2();
+ UChar peek3(); // Needed?
+
+ void advance();
+ void pushBack(UChar);
+
+private:
+ size_t m_offset;
+ String m_string;
abarth-chromium 2014/01/01 18:47:51 I would have expected you'd want to templatize thi
};
-class URLRegistry {
+
+class NewCSSTokenizer {
+ WTF_MAKE_NONCOPYABLE(NewCSSTokenizer);
WTF_MAKE_FAST_ALLOCATED;
public:
- virtual ~URLRegistry() { }
- virtual void registerURL(SecurityOrigin*, const KURL&, URLRegistrable*) = 0;
- virtual void unregisterURL(const KURL&) = 0;
+ NewCSSTokenizer();
+
+ CSSToken nextToken(CSSInputStream&);
+
+private:
+ UChar consume();
+ void reconsume(UChar);
+
+ CSSToken consumeStringTokenUntil(UChar);
+ CSSToken consumeNumericToken();
+ CSSToken consumeIdentLikeToken();
+ CSSToken consumeNumber();
+ CSSToken consumeURLToken();
+
+ void consumeUntilNotWhitespace();
+ void consumeThroughCommentEndOrUntilEOF();
+
+ bool consumeIfNext(UChar);
+ bool consumeIfNext(String);
+ String consumeName();
+ UChar consumeEscape();
+
+ bool nextIsValidEscape();
+ bool nextCharIsName();
+ bool nextTwoCharsAreValidEscape();
+ bool nextCharsAreNumber();
+ bool nextCharsAreIdentifier();
- // This is an optional API
- virtual URLRegistrable* lookup(const String&) { ASSERT_NOT_REACHED(); return 0; }
+ CSSInputStream* m_input;
};
} // namespace WebCore
-#endif // URLRegistry_h
+#endif // NewCSSTokenizer_h

Powered by Google App Engine
This is Rietveld 408576698