tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

txExprParser.h (3707B)


      1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 /**
      7 * ExprParser
      8 * This class is used to parse XSL Expressions
      9 * @see ExprLexer
     10 **/
     11 
     12 #ifndef MITREXSL_EXPRPARSER_H
     13 #define MITREXSL_EXPRPARSER_H
     14 
     15 #include "mozilla/UniquePtr.h"
     16 #include "nsString.h"
     17 #include "txCore.h"
     18 
     19 class Expr;
     20 class txExprLexer;
     21 class FunctionCall;
     22 class LocationStep;
     23 class nsAtom;
     24 class PredicateList;
     25 class Token;
     26 class txIParseContext;
     27 class txNodeTest;
     28 
     29 class txExprParser {
     30 public:
     31  static nsresult createExpr(const nsAString& aExpression,
     32                             txIParseContext* aContext, Expr** aExpr) {
     33    return createExprInternal(aExpression, 0, aContext, aExpr);
     34  }
     35 
     36  /**
     37   * Creates an Attribute Value Template using the given value
     38   */
     39  static nsresult createAVT(const nsAString& aAttrValue,
     40                            txIParseContext* aContext, Expr** aResult);
     41 
     42 protected:
     43  static nsresult createExprInternal(const nsAString& aExpression,
     44                                     uint32_t aSubStringPos,
     45                                     txIParseContext* aContext, Expr** aExpr);
     46  /**
     47   * Using nsAutoPtr& to optimize passing the ownership to the
     48   * created binary expression objects.
     49   */
     50  static nsresult createBinaryExpr(mozilla::UniquePtr<Expr>& left,
     51                                   mozilla::UniquePtr<Expr>& right, Token* op,
     52                                   Expr** aResult);
     53  static nsresult createExpr(txExprLexer& lexer, txIParseContext* aContext,
     54                             Expr** aResult);
     55  static nsresult createFilterOrStep(txExprLexer& lexer,
     56                                     txIParseContext* aContext, Expr** aResult);
     57  static nsresult createFunctionCall(txExprLexer& lexer,
     58                                     txIParseContext* aContext, Expr** aResult);
     59  static nsresult createLocationStep(txExprLexer& lexer,
     60                                     txIParseContext* aContext, Expr** aResult);
     61  static nsresult createNodeTypeTest(txExprLexer& lexer, txNodeTest** aResult);
     62  static nsresult createPathExpr(txExprLexer& lexer, txIParseContext* aContext,
     63                                 Expr** aResult);
     64  static nsresult createUnionExpr(txExprLexer& lexer, txIParseContext* aContext,
     65                                  Expr** aResult);
     66 
     67  static bool isLocationStepToken(Token* aToken);
     68 
     69  static short precedence(Token* aToken);
     70 
     71  /**
     72   * Resolve a QName, given the mContext parse context.
     73   * Returns prefix and localName as well as namespace ID
     74   */
     75  static nsresult resolveQName(const nsAString& aQName, nsAtom** aPrefix,
     76                               txIParseContext* aContext, nsAtom** aLocalName,
     77                               int32_t& aNamespace, bool aIsNameTest = false);
     78 
     79  /**
     80   * Using the given lexer, parses the tokens if they represent a
     81   * predicate list
     82   * If an error occurs a non-zero String pointer will be returned
     83   * containing the error message.
     84   * @param predicateList, the PredicateList to add predicate expressions to
     85   * @param lexer the ExprLexer to use for parsing tokens
     86   * @return 0 if successful, or a String pointer to the error message
     87   */
     88  static nsresult parsePredicates(PredicateList* aPredicateList,
     89                                  txExprLexer& lexer,
     90                                  txIParseContext* aContext);
     91  static nsresult parseParameters(FunctionCall* aFnCall, txExprLexer& lexer,
     92                                  txIParseContext* aContext);
     93 };
     94 
     95 #endif