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 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); } 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 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 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 118*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 141*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 188*11c03c6dSDamjan Jovanovic Element::FinishEmptyTag_XmlStyle() const 189*11c03c6dSDamjan Jovanovic { 190*11c03c6dSDamjan Jovanovic return true; 191*11c03c6dSDamjan Jovanovic } 192*11c03c6dSDamjan Jovanovic 193*11c03c6dSDamjan Jovanovic bool 194*11c03c6dSDamjan Jovanovic Element::LineBreakAfterBeginTag() const 195*11c03c6dSDamjan Jovanovic { 196*11c03c6dSDamjan Jovanovic return false; 197*11c03c6dSDamjan Jovanovic } 198*11c03c6dSDamjan Jovanovic 199*11c03c6dSDamjan Jovanovic bool 200*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 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 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 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 * 227*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 * 233*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 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 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 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 * 260*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 * 266*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 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 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 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 * 293*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 * 299*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 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 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 321*11c03c6dSDamjan Jovanovic AnElement::~AnElement() 322*11c03c6dSDamjan Jovanovic { 323*11c03c6dSDamjan Jovanovic } 324*11c03c6dSDamjan Jovanovic 325*11c03c6dSDamjan Jovanovic void 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 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 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 & 344*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 * 350*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 * 356*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 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 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 376*11c03c6dSDamjan Jovanovic AnEmptyElement::~AnEmptyElement() 377*11c03c6dSDamjan Jovanovic { 378*11c03c6dSDamjan Jovanovic 379*11c03c6dSDamjan Jovanovic } 380*11c03c6dSDamjan Jovanovic 381*11c03c6dSDamjan Jovanovic const String & 382*11c03c6dSDamjan Jovanovic AnEmptyElement::inq_TagName() const 383*11c03c6dSDamjan Jovanovic { 384*11c03c6dSDamjan Jovanovic return sTagName; 385*11c03c6dSDamjan Jovanovic } 386*11c03c6dSDamjan Jovanovic 387*11c03c6dSDamjan Jovanovic AttrList & 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 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 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 408*11c03c6dSDamjan Jovanovic APureElement::~APureElement() 409*11c03c6dSDamjan Jovanovic { 410*11c03c6dSDamjan Jovanovic } 411*11c03c6dSDamjan Jovanovic 412*11c03c6dSDamjan Jovanovic const String & 413*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 > & 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 428*11c03c6dSDamjan Jovanovic ASglTag::ASglTag( const String & i_sTagName ) 429*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName ) 430*11c03c6dSDamjan Jovanovic { 431*11c03c6dSDamjan Jovanovic } 432*11c03c6dSDamjan Jovanovic 433*11c03c6dSDamjan Jovanovic ASglTag::ASglTag( const char * i_sTagName ) 434*11c03c6dSDamjan Jovanovic : sTagName( i_sTagName ) 435*11c03c6dSDamjan Jovanovic { 436*11c03c6dSDamjan Jovanovic } 437*11c03c6dSDamjan Jovanovic 438*11c03c6dSDamjan Jovanovic ASglTag::~ASglTag() 439*11c03c6dSDamjan Jovanovic { 440*11c03c6dSDamjan Jovanovic } 441*11c03c6dSDamjan Jovanovic 442*11c03c6dSDamjan Jovanovic const String & 443*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 **************************// 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 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 464*11c03c6dSDamjan Jovanovic AnAttribute::~AnAttribute() 465*11c03c6dSDamjan Jovanovic { 466*11c03c6dSDamjan Jovanovic } 467*11c03c6dSDamjan Jovanovic 468*11c03c6dSDamjan Jovanovic const String & 469*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 & 475*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 484*11c03c6dSDamjan Jovanovic Text::Text( const String & i_sText ) 485*11c03c6dSDamjan Jovanovic : sText(i_sText) 486*11c03c6dSDamjan Jovanovic { 487*11c03c6dSDamjan Jovanovic } 488*11c03c6dSDamjan Jovanovic 489*11c03c6dSDamjan Jovanovic Text::Text( const char * i_sText ) 490*11c03c6dSDamjan Jovanovic : sText(i_sText) 491*11c03c6dSDamjan Jovanovic { 492*11c03c6dSDamjan Jovanovic } 493*11c03c6dSDamjan Jovanovic 494*11c03c6dSDamjan Jovanovic Text::~Text() 495*11c03c6dSDamjan Jovanovic { 496*11c03c6dSDamjan Jovanovic } 497*11c03c6dSDamjan Jovanovic 498*11c03c6dSDamjan Jovanovic void 499*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 537*11c03c6dSDamjan Jovanovic XmlCode::XmlCode( const String & i_sText ) 538*11c03c6dSDamjan Jovanovic : sText(i_sText) 539*11c03c6dSDamjan Jovanovic { 540*11c03c6dSDamjan Jovanovic } 541*11c03c6dSDamjan Jovanovic 542*11c03c6dSDamjan Jovanovic XmlCode::XmlCode( const char * i_sText ) 543*11c03c6dSDamjan Jovanovic : sText(i_sText) 544*11c03c6dSDamjan Jovanovic { 545*11c03c6dSDamjan Jovanovic } 546*11c03c6dSDamjan Jovanovic 547*11c03c6dSDamjan Jovanovic XmlCode::~XmlCode() 548*11c03c6dSDamjan Jovanovic { 549*11c03c6dSDamjan Jovanovic } 550*11c03c6dSDamjan Jovanovic 551*11c03c6dSDamjan Jovanovic void 552*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 560*11c03c6dSDamjan Jovanovic MultiItem::MultiItem() 561*11c03c6dSDamjan Jovanovic { 562*11c03c6dSDamjan Jovanovic } 563*11c03c6dSDamjan Jovanovic 564*11c03c6dSDamjan Jovanovic MultiItem::~MultiItem() 565*11c03c6dSDamjan Jovanovic { 566*11c03c6dSDamjan Jovanovic } 567*11c03c6dSDamjan Jovanovic 568*11c03c6dSDamjan Jovanovic void 569*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 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