annotate roundup/cgi/TAL/XMLParser.py @ 2467:76ead526113d

client instances may be used as translation engines. any backend translator may be passed as constructor argument or via setTranslator() method. by default, templating.translationService is used. use this engine to translate client messages.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Tue, 15 Jun 2004 09:19:49 +0000
parents 8c2402a78bb0
children 88dbacd11cd1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001, 2002 Zope Corporation and Contributors.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # All Rights Reserved.
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
5 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # This software is subject to the provisions of the Zope Public License,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # FOR A PARTICULAR PURPOSE
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
12 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 ##############################################################################
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
14 # Modifications for Roundup:
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
15 # 1. commented out zLOG references
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
16 """
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
17 Generic expat-based XML parser base class.
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
18 """
1071
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
19
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
20 #import zLOG
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 class XMLParser:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 ordered_attributes = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 handler_names = [
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 "StartElementHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 "EndElementHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 "ProcessingInstructionHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 "CharacterDataHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 "UnparsedEntityDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 "NotationDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 "StartNamespaceDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 "EndNamespaceDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 "CommentHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 "StartCdataSectionHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 "EndCdataSectionHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 "DefaultHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 "DefaultHandlerExpand",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 "NotStandaloneHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 "ExternalEntityRefHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 "XmlDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 "StartDoctypeDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 "EndDoctypeDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 "ElementDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 "AttlistDeclHandler"
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 ]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 def __init__(self, encoding=None):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 self.parser = p = self.createParser()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 if self.ordered_attributes:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 self.parser.ordered_attributes = self.ordered_attributes
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 except AttributeError:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 #zLOG.LOG("TAL.XMLParser", zLOG.INFO,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 # "Can't set ordered_attributes")
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 self.ordered_attributes = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 for name in self.handler_names:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 method = getattr(self, name, None)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 if method is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 setattr(p, name, method)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 except AttributeError:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 #zLOG.LOG("TAL.XMLParser", zLOG.PROBLEM,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 # "Can't set expat handler %s" % name)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 pass
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 def createParser(self, encoding=None):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 global XMLParseError
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 from Products.ParsedXML.Expat import pyexpat
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 XMLParseError = pyexpat.ExpatError
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 return pyexpat.ParserCreate(encoding, ' ')
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 except ImportError:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 from xml.parsers import expat
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 XMLParseError = expat.ExpatError
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 return expat.ParserCreate(encoding, ' ')
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 def parseFile(self, filename):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 self.parseStream(open(filename))
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 def parseString(self, s):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 self.parser.Parse(s, 1)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 def parseURL(self, url):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 import urllib
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 self.parseStream(urllib.urlopen(url))
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 def parseStream(self, stream):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 self.parser.ParseFile(stream)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 def parseFragment(self, s, end=0):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 self.parser.Parse(s, end)

Roundup Issue Tracker: http://roundup-tracker.org/