/* * Copyright (C) 2005 Frerich Raabe <[email protected]> * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. * Copyright (C) 2007 Alexey Proskuryakov <[email protected]> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "third_party/blink/renderer/core/xml/xpath_step.h" #include "third_party/blink/renderer/core/dom/attr.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/dom/node_traversal.h" #include "third_party/blink/renderer/core/html/html_document.h" #include "third_party/blink/renderer/core/xml/xpath_parser.h" #include "third_party/blink/renderer/core/xml/xpath_util.h" #include "third_party/blink/renderer/core/xmlns_names.h" namespace blink { namespace xpath { Step::Step(Axis axis, const NodeTest& node_test) : … { … } Step::Step(Axis axis, const NodeTest& node_test, HeapVector<Member<Predicate>>& predicates) : … { … } Step::~Step() = default; void Step::Trace(Visitor* visitor) const { … } void Step::Optimize() { … } bool OptimizeStepPair(Step* first, Step* second) { … } bool Step::PredicatesAreContextListInsensitive() const { … } void Step::Evaluate(EvaluationContext& evaluation_context, Node* context, NodeSet& nodes) const { … } #if DCHECK_IS_ON() static inline Node::NodeType PrimaryNodeType(Step::Axis axis) { … } #endif // Evaluate NodeTest without considering merged predicates. static inline bool NodeMatchesBasicTest(Node* node, Step::Axis axis, const Step::NodeTest& node_test) { … } static inline bool NodeMatches(EvaluationContext& evaluation_context, Node* node, Step::Axis axis, const Step::NodeTest& node_test) { … } // Result nodes are ordered in axis order. Node test (including merged // predicates) is applied. void Step::NodesInAxis(EvaluationContext& evaluation_context, Node* context, NodeSet& nodes) const { … } } // namespace xpath } // namespace blink