author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Thu, 10 Apr 2008 09:14:47 +0000 | |
changeset 3 | 7909b6680107 |
parent 2 | 06f508a6f55c |
child 174 | 76f50ac2e6a0 |
permissions | -rw-r--r-- |
3
7909b6680107
Loaded into & commited from 5.3.6
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
1 |
"{ Package: 'stx:goodies/xmlsuite/core' }" |
0 | 2 |
|
3 |
"{ NameSpace: XMLv2 }" |
|
4 |
||
5 |
Object subclass:#XMLBuilder |
|
6 |
instanceVariableNames:'writer pendingAttributes currentDepth prefixToNamespaceMapping |
|
7 |
objectToXmlIdMapping' |
|
8 |
classVariableNames:'' |
|
9 |
poolDictionaries:'' |
|
10 |
category:'XML Suite-XML Writer' |
|
11 |
! |
|
12 |
||
13 |
!XMLBuilder class methodsFor:'documentation'! |
|
14 |
||
15 |
documentation |
|
16 |
" |
|
17 |
documentation to be added. |
|
18 |
||
19 |
[author:] |
|
20 |
Jan Vrany (janfrog@bruxa) |
|
21 |
||
22 |
[instance variables:] |
|
23 |
||
24 |
[class variables:] |
|
25 |
||
26 |
[see also:] |
|
27 |
||
28 |
" |
|
29 |
! |
|
30 |
||
31 |
history |
|
32 |
"Created: / 21-11-2005 / 12:47:11 / janfrog" |
|
33 |
! ! |
|
34 |
||
35 |
!XMLBuilder class methodsFor:'instance creation'! |
|
36 |
||
37 |
new |
|
38 |
^ self basicNew initialize. |
|
39 |
||
40 |
"Created: / 21-11-2005 / 17:04:10 / janfrog" |
|
41 |
! |
|
42 |
||
43 |
on: aStream |
|
44 |
||
45 |
^self new initializeOnStream: aStream |
|
46 |
||
47 |
"Created: / 21-11-2005 / 17:01:35 / janfrog" |
|
48 |
! |
|
49 |
||
50 |
onFile: aStringOrFilename |
|
51 |
||
52 |
^self new initializeOnStream:aStringOrFilename asFilename writeStream |
|
53 |
||
54 |
"Created: / 21-11-2005 / 17:02:12 / janfrog" |
|
55 |
! ! |
|
56 |
||
57 |
!XMLBuilder class methodsFor:'xml id management'! |
|
58 |
||
59 |
generateXmlIdFor: anObject |
|
60 |
||
61 |
^ ('xmlid.' , |
|
62 |
anObject class nameWithoutPrefix , |
|
63 |
'.' , |
|
64 |
anObject identityHash printString) |
|
65 |
||
66 |
replaceAll:Character space |
|
67 |
with:$. |
|
68 |
||
69 |
"Created: / 30-11-2005 / 17:45:12 / janfrog" |
|
70 |
"Modified: / 25-12-2005 / 18:17:11 / janfrog" |
|
71 |
! ! |
|
72 |
||
73 |
!XMLBuilder methodsFor:'accessing'! |
|
74 |
||
75 |
defaultWriter |
|
76 |
^ self defaultWriterClass new |
|
77 |
||
78 |
"Created: / 27-11-2005 / 11:48:03 / janfrog" |
|
79 |
! |
|
80 |
||
81 |
defaultWriterClass |
|
82 |
^ IndentingXMLWriter |
|
83 |
||
84 |
"Created: / 27-11-2005 / 11:48:19 / janfrog" |
|
85 |
! |
|
86 |
||
87 |
outputStream: aStream |
|
88 |
||
89 |
^self writer stream: aStream |
|
90 |
||
91 |
"Created: / 23-11-2005 / 14:31:11 / janfrog" |
|
92 |
! |
|
93 |
||
94 |
pendingAttributes |
|
95 |
||
96 |
^pendingAttributes ifNil: |
|
97 |
[pendingAttributes := Attributes new] |
|
98 |
||
99 |
"Created: / 21-11-2005 / 13:02:17 / janfrog" |
|
100 |
! |
|
101 |
||
102 |
streamContents |
|
103 |
||
104 |
^self writer streamContents |
|
105 |
||
106 |
"Created: / 21-11-2005 / 13:50:58 / janfrog" |
|
107 |
! |
|
108 |
||
109 |
writer |
|
110 |
||
111 |
^ writer |
|
112 |
||
113 |
"Created: / 21-11-2005 / 12:49:51 / janfrog" |
|
114 |
"Modified: / 21-11-2005 / 17:03:59 / janfrog" |
|
115 |
! |
|
116 |
||
117 |
writer:aXMLWriter |
|
118 |
||
119 |
writer := aXMLWriter. |
|
120 |
||
121 |
"Created: / 21-11-2005 / 12:49:51 / janfrog" |
|
122 |
! ! |
|
123 |
||
124 |
!XMLBuilder methodsFor:'basic building'! |
|
125 |
||
126 |
attribute:qualifiedName value:attributeValue |
|
127 |
|nodeName| |
|
128 |
||
129 |
nodeName := self nodeNameFromQName:qualifiedName. |
|
130 |
self pendingAttributes add:(Attr named:nodeName value:attributeValue) |
|
131 |
||
132 |
"Created: / 23-11-2005 / 14:08:02 / janfrog" |
|
133 |
! |
|
134 |
||
135 |
declareNamespace: namespaceUri withPrefix:prefix |
|
136 |
||
137 |
| xmlnsDeclAttributeName | |
|
138 |
||
139 |
xmlnsDeclAttributeName := |
|
140 |
prefix isEmpty |
|
141 |
ifTrue:['xmlns'] |
|
142 |
ifFalse:['xmlns:',prefix]. |
|
143 |
||
144 |
self |
|
145 |
attribute:xmlnsDeclAttributeName |
|
146 |
value: namespaceUri. |
|
147 |
||
148 |
prefixToNamespaceMapping |
|
149 |
at: prefix |
|
150 |
put:(Array with:namespaceUri with:currentDepth + 1) |
|
151 |
||
152 |
"Created: / 21-11-2005 / 17:49:51 / janfrog" |
|
153 |
"Modified: / 27-11-2005 / 10:48:41 / janfrog" |
|
154 |
! |
|
155 |
||
156 |
documentWith: blockOrString |
|
157 |
||
158 |
writer startDocument. |
|
159 |
||
160 |
blockOrString isString ifTrue:[writer characters: blockOrString]. |
|
161 |
blockOrString isBlock ifTrue:[blockOrString value]. |
|
162 |
||
163 |
writer endDocument. |
|
164 |
||
165 |
"Created: / 21-11-2005 / 18:02:48 / janfrog" |
|
166 |
! |
|
167 |
||
168 |
element:qualifiedName with:blockOrString |
|
169 |
|nodeName| |
|
170 |
||
171 |
nodeName := self nodeNameFromQName:qualifiedName. |
|
172 |
self writer |
|
173 |
startElement:nodeName localName |
|
174 |
namespace:nodeName ns |
|
175 |
prefix:nodeName prefix |
|
176 |
attributes:self pendingAttributes. |
|
177 |
pendingAttributes isEmpty ifFalse:[ |
|
178 |
pendingAttributes := nil |
|
179 |
]. |
|
180 |
currentDepth := currentDepth + 1. |
|
181 |
blockOrString isString ifTrue:[ |
|
182 |
self writer characters:blockOrString |
|
183 |
] ifFalse:[ |
|
184 |
blockOrString value |
|
185 |
]. |
|
186 |
currentDepth := currentDepth - 1. |
|
187 |
self writer |
|
188 |
endElement:nodeName localName |
|
189 |
namespace:nodeName ns |
|
190 |
prefix:nodeName prefix |
|
191 |
||
192 |
"Created: / 23-11-2005 / 14:07:53 / janfrog" |
|
193 |
! |
|
194 |
||
195 |
text: aString |
|
196 |
||
197 |
self writer characters: aString |
|
198 |
||
199 |
"Created: / 23-11-2005 / 14:13:15 / janfrog" |
|
200 |
! ! |
|
201 |
||
202 |
!XMLBuilder methodsFor:'initialization'! |
|
203 |
||
204 |
initialize |
|
205 |
writer := self defaultWriter. |
|
206 |
pendingAttributes := Attributes new. |
|
207 |
currentDepth := 0. |
|
208 |
prefixToNamespaceMapping := Dictionary new. |
|
209 |
objectToXmlIdMapping := IdentityDictionary new. |
|
210 |
||
211 |
"Created: / 21-11-2005 / 17:03:03 / janfrog" |
|
212 |
"Modified: / 27-11-2005 / 11:48:03 / janfrog" |
|
213 |
! |
|
214 |
||
215 |
initializeOnStream: aStream |
|
216 |
||
217 |
writer stream: aStream |
|
218 |
||
219 |
"Created: / 21-11-2005 / 17:03:51 / janfrog" |
|
220 |
! ! |
|
221 |
||
222 |
!XMLBuilder methodsFor:'namespace handling'! |
|
223 |
||
224 |
nodeNameFromQName: qName |
|
225 |
||
226 |
^NodeName new |
|
227 |
qualifiedName: qName; |
|
228 |
ns:'' "Default ns by default" |
|
229 |
||
230 |
"Created: / 21-11-2005 / 13:00:10 / janfrog" |
|
231 |
! ! |
|
232 |
||
233 |
!XMLBuilder methodsFor:'xml id management'! |
|
234 |
||
235 |
generateXmlIdFor:arg |
|
236 |
^ self class generateXmlIdFor:arg |
|
237 |
||
238 |
"Created: / 30-11-2005 / 17:45:12 / janfrog" |
|
239 |
! |
|
240 |
||
241 |
xmlIdFor: anObject |
|
242 |
||
243 |
^objectToXmlIdMapping |
|
244 |
at: anObject |
|
245 |
ifAbsentPut: [self generateXmlIdFor: anObject] |
|
246 |
||
247 |
"Created: / 27-11-2005 / 10:50:58 / janfrog" |
|
248 |
"Modified: / 28-11-2005 / 15:12:22 / janfrog" |
|
249 |
! ! |
|
250 |
||
251 |
!XMLBuilder class methodsFor:'documentation'! |
|
252 |
||
253 |
version |
|
254 |
^ '$Header: /opt/data/cvs/stx/goodies/xmlsuite/XMLv2__XMLBuilder.st,v 1.5 2005-12-28 11:02:55 vranyj1 Exp $' |
|
255 |
! ! |