xref: /trunk/main/autodoc/source/udm/xml/xmlitem.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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                   // &nbsp;
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("&lt;");     break;
518*11c03c6dSDamjan Jovanovic                 case '>':   io_aFile.write("&gt;");     break;
519*11c03c6dSDamjan Jovanovic                 case '"':   io_aFile.write("&quot;");   break;
520*11c03c6dSDamjan Jovanovic                 case '&':   io_aFile.write("&amp;");    break;
521*11c03c6dSDamjan Jovanovic                 case 255:   io_aFile.write("&nbsp;");   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