__init__.py :  » XML » 4Suite » 4Suite-XML-1.0.2 » Ft » Xml » XPointer » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » XML » 4Suite 
4Suite » 4Suite XML 1.0.2 » Ft » Xml » XPointer » __init__.py
########################################################################
# $Header: /var/local/cvsroot/4Suite/Ft/Xml/XPointer/__init__.py,v 1.12 2005/10/07 23:33:06 jkloth Exp $
"""
Module for XPointer processing

Copyright 2005 Fourthought, Inc. (USA).
Detailed license and copyright information: http://4suite.org/COPYRIGHT
Project home, documentation, distributions: http://4suite.org/
"""

### Exceptions ###

from Ft import FtException
class XPtrException(FtException):
    INTERNAL_ERROR = 1
    SYNTAX_ERROR = 2
    RESOURCE_ERROR = 3
    SUB_RESOURCE_ERROR = 4

    def __init__(self, errorCode, *args):
        FtException.__init__(self, errorCode, MessageSource.g_errorMessages, args)
        return

import MessageSource

### Convenience Functions ###

def Compile(expr):
    """
    Given an XPointer expression as a string, returns an object that allows
    an evaluation engine to operate on the expression efficiently.
    """
    if not isinstance(expr, (str, unicode)):
        raise TypeError("Expected string or unicode, %s found" %
                        (expr is None and 'None' or type(expr).__name__))
    try:
        return XPointerParser.new().parse(expr)
    except SyntaxError, error:
        raise XPtrException(XPtrException.SYNTAX_ERROR, str(error))
    except Exception, exc:
        import traceback, cStringIO
        stream = cStringIO.StringIO()
        traceback.print_exc(None, stream)
        raise XPtrException(XPtrException.INTERNAL_ERROR, stream.getvalue())


def SelectUri(uri, contextNode=None, nss=None):
    """
    Parses the document with the given URI, and returns the node
    corresponding to the XPointer given in the fragment of the URI.

    uri must be an absolute URI reference. If it doesn't have a
    fragment, returns the root node.

    contextNode, if given, is the original XPointer context node
    (e.g., from the referring document, if any; accessible in the
    XPointer via the 'here' function).

    nss is a set of explicit namespace mappings for use when evaluating
    the XPointer (e.g., when the xmlns scheme isn't being used).
    """
    from Ft.Lib.Uri import SplitFragment,PercentDecode
    try:
        from xml.sax.saxlib import SAXException
    except ImportError:
        from xml.sax import SAXException

    from Ft.Xml import Domlette
    base, fragment = SplitFragment(uri)
    if fragment is None:
        return reader.fromUri(base)
    fragment = PercentDecode(fragment)
    try:
        doc = Domlette.NonvalidatingReader.parseUri(base)
    except FtException:
        # Already handled somewhere else
        raise
    except SAXException, exc:
        raise XPtrException(XPtrException.RESOURCE_ERROR, str(exc))
    except Exception, exc:
        import traceback
        traceback.print_exc()
        raise XPtrException(XPtrException.INTERNAL_ERROR, str(exc))
    return SelectNode(doc, fragment, nss, contextNode)


def SelectNode(doc, xpointer, nss=None, contextNode=None):
    """
    Given a valid DOM node, evaluates an XPointer against it.

    contextNode, if given, is the original XPointer context node
    (e.g., from the referring document, if any; accessible in the
    XPointer via the 'here' function).

    nss is a set of explicit namespace mappings for use when evaluating
    the XPointer (e.g., when the xmlns scheme isn't being used).
    """
    parser = XPointerParser.new()
    try:
        xptr = parser.parse(xpointer)
    except SyntaxError, exc:
        raise XPtrException(XPtrException.SYNTAX_ERROR, str(exc))
    except Exception, exc:
        import traceback
        traceback.print_exc()
        raise XPtrException(XPtrException.INTERNAL_ERROR, str(exc))

    context = XPtrContext.XPtrContext(doc, 1, 1, contextNode or doc, nss or {})
    return xptr.select(context)

import XPointerParserc as XPointerParser
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.