Viewing file:      __init__.py (3.12 KB)      -rw-r--r-- Select action/file-type:    (+) |   (+) |   (+) | Code (+) | Session (+) |   (+) | SDB (+) |   (+) |   (+) |   (+) |   (+) |   (+) |
 
######################################################################## # # File Name:            __init__.py # # """ WWW: http://4suite.org/4XPath         e-mail: support@4suite.org
  Copyright (c) 2000-2001 Fourthought Inc, USA.   All Rights Reserved. See  http://4suite.org/COPYRIGHT  for license and copyright information """
  NAMESPACE_NODE = 10000 FT_OLD_EXT_NAMESPACE = 'http://xmlns.4suite.org/xpath/extensions' FT_EXT_NAMESPACE = 'http://xmlns.4suite.org/ext'
  # Simple trick (thanks Tim Peters) to enable crippled IEEE 754 support # until ANSI C (or Python) sorts it all out... Inf = Inf = 1e300 * 1e300 NaN = Inf - Inf
  from xml.dom import Node from xml.FtCore import FtException
  g_xpathRecognizedNodes = [         Node.ELEMENT_NODE,         Node.ATTRIBUTE_NODE,         Node.TEXT_NODE,         Node.CDATA_SECTION_NODE,         Node.DOCUMENT_NODE,         Node.PROCESSING_INSTRUCTION_NODE,         Node.COMMENT_NODE         ]
  g_extFunctions = {}
  class CompiletimeException(FtException):     INTERNAL = 1     SYNTAX = 2     PROCESSING = 3
      def __init__(self, errorCode, *args):         FtException.__init__(self, errorCode, MessageSource.COMPILETIME, args)
  class RuntimeException(FtException):     INTERNAL = 1     NO_CONTEXT = 10     UNDEFINED_VARIABLE = 100     UNDEFINED_PREFIX = 101     WRONG_ARGUMENTS = 200
      def __init__(self, errorCode, *args):         FtException.__init__(self, errorCode, MessageSource.RUNTIME, args)
  from XPathParserBase import SyntaxException
  import MessageSource
  def Evaluate(expr, contextNode=None, context=None):     import os     if os.environ.has_key('EXTMODULES'):         RegisterExtensionModules(os.environ["EXTMODULES"].split(':'))
      if context:         con = context     elif contextNode:         con = Context.Context(contextNode, 0, 0)     else:         raise RuntimeException(RuntimeException.NO_CONTEXT_ERROR)     retval = parser.new().parse(expr).evaluate(con)     return retval
 
  def Compile(expr):     try:         return parser.new().parse(expr)     except SyntaxError, error:         raise CompiletimeException(CompiletimeException.SYNTAX, str(error))     except:         import traceback, cStringIO         stream = cStringIO.StringIO()         traceback.print_exc(None, stream)         raise RuntimeException(RuntimeException.INTERNAL, stream.getvalue())
 
  def CreateContext(contextNode):     return Context.Context(contextNode, 0, 0)
 
  def RegisterExtensionModules(moduleNames):     mod_names = moduleNames[:]     mods = []     for mod_name in mod_names:         if mod_name:             mod = __import__(mod_name,{},{},['ExtFunctions'])             if hasattr(mod,'ExtFunctions'):                 g_extFunctions.update(mod.ExtFunctions)                 mods.append(mod)     return mods
 
  #Allow access to the NormalizeNode function from Util import NormalizeNode
  import Context
  try:     import XPathParserc except ImportError:     #import XPathParser     #parser = XPathParser     from pyxpath import ExprParserFactory     parser = ExprParserFactory else:     parser = XPathParserc
 
  def Init():     from xml.xpath import BuiltInExtFunctions     g_extFunctions.update(BuiltInExtFunctions.ExtFunctions)
 
  Init() 
  |