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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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