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_da.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_gate.hxx>
29*b1cdbd2cSJim Jagielski #include <ary/cpp/c_vari.hxx>
30*b1cdbd2cSJim Jagielski #include <ary/doc/d_docu.hxx>
31*b1cdbd2cSJim Jagielski #include <ary/loc/loc_file.hxx>
32*b1cdbd2cSJim Jagielski #include <ary/loc/locp_le.hxx>
33*b1cdbd2cSJim Jagielski #include <udm/html/htmlitem.hxx>
34*b1cdbd2cSJim Jagielski #include "hd_docu.hxx"
35*b1cdbd2cSJim Jagielski #include "hdimpl.hxx"
36*b1cdbd2cSJim Jagielski #include "html_kit.hxx"
37*b1cdbd2cSJim Jagielski #include "opageenv.hxx"
38*b1cdbd2cSJim Jagielski #include "pagemake.hxx"
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski using namespace csi;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski 
DataDisplay(OuputPage_Environment & io_rEnv)45*b1cdbd2cSJim Jagielski DataDisplay::DataDisplay( OuputPage_Environment & io_rEnv )
46*b1cdbd2cSJim Jagielski     :   aMap_GlobalDataDisplay(),
47*b1cdbd2cSJim Jagielski         pClassMembersDisplay(0),
48*b1cdbd2cSJim Jagielski         pEnv( &io_rEnv ),
49*b1cdbd2cSJim Jagielski         pDocuShow( new Docu_Display(io_rEnv) )
50*b1cdbd2cSJim Jagielski {
51*b1cdbd2cSJim Jagielski }
52*b1cdbd2cSJim Jagielski 
~DataDisplay()53*b1cdbd2cSJim Jagielski DataDisplay::~DataDisplay()
54*b1cdbd2cSJim Jagielski {
55*b1cdbd2cSJim Jagielski     csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
56*b1cdbd2cSJim Jagielski }
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski void
PrepareForConstants()59*b1cdbd2cSJim Jagielski DataDisplay::PrepareForConstants()
60*b1cdbd2cSJim Jagielski {
61*b1cdbd2cSJim Jagielski     if (pClassMembersDisplay)
62*b1cdbd2cSJim Jagielski         pClassMembersDisplay = 0;
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski     csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
65*b1cdbd2cSJim Jagielski }
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski void
PrepareForVariables()68*b1cdbd2cSJim Jagielski DataDisplay::PrepareForVariables()
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski     // Doesn't need to do anything yet.
71*b1cdbd2cSJim Jagielski }
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski void
PrepareForStdMembers()74*b1cdbd2cSJim Jagielski DataDisplay::PrepareForStdMembers()
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski     csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski     pClassMembersDisplay = new PageDisplay(*pEnv);
79*b1cdbd2cSJim Jagielski     const ary::cpp::Class * pClass = pEnv->CurClass();
80*b1cdbd2cSJim Jagielski     csv_assert( pClass != 0 );
81*b1cdbd2cSJim Jagielski     pClassMembersDisplay->Setup_DataFile_for(*pClass);
82*b1cdbd2cSJim Jagielski }
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski void
PrepareForStaticMembers()85*b1cdbd2cSJim Jagielski DataDisplay::PrepareForStaticMembers()
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski     // Doesn't need to do anything yet.
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski void
Create_Files()91*b1cdbd2cSJim Jagielski DataDisplay::Create_Files()
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski     if (pClassMembersDisplay)
94*b1cdbd2cSJim Jagielski     {
95*b1cdbd2cSJim Jagielski         pClassMembersDisplay->Create_File();
96*b1cdbd2cSJim Jagielski         pClassMembersDisplay = 0;
97*b1cdbd2cSJim Jagielski     }
98*b1cdbd2cSJim Jagielski     else
99*b1cdbd2cSJim Jagielski     {
100*b1cdbd2cSJim Jagielski      	for ( Map_FileId2PagePtr::const_iterator it = aMap_GlobalDataDisplay.begin();
101*b1cdbd2cSJim Jagielski               it != aMap_GlobalDataDisplay.end();
102*b1cdbd2cSJim Jagielski               ++it )
103*b1cdbd2cSJim Jagielski         {
104*b1cdbd2cSJim Jagielski          	(*it).second->Create_File();
105*b1cdbd2cSJim Jagielski         }
106*b1cdbd2cSJim Jagielski         csv::erase_map_of_heap_ptrs( aMap_GlobalDataDisplay );
107*b1cdbd2cSJim Jagielski     }
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski void
do_Process(const ary::cpp::Variable & i_rData)111*b1cdbd2cSJim Jagielski DataDisplay::do_Process( const ary::cpp::Variable & i_rData )
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski     if ( Ce_IsInternal(i_rData) )
114*b1cdbd2cSJim Jagielski         return;
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     PageDisplay & rPage = FindPage_for( i_rData );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski     csi::xml::Element & rOut = rPage.CurOut();
119*b1cdbd2cSJim Jagielski     Display_SglDatum( rOut, i_rData );
120*b1cdbd2cSJim Jagielski }
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski const ary::cpp::Gate *
inq_Get_ReFinder() const123*b1cdbd2cSJim Jagielski DataDisplay::inq_Get_ReFinder() const
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski     return & pEnv->Gate();
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski PageDisplay &
FindPage_for(const ary::cpp::Variable & i_rData)129*b1cdbd2cSJim Jagielski DataDisplay::FindPage_for( const ary::cpp::Variable & i_rData )
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski     if ( pClassMembersDisplay )
132*b1cdbd2cSJim Jagielski         return *pClassMembersDisplay;
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski     SourceFileId
135*b1cdbd2cSJim Jagielski             nSourceFile = i_rData.Location();
136*b1cdbd2cSJim Jagielski     PageDisplay *
137*b1cdbd2cSJim Jagielski             pFound = csv::value_from_map( aMap_GlobalDataDisplay, nSourceFile, (PageDisplay*)0 );
138*b1cdbd2cSJim Jagielski     if ( pFound == 0 )
139*b1cdbd2cSJim Jagielski     {
140*b1cdbd2cSJim Jagielski      	pFound = new PageDisplay( *pEnv );
141*b1cdbd2cSJim Jagielski         const ary::loc::File &
142*b1cdbd2cSJim Jagielski                 rFile = pEnv->Gate().Locations().Find_File( nSourceFile );
143*b1cdbd2cSJim Jagielski         pFound->Setup_DataFile_for(rFile);
144*b1cdbd2cSJim Jagielski         aMap_GlobalDataDisplay[nSourceFile] = pFound;
145*b1cdbd2cSJim Jagielski     }
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski     return *pFound;
148*b1cdbd2cSJim Jagielski }
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski void
Display_SglDatum(csi::xml::Element & rOut,const ary::cpp::Variable & i_rData)151*b1cdbd2cSJim Jagielski DataDisplay::Display_SglDatum( csi::xml::Element &        rOut,
152*b1cdbd2cSJim Jagielski                                const ary::cpp::Variable & i_rData )
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski     adcdisp::ExplanationList aDocu(rOut, true);
155*b1cdbd2cSJim Jagielski     aDocu.AddEntry( 0 );
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski     aDocu.Term()
158*b1cdbd2cSJim Jagielski         >> *new html::Label( DataLabel(i_rData.LocalName()) )
159*b1cdbd2cSJim Jagielski             << " ";
160*b1cdbd2cSJim Jagielski     aDocu.Term()
161*b1cdbd2cSJim Jagielski         << i_rData.LocalName();
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski     dshelp::Get_LinkedTypeText( aDocu.Def(), *pEnv, i_rData.Type() );
164*b1cdbd2cSJim Jagielski     aDocu.Def()
165*b1cdbd2cSJim Jagielski         << " "
166*b1cdbd2cSJim Jagielski         >> *new html::Strong
167*b1cdbd2cSJim Jagielski             << i_rData.LocalName();
168*b1cdbd2cSJim Jagielski     if ( i_rData.ArraySize().length() > 0 )
169*b1cdbd2cSJim Jagielski     {
170*b1cdbd2cSJim Jagielski         aDocu.Def()
171*b1cdbd2cSJim Jagielski             << "["
172*b1cdbd2cSJim Jagielski             << i_rData.ArraySize()
173*b1cdbd2cSJim Jagielski             << "]";
174*b1cdbd2cSJim Jagielski     }
175*b1cdbd2cSJim Jagielski     if ( i_rData.Initialisation().length() > 0 )
176*b1cdbd2cSJim Jagielski     {
177*b1cdbd2cSJim Jagielski         aDocu.Def()
178*b1cdbd2cSJim Jagielski             << " = "
179*b1cdbd2cSJim Jagielski             << i_rData.Initialisation();
180*b1cdbd2cSJim Jagielski     }
181*b1cdbd2cSJim Jagielski     aDocu.Def()
182*b1cdbd2cSJim Jagielski         << ";"
183*b1cdbd2cSJim Jagielski         << new html::LineBreak
184*b1cdbd2cSJim Jagielski         << new html::LineBreak;
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski     aDocu.AddEntry_NoTerm();
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski     pDocuShow->Assign_Out(aDocu.Def());
189*b1cdbd2cSJim Jagielski     pDocuShow->Process(i_rData.Docu());
190*b1cdbd2cSJim Jagielski     pDocuShow->Unassign_Out();
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski     rOut << new html::HorizontalLine;
193*b1cdbd2cSJim Jagielski }
194