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