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 "dsply_op.hxx"
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski // NOT FULLY DEFINED SERVICES
27*b1cdbd2cSJim Jagielski #include <cosv/tpl/tpltools.hxx>
28*b1cdbd2cSJim Jagielski #include <ary/cpp/c_funct.hxx>
29*b1cdbd2cSJim Jagielski #include <ary/cpp/c_gate.hxx>
30*b1cdbd2cSJim Jagielski #include <ary/loc/locp_le.hxx>
31*b1cdbd2cSJim Jagielski #include <udm/html/htmlitem.hxx>
32*b1cdbd2cSJim Jagielski #include "hd_docu.hxx"
33*b1cdbd2cSJim Jagielski #include "hdimpl.hxx"
34*b1cdbd2cSJim Jagielski #include "html_kit.hxx"
35*b1cdbd2cSJim Jagielski #include "opageenv.hxx"
36*b1cdbd2cSJim Jagielski #include "pagemake.hxx"
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski using namespace csi;
39*b1cdbd2cSJim Jagielski using namespace adcdisp;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski 
OperationsDisplay(OuputPage_Environment & io_rEnv)44*b1cdbd2cSJim Jagielski OperationsDisplay::OperationsDisplay( OuputPage_Environment & io_rEnv )
45*b1cdbd2cSJim Jagielski     :   // aMap_GlobalFunctionsDisplay,
46*b1cdbd2cSJim Jagielski         // pClassMembersDisplay,
47*b1cdbd2cSJim Jagielski         pEnv( &io_rEnv ),
48*b1cdbd2cSJim Jagielski         pDocuShow( new Docu_Display(io_rEnv) )
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski }
51*b1cdbd2cSJim Jagielski 
~OperationsDisplay()52*b1cdbd2cSJim Jagielski OperationsDisplay::~OperationsDisplay()
53*b1cdbd2cSJim Jagielski {
54*b1cdbd2cSJim Jagielski     csv::erase_map_of_heap_ptrs( aMap_GlobalFunctionsDisplay );
55*b1cdbd2cSJim Jagielski }
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski void
PrepareForStdMembers()58*b1cdbd2cSJim Jagielski OperationsDisplay::PrepareForStdMembers()
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski     csv::erase_map_of_heap_ptrs( aMap_GlobalFunctionsDisplay );
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski     pClassMembersDisplay = new PageDisplay(*pEnv);
63*b1cdbd2cSJim Jagielski     const ary::cpp::Class * pClass = pEnv->CurClass();
64*b1cdbd2cSJim Jagielski     csv_assert( pClass != 0 );
65*b1cdbd2cSJim Jagielski     pClassMembersDisplay->Setup_OperationsFile_for(*pClass);
66*b1cdbd2cSJim Jagielski }
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski void
PrepareForStaticMembers()69*b1cdbd2cSJim Jagielski OperationsDisplay::PrepareForStaticMembers()
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski     // Doesn't need to do anything yet.
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski void
Create_Files()75*b1cdbd2cSJim Jagielski OperationsDisplay::Create_Files()
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski     if (pClassMembersDisplay)
78*b1cdbd2cSJim Jagielski         pClassMembersDisplay->Create_File();
79*b1cdbd2cSJim Jagielski     else
80*b1cdbd2cSJim Jagielski     {
81*b1cdbd2cSJim Jagielski      	for ( Map_FileId2PagePtr::const_iterator it = aMap_GlobalFunctionsDisplay.begin();
82*b1cdbd2cSJim Jagielski               it != aMap_GlobalFunctionsDisplay.end();
83*b1cdbd2cSJim Jagielski               ++it )
84*b1cdbd2cSJim Jagielski         {
85*b1cdbd2cSJim Jagielski          	(*it).second->Create_File();
86*b1cdbd2cSJim Jagielski         }
87*b1cdbd2cSJim Jagielski     }
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski void
do_Process(const ary::cpp::Function & i_rData)91*b1cdbd2cSJim Jagielski OperationsDisplay::do_Process( const ary::cpp::Function & i_rData )
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski     if ( Ce_IsInternal(i_rData) )
94*b1cdbd2cSJim Jagielski         return;
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski     PageDisplay & rPage = FindPage_for( i_rData );
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski     csi::xml::Element & rOut = rPage.CurOut();
99*b1cdbd2cSJim Jagielski     Display_SglOperation( rOut, i_rData );
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski const ary::cpp::Gate *
inq_Get_ReFinder() const103*b1cdbd2cSJim Jagielski OperationsDisplay::inq_Get_ReFinder() const
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski     return & pEnv->Gate();
106*b1cdbd2cSJim Jagielski }
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski PageDisplay &
FindPage_for(const ary::cpp::Function & i_rData)109*b1cdbd2cSJim Jagielski OperationsDisplay::FindPage_for( const ary::cpp::Function & i_rData )
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski     if ( pClassMembersDisplay )
112*b1cdbd2cSJim Jagielski         return *pClassMembersDisplay;
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski     SourceFileId
115*b1cdbd2cSJim Jagielski             nSourceFile = i_rData.Location();
116*b1cdbd2cSJim Jagielski     PageDisplay *
117*b1cdbd2cSJim Jagielski             pFound = csv::value_from_map( aMap_GlobalFunctionsDisplay, nSourceFile, (PageDisplay*)0 );
118*b1cdbd2cSJim Jagielski     if ( pFound == 0 )
119*b1cdbd2cSJim Jagielski     {
120*b1cdbd2cSJim Jagielski      	pFound = new PageDisplay( *pEnv );
121*b1cdbd2cSJim Jagielski         const ary::loc::File &
122*b1cdbd2cSJim Jagielski                 rFile = pEnv->Gate().Locations().Find_File( nSourceFile );
123*b1cdbd2cSJim Jagielski         pFound->Setup_OperationsFile_for(rFile);
124*b1cdbd2cSJim Jagielski         aMap_GlobalFunctionsDisplay[nSourceFile] = pFound;
125*b1cdbd2cSJim Jagielski     }
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski     return *pFound;
128*b1cdbd2cSJim Jagielski }
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski void
Display_SglOperation(csi::xml::Element & rOut,const ary::cpp::Function & i_rData)131*b1cdbd2cSJim Jagielski OperationsDisplay::Display_SglOperation( csi::xml::Element &        rOut,
132*b1cdbd2cSJim Jagielski                                          const ary::cpp::Function & i_rData )
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski     adcdisp::ExplanationList aDocu(rOut, true);
135*b1cdbd2cSJim Jagielski     aDocu.AddEntry( 0 );
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski     adcdisp::OperationTitle fTitle;
139*b1cdbd2cSJim Jagielski     fTitle( aDocu.Term(),
140*b1cdbd2cSJim Jagielski             i_rData.LocalName(),
141*b1cdbd2cSJim Jagielski             i_rData.CeId(),
142*b1cdbd2cSJim Jagielski             pEnv->Gate() );
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski     // Syntax
145*b1cdbd2cSJim Jagielski     adcdisp::ExplanationList aSyntaxHeader(aDocu.Def());
146*b1cdbd2cSJim Jagielski     aSyntaxHeader.AddEntry( 0, "simple" );
147*b1cdbd2cSJim Jagielski     csi::xml::Element & rHeader = aSyntaxHeader.Term();
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     adcdisp::ParameterTable
150*b1cdbd2cSJim Jagielski         aParams( aSyntaxHeader.Def() );
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski     if (i_rData.TemplateParameters().size() > 0)
153*b1cdbd2cSJim Jagielski     {
154*b1cdbd2cSJim Jagielski         TemplateClause fTemplateClause;
155*b1cdbd2cSJim Jagielski         fTemplateClause( rHeader, i_rData.TemplateParameters() );
156*b1cdbd2cSJim Jagielski         rHeader << new html::LineBreak;
157*b1cdbd2cSJim Jagielski     }
158*b1cdbd2cSJim Jagielski     if ( i_rData.Flags().IsExternC() )
159*b1cdbd2cSJim Jagielski     {
160*b1cdbd2cSJim Jagielski      	rHeader
161*b1cdbd2cSJim Jagielski                 << "extern \"C\""
162*b1cdbd2cSJim Jagielski                 << new html::LineBreak;
163*b1cdbd2cSJim Jagielski     }
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski     bool bConst = false;
166*b1cdbd2cSJim Jagielski     bool bVolatile = false;
167*b1cdbd2cSJim Jagielski     WriteOut_LinkedFunctionText( rHeader, aParams, i_rData, *pEnv,
168*b1cdbd2cSJim Jagielski                                  &bConst, &bVolatile );
169*b1cdbd2cSJim Jagielski     aDocu.Def() << new html::LineBreak;
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski     // Flags
172*b1cdbd2cSJim Jagielski     aDocu.AddEntry_NoTerm();
173*b1cdbd2cSJim Jagielski     adcdisp::FlagTable
174*b1cdbd2cSJim Jagielski         aFlags( aDocu.Def(), 8 );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski     const ary::cpp::FunctionFlags &
177*b1cdbd2cSJim Jagielski         rFFlags = i_rData.Flags();
178*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 0, "virtual",
179*b1cdbd2cSJim Jagielski                       i_rData.Virtuality() != ary::cpp::VIRTUAL_none );
180*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 1, "abstract",
181*b1cdbd2cSJim Jagielski                       i_rData.Virtuality() == ary::cpp::VIRTUAL_abstract );
182*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 2, "const", bConst );
183*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 3, "volatile", bVolatile );
184*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 4, "template",
185*b1cdbd2cSJim Jagielski                       i_rData.TemplateParameters().size() > 0 );
186*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 5, "static",
187*b1cdbd2cSJim Jagielski                       rFFlags.IsStaticLocal() OR rFFlags.IsStaticMember() );
188*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 6, "inline",
189*b1cdbd2cSJim Jagielski                       rFFlags.IsInline() );
190*b1cdbd2cSJim Jagielski     aFlags.SetColumn( 7, "C-linkage",
191*b1cdbd2cSJim Jagielski                       rFFlags.IsExternC() );
192*b1cdbd2cSJim Jagielski     aDocu.Def() << new html::LineBreak;
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski     // Docu
195*b1cdbd2cSJim Jagielski     aDocu.AddEntry_NoTerm();
196*b1cdbd2cSJim Jagielski     pDocuShow->Assign_Out(aDocu.Def());
197*b1cdbd2cSJim Jagielski     pDocuShow->Process(i_rData.Docu());
198*b1cdbd2cSJim Jagielski     pDocuShow->Unassign_Out();
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski     rOut << new html::HorizontalLine;
201*b1cdbd2cSJim Jagielski }
202