32
32
__author__ = "Cody Precord <cprecord@editra.org>"
33
__svnid__ = "$Id: launchxml.py 62581 2009-11-10 02:52:54Z CJP $"
34
__revision__ = "$Revision: 62581 $"
33
__svnid__ = "$Id: launchxml.py 67713 2011-05-06 18:43:32Z CJP $"
34
__revision__ = "$Revision: 67713 $"
36
36
#-----------------------------------------------------------------------------#
42
sys.path.insert(0, os.path.abspath('../../../src/'))
40
#sys.path.insert(0, '../../../src/')
46
from syntax import synglob
48
45
#-----------------------------------------------------------------------------#
52
EXML_LAUNCH = u"launch"
53
EXML_HANDLER = u"handler"
54
EXML_COMMANDLIST = u"commandlist"
55
EXML_COMMAND = u"command"
57
EXML_HOTSPOT = u"hotspot"
60
EXML_DEFAULT = u"default"
61
EXML_EXECUTE = u"execute"
62
EXML_PATTERN = u"pattern"
64
48
#-----------------------------------------------------------------------------#
66
class LaunchXml(syntax.EditraXml):
67
"""Launch Xml Handler"""
69
syntax.EditraXml.__init__(self)
73
self._handlers = dict()
76
self.SetName(EXML_LAUNCH)
78
#---- Xml Implementation ----#
80
def startElement(self, name, attrs):
81
if name == EXML_HANDLER:
82
lang = attrs.get(syntax.EXML_NAME, None)
83
assert lang is not None, "lang attribute must be defined"
84
id_ = attrs.get(syntax.EXML_ID, None)
85
assert id_ is not None, "lang id is not specified"
86
assert hasattr(synglob, id_), "Undefined language id: %s" % id_
87
self._current = Handler(lang, getattr(synglob, id_))
88
self._handlers[lang] = self._current
89
elif self._current is not None:
90
self._current.startElement(name, attrs)
94
def endElement(self, name):
95
if name == EXML_HANDLER:
97
elif self._current is not None:
98
self._current.endElement(name)
102
#---- End Xml Implementation ----#
104
#---- External Api ----#
50
class ErrorPattern(ed_xml.EdXml):
53
pattern = ed_xml.String(required=True)
55
class HotspotPattern(ed_xml.EdXml):
58
pattern = ed_xml.String(required=True)
60
class Command(ed_xml.EdXml):
63
name = ed_xml.String(required=True)
64
execute = ed_xml.String(required=True)
66
class CommandList(ed_xml.EdXml):
68
tagname = "commandlist"
69
default = ed_xml.String(required=True)
70
commands = ed_xml.List(Command)
72
class Handler(ed_xml.EdXml):
75
name = ed_xml.String(required=True)
76
id = ed_xml.String(required=True)
78
commandlist = ed_xml.Model(CommandList, required=False)
79
error = ed_xml.Model(ErrorPattern, required=False)
80
hotspot = ed_xml.Model(HotspotPattern, required=False)
82
def GetDefaultCommand(self):
83
"""Get the default command"""
86
default = self.commandlist.default
89
def GetCommands(self):
90
"""Get the list of commands"""
93
for cmd in self.commandlist.commands:
94
clist[cmd.name] = cmd.execute
97
def GetErrorPattern(self):
98
"""Get the handlers error pattern"""
99
if self.error and self.error.pattern:
100
return re.compile(self.error.pattern)
103
def GetHotspotPattern(self):
104
"""Get the handlers hotspot pattern"""
105
if self.hotspot and self.hotspot.pattern:
106
return re.compile(self.hotspot.pattern)
109
class LaunchXml(ed_xml.EdXml):
112
handlers = ed_xml.List(Handler, required=False)
106
114
def GetHandler(self, name):
107
115
"""Get a handler by name
108
116
@return: Handler instance or None
111
return self._handlers.get(name, None)
120
for handler in self.handlers:
121
if handler.name == name:
113
126
def GetHandlers(self):
114
127
"""Get the whole dictionary of handlers
115
128
@return: dict(name=Handler)
118
return self._handlers
120
133
def HasHandler(self, name):
121
134
"""Is there a handler for the given file type
125
return name in self._handlers
127
#-----------------------------------------------------------------------------#
129
class Handler(syntax.EditraXml):
130
"""Handler object data"""
131
def __init__(self, lang, id_):
132
"""Create a new handler
133
@param lang: language name string
134
@param id_: language id (int)
137
syntax.EditraXml.__init__(self)
142
self._commands = CommandList()
147
self.SetName(EXML_HANDLER)
148
self.RegisterHandler(self._commands)
150
def startElement(self, name, attrs):
151
if name == EXML_ERROR:
152
pattern = attrs.get(EXML_PATTERN, None)
153
if pattern is not None:
154
self._errpat = re.compile(pattern)
155
elif name == EXML_HOTSPOT:
156
pattern = attrs.get(EXML_PATTERN, None)
157
if pattern is not None:
158
self._hotspot = re.compile(pattern)
160
syntax.EditraXml.startElement(self, name, attrs)
162
#---- External Api ----#
164
def GetCommands(self):
165
"""Get the dictionary of commands
166
@return: dict(alias="command string")
169
cmdxml = self.GetCommandsXml()
170
return cmdxml.GetCommands()
172
def GetCommandsXml(self):
173
"""Get the CommandList Xml object
177
return self._commands
179
def GetDefaultCommand(self):
180
"""Get the default command
184
cmdxml = self.GetCommandsXml()
185
return cmdxml.GetDefault()
187
def GetErrorPattern(self):
188
"""Get the error pattern object
189
@return: re object or None
194
def GetHotSpotPattern(self):
195
"""Get the hotspot pattern object
196
@return: re object or None
202
"""Get the language identifier string
209
"""Get the language identifer
215
#-----------------------------------------------------------------------------#
217
class CommandList(syntax.EditraXml):
218
"""Handler object data"""
220
syntax.EditraXml.__init__(self)
224
self._commands = dict()
227
self.SetName(EXML_COMMANDLIST)
229
def startElement(self, name, attrs):
230
if name == EXML_COMMAND:
231
alias = attrs.get(syntax.EXML_NAME, None)
232
cmd = attrs.get(EXML_EXECUTE, None)
233
if None not in (alias, cmd):
234
self._commands[alias] = cmd
235
elif name == EXML_COMMANDLIST:
236
default = attrs.get(EXML_DEFAULT, None)
237
assert default is not None, "Default attribute not specified!"
238
self._default = default
240
#---- External Api ----#
242
def GetCommands(self):
243
"""Get the mapping of command aliases to commands
247
return self._commands
249
def GetDefault(self):
250
"""Get the default command
256
#-----------------------------------------------------------------------------#
138
for handler in self.handlers:
139
if handler.name == name:
143
#-----------------------------------------------------------------------------#
259
if __name__ == '__main__':
261
# sax.parseString(xml_spec, h)
262
f = open("launch.xml", 'rb')
265
sax.parseString(txt, h)
266
hndlr = h.GetHandler('Python')
267
print hndlr.GetCommands()
268
print hndlr.GetErrorPattern()
269
print hndlr.GetDefaultCommand()
270
print hndlr.GetHotSpotPattern()
272
print h.GetHandlers()
274
hndlr = h.GetHandler('C')
275
print hndlr.GetCommands()
145
#if __name__ == '__main__':
146
# h = LaunchXml.Load("launch.xml")
147
# print "CHECK Python Handler"
148
# hndlr = h.GetHandler('Python')
149
# print hndlr.GetCommands()
150
# print hndlr.error.pattern
151
# print hndlr.hotspot.pattern
152
# print hndlr.commandlist.default
154
# print h.GetHandlers()
156
# print "Check C Handler"
157
# hndlr = h.GetHandler('C')
158
# print hndlr.GetCommands()
159
# print hndlr.GetHotspotPattern()
160
# print hndlr.GetErrorPattern()
161
# print hndlr.GetDefaultCommand()