1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #include <precomp.h> 23 #include "pm_aldef.hxx" 24 25 26 // NOT FULLY DEFINED SERVICES 27 #include <cosv/tpl/tpltools.hxx> 28 #include <ary/cpp/c_gate.hxx> 29 #include <ary/cpp/c_define.hxx> 30 #include <ary/cpp/c_macro.hxx> 31 #include <ary/cpp/cp_def.hxx> 32 #include <ary/loc/loc_file.hxx> 33 #include <ary/loc/locp_le.hxx> 34 #include <ary/getncast.hxx> 35 #include "hd_docu.hxx" 36 #include "html_kit.hxx" 37 #include "navibar.hxx" 38 #include "opageenv.hxx" 39 #include "pagemake.hxx" 40 #include "strconst.hxx" 41 42 43 using namespace csi; 44 using csi::html::HorizontalLine; 45 using csi::html::Link; 46 using csi::html::Label; 47 using csi::html::AlignAttr; 48 49 50 51 PageMaker_AllDefs::PageMaker_AllDefs( PageDisplay & io_rPage ) 52 : SpecializedPageMaker(io_rPage), 53 pDocuDisplay( new Docu_Display(io_rPage.Env()) ), 54 pNavi(0) 55 { 56 } 57 58 PageMaker_AllDefs::~PageMaker_AllDefs() 59 { 60 } 61 62 void 63 PageMaker_AllDefs::MakePage() 64 { 65 pNavi = new NavigationBar( Env(), NavigationBar::LOC_AllDefs ); 66 Write_NavBar(); 67 68 Write_TopArea(); 69 70 Write_DefinesList(); 71 Write_MacrosList(); 72 73 pNavi->Write_SubRows(); 74 } 75 76 void 77 PageMaker_AllDefs::Write_NavBar() 78 { 79 pNavi->MakeSubRow( "" ); 80 pNavi->AddItem( "Defines", "defines", true ); 81 pNavi->AddItem( "Macros", "macros", true ); 82 pNavi->Write( CurOut() ); 83 CurOut() << new HorizontalLine; 84 } 85 86 void 87 PageMaker_AllDefs::Write_TopArea() 88 { 89 adcdisp::PageTitle_Std fTitle; 90 fTitle( CurOut(), "Defines and ", "Macros" ); 91 92 CurOut() << new HorizontalLine; 93 } 94 95 void 96 PageMaker_AllDefs::Write_DocuArea() 97 { 98 // Not needed. 99 } 100 101 void 102 PageMaker_AllDefs::Write_DefinesList() 103 { 104 CurOut() 105 << new html::LineBreak 106 << new html::LineBreak 107 >> *new xml::AnElement("div") 108 << new html::ClassAttr("define") 109 >> *new html::Label("defines") 110 >> *new html::Headline(3) 111 << "Defines"; 112 113 ary::cpp::DefsResultList 114 aAllDefines = Env().Gate().Defs().AllDefines(); 115 ary::cpp::DefsConstIterator 116 itEnd = aAllDefines.end(); 117 118 if (aAllDefines.begin() != itEnd) 119 { 120 for ( ary::cpp::DefsConstIterator it = aAllDefines.begin(); 121 it != itEnd; 122 ++it ) 123 { 124 Write_Define(*it); 125 } 126 } 127 else 128 { 129 CurOut() << "None."; 130 } 131 132 CurOut() << new HorizontalLine; 133 } 134 135 void 136 PageMaker_AllDefs::Write_MacrosList() 137 138 { 139 CurOut() 140 << new html::LineBreak 141 << new html::LineBreak 142 >> *new xml::AnElement("div") 143 << new html::ClassAttr("define") 144 >> *new html::Label("macros") 145 >> *new html::Headline(3) 146 << "Macros"; 147 148 ary::cpp::DefsResultList 149 aAllMacros = Env().Gate().Defs().AllMacros(); 150 ary::cpp::DefsConstIterator 151 itEnd = aAllMacros.end(); 152 153 if (aAllMacros.begin() != itEnd) 154 { 155 for ( ary::cpp::DefsConstIterator it = aAllMacros.begin(); 156 it != itEnd; 157 ++it ) 158 { 159 Write_Macro(*it); 160 } 161 } 162 else 163 { 164 CurOut() << "None."; 165 } 166 167 CurOut() << new HorizontalLine; 168 } 169 170 void 171 PageMaker_AllDefs::Write_Define(De_id i_nId) 172 { 173 csv_assert( ary::is_type<ary::cpp::Define>( Env().Gate().Defs().Find_Def(i_nId)) ); 174 const ary::cpp::Define & 175 rDef = static_cast< const ary::cpp::Define& >( Env().Gate().Defs().Find_Def(i_nId) ); 176 177 CurOut() << new html::HorizontalLine; 178 179 adcdisp::ExplanationList aDocu( CurOut(), true ); 180 aDocu.AddEntry(); 181 182 aDocu.Term() 183 >> *new html::Label( rDef.LocalName() ) 184 << " "; 185 aDocu.Term() 186 << rDef.LocalName(); 187 188 Write_DefsDocu( aDocu.Def(), rDef ); 189 } 190 191 void 192 PageMaker_AllDefs::Write_Macro(De_id i_nId) 193 { 194 csv_assert( Env().Gate().Defs().Find_Def(i_nId).AryClass() == ary::cpp::Macro::class_id ); 195 const ary::cpp::Macro & 196 rDef = static_cast< const ary::cpp::Macro& >( Env().Gate().Defs().Find_Def(i_nId) ); 197 198 CurOut() << new html::HorizontalLine; 199 200 adcdisp::ExplanationList aDocu( CurOut(), true ); 201 aDocu.AddEntry(); 202 203 aDocu.Term() 204 >> *new html::Label( rDef.LocalName() ) 205 << " "; 206 aDocu.Term() 207 << rDef.LocalName() 208 << "("; 209 WriteOut_TokenList( aDocu.Term(), rDef.Params(), ", " ); 210 aDocu.Term() 211 << ")"; 212 213 Write_DefsDocu( aDocu.Def(), rDef ); 214 } 215 216 217 void 218 PageMaker_AllDefs::Write_DefsDocu( csi::xml::Element & o_rOut, 219 const ary::cpp::DefineEntity & i_rTextReplacement ) 220 { 221 if ( i_rTextReplacement.DefinitionText().size() > 0 ) 222 { 223 EraseLeadingSpace( *const_cast< String * >( 224 &(*i_rTextReplacement.DefinitionText().begin()) 225 ) ); 226 } 227 228 adcdisp::ExplanationTable rList( o_rOut ); 229 230 rList.AddEntry( "Defined As" ); 231 WriteOut_TokenList( rList.Def(), i_rTextReplacement.DefinitionText(), " " ); 232 233 const ary::loc::File & 234 rFile = Env().Gate().Locations().Find_File( i_rTextReplacement.Location() ); 235 rList.AddEntry( "In File" ); 236 rList.Def() << rFile.LocalName(); 237 238 ShowDocu_On( o_rOut, *pDocuDisplay, i_rTextReplacement ); 239 } 240