1 /* 2 * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> 3 * Copyright (C) 2006, 2009 Apple Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 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. 14 * 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. 25 */ 26 27 #ifndef XPathPath_h 28 #define XPathPath_h 29 30 #if ENABLE(XPATH) 31 32 #include "XPathExpressionNode.h" 33 #include "XPathNodeSet.h" 34 35 namespace WebCore { 36 37 namespace XPath { 38 39 class Predicate; 40 class Step; 41 42 class Filter : public Expression { 43 public: 44 Filter(Expression*, const Vector<Predicate*>& = Vector<Predicate*>()); 45 virtual ~Filter(); 46 47 virtual Value evaluate() const; 48 49 private: resultType()50 virtual Value::Type resultType() const { return Value::NodeSetValue; } 51 52 Expression* m_expr; 53 Vector<Predicate*> m_predicates; 54 }; 55 56 class LocationPath : public Expression { 57 public: 58 LocationPath(); 59 virtual ~LocationPath(); setAbsolute(bool value)60 void setAbsolute(bool value) { m_absolute = value; setIsContextNodeSensitive(!m_absolute); } 61 62 virtual Value evaluate() const; 63 void evaluate(NodeSet& nodes) const; // nodes is an input/output parameter 64 65 void appendStep(Step* step); 66 void insertFirstStep(Step* step); 67 68 private: resultType()69 virtual Value::Type resultType() const { return Value::NodeSetValue; } 70 71 Vector<Step*> m_steps; 72 bool m_absolute; 73 }; 74 75 class Path : public Expression { 76 public: 77 Path(Filter*, LocationPath*); 78 virtual ~Path(); 79 80 virtual Value evaluate() const; 81 82 private: resultType()83 virtual Value::Type resultType() const { return Value::NodeSetValue; } 84 85 Filter* m_filter; 86 LocationPath* m_path; 87 }; 88 89 } 90 } 91 92 #endif // ENABLE(XPATH) 93 94 #endif // XPath_Path_H 95