-
Notifications
You must be signed in to change notification settings - Fork 0
/
PaxoBackend.py
142 lines (98 loc) · 3.42 KB
/
PaxoBackend.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# PaxoBackend.py
#
# Copyright (c) 1999 Philip Hunt
# Released under the GNU General Public Licence
#
# Paxo backend for Parrot
#
# Paxo is the Parrot XML Output format.
# The Paxo backend takes the attributes that were written into
# the PaxoBackend classes by the backend.py module, and writes
# them to an XML file. Note that this means that attribute processing
# is done, so if there is a sub.<attr>=<value>, then this attribute
# will be written to all the subcomponents in the Paxo output
# file.
# Last altered: 28-Aug-1999
# History:
# 24-Aug-1999 PhilHunt: created
from inrep import *
from backend import *
prefixLength = 3
prefix = ' '*prefixLength
#===========================================================
# non-container components
#===========================================================
class Paxo_component(Backend_component):
def getCode(self, pre):
newPre = pre + prefix
result = pre + '<component>\n'
result = result + self.getTypeCode(newPre)
result = result + self.getAttrCode(newPre)
result = result + pre + '</component>\n'
return result
def getAttrDoc(self):
return {'text': "the label's text"}
def getTypeCode(self, pre):
return pre + ('<type>%s</type>\n' % self.type)
def getAttrCode(self, pre):
result = ''
for k,v in self.attr.items():
result = result + pre \
+ ('<attr><name>%s</name><value>%s</value></attr>\n'
% (k, v))
return result
#===========================================================
# containers
#===========================================================
class Paxo_container(Backend_container, Paxo_component):
def __init__(self):
components = [ ]
def getAttrDoc(self):
return {}
def getSubComponentCode(self, pre):
result = ''
for sc in self.components:
result = result + sc.getCode(pre)
return result
def getCode(self, pre):
newPre = pre + prefix
result = pre + '<container>\n'
result = result + self.getTypeCode(newPre)
result = result + self.getAttrCode(newPre)
result = result + self.getSubComponentCode(newPre)
result = result + pre + '</container>\n'
return result
#===========================================================
##### Paxo backend #######################################
#===========================================================
class Paxo_GLOBAL(Backend_GLOBAL,Paxo_container):
def getStartCode(self):
return """<?xml version="1.0"?>
<!-- autogenerated by Parrot's PaxoBackend module -->
<gui>
"""
def getEndCode(self):
return """
</gui>
"""
def getBackendSignature(self): return 'Paxo'
def produceCode(self):
return self.getCode()
def getCode(self):
result = self.getStartCode()
result = result + self.getAttrCode(prefix)
result = result + self.getSubComponentCode(prefix)
result = result + self.getEndCode()
return result
# The Html backend produces files with an .html extension
def fileExtension(self): return '.xml'
# return list of container types understood by this backend:
def getContainerTypes(self):
return [ ]
# Paxo doesn't understand any types, it just outputs them
# as-is.
# return list of components which aren't containers
def getNonContainerTypes(self):
return [ ]
#===========================================================
#end