xref: /aoo42x/main/xml2cmp/source/xcd/xmlelem.cxx (revision ab595ff6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 #include <xmlelem.hxx>
26 
27 
28 // NOT FULLY DEFINED SERVICES
29 #include <parse.hxx>
30 #include <cr_html.hxx>
31 
XmlElement(const char * i_sName)32 XmlElement::XmlElement( const char * i_sName )
33 	: sName(i_sName)
34 {
35 }
36 
37 void
Insert2Index(Index &) const38 XmlElement::Insert2Index( Index & ) const
39 {
40 	//  Default version. Does nothing.
41 }
42 
43 XmlElement *
FindChild(const Simstr & i_sChildName)44 MultipleElement::FindChild( const Simstr & i_sChildName )
45 {
46 	unsigned i_max = aChildren.size();
47 	for ( unsigned i = 0; i < i_max; ++i )
48 	{
49 		if ( aChildren[i]->Name() == i_sChildName )
50 			return aChildren[i];
51 	}
52 
53 	return 0;
54 }
55 
~MultipleElement()56 MultipleElement::~MultipleElement()
57 {
58 }
59 
MultipleElement(const char * i_sName)60 MultipleElement::MultipleElement( const char * i_sName )
61 	:	XmlElement(i_sName)
62 {
63 }
64 
65 void
AddChild(XmlElement & let_drElement)66 MultipleElement::AddChild( XmlElement &	let_drElement )
67 {
68 	aChildren.push_back(&let_drElement);
69 }
70 
71 void
Parse(X2CParser & io_rParser)72 SequenceElement::Parse( X2CParser & io_rParser )
73 {
74 	io_rParser.Parse_Sequence( Children(), Name() );
75 }
76 
77 void
Write2Html(HtmlCreator & io_rHC) const78 SequenceElement::Write2Html( HtmlCreator & io_rHC ) const
79 {
80 	io_rHC.StartTable();
81 
82 	Children()[nIndexNameElement]->Write2Html(io_rHC);
83 	for ( unsigned i = 0; i < Children().size(); ++i )
84 	{
85 		if (i != nIndexNameElement)
86 		{
87 			Children()[i]->Write2Html(io_rHC);
88 		}
89 	}  // end for
90 
91 	io_rHC.FinishTable();
92 }
93 
94 
SequenceElement(const char * i_sName,unsigned i_nIndexNameElement)95 SequenceElement::SequenceElement( const char * i_sName,
96 								  unsigned     i_nIndexNameElement )
97 	:	MultipleElement(i_sName),
98 		nIndexNameElement(i_nIndexNameElement)
99 {
100 }
101 
FreeChoiceElement()102 FreeChoiceElement::FreeChoiceElement()
103 	:	MultipleElement("")
104 {
105 }
106 
107 void
Parse(X2CParser & io_rParser)108 FreeChoiceElement::Parse( X2CParser & io_rParser )
109 {
110 	io_rParser.Parse_FreeChoice(Children());
111 }
112 
113 void
Write2Html(HtmlCreator & io_rHC) const114 FreeChoiceElement::Write2Html( HtmlCreator & io_rHC ) const
115 {
116 	for ( unsigned i = 0; i < Children().size(); ++i )
117 	{
118 		Children()[i]->Write2Html(io_rHC);
119 	}  // end for
120 }
121 
ListElement(const char * i_sElementsName,F_CREATE i_fCreateNewElement)122 ListElement::ListElement( const char * i_sElementsName,
123 						  F_CREATE     i_fCreateNewElement )
124 	:	MultipleElement(i_sElementsName),
125 		fCreateNewElement(i_fCreateNewElement)
126 {
127 }
128 
129 void
Parse(X2CParser & io_rParser)130 ListElement::Parse( X2CParser &	io_rParser )
131 {
132 	io_rParser.Parse_List(	*this );
133 }
134 
135 void
Write2Html(HtmlCreator & io_rHC) const136 ListElement::Write2Html( HtmlCreator & io_rHC ) const
137 {
138 	for ( unsigned i = 0; i < Children().size(); ++i )
139 	{
140 		Children()[i]->Write2Html(io_rHC);
141 	}  // end for
142 }
143 
144 XmlElement *
Create_and_Add_NewElement()145 ListElement::Create_and_Add_NewElement()
146 {
147 	XmlElement * pNew = (*fCreateNewElement)(Name());
148 	Children().push_back( pNew );
149     return pNew;
150 }
151 
TextElement(const char * i_sName,E_LinkType i_eLinkType,bool i_bReverseName)152 TextElement::TextElement( const char *		i_sName,
153 						  E_LinkType		i_eLinkType,
154 						  bool				i_bReverseName )
155 	:	XmlElement(i_sName),
156 		eLinkType(i_eLinkType),
157 		bReverseName(i_bReverseName)
158 {
159 }
160 
SglTextElement(const char * i_sName,E_LinkType i_eLinkType,bool i_bReverseName)161 SglTextElement::SglTextElement( const char *		i_sName,
162 								E_LinkType			i_eLinkType,
163 								bool				i_bReverseName )
164 	:	TextElement(i_sName, i_eLinkType, i_bReverseName)
165 {
166 }
167 
168 void
Parse(X2CParser & io_rParser)169 SglTextElement::Parse( X2CParser & io_rParser )
170 {
171 	io_rParser.Parse_Text(sContent, Name(), IsReversedName());
172 }
173 
174 void
Write2Html(HtmlCreator & io_rHC) const175 SglTextElement::Write2Html(	HtmlCreator & io_rHC ) const
176 {
177 	if ( !sContent.is_no_text() )
178 		io_rHC.Write_SglTextElement( *this );
179 }
180 
MultipleTextElement(const char * i_sName,E_LinkType i_eLinkType,bool i_bReverseName)181 MultipleTextElement::MultipleTextElement( const char *		i_sName,
182 										  E_LinkType		i_eLinkType,
183 										  bool				i_bReverseName )
184 	:	TextElement(i_sName, i_eLinkType, i_bReverseName)
185 {
186 }
187 
188 void
Parse(X2CParser & io_rParser)189 MultipleTextElement::Parse( X2CParser & io_rParser )
190 {
191 	io_rParser.Parse_MultipleText(aContent, Name(), IsReversedName());
192 }
193 
194 void
Write2Html(HtmlCreator & io_rHC) const195 MultipleTextElement::Write2Html(	HtmlCreator & io_rHC ) const
196 {
197 	if (Size() > 0)
198 		io_rHC.Write_MultiTextElement( *this );
199 }
200 
201 const Simstr &
Data(unsigned i_nNr) const202 MultipleTextElement::Data( unsigned i_nNr ) const
203 {
204 	static const Simstr sNull_;
205 
206 	if (aContent.is_valid_index(i_nNr))
207 		return aContent[i_nNr];
208 	return sNull_;
209 }
210 
EmptyElement(const char * i_sName)211 EmptyElement::EmptyElement( const char * i_sName )
212 	:	XmlElement(i_sName)
213 {
214 }
215 
SglAttrElement(const char * i_sName,const char * i_sAttrName)216 SglAttrElement::SglAttrElement( const char *		i_sName,
217 								const char *		i_sAttrName )
218 	:	EmptyElement(i_sName),
219 		sAttrName(i_sAttrName)
220 {
221 }
222 
223 void
Parse(X2CParser & io_rParser)224 SglAttrElement::Parse( X2CParser & io_rParser )
225 {
226 	io_rParser.Parse_SglAttr(sAttrValue, Name(), sAttrName);
227 }
228 
229 void
Write2Html(HtmlCreator & io_rHC) const230 SglAttrElement::Write2Html(	HtmlCreator & io_rHC ) const
231 {
232 	io_rHC.Write_SglText( Name(), sAttrValue );
233 }
234 
MultipleAttrElement(const char * i_sName,const char ** i_sAttrNames,unsigned i_nSize)235 MultipleAttrElement::MultipleAttrElement( const char *		i_sName,
236 										  const char **		i_sAttrNames,
237 										  unsigned			i_nSize )
238 	:	EmptyElement(i_sName)
239 {
240 	for ( unsigned i = 0; i < i_nSize; ++i )
241 	{
242 		aAttrNames.push_back(Simstr(i_sAttrNames[i]));
243 		aAttrValues.push_back(Simstr(""));
244 	}
245 }
246 
247 void
Parse(X2CParser & io_rParser)248 MultipleAttrElement::Parse(	X2CParser &	io_rParser )
249 {
250 	io_rParser.Parse_MultipleAttr(aAttrValues, Name(), aAttrNames);
251 }
252 
253 void
Write2Html(HtmlCreator & io_rHC) const254 MultipleAttrElement::Write2Html(	HtmlCreator & io_rHC ) const
255 {
256 	if ( ! aAttrValues[0].is_no_text() )
257 		io_rHC.Write_ReferenceDocu( Name(), aAttrValues[0], aAttrValues[1], aAttrValues[2] );
258 }
259 
260 
261