Changeset 313 for XIOS/trunk/src/indent.cpp
- Timestamp:
- 02/18/12 22:43:24 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/indent.cpp
r219 r313 1 1 #include "indent.hpp" 2 #include <ostream> 3 #include <iostream> 2 4 3 /// boost headers /// 4 #include <boost/algorithm/string.hpp> 5 #include <boost/algorithm/string/split.hpp> 5 using namespace std ; 6 6 7 7 namespace xmlioserver 8 8 { 9 /// ////////////////////// Définitions ////////////////////// /// 10 unsigned int CIndent::Indent = 0; 11 StdString CIndent::Increm = StdString(" "); 12 bool CIndent::WithLine = false; 9 Cindent iendl ; 10 Cindent ireset(0,true) ; 11 int Cindent::defaultIncSize=2 ; 12 int Cindent::index=ios::xalloc() ; 13 14 Cindent::Cindent(int i,bool r) : offset(i), reset(r), incSize(defaultIncSize) 15 { } 16 17 Cindent Cindent::operator++() 18 { 19 return Cindent(incSize) ; 20 } 21 22 Cindent Cindent::operator--() 23 { 24 return Cindent(-incSize) ; 25 } 13 26 14 StdOStream & CIndent::NIndent(StdOStream& out) 15 { 16 static unsigned int LineNB = 1; 17 if (CIndent::WithLine) out << LineNB++ << ". "; 18 for(unsigned int i = 0; i < CIndent::Indent; out << CIndent::Increm , i++){} 19 return (out); 20 } 27 Cindent Cindent::operator++(int) 28 { 29 return Cindent(incSize) ; 30 } 31 32 Cindent Cindent::operator--(int) 33 { 34 return Cindent(-incSize) ; 35 } 21 36 22 StdOStream & CIndent::IncIndent(StdOStream& out) 23 { CIndent::Indent++; return (CIndent::NIndent(out)); } 37 Cindent Cindent::operator+=(int i) 38 { 39 return Cindent(incSize*i) ; 40 } 24 41 25 StdOStream & CIndent::DecEndl (StdOStream& out) 26 { CIndent::Indent--; return (out); } 42 Cindent Cindent::operator-=(int i) 43 { 44 return Cindent(-incSize*i) ; 45 } 27 46 28 ///---------------------------------------- 29 30 StdString CIndentedXml::Indented(const StdString & content) 31 { 32 StdOStringStream retvalue; 33 std::vector<StdString> str; 34 boost::split(str, content, boost::is_any_of("\n")); 35 36 std::vector<StdString>::iterator it = str.begin(), end = str.end(); 37 38 for (; it != end; it++) 39 { 40 StdString & line = *it; 41 if (line.find("<? ") != StdString::npos || 42 line.find(xml::CXMLNode::GetRootName()) != StdString::npos) 43 retvalue << CIndent::NIndent << line << std::endl; 44 else if (line.find("</") != StdString::npos) 45 retvalue << CIndent::NIndent << line << CIndent::DecEndl << std::endl; 46 else if (line.find(" />") != StdString::npos) 47 retvalue << CIndent::IncIndent << line << CIndent::DecEndl << std::endl; 48 else 49 retvalue << CIndent::IncIndent << line << std::endl; 50 } 51 return (retvalue.str()); 52 } 53 } // namespace xmlioserver 47 ostream& Cindent::iendl(ostream& o) const 48 { 49 if (reset) 50 { 51 o.iword(index)=0 ; 52 return o ; 53 } 54 else 55 { 56 o.iword(index)+=offset ; 57 if (o.iword(index)<0) o.iword(index)=0 ; 58 o<<"\n" ; 59 int mem=o.width(o.iword(index)) ; 60 o<<""; 61 o.width(mem) ; 62 return o ; 63 } 64 } 65 66 ostream& operator <<(ostream& o, const Cindent& indent) 67 { 68 return indent.iendl(o) ; 69 } 70 71 }
Note: See TracChangeset
for help on using the changeset viewer.