1*0841af79SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*0841af79SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*0841af79SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*0841af79SAndrew Rist * distributed with this work for additional information
6*0841af79SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*0841af79SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*0841af79SAndrew Rist * "License"); you may not use this file except in compliance
9*0841af79SAndrew Rist * with the License. You may obtain a copy of the License at
10*0841af79SAndrew Rist *
11*0841af79SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*0841af79SAndrew Rist *
13*0841af79SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*0841af79SAndrew Rist * software distributed under the License is distributed on an
15*0841af79SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*0841af79SAndrew Rist * KIND, either express or implied. See the License for the
17*0841af79SAndrew Rist * specific language governing permissions and limitations
18*0841af79SAndrew Rist * under the License.
19*0841af79SAndrew Rist *
20*0841af79SAndrew Rist *************************************************************/
21cdf0e10cSrcweir
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include "pm_aldef.hxx"
24cdf0e10cSrcweir
25cdf0e10cSrcweir
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx>
28cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx>
29cdf0e10cSrcweir #include <ary/cpp/c_define.hxx>
30cdf0e10cSrcweir #include <ary/cpp/c_macro.hxx>
31cdf0e10cSrcweir #include <ary/cpp/cp_def.hxx>
32cdf0e10cSrcweir #include <ary/loc/loc_file.hxx>
33cdf0e10cSrcweir #include <ary/loc/locp_le.hxx>
34cdf0e10cSrcweir #include <ary/getncast.hxx>
35cdf0e10cSrcweir #include "hd_docu.hxx"
36cdf0e10cSrcweir #include "html_kit.hxx"
37cdf0e10cSrcweir #include "navibar.hxx"
38cdf0e10cSrcweir #include "opageenv.hxx"
39cdf0e10cSrcweir #include "pagemake.hxx"
40cdf0e10cSrcweir #include "strconst.hxx"
41cdf0e10cSrcweir
42cdf0e10cSrcweir
43cdf0e10cSrcweir using namespace csi;
44cdf0e10cSrcweir using csi::html::HorizontalLine;
45cdf0e10cSrcweir using csi::html::Link;
46cdf0e10cSrcweir using csi::html::Label;
47cdf0e10cSrcweir using csi::html::AlignAttr;
48cdf0e10cSrcweir
49cdf0e10cSrcweir
50cdf0e10cSrcweir
PageMaker_AllDefs(PageDisplay & io_rPage)51cdf0e10cSrcweir PageMaker_AllDefs::PageMaker_AllDefs( PageDisplay & io_rPage )
52cdf0e10cSrcweir : SpecializedPageMaker(io_rPage),
53cdf0e10cSrcweir pDocuDisplay( new Docu_Display(io_rPage.Env()) ),
54cdf0e10cSrcweir pNavi(0)
55cdf0e10cSrcweir {
56cdf0e10cSrcweir }
57cdf0e10cSrcweir
~PageMaker_AllDefs()58cdf0e10cSrcweir PageMaker_AllDefs::~PageMaker_AllDefs()
59cdf0e10cSrcweir {
60cdf0e10cSrcweir }
61cdf0e10cSrcweir
62cdf0e10cSrcweir void
MakePage()63cdf0e10cSrcweir PageMaker_AllDefs::MakePage()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir pNavi = new NavigationBar( Env(), NavigationBar::LOC_AllDefs );
66cdf0e10cSrcweir Write_NavBar();
67cdf0e10cSrcweir
68cdf0e10cSrcweir Write_TopArea();
69cdf0e10cSrcweir
70cdf0e10cSrcweir Write_DefinesList();
71cdf0e10cSrcweir Write_MacrosList();
72cdf0e10cSrcweir
73cdf0e10cSrcweir pNavi->Write_SubRows();
74cdf0e10cSrcweir }
75cdf0e10cSrcweir
76cdf0e10cSrcweir void
Write_NavBar()77cdf0e10cSrcweir PageMaker_AllDefs::Write_NavBar()
78cdf0e10cSrcweir {
79cdf0e10cSrcweir pNavi->MakeSubRow( "" );
80cdf0e10cSrcweir pNavi->AddItem( "Defines", "defines", true );
81cdf0e10cSrcweir pNavi->AddItem( "Macros", "macros", true );
82cdf0e10cSrcweir pNavi->Write( CurOut() );
83cdf0e10cSrcweir CurOut() << new HorizontalLine;
84cdf0e10cSrcweir }
85cdf0e10cSrcweir
86cdf0e10cSrcweir void
Write_TopArea()87cdf0e10cSrcweir PageMaker_AllDefs::Write_TopArea()
88cdf0e10cSrcweir {
89cdf0e10cSrcweir adcdisp::PageTitle_Std fTitle;
90cdf0e10cSrcweir fTitle( CurOut(), "Defines and ", "Macros" );
91cdf0e10cSrcweir
92cdf0e10cSrcweir CurOut() << new HorizontalLine;
93cdf0e10cSrcweir }
94cdf0e10cSrcweir
95cdf0e10cSrcweir void
Write_DocuArea()96cdf0e10cSrcweir PageMaker_AllDefs::Write_DocuArea()
97cdf0e10cSrcweir {
98cdf0e10cSrcweir // Not needed.
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
101cdf0e10cSrcweir void
Write_DefinesList()102cdf0e10cSrcweir PageMaker_AllDefs::Write_DefinesList()
103cdf0e10cSrcweir {
104cdf0e10cSrcweir CurOut()
105cdf0e10cSrcweir << new html::LineBreak
106cdf0e10cSrcweir << new html::LineBreak
107cdf0e10cSrcweir >> *new xml::AnElement("div")
108cdf0e10cSrcweir << new html::ClassAttr("define")
109cdf0e10cSrcweir >> *new html::Label("defines")
110cdf0e10cSrcweir >> *new html::Headline(3)
111cdf0e10cSrcweir << "Defines";
112cdf0e10cSrcweir
113cdf0e10cSrcweir ary::cpp::DefsResultList
114cdf0e10cSrcweir aAllDefines = Env().Gate().Defs().AllDefines();
115cdf0e10cSrcweir ary::cpp::DefsConstIterator
116cdf0e10cSrcweir itEnd = aAllDefines.end();
117cdf0e10cSrcweir
118cdf0e10cSrcweir if (aAllDefines.begin() != itEnd)
119cdf0e10cSrcweir {
120cdf0e10cSrcweir for ( ary::cpp::DefsConstIterator it = aAllDefines.begin();
121cdf0e10cSrcweir it != itEnd;
122cdf0e10cSrcweir ++it )
123cdf0e10cSrcweir {
124cdf0e10cSrcweir Write_Define(*it);
125cdf0e10cSrcweir }
126cdf0e10cSrcweir }
127cdf0e10cSrcweir else
128cdf0e10cSrcweir {
129cdf0e10cSrcweir CurOut() << "None.";
130cdf0e10cSrcweir }
131cdf0e10cSrcweir
132cdf0e10cSrcweir CurOut() << new HorizontalLine;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir
135cdf0e10cSrcweir void
Write_MacrosList()136cdf0e10cSrcweir PageMaker_AllDefs::Write_MacrosList()
137cdf0e10cSrcweir
138cdf0e10cSrcweir {
139cdf0e10cSrcweir CurOut()
140cdf0e10cSrcweir << new html::LineBreak
141cdf0e10cSrcweir << new html::LineBreak
142cdf0e10cSrcweir >> *new xml::AnElement("div")
143cdf0e10cSrcweir << new html::ClassAttr("define")
144cdf0e10cSrcweir >> *new html::Label("macros")
145cdf0e10cSrcweir >> *new html::Headline(3)
146cdf0e10cSrcweir << "Macros";
147cdf0e10cSrcweir
148cdf0e10cSrcweir ary::cpp::DefsResultList
149cdf0e10cSrcweir aAllMacros = Env().Gate().Defs().AllMacros();
150cdf0e10cSrcweir ary::cpp::DefsConstIterator
151cdf0e10cSrcweir itEnd = aAllMacros.end();
152cdf0e10cSrcweir
153cdf0e10cSrcweir if (aAllMacros.begin() != itEnd)
154cdf0e10cSrcweir {
155cdf0e10cSrcweir for ( ary::cpp::DefsConstIterator it = aAllMacros.begin();
156cdf0e10cSrcweir it != itEnd;
157cdf0e10cSrcweir ++it )
158cdf0e10cSrcweir {
159cdf0e10cSrcweir Write_Macro(*it);
160cdf0e10cSrcweir }
161cdf0e10cSrcweir }
162cdf0e10cSrcweir else
163cdf0e10cSrcweir {
164cdf0e10cSrcweir CurOut() << "None.";
165cdf0e10cSrcweir }
166cdf0e10cSrcweir
167cdf0e10cSrcweir CurOut() << new HorizontalLine;
168cdf0e10cSrcweir }
169cdf0e10cSrcweir
170cdf0e10cSrcweir void
Write_Define(De_id i_nId)171cdf0e10cSrcweir PageMaker_AllDefs::Write_Define(De_id i_nId)
172cdf0e10cSrcweir {
173cdf0e10cSrcweir csv_assert( ary::is_type<ary::cpp::Define>( Env().Gate().Defs().Find_Def(i_nId)) );
174cdf0e10cSrcweir const ary::cpp::Define &
175cdf0e10cSrcweir rDef = static_cast< const ary::cpp::Define& >( Env().Gate().Defs().Find_Def(i_nId) );
176cdf0e10cSrcweir
177cdf0e10cSrcweir CurOut() << new html::HorizontalLine;
178cdf0e10cSrcweir
179cdf0e10cSrcweir adcdisp::ExplanationList aDocu( CurOut(), true );
180cdf0e10cSrcweir aDocu.AddEntry();
181cdf0e10cSrcweir
182cdf0e10cSrcweir aDocu.Term()
183cdf0e10cSrcweir >> *new html::Label( rDef.LocalName() )
184cdf0e10cSrcweir << " ";
185cdf0e10cSrcweir aDocu.Term()
186cdf0e10cSrcweir << rDef.LocalName();
187cdf0e10cSrcweir
188cdf0e10cSrcweir Write_DefsDocu( aDocu.Def(), rDef );
189cdf0e10cSrcweir }
190cdf0e10cSrcweir
191cdf0e10cSrcweir void
Write_Macro(De_id i_nId)192cdf0e10cSrcweir PageMaker_AllDefs::Write_Macro(De_id i_nId)
193cdf0e10cSrcweir {
194cdf0e10cSrcweir csv_assert( Env().Gate().Defs().Find_Def(i_nId).AryClass() == ary::cpp::Macro::class_id );
195cdf0e10cSrcweir const ary::cpp::Macro &
196cdf0e10cSrcweir rDef = static_cast< const ary::cpp::Macro& >( Env().Gate().Defs().Find_Def(i_nId) );
197cdf0e10cSrcweir
198cdf0e10cSrcweir CurOut() << new html::HorizontalLine;
199cdf0e10cSrcweir
200cdf0e10cSrcweir adcdisp::ExplanationList aDocu( CurOut(), true );
201cdf0e10cSrcweir aDocu.AddEntry();
202cdf0e10cSrcweir
203cdf0e10cSrcweir aDocu.Term()
204cdf0e10cSrcweir >> *new html::Label( rDef.LocalName() )
205cdf0e10cSrcweir << " ";
206cdf0e10cSrcweir aDocu.Term()
207cdf0e10cSrcweir << rDef.LocalName()
208cdf0e10cSrcweir << "(";
209cdf0e10cSrcweir WriteOut_TokenList( aDocu.Term(), rDef.Params(), ", " );
210cdf0e10cSrcweir aDocu.Term()
211cdf0e10cSrcweir << ")";
212cdf0e10cSrcweir
213cdf0e10cSrcweir Write_DefsDocu( aDocu.Def(), rDef );
214cdf0e10cSrcweir }
215cdf0e10cSrcweir
216cdf0e10cSrcweir
217cdf0e10cSrcweir void
Write_DefsDocu(csi::xml::Element & o_rOut,const ary::cpp::DefineEntity & i_rTextReplacement)218cdf0e10cSrcweir PageMaker_AllDefs::Write_DefsDocu( csi::xml::Element & o_rOut,
219cdf0e10cSrcweir const ary::cpp::DefineEntity & i_rTextReplacement )
220cdf0e10cSrcweir {
221cdf0e10cSrcweir if ( i_rTextReplacement.DefinitionText().size() > 0 )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir EraseLeadingSpace( *const_cast< String * >(
224cdf0e10cSrcweir &(*i_rTextReplacement.DefinitionText().begin())
225cdf0e10cSrcweir ) );
226cdf0e10cSrcweir }
227cdf0e10cSrcweir
228cdf0e10cSrcweir adcdisp::ExplanationTable rList( o_rOut );
229cdf0e10cSrcweir
230cdf0e10cSrcweir rList.AddEntry( "Defined As" );
231cdf0e10cSrcweir WriteOut_TokenList( rList.Def(), i_rTextReplacement.DefinitionText(), " " );
232cdf0e10cSrcweir
233cdf0e10cSrcweir const ary::loc::File &
234cdf0e10cSrcweir rFile = Env().Gate().Locations().Find_File( i_rTextReplacement.Location() );
235cdf0e10cSrcweir rList.AddEntry( "In File" );
236cdf0e10cSrcweir rList.Def() << rFile.LocalName();
237cdf0e10cSrcweir
238cdf0e10cSrcweir ShowDocu_On( o_rOut, *pDocuDisplay, i_rTextReplacement );
239cdf0e10cSrcweir }
240