Move parseFontFaceDescriptor to CSSPropertyParser.cpp
[chromium-blink-merge.git] / third_party / WebKit / Source / core / xml / XPathParser.h
blob7e9228a2fa0784689cbf7b45cf75c30a33dd7850
1 /*
2 * Copyright 2005 Maksim Orlovich <maksim@kde.org>
3 * Copyright (C) 2006 Apple Computer, Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 #ifndef XPathParser_h
28 #define XPathParser_h
30 #include "core/xml/XPathPredicate.h"
31 #include "core/xml/XPathStep.h"
32 #include "wtf/Allocator.h"
34 namespace blink {
36 class ExceptionState;
37 class XPathNSResolver;
39 namespace XPath {
41 class Expression;
42 class LocationPath;
43 class ParseNode;
44 class Parser;
45 class Predicate;
47 struct Token {
48 STACK_ALLOCATED();
49 int type;
50 String str;
51 Step::Axis axis;
52 NumericOp::Opcode numop;
53 EqTestOp::Opcode eqop;
55 Token(int t) : type(t) { }
56 Token(int t, const String& v): type(t), str(v) { }
57 Token(int t, Step::Axis v): type(t), axis(v) { }
58 Token(int t, NumericOp::Opcode v): type(t), numop(v) { }
59 Token(int t, EqTestOp::Opcode v): type(t), eqop(v) { }
62 class Parser {
63 WTF_MAKE_NONCOPYABLE(Parser);
64 STACK_ALLOCATED();
65 public:
66 Parser();
67 ~Parser();
69 XPathNSResolver* resolver() const { return m_resolver.get(); }
70 bool expandQName(const String& qName, AtomicString& localName, AtomicString& namespaceURI);
72 Expression* parseStatement(const String& statement, XPathNSResolver*, ExceptionState&);
74 static Parser* current() { return currentParser; }
76 int lex(void* yylval);
78 Member<Expression> m_topExpr;
79 bool m_gotNamespaceError;
81 void registerString(String*);
82 void deleteString(String*);
84 private:
85 bool isBinaryOperatorContext() const;
87 void skipWS();
88 Token makeTokenAndAdvance(int type, int advance = 1);
89 Token makeTokenAndAdvance(int type, NumericOp::Opcode, int advance = 1);
90 Token makeTokenAndAdvance(int type, EqTestOp::Opcode, int advance = 1);
91 char peekAheadHelper();
92 char peekCurHelper();
94 Token lexString();
95 Token lexNumber();
96 bool lexNCName(String&);
97 bool lexQName(String&);
99 Token nextToken();
100 Token nextTokenInternal();
102 void reset(const String& data);
104 static Parser* currentParser;
106 unsigned m_nextPos;
107 String m_data;
108 int m_lastTokenType;
109 Member<XPathNSResolver> m_resolver;
111 HashSet<OwnPtr<String>> m_strings;
114 } // namespace XPath
116 } // namespace blink
118 int xpathyyparse(blink::XPath::Parser*);
119 #endif