1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski #include <precomp.h>
23*b1cdbd2cSJim Jagielski #include "opageenv.hxx"
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski // NOT FULLY DEFINED SERVICES
27*b1cdbd2cSJim Jagielski #include <cosv/ploc_dir.hxx>
28*b1cdbd2cSJim Jagielski #include <ary/cpp/c_ce.hxx>
29*b1cdbd2cSJim Jagielski #include <ary/cpp/c_class.hxx>
30*b1cdbd2cSJim Jagielski #include <ary/cpp/c_enum.hxx>
31*b1cdbd2cSJim Jagielski #include <ary/cpp/c_gate.hxx>
32*b1cdbd2cSJim Jagielski #include <ary/cpp/c_namesp.hxx>
33*b1cdbd2cSJim Jagielski #include <ary/cpp/c_tydef.hxx>
34*b1cdbd2cSJim Jagielski #include <ary/cpp/cp_ce.hxx>
35*b1cdbd2cSJim Jagielski #include <ary/loc/loc_file.hxx>
36*b1cdbd2cSJim Jagielski #include <udm/html/htmlitem.hxx>
37*b1cdbd2cSJim Jagielski #include <estack.hxx>
38*b1cdbd2cSJim Jagielski #include "hdimpl.hxx"
39*b1cdbd2cSJim Jagielski #include "strconst.hxx"
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski const String  C_sCppDir( "names" );
43*b1cdbd2cSJim Jagielski const String  C_sIndexDir( "ix" );
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski //************************         Implementation          ********************//
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski namespace
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski void    CreateDirectory( const csv::ploc::Path &    i_rPath );
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski void
CreateDirectory(const csv::ploc::Path & i_rPath)54*b1cdbd2cSJim Jagielski CreateDirectory( const csv::ploc::Path & i_rPath )
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski     csv::ploc::Directory aDirectory(i_rPath);
57*b1cdbd2cSJim Jagielski 	if (NOT aDirectory.Exists())
58*b1cdbd2cSJim Jagielski         aDirectory.PhysicalCreate();
59*b1cdbd2cSJim Jagielski }
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski //************************         CheshireCat          ********************//
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski struct InNamespaceTree
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski     enum E_Type
66*b1cdbd2cSJim Jagielski     {
67*b1cdbd2cSJim Jagielski         t_unknown,
68*b1cdbd2cSJim Jagielski         t_namespace,
69*b1cdbd2cSJim Jagielski         t_type,
70*b1cdbd2cSJim Jagielski         t_operations,
71*b1cdbd2cSJim Jagielski         t_data
72*b1cdbd2cSJim Jagielski     };
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski     EStack< const ary::cpp::Namespace * >
75*b1cdbd2cSJim Jagielski                         aNamespaces; /// never empty.
76*b1cdbd2cSJim Jagielski     EStack< const ary::cpp::Class * >
77*b1cdbd2cSJim Jagielski                         aClasses;      /// maybe empty.
78*b1cdbd2cSJim Jagielski     const ary::cpp::CodeEntity *
79*b1cdbd2cSJim Jagielski                         pCe;        /// CurFileCe, maybe 0
80*b1cdbd2cSJim Jagielski     E_Type              eType;
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski                         InNamespaceTree(
83*b1cdbd2cSJim Jagielski                             const ary::cpp::Namespace &
84*b1cdbd2cSJim Jagielski                                                 i_rNsp );
85*b1cdbd2cSJim Jagielski                         ~InNamespaceTree();
86*b1cdbd2cSJim Jagielski     void                GoDown(
87*b1cdbd2cSJim Jagielski                             const ary::cpp::Namespace &
88*b1cdbd2cSJim Jagielski                                                 i_rNsp );
89*b1cdbd2cSJim Jagielski     void                GoDown(
90*b1cdbd2cSJim Jagielski                             const ary::cpp::Class &
91*b1cdbd2cSJim Jagielski                                                 i_rClass );
92*b1cdbd2cSJim Jagielski     void                GoUp();
93*b1cdbd2cSJim Jagielski };
94*b1cdbd2cSJim Jagielski 
InNamespaceTree(const ary::cpp::Namespace & i_rNsp)95*b1cdbd2cSJim Jagielski InNamespaceTree::InNamespaceTree( const ary::cpp::Namespace & i_rNsp )
96*b1cdbd2cSJim Jagielski     :   // aNamespaces,
97*b1cdbd2cSJim Jagielski         // aClasses,
98*b1cdbd2cSJim Jagielski         pCe(0),
99*b1cdbd2cSJim Jagielski         eType(t_unknown)
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski     aNamespaces.push( &i_rNsp );
102*b1cdbd2cSJim Jagielski }
103*b1cdbd2cSJim Jagielski 
~InNamespaceTree()104*b1cdbd2cSJim Jagielski InNamespaceTree::~InNamespaceTree()
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski }
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski void
GoDown(const ary::cpp::Namespace & i_rNsp)109*b1cdbd2cSJim Jagielski InNamespaceTree::GoDown( const ary::cpp::Namespace & i_rNsp )
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski     aNamespaces.push(&i_rNsp);
112*b1cdbd2cSJim Jagielski     aClasses.erase_all();
113*b1cdbd2cSJim Jagielski     pCe = 0;
114*b1cdbd2cSJim Jagielski     eType = t_unknown;
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski void
GoDown(const ary::cpp::Class & i_rClass)118*b1cdbd2cSJim Jagielski InNamespaceTree::GoDown( const ary::cpp::Class & i_rClass )
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski     aClasses.push(&i_rClass);
121*b1cdbd2cSJim Jagielski     pCe = 0;
122*b1cdbd2cSJim Jagielski     eType = t_unknown;
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski void
GoUp()126*b1cdbd2cSJim Jagielski InNamespaceTree::GoUp()
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski     if ( NOT aClasses.empty() )
129*b1cdbd2cSJim Jagielski         aClasses.pop();
130*b1cdbd2cSJim Jagielski     else
131*b1cdbd2cSJim Jagielski         aNamespaces.pop();
132*b1cdbd2cSJim Jagielski     pCe = 0;
133*b1cdbd2cSJim Jagielski     eType = t_unknown;
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski struct InIndex
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski     char                cLetter;
139*b1cdbd2cSJim Jagielski 
InIndex__anonc405e81c0111::InIndex140*b1cdbd2cSJim Jagielski                         InIndex() : cLetter('A') {}
141*b1cdbd2cSJim Jagielski };
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski }   // anonymous namespace
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski struct OuputPage_Environment::CheshireCat
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski     csv::ploc::Path     aOutputRoot;
153*b1cdbd2cSJim Jagielski     csv::ploc::Path     aMyPath;
154*b1cdbd2cSJim Jagielski     csv::StreamStr      aFileName;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     const ary::cpp::Gate *
157*b1cdbd2cSJim Jagielski                         pGate;
158*b1cdbd2cSJim Jagielski     const display::CorporateFrame *
159*b1cdbd2cSJim Jagielski                         pLayout;
160*b1cdbd2cSJim Jagielski     intt                nDepth;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski     Dyn<InNamespaceTree>
163*b1cdbd2cSJim Jagielski                         pInNamespace;
164*b1cdbd2cSJim Jagielski     Dyn<InIndex>        pInIndex;
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski                         CheshireCat(
167*b1cdbd2cSJim Jagielski                             const csv::ploc::Path &
168*b1cdbd2cSJim Jagielski                                                 io_rOutputDir,
169*b1cdbd2cSJim Jagielski                             const ary::cpp::Gate &
170*b1cdbd2cSJim Jagielski                                                 i_rGate,
171*b1cdbd2cSJim Jagielski                             const display::CorporateFrame &
172*b1cdbd2cSJim Jagielski                                                 i_rLayout );
173*b1cdbd2cSJim Jagielski                         ~CheshireCat();
174*b1cdbd2cSJim Jagielski     void                AddQualifiedName2Path(
175*b1cdbd2cSJim Jagielski                             const ary::cpp::CodeEntity &
176*b1cdbd2cSJim Jagielski                                                 i_rCe,
177*b1cdbd2cSJim Jagielski                             bool                i_bIncludeLocalName );
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski     const Dyn<InNamespaceTree> &
NspEnvOuputPage_Environment::CheshireCat180*b1cdbd2cSJim Jagielski                         NspEnv() const          { return pInNamespace; }
181*b1cdbd2cSJim Jagielski     Dyn<InNamespaceTree> &
NspEnvOuputPage_Environment::CheshireCat182*b1cdbd2cSJim Jagielski                         NspEnv()                { return pInNamespace; }
183*b1cdbd2cSJim Jagielski     const ary::cpp::Namespace *
NamespaceOuputPage_Environment::CheshireCat184*b1cdbd2cSJim Jagielski                         Namespace() const       { return pInNamespace ? pInNamespace->aNamespaces.top() : 0; }
185*b1cdbd2cSJim Jagielski     const ary::cpp::Class *
ClassOuputPage_Environment::CheshireCat186*b1cdbd2cSJim Jagielski                         Class() const           { return pInNamespace ? (pInNamespace->aClasses.empty() ? 0 : pInNamespace->aClasses.top()) : 0; }
187*b1cdbd2cSJim Jagielski };
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski OuputPage_Environment::
CheshireCat(const csv::ploc::Path & io_rOutputDir,const ary::cpp::Gate & i_rGate,const display::CorporateFrame & i_rLayout)190*b1cdbd2cSJim Jagielski CheshireCat::CheshireCat( const csv::ploc::Path &         io_rOutputDir,
191*b1cdbd2cSJim Jagielski                           const ary::cpp::Gate &   i_rGate,
192*b1cdbd2cSJim Jagielski                           const display::CorporateFrame & i_rLayout )
193*b1cdbd2cSJim Jagielski     :   aOutputRoot(io_rOutputDir),
194*b1cdbd2cSJim Jagielski         aMyPath(io_rOutputDir),
195*b1cdbd2cSJim Jagielski         aFileName(500),
196*b1cdbd2cSJim Jagielski         pGate(&i_rGate),
197*b1cdbd2cSJim Jagielski         pLayout(&i_rLayout),
198*b1cdbd2cSJim Jagielski         nDepth(0),
199*b1cdbd2cSJim Jagielski         pInNamespace(),
200*b1cdbd2cSJim Jagielski         pInIndex()
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski }
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski OuputPage_Environment::
~CheshireCat()205*b1cdbd2cSJim Jagielski CheshireCat::~CheshireCat()
206*b1cdbd2cSJim Jagielski {
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski void
210*b1cdbd2cSJim Jagielski OuputPage_Environment::
AddQualifiedName2Path(const ary::cpp::CodeEntity & i_rCe,bool i_bIncludeLocalName)211*b1cdbd2cSJim Jagielski CheshireCat::AddQualifiedName2Path( const ary::cpp::CodeEntity & i_rCe,
212*b1cdbd2cSJim Jagielski                                     bool                    i_bIncludeLocalName )
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski     if (NOT i_rCe.Owner().IsValid())
215*b1cdbd2cSJim Jagielski     {
216*b1cdbd2cSJim Jagielski         aMyPath.DirChain().PushBack( C_sCppDir );
217*b1cdbd2cSJim Jagielski         return;
218*b1cdbd2cSJim Jagielski     }
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski     const ary::cpp::CodeEntity &
221*b1cdbd2cSJim Jagielski         rParent = pGate->Ces().Find_Ce( i_rCe.Owner() );
222*b1cdbd2cSJim Jagielski     AddQualifiedName2Path( rParent, true );
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski     if ( i_bIncludeLocalName )
225*b1cdbd2cSJim Jagielski         aMyPath.DirChain().PushBack( i_rCe.LocalName() );
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski //************************         OuputPage_Environment          ********************//
231*b1cdbd2cSJim Jagielski 
OuputPage_Environment(const csv::ploc::Path & io_rOutputDir,const ary::cpp::Gate & i_rGate,const display::CorporateFrame & i_rLayout)232*b1cdbd2cSJim Jagielski OuputPage_Environment::OuputPage_Environment( const csv::ploc::Path &           io_rOutputDir,
233*b1cdbd2cSJim Jagielski                                               const ary::cpp::Gate &            i_rGate,
234*b1cdbd2cSJim Jagielski                                               const display::CorporateFrame &   i_rLayout )
235*b1cdbd2cSJim Jagielski     :   pi( new CheshireCat(io_rOutputDir, i_rGate, i_rLayout) )
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski }
238*b1cdbd2cSJim Jagielski 
~OuputPage_Environment()239*b1cdbd2cSJim Jagielski OuputPage_Environment::~OuputPage_Environment()
240*b1cdbd2cSJim Jagielski {
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski void
MoveDir_2Root()244*b1cdbd2cSJim Jagielski OuputPage_Environment::MoveDir_2Root()
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski     pi->NspEnv() = 0;
247*b1cdbd2cSJim Jagielski     pi->pInIndex = 0;
248*b1cdbd2cSJim Jagielski     pi->nDepth = 0;
249*b1cdbd2cSJim Jagielski     while ( pi->aMyPath.DirChain().Size() > pi->aOutputRoot.DirChain().Size() )
250*b1cdbd2cSJim Jagielski         pi->aMyPath.DirChain().PopBack();
251*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile(String ::Null_());
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski void
MoveDir_2Names()255*b1cdbd2cSJim Jagielski OuputPage_Environment::MoveDir_2Names()
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski     pi->NspEnv() = new InNamespaceTree( Gate().Ces().GlobalNamespace() );
258*b1cdbd2cSJim Jagielski     pi->aMyPath.DirChain().PushBack( C_sCppDir );
259*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile(String ::Null_());
260*b1cdbd2cSJim Jagielski     ++pi->nDepth;
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski    	CreateDirectory( pi->aMyPath );
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski void
MoveDir_Down2(const ary::cpp::Namespace & i_rNsp)266*b1cdbd2cSJim Jagielski OuputPage_Environment::MoveDir_Down2( const ary::cpp::Namespace & i_rNsp )
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski     csv_assert(i_rNsp.Depth() > 0);
269*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
270*b1cdbd2cSJim Jagielski     csv_assert( pi->Namespace()->CeId() == i_rNsp.Owner() );
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski     pi->NspEnv()->GoDown( i_rNsp );
273*b1cdbd2cSJim Jagielski     pi->aMyPath.DirChain().PushBack(i_rNsp.LocalName());
274*b1cdbd2cSJim Jagielski     ++pi->nDepth;
275*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile(String ::Null_());
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski    	CreateDirectory( pi->aMyPath );
278*b1cdbd2cSJim Jagielski }
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski void
MoveDir_Down2(const ary::cpp::Class & i_rClass)281*b1cdbd2cSJim Jagielski OuputPage_Environment::MoveDir_Down2( const ary::cpp::Class & i_rClass )
282*b1cdbd2cSJim Jagielski {
283*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
284*b1cdbd2cSJim Jagielski     if ( i_rClass.Protection() == ary::cpp::PROTECT_global )
285*b1cdbd2cSJim Jagielski     {
286*b1cdbd2cSJim Jagielski         csv_assert( pi->Namespace()->CeId() == i_rClass.Owner() );
287*b1cdbd2cSJim Jagielski     }
288*b1cdbd2cSJim Jagielski     else
289*b1cdbd2cSJim Jagielski     {
290*b1cdbd2cSJim Jagielski         csv_assert( pi->Class() != 0 );
291*b1cdbd2cSJim Jagielski         csv_assert( pi->Class()->CeId() == i_rClass.Owner() );
292*b1cdbd2cSJim Jagielski     }
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski     pi->NspEnv()->GoDown(i_rClass);
295*b1cdbd2cSJim Jagielski     pi->aMyPath.DirChain().PushBack(i_rClass.LocalName());
296*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile(String ::Null_());
297*b1cdbd2cSJim Jagielski     ++pi->nDepth;
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski    	CreateDirectory( pi->aMyPath );
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski void
MoveDir_2Index()303*b1cdbd2cSJim Jagielski OuputPage_Environment::MoveDir_2Index()
304*b1cdbd2cSJim Jagielski {
305*b1cdbd2cSJim Jagielski     MoveDir_2Root();
306*b1cdbd2cSJim Jagielski     pi->pInIndex = new InIndex;
307*b1cdbd2cSJim Jagielski     pi->aMyPath.DirChain().PushBack( String (C_sDIR_Index) );
308*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile(String ::Null_());
309*b1cdbd2cSJim Jagielski     pi->nDepth = 1;
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski    	CreateDirectory( pi->aMyPath );
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski void
MoveDir_Up()315*b1cdbd2cSJim Jagielski OuputPage_Environment::MoveDir_Up()
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski  	if ( pi->nDepth == 1 )
318*b1cdbd2cSJim Jagielski     {
319*b1cdbd2cSJim Jagielski      	MoveDir_2Root();
320*b1cdbd2cSJim Jagielski         return;
321*b1cdbd2cSJim Jagielski     }
322*b1cdbd2cSJim Jagielski     else if ( pi->NspEnv() )
323*b1cdbd2cSJim Jagielski     {
324*b1cdbd2cSJim Jagielski         pi->NspEnv()->GoUp();
325*b1cdbd2cSJim Jagielski         pi->aMyPath.DirChain().PopBack();
326*b1cdbd2cSJim Jagielski         pi->aMyPath.SetFile(String ::Null_());
327*b1cdbd2cSJim Jagielski         --pi->nDepth;
328*b1cdbd2cSJim Jagielski     }
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski void
SetFile_Css()332*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Css()
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( C_sHFN_Css );
335*b1cdbd2cSJim Jagielski }
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski void
SetFile_Overview()338*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Overview()
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( C_sHFN_Overview );
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski void
SetFile_AllDefs()344*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_AllDefs()
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski     // Provisorium
347*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile("def-all.html");
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski void
SetFile_Index(char i_cLetter)351*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Index( char i_cLetter )
352*b1cdbd2cSJim Jagielski {
353*b1cdbd2cSJim Jagielski     csv_assert( 'A' <= i_cLetter AND i_cLetter <= 'Z' OR i_cLetter == '_' );
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski     static StreamStr sIndexFileName(40);
356*b1cdbd2cSJim Jagielski     sIndexFileName.seekp(0);
357*b1cdbd2cSJim Jagielski     sIndexFileName << "index-";
358*b1cdbd2cSJim Jagielski     if ( i_cLetter == '_' )
359*b1cdbd2cSJim Jagielski     {
360*b1cdbd2cSJim Jagielski         sIndexFileName << "27";
361*b1cdbd2cSJim Jagielski     }
362*b1cdbd2cSJim Jagielski     else
363*b1cdbd2cSJim Jagielski     {
364*b1cdbd2cSJim Jagielski         sIndexFileName << int(i_cLetter -'A' + 1);
365*b1cdbd2cSJim Jagielski     }
366*b1cdbd2cSJim Jagielski     sIndexFileName << ".html";
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( sIndexFileName.c_str() );
369*b1cdbd2cSJim Jagielski }
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski void
SetFile_Help()372*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Help()
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( C_sHFN_Help );
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski void
SetFile_CurNamespace()378*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_CurNamespace()
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
381*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile("index.html");
382*b1cdbd2cSJim Jagielski     pi->NspEnv()->pCe = pi->Namespace();
383*b1cdbd2cSJim Jagielski     pi->NspEnv()->eType = InNamespaceTree::t_namespace;
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski void
SetFile_Class(const ary::cpp::Class & i_rClass)387*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Class( const ary::cpp::Class & i_rClass )
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
390*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( ClassFileName(i_rClass.LocalName()) );
391*b1cdbd2cSJim Jagielski     pi->NspEnv()->pCe = &i_rClass;
392*b1cdbd2cSJim Jagielski     pi->NspEnv()->eType = InNamespaceTree::t_type;
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski void
SetFile_Enum(const ary::cpp::Enum & i_rEnum)396*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Enum( const ary::cpp::Enum & i_rEnum )
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
399*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( EnumFileName(i_rEnum.LocalName()) );
400*b1cdbd2cSJim Jagielski     pi->NspEnv()->pCe = &i_rEnum;
401*b1cdbd2cSJim Jagielski     pi->NspEnv()->eType = InNamespaceTree::t_type;
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski void
SetFile_Typedef(const ary::cpp::Typedef & i_rTypedef)405*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Typedef( const ary::cpp::Typedef & i_rTypedef )
406*b1cdbd2cSJim Jagielski {
407*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
408*b1cdbd2cSJim Jagielski     pi->aMyPath.SetFile( TypedefFileName(i_rTypedef.LocalName()) );
409*b1cdbd2cSJim Jagielski     pi->NspEnv()->pCe = &i_rTypedef;
410*b1cdbd2cSJim Jagielski     pi->NspEnv()->eType = InNamespaceTree::t_type;
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski void
SetFile_Operations(const ary::loc::File * i_pFile)414*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Operations( const ary::loc::File * i_pFile )
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
417*b1cdbd2cSJim Jagielski     if ( CurClass() != 0 )
418*b1cdbd2cSJim Jagielski         pi->aMyPath.SetFile( "o.html" );
419*b1cdbd2cSJim Jagielski 	else
420*b1cdbd2cSJim Jagielski     {
421*b1cdbd2cSJim Jagielski         csv_assert( i_pFile != 0 );
422*b1cdbd2cSJim Jagielski         pi->aMyPath.SetFile( HtmlFileName("o-", i_pFile->LocalName()) );
423*b1cdbd2cSJim Jagielski     }
424*b1cdbd2cSJim Jagielski     pi->NspEnv()->pCe = 0;
425*b1cdbd2cSJim Jagielski     pi->NspEnv()->eType = InNamespaceTree::t_operations;
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski void
SetFile_Data(const ary::loc::File * i_pFile)429*b1cdbd2cSJim Jagielski OuputPage_Environment::SetFile_Data( const ary::loc::File * i_pFile )
430*b1cdbd2cSJim Jagielski {
431*b1cdbd2cSJim Jagielski     csv_assert( pi->NspEnv() );
432*b1cdbd2cSJim Jagielski     if ( CurClass() != 0 )
433*b1cdbd2cSJim Jagielski         pi->aMyPath.SetFile( "d.html" );
434*b1cdbd2cSJim Jagielski     else
435*b1cdbd2cSJim Jagielski     {
436*b1cdbd2cSJim Jagielski         csv_assert( i_pFile != 0 );
437*b1cdbd2cSJim Jagielski         pi->aMyPath.SetFile( HtmlFileName("d-", i_pFile->LocalName()) );
438*b1cdbd2cSJim Jagielski     }
439*b1cdbd2cSJim Jagielski     pi->NspEnv()->pCe = 0;
440*b1cdbd2cSJim Jagielski     pi->NspEnv()->eType = InNamespaceTree::t_data;
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski const ary::cpp::Namespace *
CurNamespace() const444*b1cdbd2cSJim Jagielski OuputPage_Environment::CurNamespace() const
445*b1cdbd2cSJim Jagielski {
446*b1cdbd2cSJim Jagielski     return pi->Namespace();
447*b1cdbd2cSJim Jagielski }
448*b1cdbd2cSJim Jagielski 
449*b1cdbd2cSJim Jagielski const ary::cpp::Class *
CurClass() const450*b1cdbd2cSJim Jagielski OuputPage_Environment::CurClass() const
451*b1cdbd2cSJim Jagielski {
452*b1cdbd2cSJim Jagielski     return pi->Class();
453*b1cdbd2cSJim Jagielski }
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski const csv::ploc::Path &
CurPath() const456*b1cdbd2cSJim Jagielski OuputPage_Environment::CurPath() const
457*b1cdbd2cSJim Jagielski {
458*b1cdbd2cSJim Jagielski     return pi->aMyPath;
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski const ary::cpp::Gate &
Gate() const462*b1cdbd2cSJim Jagielski OuputPage_Environment::Gate() const
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski     return *pi->pGate;
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski const display::CorporateFrame &
Layout() const468*b1cdbd2cSJim Jagielski OuputPage_Environment::Layout() const
469*b1cdbd2cSJim Jagielski {
470*b1cdbd2cSJim Jagielski     return *pi->pLayout;
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski uintt
Depth() const474*b1cdbd2cSJim Jagielski OuputPage_Environment::Depth() const
475*b1cdbd2cSJim Jagielski {
476*b1cdbd2cSJim Jagielski     return static_cast<uintt>(pi->nDepth);
477*b1cdbd2cSJim Jagielski }
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski const String &
RepositoryTitle() const480*b1cdbd2cSJim Jagielski OuputPage_Environment::RepositoryTitle() const
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski     return Gate().RepositoryTitle();
483*b1cdbd2cSJim Jagielski }
484