Mercurial > projects > dbus-d
annotate dbus-d/dsrc/org/freedesktop/dbus/tool/XmlSupport.d @ 0:a5576806d36d
recreate repository without any libs for lightweight repository
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 20 Oct 2007 18:07:18 +0200 |
parents | |
children |
rev | line source |
---|---|
0
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /** |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 * Author: Frank Benoit |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * License: Public domain |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * File type: D programming language |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 */ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 module org.freedesktop.dbus.tool.XmlSupport; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 import tango.core.Array; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 import tango.io.FileConduit; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 import tango.text.Util; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 import tango.util.collection.LinkSeq; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 import mango.xml.sax.DefaultSAXHandler; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 import mango.xml.sax.parser.teqXML; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 class Element { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 char[] mName; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 Element[] mChilds; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 char[][char[]] mAttributes; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 char[] mText; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 Element mParent; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 public this( char[] aName, Element aParent ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 mName = aName.dup; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 mParent = aParent; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 mText = ""; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 if( aParent ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 aParent.addChild( this ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 protected void addChild( Element aChild ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 mChilds ~= aChild; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 public Element createChildElement( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 Element result = new Element( aName, this ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 return result; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 public void completeChildElement( char[] aName, Element aChild ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 public void completeYourself(){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 mText = Text.trim( mText ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 public char[] getText(){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 return mText; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 public char[] getName(){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 return mName; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 public void setText( char[] aText ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 mText = aText.dup; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 public void addAttribute(char[] key, char[] value){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 mAttributes[ key.dup ] = value.dup; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 public bool hasAttribute( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 return cast(bool)( aName in mAttributes ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 public bool hasChild( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 foreach( Element child; mChilds ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 if( child.mName == aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 return true; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 return false; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 public Element tryGetChild( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 foreach( Element child; mChilds ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 if( child.mName == aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 return child; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
75 return null; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 public Element getChild( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 Element result = tryGetChild( aName ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 check( result !is null, "Element.getChild mName=%0, aName=%1", mName, aName ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 return result; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 public Element[] getChilds(){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 return mChilds.dup; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 public Element[] getChilds( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 Element[] result; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 foreach( Element child; mChilds ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 if( child.mName == aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 result ~= child; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 return result; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 public Element tryFindChild( bool delegate( Element aChild ) aDg ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 foreach( Element child; mChilds ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 if( aDg( child ) ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 return child; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 return null; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 public Element findChild( bool delegate( Element aChild ) aDg ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 Element result = tryFindChild( aDg ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 check( result !is null, "Element.findChild mName=%0, not found", mName ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 return result; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 public char[] getAttribute( char[] aKey ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 check( cast(bool)(aKey in mAttributes), "Element %0 does not contain the attribute %1", mName, aKey ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 return mAttributes[ aKey ].dup; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 public void checkAllowedChilds( char[][] names... ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 foreach( Element child; mChilds ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 check( tango.core.Array.find( names, child.mName ) != names.length, |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 "in element %0, a not allowed child node name exist %1", mName, child.mName ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 class Document { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 private Element mElement; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 public Element createRootElement( char[] aName ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
125 mElement = new Element( aName, null ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 return mElement; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 public void completeRootElement( char[] aName, Element aChild ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
129 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 public void setRoot( Element aRoot ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 mElement = aRoot; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 public Element getRoot(){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 return mElement; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 public class DomConstructionSaxHandler : DefaultSAXHandler!( char ) { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 Document mDocument; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 alias LinkSeq!(Element) TElementList; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 TElementList mElements; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 public this( Document aDocument ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 mElements = new TElementList(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 mDocument = aDocument; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 void startDocument() { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 //Stdout( "startDocument" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 void endDocument() { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 //Stdout( "endDocument" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
153 void processingInstruction(char[] target, char[] data) { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
154 //Stdout( "processingInstruction" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 void startElement(char[] name) { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 if( mElements.size() > 0 ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 //Stdout.format( "startElement {0} {1} ", name.utf8, mElements.size() ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 Element el = mElements.head().createChildElement( name ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
160 mElements.prepend( el ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 else{ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
163 //Stdout( "startRootElement" ~ name.utf8 ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 Element el = mDocument.createRootElement( name ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 mElements.prepend( el ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
168 //Stdout( "startElement" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 void addAttribute(char[] key, char[] value) { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 Element el = mElements.head(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
172 el.addAttribute( key, value ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
173 //Stdout( "addAttribute" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
174 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
175 void endElement(char[] name) { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 Element child = mElements.take(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 child.completeYourself(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 if( mElements.size() > 0 ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
179 Element el = mElements.head(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 el.completeChildElement( name, child ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
182 else{ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
183 mDocument.completeRootElement( name, child ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
185 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
186 //Stdout( "endElement" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
187 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 void comment(char[] text) { |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 //Stdout( "comment" ).newline; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 void check( bool aCondition, char[][] aMessage ... ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 if( !aCondition ){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
195 char[200] buf; |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 throw new Exception( layout( buf, aMessage )); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
198 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
199 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 Element parse(char[] aFileName){ |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 auto parser = new XMLReader!(char) (); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 auto doc = new Document(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 auto handler = new DomConstructionSaxHandler( doc ); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 parser.parse( new FileConduit( aFileName ), handler); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 return doc.getRoot(); |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 } |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 |
a5576806d36d
recreate repository without any libs for lightweight repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
209 |