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