1*11c03c6dSDamjan Jovanovic /**************************************************************
2*11c03c6dSDamjan Jovanovic *
3*11c03c6dSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one
4*11c03c6dSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file
5*11c03c6dSDamjan Jovanovic * distributed with this work for additional information
6*11c03c6dSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file
7*11c03c6dSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the
8*11c03c6dSDamjan Jovanovic * "License"); you may not use this file except in compliance
9*11c03c6dSDamjan Jovanovic * with the License. You may obtain a copy of the License at
10*11c03c6dSDamjan Jovanovic *
11*11c03c6dSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0
12*11c03c6dSDamjan Jovanovic *
13*11c03c6dSDamjan Jovanovic * Unless required by applicable law or agreed to in writing,
14*11c03c6dSDamjan Jovanovic * software distributed under the License is distributed on an
15*11c03c6dSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*11c03c6dSDamjan Jovanovic * KIND, either express or implied. See the License for the
17*11c03c6dSDamjan Jovanovic * specific language governing permissions and limitations
18*11c03c6dSDamjan Jovanovic * under the License.
19*11c03c6dSDamjan Jovanovic *
20*11c03c6dSDamjan Jovanovic *************************************************************/
21*11c03c6dSDamjan Jovanovic
22*11c03c6dSDamjan Jovanovic
23*11c03c6dSDamjan Jovanovic
24*11c03c6dSDamjan Jovanovic #include <precomp.h>
25*11c03c6dSDamjan Jovanovic #include <udm/xml/xmlitem.hxx>
26*11c03c6dSDamjan Jovanovic
27*11c03c6dSDamjan Jovanovic // NOT FULLY DECLARED SERVICES
28*11c03c6dSDamjan Jovanovic #include <cosv/file.hxx>
29*11c03c6dSDamjan Jovanovic
30*11c03c6dSDamjan Jovanovic
31*11c03c6dSDamjan Jovanovic namespace csi
32*11c03c6dSDamjan Jovanovic {
33*11c03c6dSDamjan Jovanovic namespace xml
34*11c03c6dSDamjan Jovanovic {
35*11c03c6dSDamjan Jovanovic
36*11c03c6dSDamjan Jovanovic char cReplacable[256] =
37*11c03c6dSDamjan Jovanovic {
38*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 49
39*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, // ", &
42*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
43*11c03c6dSDamjan Jovanovic
44*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50 - 99
45*11c03c6dSDamjan Jovanovic 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, // <, >
46*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49*11c03c6dSDamjan Jovanovic
50*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 100 - 149
51*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
55*11c03c6dSDamjan Jovanovic
56*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
57*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
58*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
59*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61*11c03c6dSDamjan Jovanovic
62*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
63*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67*11c03c6dSDamjan Jovanovic
68*11c03c6dSDamjan Jovanovic 0, 0, 0, 0, 0, 1 //
69*11c03c6dSDamjan Jovanovic };
70*11c03c6dSDamjan Jovanovic
71*11c03c6dSDamjan Jovanovic
72*11c03c6dSDamjan Jovanovic class MultiItem : public Item
73*11c03c6dSDamjan Jovanovic {
74*11c03c6dSDamjan Jovanovic public:
75*11c03c6dSDamjan Jovanovic MultiItem();
76*11c03c6dSDamjan Jovanovic ~MultiItem();
77*11c03c6dSDamjan Jovanovic
Add(DYN Item * let_dpDatum)78*11c03c6dSDamjan Jovanovic void Add(
79*11c03c6dSDamjan Jovanovic DYN Item * let_dpDatum )
80*11c03c6dSDamjan Jovanovic { csv_assert( let_dpDatum != 0 );
81*11c03c6dSDamjan Jovanovic aItems.push_back(let_dpDatum); }
Erase()82*11c03c6dSDamjan Jovanovic void Erase() { aItems.erase_all(); }
83*11c03c6dSDamjan Jovanovic
84*11c03c6dSDamjan Jovanovic private:
85*11c03c6dSDamjan Jovanovic virtual void do_WriteOut(
86*11c03c6dSDamjan Jovanovic csv::bostream & io_aFile ) const;
87*11c03c6dSDamjan Jovanovic // DATA
88*11c03c6dSDamjan Jovanovic ItemList aItems;
89*11c03c6dSDamjan Jovanovic };
90*11c03c6dSDamjan Jovanovic
91*11c03c6dSDamjan Jovanovic
92*11c03c6dSDamjan Jovanovic void StreamOut(
93*11c03c6dSDamjan Jovanovic Dyn< Item > & o_rContent,
94*11c03c6dSDamjan Jovanovic DYN Item * let_dpItem );
95*11c03c6dSDamjan Jovanovic inline void
StreamOut(AttrList & o_rAttrs,DYN Attribute * let_dpAttr)96*11c03c6dSDamjan Jovanovic StreamOut( AttrList & o_rAttrs,
97*11c03c6dSDamjan Jovanovic DYN Attribute * let_dpAttr )
98*11c03c6dSDamjan Jovanovic {
99*11c03c6dSDamjan Jovanovic csv_assert( let_dpAttr != 0 );
100*11c03c6dSDamjan Jovanovic o_rAttrs.push_back( let_dpAttr );
101*11c03c6dSDamjan Jovanovic }
102*11c03c6dSDamjan Jovanovic
103*11c03c6dSDamjan Jovanovic
104*11c03c6dSDamjan Jovanovic inline void
Impl_SetContent(Dyn<Item> & o_rContent,DYN Item * let_dpItem)105*11c03c6dSDamjan Jovanovic Impl_SetContent( Dyn< Item > & o_rContent,
106*11c03c6dSDamjan Jovanovic DYN Item * let_dpItem )
107*11c03c6dSDamjan Jovanovic {
108*11c03c6dSDamjan Jovanovic o_rContent = let_dpItem;
109*11c03c6dSDamjan Jovanovic }
110*11c03c6dSDamjan Jovanovic
111*11c03c6dSDamjan Jovanovic
112*11c03c6dSDamjan Jovanovic //********************* Attribute ****************************//
113*11c03c6dSDamjan Jovanovic
114*11c03c6dSDamjan Jovanovic const String attrValueBegin("=\"");
115*11c03c6dSDamjan Jovanovic const String attrValueEnd("\"");
116*11c03c6dSDamjan Jovanovic
117*11c03c6dSDamjan Jovanovic void
WriteOut(csv::bostream & io_aFile) const118*11c03c6dSDamjan Jovanovic Attribute::WriteOut( csv::bostream & io_aFile ) const
119*11c03c6dSDamjan Jovanovic {
120*11c03c6dSDamjan Jovanovic io_aFile.write( Name() );
121*11c03c6dSDamjan Jovanovic if ( Value().length() > 0 )
122*11c03c6dSDamjan Jovanovic {
123*11c03c6dSDamjan Jovanovic io_aFile.write( attrValueBegin );
124*11c03c6dSDamjan Jovanovic io_aFile.write( Value() );
125*11c03c6dSDamjan Jovanovic io_aFile.write( attrValueEnd );
126*11c03c6dSDamjan Jovanovic }
127*11c03c6dSDamjan Jovanovic }
128*11c03c6dSDamjan Jovanovic
129*11c03c6dSDamjan Jovanovic
130*11c03c6dSDamjan Jovanovic
131*11c03c6dSDamjan Jovanovic //************************ Element ****************************//
132*11c03c6dSDamjan Jovanovic
133*11c03c6dSDamjan Jovanovic const String newline("\n");
134*11c03c6dSDamjan Jovanovic const String space(" ");
135*11c03c6dSDamjan Jovanovic const String beginTagBegin("<");
136*11c03c6dSDamjan Jovanovic const String endTagBegin("</");
137*11c03c6dSDamjan Jovanovic const String tagEnd(">");
138*11c03c6dSDamjan Jovanovic const String emptyTagEnd("/>");
139*11c03c6dSDamjan Jovanovic
140*11c03c6dSDamjan Jovanovic void
do_WriteOut(csv::bostream & io_aFile) const141*11c03c6dSDamjan Jovanovic Element::do_WriteOut( csv::bostream & io_aFile ) const
142*11c03c6dSDamjan Jovanovic {
143*11c03c6dSDamjan Jovanovic io_aFile.write( beginTagBegin );
144*11c03c6dSDamjan Jovanovic io_aFile.write( inq_TagName() );
145*11c03c6dSDamjan Jovanovic
146*11c03c6dSDamjan Jovanovic const AttrList * pAttrs = inq_Attrs();
147*11c03c6dSDamjan Jovanovic if ( pAttrs != 0 )
148*11c03c6dSDamjan Jovanovic {
149*11c03c6dSDamjan Jovanovic for ( AttrList::iterator it = pAttrs->begin();
150*11c03c6dSDamjan Jovanovic it != pAttrs->end();
151*11c03c6dSDamjan Jovanovic ++it )
152*11c03c6dSDamjan Jovanovic {
153*11c03c6dSDamjan Jovanovic
154*11c03c6dSDamjan Jovanovic io_aFile.write( space );
155*11c03c6dSDamjan Jovanovic (*it)->WriteOut( io_aFile );
156*11c03c6dSDamjan Jovanovic }
157*11c03c6dSDamjan Jovanovic }
158*11c03c6dSDamjan Jovanovic
159*11c03c6dSDamjan Jovanovic const Item * pContent = inq_Content();
160*11c03c6dSDamjan Jovanovic if ( pContent != 0 )
161*11c03c6dSDamjan Jovanovic io_aFile.write( tagEnd );
162*11c03c6dSDamjan Jovanovic else
163*11c03c6dSDamjan Jovanovic {
164*11c03c6dSDamjan Jovanovic if (FinishEmptyTag_XmlStyle())
165*11c03c6dSDamjan Jovanovic io_aFile.write( emptyTagEnd );
166*11c03c6dSDamjan Jovanovic else
167*11c03c6dSDamjan Jovanovic {
168*11c03c6dSDamjan Jovanovic io_aFile.write( tagEnd );
169*11c03c6dSDamjan Jovanovic io_aFile.write( endTagBegin );
170*11c03c6dSDamjan Jovanovic io_aFile.write( inq_TagName() );
171*11c03c6dSDamjan Jovanovic io_aFile.write( tagEnd );
172*11c03c6dSDamjan Jovanovic }
173*11c03c6dSDamjan Jovanovic }
174*11c03c6dSDamjan Jovanovic if ( LineBreakAfterBeginTag() )
175*11c03c6dSDamjan Jovanovic io_aFile.write( newline );
176*11c03c6dSDamjan Jovanovic if ( pContent == 0 )
177*11c03c6dSDamjan Jovanovic return;
178*11c03c6dSDamjan Jovanovic
179*11c03c6dSDamjan Jovanovic pContent->WriteOut( io_aFile );
180*11c03c6dSDamjan Jovanovic io_aFile.write( endTagBegin );
181*11c03c6dSDamjan Jovanovic io_aFile.write( inq_TagName() );
182*11c03c6dSDamjan Jovanovic io_aFile.write( tagEnd );
183*11c03c6dSDamjan Jovanovic if ( LineBreakAfterEndTag() )
184*11c03c6dSDamjan Jovanovic io_aFile.write( newline );
185*11c03c6dSDamjan Jovanovic }
186*11c03c6dSDamjan Jovanovic
187*11c03c6dSDamjan Jovanovic bool
FinishEmptyTag_XmlStyle() const188*11c03c6dSDamjan Jovanovic Element::FinishEmptyTag_XmlStyle() const
189*11c03c6dSDamjan Jovanovic {
190*11c03c6dSDamjan Jovanovic return true;
191*11c03c6dSDamjan Jovanovic }
192*11c03c6dSDamjan Jovanovic
193*11c03c6dSDamjan Jovanovic bool
LineBreakAfterBeginTag() const194*11c03c6dSDamjan Jovanovic Element::LineBreakAfterBeginTag() const
195*11c03c6dSDamjan Jovanovic {
196*11c03c6dSDamjan Jovanovic return false;
197*11c03c6dSDamjan Jovanovic }
198*11c03c6dSDamjan Jovanovic
199*11c03c6dSDamjan Jovanovic bool
LineBreakAfterEndTag() const200*11c03c6dSDamjan Jovanovic Element::LineBreakAfterEndTag() const
201*11c03c6dSDamjan Jovanovic {
202*11c03c6dSDamjan Jovanovic return LineBreakAfterBeginTag();
203*11c03c6dSDamjan Jovanovic }
204*11c03c6dSDamjan Jovanovic
205*11c03c6dSDamjan Jovanovic
206*11c03c6dSDamjan Jovanovic //************************ EmptyElement ****************************//
207*11c03c6dSDamjan Jovanovic
208*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Item *)209*11c03c6dSDamjan Jovanovic EmptyElement::op_streamout( DYN Item * )
210*11c03c6dSDamjan Jovanovic {
211*11c03c6dSDamjan Jovanovic // Does nothing.
212*11c03c6dSDamjan Jovanovic }
213*11c03c6dSDamjan Jovanovic
214*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Attribute * let_dpAttr)215*11c03c6dSDamjan Jovanovic EmptyElement::op_streamout( DYN Attribute * let_dpAttr )
216*11c03c6dSDamjan Jovanovic {
217*11c03c6dSDamjan Jovanovic StreamOut( inq_RefAttrs(), let_dpAttr );
218*11c03c6dSDamjan Jovanovic }
219*11c03c6dSDamjan Jovanovic
220*11c03c6dSDamjan Jovanovic void
do_SetContent(DYN Item *)221*11c03c6dSDamjan Jovanovic EmptyElement::do_SetContent( DYN Item * )
222*11c03c6dSDamjan Jovanovic {
223*11c03c6dSDamjan Jovanovic // Does nothing.
224*11c03c6dSDamjan Jovanovic }
225*11c03c6dSDamjan Jovanovic
226*11c03c6dSDamjan Jovanovic const Item *
inq_Content() const227*11c03c6dSDamjan Jovanovic EmptyElement::inq_Content() const
228*11c03c6dSDamjan Jovanovic {
229*11c03c6dSDamjan Jovanovic return 0;
230*11c03c6dSDamjan Jovanovic }
231*11c03c6dSDamjan Jovanovic
232*11c03c6dSDamjan Jovanovic const AttrList *
inq_Attrs() const233*11c03c6dSDamjan Jovanovic EmptyElement::inq_Attrs() const
234*11c03c6dSDamjan Jovanovic {
235*11c03c6dSDamjan Jovanovic return & const_cast< EmptyElement* >(this)->inq_RefAttrs();
236*11c03c6dSDamjan Jovanovic }
237*11c03c6dSDamjan Jovanovic
238*11c03c6dSDamjan Jovanovic
239*11c03c6dSDamjan Jovanovic //************************ PureElement ****************************//
240*11c03c6dSDamjan Jovanovic
241*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Item * let_dpItem)242*11c03c6dSDamjan Jovanovic PureElement::op_streamout( DYN Item * let_dpItem )
243*11c03c6dSDamjan Jovanovic {
244*11c03c6dSDamjan Jovanovic StreamOut( inq_RefContent(), let_dpItem );
245*11c03c6dSDamjan Jovanovic }
246*11c03c6dSDamjan Jovanovic
247*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Attribute *)248*11c03c6dSDamjan Jovanovic PureElement::op_streamout( DYN Attribute * )
249*11c03c6dSDamjan Jovanovic {
250*11c03c6dSDamjan Jovanovic // Does nothing.
251*11c03c6dSDamjan Jovanovic }
252*11c03c6dSDamjan Jovanovic
253*11c03c6dSDamjan Jovanovic void
do_SetContent(DYN Item * let_dpItem)254*11c03c6dSDamjan Jovanovic PureElement::do_SetContent( DYN Item * let_dpItem )
255*11c03c6dSDamjan Jovanovic {
256*11c03c6dSDamjan Jovanovic Impl_SetContent( inq_RefContent(), let_dpItem );
257*11c03c6dSDamjan Jovanovic }
258*11c03c6dSDamjan Jovanovic
259*11c03c6dSDamjan Jovanovic const Item *
inq_Content() const260*11c03c6dSDamjan Jovanovic PureElement::inq_Content() const
261*11c03c6dSDamjan Jovanovic {
262*11c03c6dSDamjan Jovanovic return const_cast< PureElement* >(this)->inq_RefContent().Ptr();
263*11c03c6dSDamjan Jovanovic }
264*11c03c6dSDamjan Jovanovic
265*11c03c6dSDamjan Jovanovic const AttrList *
inq_Attrs() const266*11c03c6dSDamjan Jovanovic PureElement::inq_Attrs() const
267*11c03c6dSDamjan Jovanovic {
268*11c03c6dSDamjan Jovanovic return 0;
269*11c03c6dSDamjan Jovanovic }
270*11c03c6dSDamjan Jovanovic
271*11c03c6dSDamjan Jovanovic
272*11c03c6dSDamjan Jovanovic //*************************** SglTag **************************//
273*11c03c6dSDamjan Jovanovic
274*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Item *)275*11c03c6dSDamjan Jovanovic SglTag::op_streamout( DYN Item * )
276*11c03c6dSDamjan Jovanovic {
277*11c03c6dSDamjan Jovanovic // Does nothing.
278*11c03c6dSDamjan Jovanovic }
279*11c03c6dSDamjan Jovanovic
280*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Attribute *)281*11c03c6dSDamjan Jovanovic SglTag::op_streamout( DYN Attribute * )
282*11c03c6dSDamjan Jovanovic {
283*11c03c6dSDamjan Jovanovic // Does nothing.
284*11c03c6dSDamjan Jovanovic }
285*11c03c6dSDamjan Jovanovic
286*11c03c6dSDamjan Jovanovic void
do_SetContent(DYN Item *)287*11c03c6dSDamjan Jovanovic SglTag::do_SetContent( DYN Item *)
288*11c03c6dSDamjan Jovanovic {
289*11c03c6dSDamjan Jovanovic // Does nothing.
290*11c03c6dSDamjan Jovanovic }
291*11c03c6dSDamjan Jovanovic
292*11c03c6dSDamjan Jovanovic const Item *
inq_Content() const293*11c03c6dSDamjan Jovanovic SglTag::inq_Content() const
294*11c03c6dSDamjan Jovanovic {
295*11c03c6dSDamjan Jovanovic return 0;
296*11c03c6dSDamjan Jovanovic }
297*11c03c6dSDamjan Jovanovic
298*11c03c6dSDamjan Jovanovic const AttrList *
inq_Attrs() const299*11c03c6dSDamjan Jovanovic SglTag::inq_Attrs() const
300*11c03c6dSDamjan Jovanovic {
301*11c03c6dSDamjan Jovanovic return 0;
302*11c03c6dSDamjan Jovanovic }
303*11c03c6dSDamjan Jovanovic
304*11c03c6dSDamjan Jovanovic
305*11c03c6dSDamjan Jovanovic //*************************** AnElement **************************//
306*11c03c6dSDamjan Jovanovic
AnElement(const String & i_sTagName)307*11c03c6dSDamjan Jovanovic AnElement::AnElement( const String & i_sTagName )
308*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
309*11c03c6dSDamjan Jovanovic // pContent,
310*11c03c6dSDamjan Jovanovic // aAttrs
311*11c03c6dSDamjan Jovanovic {
312*11c03c6dSDamjan Jovanovic }
313*11c03c6dSDamjan Jovanovic
AnElement(const char * i_sTagName)314*11c03c6dSDamjan Jovanovic AnElement::AnElement( const char * i_sTagName )
315*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
316*11c03c6dSDamjan Jovanovic // pContent,
317*11c03c6dSDamjan Jovanovic // aAttrs
318*11c03c6dSDamjan Jovanovic {
319*11c03c6dSDamjan Jovanovic }
320*11c03c6dSDamjan Jovanovic
~AnElement()321*11c03c6dSDamjan Jovanovic AnElement::~AnElement()
322*11c03c6dSDamjan Jovanovic {
323*11c03c6dSDamjan Jovanovic }
324*11c03c6dSDamjan Jovanovic
325*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Item * let_dpItem)326*11c03c6dSDamjan Jovanovic AnElement::op_streamout( DYN Item * let_dpItem )
327*11c03c6dSDamjan Jovanovic {
328*11c03c6dSDamjan Jovanovic StreamOut( pContent, let_dpItem );
329*11c03c6dSDamjan Jovanovic }
330*11c03c6dSDamjan Jovanovic
331*11c03c6dSDamjan Jovanovic void
op_streamout(DYN Attribute * let_dpAttr)332*11c03c6dSDamjan Jovanovic AnElement::op_streamout( DYN Attribute * let_dpAttr )
333*11c03c6dSDamjan Jovanovic {
334*11c03c6dSDamjan Jovanovic StreamOut( aAttrs, let_dpAttr );
335*11c03c6dSDamjan Jovanovic }
336*11c03c6dSDamjan Jovanovic
337*11c03c6dSDamjan Jovanovic void
do_SetContent(DYN Item * let_dpItem)338*11c03c6dSDamjan Jovanovic AnElement::do_SetContent( DYN Item * let_dpItem )
339*11c03c6dSDamjan Jovanovic {
340*11c03c6dSDamjan Jovanovic Impl_SetContent( pContent, let_dpItem );
341*11c03c6dSDamjan Jovanovic }
342*11c03c6dSDamjan Jovanovic
343*11c03c6dSDamjan Jovanovic const String &
inq_TagName() const344*11c03c6dSDamjan Jovanovic AnElement::inq_TagName() const
345*11c03c6dSDamjan Jovanovic {
346*11c03c6dSDamjan Jovanovic return sTagName;
347*11c03c6dSDamjan Jovanovic }
348*11c03c6dSDamjan Jovanovic
349*11c03c6dSDamjan Jovanovic const Item *
inq_Content() const350*11c03c6dSDamjan Jovanovic AnElement::inq_Content() const
351*11c03c6dSDamjan Jovanovic {
352*11c03c6dSDamjan Jovanovic return pContent.Ptr();
353*11c03c6dSDamjan Jovanovic }
354*11c03c6dSDamjan Jovanovic
355*11c03c6dSDamjan Jovanovic const AttrList *
inq_Attrs() const356*11c03c6dSDamjan Jovanovic AnElement::inq_Attrs() const
357*11c03c6dSDamjan Jovanovic {
358*11c03c6dSDamjan Jovanovic return &aAttrs;
359*11c03c6dSDamjan Jovanovic }
360*11c03c6dSDamjan Jovanovic
361*11c03c6dSDamjan Jovanovic
362*11c03c6dSDamjan Jovanovic //*************************** AnEmptyElement **************************//
363*11c03c6dSDamjan Jovanovic
AnEmptyElement(const String & i_sTagName)364*11c03c6dSDamjan Jovanovic AnEmptyElement::AnEmptyElement( const String & i_sTagName )
365*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
366*11c03c6dSDamjan Jovanovic // aAttrs
367*11c03c6dSDamjan Jovanovic {
368*11c03c6dSDamjan Jovanovic }
369*11c03c6dSDamjan Jovanovic
AnEmptyElement(const char * i_sTagName)370*11c03c6dSDamjan Jovanovic AnEmptyElement::AnEmptyElement( const char * i_sTagName )
371*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
372*11c03c6dSDamjan Jovanovic // aAttrs
373*11c03c6dSDamjan Jovanovic {
374*11c03c6dSDamjan Jovanovic }
375*11c03c6dSDamjan Jovanovic
~AnEmptyElement()376*11c03c6dSDamjan Jovanovic AnEmptyElement::~AnEmptyElement()
377*11c03c6dSDamjan Jovanovic {
378*11c03c6dSDamjan Jovanovic
379*11c03c6dSDamjan Jovanovic }
380*11c03c6dSDamjan Jovanovic
381*11c03c6dSDamjan Jovanovic const String &
inq_TagName() const382*11c03c6dSDamjan Jovanovic AnEmptyElement::inq_TagName() const
383*11c03c6dSDamjan Jovanovic {
384*11c03c6dSDamjan Jovanovic return sTagName;
385*11c03c6dSDamjan Jovanovic }
386*11c03c6dSDamjan Jovanovic
387*11c03c6dSDamjan Jovanovic AttrList &
inq_RefAttrs()388*11c03c6dSDamjan Jovanovic AnEmptyElement::inq_RefAttrs()
389*11c03c6dSDamjan Jovanovic {
390*11c03c6dSDamjan Jovanovic return aAttrs;
391*11c03c6dSDamjan Jovanovic }
392*11c03c6dSDamjan Jovanovic
393*11c03c6dSDamjan Jovanovic
394*11c03c6dSDamjan Jovanovic //*************************** APureElement **************************//
395*11c03c6dSDamjan Jovanovic
APureElement(const String & i_sTagName)396*11c03c6dSDamjan Jovanovic APureElement::APureElement( const String & i_sTagName )
397*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
398*11c03c6dSDamjan Jovanovic // pContent
399*11c03c6dSDamjan Jovanovic {
400*11c03c6dSDamjan Jovanovic }
401*11c03c6dSDamjan Jovanovic
APureElement(const char * i_sTagName)402*11c03c6dSDamjan Jovanovic APureElement::APureElement( const char * i_sTagName )
403*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
404*11c03c6dSDamjan Jovanovic // pContent
405*11c03c6dSDamjan Jovanovic {
406*11c03c6dSDamjan Jovanovic }
407*11c03c6dSDamjan Jovanovic
~APureElement()408*11c03c6dSDamjan Jovanovic APureElement::~APureElement()
409*11c03c6dSDamjan Jovanovic {
410*11c03c6dSDamjan Jovanovic }
411*11c03c6dSDamjan Jovanovic
412*11c03c6dSDamjan Jovanovic const String &
inq_TagName() const413*11c03c6dSDamjan Jovanovic APureElement::inq_TagName() const
414*11c03c6dSDamjan Jovanovic {
415*11c03c6dSDamjan Jovanovic return sTagName;
416*11c03c6dSDamjan Jovanovic }
417*11c03c6dSDamjan Jovanovic
418*11c03c6dSDamjan Jovanovic Dyn< Item > &
inq_RefContent()419*11c03c6dSDamjan Jovanovic APureElement::inq_RefContent()
420*11c03c6dSDamjan Jovanovic {
421*11c03c6dSDamjan Jovanovic return pContent;
422*11c03c6dSDamjan Jovanovic }
423*11c03c6dSDamjan Jovanovic
424*11c03c6dSDamjan Jovanovic
425*11c03c6dSDamjan Jovanovic
426*11c03c6dSDamjan Jovanovic //*************************** ASglTag **************************//
427*11c03c6dSDamjan Jovanovic
ASglTag(const String & i_sTagName)428*11c03c6dSDamjan Jovanovic ASglTag::ASglTag( const String & i_sTagName )
429*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
430*11c03c6dSDamjan Jovanovic {
431*11c03c6dSDamjan Jovanovic }
432*11c03c6dSDamjan Jovanovic
ASglTag(const char * i_sTagName)433*11c03c6dSDamjan Jovanovic ASglTag::ASglTag( const char * i_sTagName )
434*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName )
435*11c03c6dSDamjan Jovanovic {
436*11c03c6dSDamjan Jovanovic }
437*11c03c6dSDamjan Jovanovic
~ASglTag()438*11c03c6dSDamjan Jovanovic ASglTag::~ASglTag()
439*11c03c6dSDamjan Jovanovic {
440*11c03c6dSDamjan Jovanovic }
441*11c03c6dSDamjan Jovanovic
442*11c03c6dSDamjan Jovanovic const String &
inq_TagName() const443*11c03c6dSDamjan Jovanovic ASglTag::inq_TagName() const
444*11c03c6dSDamjan Jovanovic {
445*11c03c6dSDamjan Jovanovic return sTagName;
446*11c03c6dSDamjan Jovanovic }
447*11c03c6dSDamjan Jovanovic
448*11c03c6dSDamjan Jovanovic
449*11c03c6dSDamjan Jovanovic //*************************** AnAttribute **************************//
AnAttribute(const String & i_sName,const String & i_sValue)450*11c03c6dSDamjan Jovanovic AnAttribute::AnAttribute( const String & i_sName,
451*11c03c6dSDamjan Jovanovic const String & i_sValue )
452*11c03c6dSDamjan Jovanovic : sName(i_sName),
453*11c03c6dSDamjan Jovanovic sValue(i_sValue)
454*11c03c6dSDamjan Jovanovic {
455*11c03c6dSDamjan Jovanovic }
456*11c03c6dSDamjan Jovanovic
AnAttribute(const char * i_sName,const char * i_sValue)457*11c03c6dSDamjan Jovanovic AnAttribute::AnAttribute( const char * i_sName,
458*11c03c6dSDamjan Jovanovic const char * i_sValue )
459*11c03c6dSDamjan Jovanovic : sName(i_sName),
460*11c03c6dSDamjan Jovanovic sValue(i_sValue)
461*11c03c6dSDamjan Jovanovic {
462*11c03c6dSDamjan Jovanovic }
463*11c03c6dSDamjan Jovanovic
~AnAttribute()464*11c03c6dSDamjan Jovanovic AnAttribute::~AnAttribute()
465*11c03c6dSDamjan Jovanovic {
466*11c03c6dSDamjan Jovanovic }
467*11c03c6dSDamjan Jovanovic
468*11c03c6dSDamjan Jovanovic const String &
inq_Name() const469*11c03c6dSDamjan Jovanovic AnAttribute::inq_Name() const
470*11c03c6dSDamjan Jovanovic {
471*11c03c6dSDamjan Jovanovic return sName;
472*11c03c6dSDamjan Jovanovic }
473*11c03c6dSDamjan Jovanovic
474*11c03c6dSDamjan Jovanovic const String &
inq_Value() const475*11c03c6dSDamjan Jovanovic AnAttribute::inq_Value() const
476*11c03c6dSDamjan Jovanovic {
477*11c03c6dSDamjan Jovanovic return sValue;
478*11c03c6dSDamjan Jovanovic }
479*11c03c6dSDamjan Jovanovic
480*11c03c6dSDamjan Jovanovic
481*11c03c6dSDamjan Jovanovic
482*11c03c6dSDamjan Jovanovic //*************************** Text **************************//
483*11c03c6dSDamjan Jovanovic
Text(const String & i_sText)484*11c03c6dSDamjan Jovanovic Text::Text( const String & i_sText )
485*11c03c6dSDamjan Jovanovic : sText(i_sText)
486*11c03c6dSDamjan Jovanovic {
487*11c03c6dSDamjan Jovanovic }
488*11c03c6dSDamjan Jovanovic
Text(const char * i_sText)489*11c03c6dSDamjan Jovanovic Text::Text( const char * i_sText )
490*11c03c6dSDamjan Jovanovic : sText(i_sText)
491*11c03c6dSDamjan Jovanovic {
492*11c03c6dSDamjan Jovanovic }
493*11c03c6dSDamjan Jovanovic
~Text()494*11c03c6dSDamjan Jovanovic Text::~Text()
495*11c03c6dSDamjan Jovanovic {
496*11c03c6dSDamjan Jovanovic }
497*11c03c6dSDamjan Jovanovic
498*11c03c6dSDamjan Jovanovic void
do_WriteOut(csv::bostream & io_aFile) const499*11c03c6dSDamjan Jovanovic Text::do_WriteOut( csv::bostream & io_aFile ) const
500*11c03c6dSDamjan Jovanovic {
501*11c03c6dSDamjan Jovanovic const unsigned char *
502*11c03c6dSDamjan Jovanovic pStart = reinterpret_cast< const unsigned char* >(sText.c_str());
503*11c03c6dSDamjan Jovanovic const unsigned char *
504*11c03c6dSDamjan Jovanovic pOut = pStart;
505*11c03c6dSDamjan Jovanovic
506*11c03c6dSDamjan Jovanovic for ( ; *pOut != '\0'; ++pOut )
507*11c03c6dSDamjan Jovanovic {
508*11c03c6dSDamjan Jovanovic if ( cReplacable[*pOut] )
509*11c03c6dSDamjan Jovanovic {
510*11c03c6dSDamjan Jovanovic if ( pOut != pStart )
511*11c03c6dSDamjan Jovanovic {
512*11c03c6dSDamjan Jovanovic io_aFile.write( pStart, pOut-pStart );
513*11c03c6dSDamjan Jovanovic }
514*11c03c6dSDamjan Jovanovic
515*11c03c6dSDamjan Jovanovic switch (*pOut)
516*11c03c6dSDamjan Jovanovic {
517*11c03c6dSDamjan Jovanovic case '<': io_aFile.write("<"); break;
518*11c03c6dSDamjan Jovanovic case '>': io_aFile.write(">"); break;
519*11c03c6dSDamjan Jovanovic case '"': io_aFile.write("""); break;
520*11c03c6dSDamjan Jovanovic case '&': io_aFile.write("&"); break;
521*11c03c6dSDamjan Jovanovic case 255: io_aFile.write(" "); break;
522*11c03c6dSDamjan Jovanovic }
523*11c03c6dSDamjan Jovanovic
524*11c03c6dSDamjan Jovanovic pStart = pOut+1;
525*11c03c6dSDamjan Jovanovic } // endif (cReplacable[*pOut])
526*11c03c6dSDamjan Jovanovic } // end for
527*11c03c6dSDamjan Jovanovic
528*11c03c6dSDamjan Jovanovic if ( pOut != pStart )
529*11c03c6dSDamjan Jovanovic {
530*11c03c6dSDamjan Jovanovic io_aFile.write( pStart, pOut-pStart );
531*11c03c6dSDamjan Jovanovic }
532*11c03c6dSDamjan Jovanovic }
533*11c03c6dSDamjan Jovanovic
534*11c03c6dSDamjan Jovanovic
535*11c03c6dSDamjan Jovanovic //*************************** XmlCode **************************//
536*11c03c6dSDamjan Jovanovic
XmlCode(const String & i_sText)537*11c03c6dSDamjan Jovanovic XmlCode::XmlCode( const String & i_sText )
538*11c03c6dSDamjan Jovanovic : sText(i_sText)
539*11c03c6dSDamjan Jovanovic {
540*11c03c6dSDamjan Jovanovic }
541*11c03c6dSDamjan Jovanovic
XmlCode(const char * i_sText)542*11c03c6dSDamjan Jovanovic XmlCode::XmlCode( const char * i_sText )
543*11c03c6dSDamjan Jovanovic : sText(i_sText)
544*11c03c6dSDamjan Jovanovic {
545*11c03c6dSDamjan Jovanovic }
546*11c03c6dSDamjan Jovanovic
~XmlCode()547*11c03c6dSDamjan Jovanovic XmlCode::~XmlCode()
548*11c03c6dSDamjan Jovanovic {
549*11c03c6dSDamjan Jovanovic }
550*11c03c6dSDamjan Jovanovic
551*11c03c6dSDamjan Jovanovic void
do_WriteOut(csv::bostream & io_aFile) const552*11c03c6dSDamjan Jovanovic XmlCode::do_WriteOut( csv::bostream & io_aFile ) const
553*11c03c6dSDamjan Jovanovic {
554*11c03c6dSDamjan Jovanovic io_aFile.write(sText);
555*11c03c6dSDamjan Jovanovic }
556*11c03c6dSDamjan Jovanovic
557*11c03c6dSDamjan Jovanovic
558*11c03c6dSDamjan Jovanovic //*************************** MultiItem **************************//
559*11c03c6dSDamjan Jovanovic
MultiItem()560*11c03c6dSDamjan Jovanovic MultiItem::MultiItem()
561*11c03c6dSDamjan Jovanovic {
562*11c03c6dSDamjan Jovanovic }
563*11c03c6dSDamjan Jovanovic
~MultiItem()564*11c03c6dSDamjan Jovanovic MultiItem::~MultiItem()
565*11c03c6dSDamjan Jovanovic {
566*11c03c6dSDamjan Jovanovic }
567*11c03c6dSDamjan Jovanovic
568*11c03c6dSDamjan Jovanovic void
do_WriteOut(csv::bostream & io_aFile) const569*11c03c6dSDamjan Jovanovic MultiItem::do_WriteOut( csv::bostream & io_aFile ) const
570*11c03c6dSDamjan Jovanovic {
571*11c03c6dSDamjan Jovanovic ItemList::iterator itEnd = aItems.end();
572*11c03c6dSDamjan Jovanovic
573*11c03c6dSDamjan Jovanovic for ( ItemList::iterator it = aItems.begin();
574*11c03c6dSDamjan Jovanovic it != itEnd;
575*11c03c6dSDamjan Jovanovic ++it )
576*11c03c6dSDamjan Jovanovic {
577*11c03c6dSDamjan Jovanovic (*it)->WriteOut( io_aFile );
578*11c03c6dSDamjan Jovanovic }
579*11c03c6dSDamjan Jovanovic
580*11c03c6dSDamjan Jovanovic }
581*11c03c6dSDamjan Jovanovic
582*11c03c6dSDamjan Jovanovic
583*11c03c6dSDamjan Jovanovic
584*11c03c6dSDamjan Jovanovic //*************************** Helpers **************************//
585*11c03c6dSDamjan Jovanovic
586*11c03c6dSDamjan Jovanovic void
StreamOut(Dyn<Item> & o_rContent,DYN Item * let_dpItem)587*11c03c6dSDamjan Jovanovic StreamOut( Dyn< Item > & o_rContent,
588*11c03c6dSDamjan Jovanovic DYN Item * let_dpItem )
589*11c03c6dSDamjan Jovanovic {
590*11c03c6dSDamjan Jovanovic MultiItem * pContent = 0;
591*11c03c6dSDamjan Jovanovic if ( bool(o_rContent) )
592*11c03c6dSDamjan Jovanovic {
593*11c03c6dSDamjan Jovanovic pContent = static_cast< MultiItem* >( o_rContent.MutablePtr() );
594*11c03c6dSDamjan Jovanovic csv_assert( dynamic_cast< MultiItem* >( o_rContent.MutablePtr() ) != 0 );
595*11c03c6dSDamjan Jovanovic }
596*11c03c6dSDamjan Jovanovic else
597*11c03c6dSDamjan Jovanovic {
598*11c03c6dSDamjan Jovanovic pContent = new MultiItem;
599*11c03c6dSDamjan Jovanovic o_rContent = pContent;
600*11c03c6dSDamjan Jovanovic }
601*11c03c6dSDamjan Jovanovic
602*11c03c6dSDamjan Jovanovic csv_assert( let_dpItem != 0 );
603*11c03c6dSDamjan Jovanovic pContent->Add( let_dpItem );
604*11c03c6dSDamjan Jovanovic }
605*11c03c6dSDamjan Jovanovic
606*11c03c6dSDamjan Jovanovic
607*11c03c6dSDamjan Jovanovic
608*11c03c6dSDamjan Jovanovic
609*11c03c6dSDamjan Jovanovic } // namespace xml
610*11c03c6dSDamjan Jovanovic } // namespace csi
611