22 #ifndef __XMLWRITECONTEXT_HXX__
23 #define __XMLWRITECONTEXT_HXX__
50 "An XML generation context is already defined");
51 sCurrentContext =
this;
52 mLastWasAContent=
false;
53 mElementInserted=
false;
56 mUseIndentation=
false;
66 CLAM_ASSERT(sCurrentContext,
"XML generation context not created");
67 return *sCurrentContext;
78 if (mTagOpened) EndOpenTag();
80 NewIndentedLineIfEnabled();
82 mLastWasAContent =
true;
87 if (mTagOpened) EndOpenTag();
88 NewIndentedLineIfEnabled();
90 mTarget << std::string(
"<") << name;
92 mElementInserted =
false;
93 mLastWasAContent =
false;
100 if (mLastWasAContent || mElementInserted)
101 CloseFullElement(name);
104 mElementInserted =
true;
105 mLastWasAContent =
false;
108 template <
typename T>
111 CLAM_ASSERT(mTagOpened,
"Appending attribute outside a tag");
112 mTarget << std::string(
" ") << name << std::string(
"='")
113 << content << std::string(
"'");
122 return mLastWasAContent;
130 return mElementInserted;
135 return mCurrentLevel;
140 mUseIndentation = useIt;
145 void CloseFullElement(
const std::string & name)
147 if (mElementInserted)
148 NewIndentedLineIfEnabled();
150 mTarget << std::string(
"</") << name << std::string(
">");
153 void CloseEmptyElement()
157 mTarget << std::string(
" />");
165 mTarget << std::string(
">");
169 void NewIndentedLineIfEnabled()
171 if (!mUseIndentation)
return;
173 if (mCurrentLevel!=0 || mLastWasAContent || mElementInserted)
174 mTarget << std::string(
"\n");
175 mTarget << std::string(mCurrentLevel,
'\t');
180 std::ostream & mTarget;
181 bool mLastWasAContent;
182 bool mElementInserted;
184 bool mUseIndentation;
185 unsigned int mCurrentLevel;
193 #endif//__XMLWRITECONTEXT_HXX__