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