[Python-Dev] XSLT parser interface

Martin v. Loewis martin@mira.cs.tu-berlin.de
Sun, 28 Jan 2001 21:50:35 +0100


Based on my previous IDL interface for XPath parsers, I've defined an
API for a parser that parsers XSLT pattern expressions. It is an
extension to the XPath API, so I attach only the additional functions.

Any comments are appreciated.

Martin

module XPath{
  // XSLT exprType values
  const unsigned short PATTERN = 17;
  const unsigned short LOCATION_PATTERN = 18;
  const unsigned short RELATIVE_PATH_PATTERN = 19;
  const unsigned short STEP_PATTERN = 20;

  interface Pattern;
  interface LocationPathPattern;
  interface RelativePathPattern;
  interface StepPattern;

  interface PatternFactory:ExprFactory{
    Pattern createPattern(in LocationPathPattern first);
    // idkey may be null, represents IdKeyPattern
    // if parent is true, it is '/', else '//'
    // rel may be null
    LocationPathPattern createLocationPathPattern(in FunctionCall idkey,
						  boolean parent,
						  in RelativePathPattern rel);
    // if parent is true, it is /, else //
    RelativePathPattern createRelativePathPattern(in RelativePathPattern rel,
						  boolean parent,
						  in StepPattern step);
    StepPattern createStepPattern(in AxisSpecifier axis,
				  in NodeTest test,
				  in PredicateList predicates);
  };

  typedef sequence<LocationPathPattern> LocationPathPatterns;
  interface Pattern:Expr{
    readonly attribute LocationPathPatterns patterns;
    void append(in LocationPathPattern pattern);
  };

  interface LocationPathPattern:Expr{
    readonly attribute FunctionCall idkey;
    readonly attribute boolean parent;
    readonly attribute RelativePathPattern relative_pattern;
  };

  interface RelativePathPattern:Expr{
    readonly attribute RelativePathPattern relative;
    readonly attribute boolean parent;
    readonly attribute StepPattern step;
  };

  interface StepPattern:Expr{
    readonly attribute AxisSpecifier axis;
    readonly attribute NodeTest test;
    readonly attribute PredicateList predicates;
  };

  interface XSLTParser:Parser{
    Pattern parsePattern(in DOMString pattern);
  };
};