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