1*0841af79SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*0841af79SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*0841af79SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*0841af79SAndrew Rist * distributed with this work for additional information 6*0841af79SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*0841af79SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*0841af79SAndrew Rist * "License"); you may not use this file except in compliance 9*0841af79SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*0841af79SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*0841af79SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*0841af79SAndrew Rist * software distributed under the License is distributed on an 15*0841af79SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*0841af79SAndrew Rist * KIND, either express or implied. See the License for the 17*0841af79SAndrew Rist * specific language governing permissions and limitations 18*0841af79SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*0841af79SAndrew Rist *************************************************************/ 21cdf0e10cSrcweir 22cdf0e10cSrcweir #include <precomp.h> 23cdf0e10cSrcweir #include "hd_docu.hxx" 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES 27cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx> 28cdf0e10cSrcweir #include <ary/cpp/c_namesp.hxx> 29cdf0e10cSrcweir #include <ary/cpp/c_class.hxx> 30cdf0e10cSrcweir #include <ary/cpp/c_enum.hxx> 31cdf0e10cSrcweir #include <ary/cpp/c_tydef.hxx> 32cdf0e10cSrcweir #include <ary/cpp/c_funct.hxx> 33cdf0e10cSrcweir #include <ary/cpp/c_vari.hxx> 34cdf0e10cSrcweir #include <ary/cpp/c_enuval.hxx> 35cdf0e10cSrcweir #include <ary/doc/d_oldcppdocu.hxx> 36cdf0e10cSrcweir #include <ary/info/all_tags.hxx> 37cdf0e10cSrcweir #include <ary/info/all_dts.hxx> 38cdf0e10cSrcweir #include <adc_cl.hxx> 39cdf0e10cSrcweir #include "html_kit.hxx" 40cdf0e10cSrcweir #include "opageenv.hxx" 41cdf0e10cSrcweir 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir using namespace ary::info; 45cdf0e10cSrcweir using namespace csi; 46cdf0e10cSrcweir 47cdf0e10cSrcweir using html::DefList; 48cdf0e10cSrcweir using html::DefListTerm; 49cdf0e10cSrcweir using html::DefListDefinition; 50cdf0e10cSrcweir using html::Headline; 51cdf0e10cSrcweir using html::Link; 52cdf0e10cSrcweir 53cdf0e10cSrcweir 54cdf0e10cSrcweir const char * 55cdf0e10cSrcweir C_sTagHeadlines[ ary::info::C_eAtTag_NrOfClasses ] = 56cdf0e10cSrcweir { 57cdf0e10cSrcweir "ATTENTION!", "Author", "Changes", "Collaborators", 58cdf0e10cSrcweir "Contact", // Contact may be unused 59cdf0e10cSrcweir "Copyright", "Deprecated", "Description", "Date of Documentation", 60cdf0e10cSrcweir "How to Derive from this Class", 61cdf0e10cSrcweir "Heap object - owner is responsible for deletion.", 62cdf0e10cSrcweir "Important Instances", 63cdf0e10cSrcweir "Interface Only", 64cdf0e10cSrcweir "Invariant", "Lifecycle", 65cdf0e10cSrcweir "Multiplicity", "On Error", "Persistency", "Postcondition", 66cdf0e10cSrcweir "Precondition", 67cdf0e10cSrcweir "Responsibilities", 68cdf0e10cSrcweir "Return", "Summary", "Todos", "Version", 69cdf0e10cSrcweir "Base Classes", "Exceptions", "Implements", "Keywords", "Parameters", 70cdf0e10cSrcweir "See Also", "Template Parameters", 71cdf0e10cSrcweir "", "Since " 72cdf0e10cSrcweir }; 73cdf0e10cSrcweir 74cdf0e10cSrcweir 75cdf0e10cSrcweir 76cdf0e10cSrcweir Docu_Display::Docu_Display( OuputPage_Environment & io_rEnv ) 77cdf0e10cSrcweir : HtmlDisplay_Impl(io_rEnv), 78cdf0e10cSrcweir bUseHtmlInDocuTokens(false), 79cdf0e10cSrcweir pCurClassOverwrite(0) 80cdf0e10cSrcweir { 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir Docu_Display::~Docu_Display() 84cdf0e10cSrcweir { 85cdf0e10cSrcweir } 86cdf0e10cSrcweir 87cdf0e10cSrcweir void 88cdf0e10cSrcweir Docu_Display::Assign_Out( csi::xml::Element & o_rOut ) 89cdf0e10cSrcweir { 90cdf0e10cSrcweir Easy().Enter(o_rOut); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir void 94cdf0e10cSrcweir Docu_Display::Unassign_Out() 95cdf0e10cSrcweir { 96cdf0e10cSrcweir Easy().Leave(); 97cdf0e10cSrcweir } 98cdf0e10cSrcweir 99cdf0e10cSrcweir void 100cdf0e10cSrcweir Docu_Display::do_Process( const ary::cpp::Namespace & i_rData ) 101cdf0e10cSrcweir { 102cdf0e10cSrcweir Process(i_rData.Docu()); 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir void 106cdf0e10cSrcweir Docu_Display::do_Process( const ary::cpp::Class & i_rData ) 107cdf0e10cSrcweir { 108cdf0e10cSrcweir pCurClassOverwrite = &i_rData; 109cdf0e10cSrcweir Process(i_rData.Docu()); 110cdf0e10cSrcweir pCurClassOverwrite = 0; 111cdf0e10cSrcweir } 112cdf0e10cSrcweir 113cdf0e10cSrcweir void 114cdf0e10cSrcweir Docu_Display::do_Process( const ary::cpp::Enum & i_rData ) 115cdf0e10cSrcweir { 116cdf0e10cSrcweir Process(i_rData.Docu()); 117cdf0e10cSrcweir } 118cdf0e10cSrcweir 119cdf0e10cSrcweir void 120cdf0e10cSrcweir Docu_Display::do_Process( const ary::cpp::Typedef & i_rData ) 121cdf0e10cSrcweir { 122cdf0e10cSrcweir Process(i_rData.Docu()); 123cdf0e10cSrcweir } 124cdf0e10cSrcweir 125cdf0e10cSrcweir void 126cdf0e10cSrcweir Docu_Display::do_Process( const ary::cpp::Function & i_rData ) 127cdf0e10cSrcweir { 128cdf0e10cSrcweir Process(i_rData.Docu()); 129cdf0e10cSrcweir } 130cdf0e10cSrcweir 131cdf0e10cSrcweir void 132cdf0e10cSrcweir Docu_Display::do_Process( const ary::cpp::Variable & i_rData ) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir Process(i_rData.Docu()); 135cdf0e10cSrcweir } 136cdf0e10cSrcweir 137cdf0e10cSrcweir 138cdf0e10cSrcweir 139cdf0e10cSrcweir // -------------- Interface ary::info::DocuDisplay ------------------ // 140cdf0e10cSrcweir 141cdf0e10cSrcweir 142cdf0e10cSrcweir void 143cdf0e10cSrcweir Docu_Display::do_Process(const ary::doc::Documentation & i_rData) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir if (i_rData.Data() == 0) 146cdf0e10cSrcweir return; 147cdf0e10cSrcweir 148cdf0e10cSrcweir const ary::doc::OldCppDocu * 149cdf0e10cSrcweir docdata = dynamic_cast< const ary::doc::OldCppDocu* >(i_rData.Data()); 150cdf0e10cSrcweir csv_assert(docdata != 0); 151cdf0e10cSrcweir 152cdf0e10cSrcweir Start_DocuBlock(); 153cdf0e10cSrcweir 154cdf0e10cSrcweir if ( docdata->IsObsolete() ) 155cdf0e10cSrcweir { 156cdf0e10cSrcweir CurOut() 157cdf0e10cSrcweir >> *new html::DefListTerm 158cdf0e10cSrcweir >> *new html::Strong 159cdf0e10cSrcweir << "D E P R E C A T E D"; 160cdf0e10cSrcweir 161cdf0e10cSrcweir } 162cdf0e10cSrcweir 163cdf0e10cSrcweir ary::doc::OldCppDocu::TagList::const_iterator 164cdf0e10cSrcweir itEnd = docdata->Tags().end(); 165cdf0e10cSrcweir for ( ary::doc::OldCppDocu::TagList::const_iterator it = docdata->Tags().begin(); 166cdf0e10cSrcweir it != itEnd; 167cdf0e10cSrcweir ++it ) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir (*it)->StoreAt( *this ); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir Finish_DocuBlock(); 173cdf0e10cSrcweir } 174cdf0e10cSrcweir 175cdf0e10cSrcweir void 176cdf0e10cSrcweir Docu_Display::Display_StdTag( const StdTag & i_rData ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir csv_assert( uintt(i_rData.Std_Id()) < uintt(ary::info::C_eAtTag_NrOfClasses) ); 179cdf0e10cSrcweir 180cdf0e10cSrcweir const ary::info::DocuText::TokenList & 181cdf0e10cSrcweir rText = i_rData.CText().Tokens(); 182cdf0e10cSrcweir typedef ary::info::DocuText::TokenList::const_iterator TokenIterator; 183cdf0e10cSrcweir 184cdf0e10cSrcweir if ( rText.empty() ) 185cdf0e10cSrcweir return; 186cdf0e10cSrcweir else if ( rText.size() < 3 ) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir bool bIsWhite = true; 189cdf0e10cSrcweir for ( TokenIterator it = rText.begin(); 190cdf0e10cSrcweir it != rText.end(); 191cdf0e10cSrcweir ++it ) 192cdf0e10cSrcweir { 193cdf0e10cSrcweir if (bIsWhite) 194cdf0e10cSrcweir bIsWhite = (*it)->IsWhite(); 195cdf0e10cSrcweir } 196cdf0e10cSrcweir if (bIsWhite) 197cdf0e10cSrcweir return; 198cdf0e10cSrcweir } 199cdf0e10cSrcweir 200cdf0e10cSrcweir Write_TagTitle( C_sTagHeadlines[i_rData.Std_Id()] ); 201cdf0e10cSrcweir Write_TagContents( i_rData.CText() ); 202cdf0e10cSrcweir } 203cdf0e10cSrcweir 204cdf0e10cSrcweir void 205cdf0e10cSrcweir Docu_Display::Display_BaseTag( const BaseTag & ) 206cdf0e10cSrcweir { 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir void 210cdf0e10cSrcweir Docu_Display::Display_ExceptionTag( const ExceptionTag & ) 211cdf0e10cSrcweir { 212cdf0e10cSrcweir } 213cdf0e10cSrcweir 214cdf0e10cSrcweir void 215cdf0e10cSrcweir Docu_Display::Display_ImplementsTag( const ImplementsTag & ) 216cdf0e10cSrcweir { 217cdf0e10cSrcweir } 218cdf0e10cSrcweir 219cdf0e10cSrcweir void 220cdf0e10cSrcweir Docu_Display::Display_KeywordTag( const KeywordTag & ) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 224cdf0e10cSrcweir void 225cdf0e10cSrcweir Docu_Display::Display_ParameterTag( const ParameterTag & i_rData ) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir Write_TagTitle( "Parameters" ); 228cdf0e10cSrcweir 229cdf0e10cSrcweir adcdisp::ExplanationTable 230cdf0e10cSrcweir aParams( CurOut() >> *new DefListDefinition ); 231cdf0e10cSrcweir 232cdf0e10cSrcweir for ( const ParameterTag * pParam = &i_rData; 233cdf0e10cSrcweir pParam != 0; 234cdf0e10cSrcweir pParam = pParam->GetNext() ) // KORR_FUTURE 235cdf0e10cSrcweir { 236cdf0e10cSrcweir aParams.AddEntry( pParam->ParamName().c_str() ); 237cdf0e10cSrcweir 238cdf0e10cSrcweir Easy().Enter( aParams.Def() ); 239cdf0e10cSrcweir Write_Text( pParam->CText() ); 240cdf0e10cSrcweir Easy().Leave(); 241cdf0e10cSrcweir } // end for 242cdf0e10cSrcweir } 243cdf0e10cSrcweir 244cdf0e10cSrcweir void 245cdf0e10cSrcweir Docu_Display::Display_SeeTag( const SeeTag & i_rData ) 246cdf0e10cSrcweir { 247cdf0e10cSrcweir Write_TagTitle( "See Also" ); 248cdf0e10cSrcweir 249cdf0e10cSrcweir DefListDefinition * dpDef = new DefListDefinition; 250cdf0e10cSrcweir CurOut() << dpDef; 251cdf0e10cSrcweir Easy().Enter(*dpDef); 252cdf0e10cSrcweir 253cdf0e10cSrcweir for ( std::vector< ary::QualifiedName >::const_iterator 254cdf0e10cSrcweir it = i_rData.References().begin(); 255cdf0e10cSrcweir it != i_rData.References().end(); 256cdf0e10cSrcweir ++it ) 257cdf0e10cSrcweir { 258cdf0e10cSrcweir Write_LinkableText( (*it) ); 259cdf0e10cSrcweir CurOut() << new html::LineBreak; 260cdf0e10cSrcweir } 261cdf0e10cSrcweir 262cdf0e10cSrcweir Easy().Leave(); 263cdf0e10cSrcweir } 264cdf0e10cSrcweir 265cdf0e10cSrcweir void 266cdf0e10cSrcweir Docu_Display::Display_TemplateTag( const TemplateTag & i_rData ) 267cdf0e10cSrcweir { 268cdf0e10cSrcweir Write_TagTitle( "Template Parameters" ); 269cdf0e10cSrcweir 270cdf0e10cSrcweir adcdisp::ExplanationTable 271cdf0e10cSrcweir aTplParams( CurOut() >> *new DefListDefinition ); 272cdf0e10cSrcweir 273cdf0e10cSrcweir for ( const TemplateTag * pTplParam = &i_rData; 274cdf0e10cSrcweir pTplParam != 0; 275cdf0e10cSrcweir pTplParam = pTplParam->GetNext() ) 276cdf0e10cSrcweir { 277cdf0e10cSrcweir aTplParams.AddEntry( pTplParam->TplParamName().c_str() ); 278cdf0e10cSrcweir 279cdf0e10cSrcweir Easy().Enter( aTplParams.Def() ); 280cdf0e10cSrcweir Write_Text( pTplParam->CText() ); 281cdf0e10cSrcweir Easy().Leave(); 282cdf0e10cSrcweir } // end for 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir void 286cdf0e10cSrcweir Docu_Display::Display_LabelTag( const LabelTag & ) 287cdf0e10cSrcweir { 288cdf0e10cSrcweir } 289cdf0e10cSrcweir 290cdf0e10cSrcweir void 291cdf0e10cSrcweir Docu_Display::Display_SinceTag( const ary::info::SinceTag & i_rData ) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir if ( i_rData.Version().empty() ) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir return; 296cdf0e10cSrcweir } 297cdf0e10cSrcweir 298cdf0e10cSrcweir // Transform the value of the @since tag into the text to be displayed. 299cdf0e10cSrcweir String sDisplay; 300cdf0e10cSrcweir if ( autodoc::CommandLine::Get_().DoesTransform_SinceTag() ) 301cdf0e10cSrcweir { 302cdf0e10cSrcweir sDisplay = autodoc::CommandLine::Get_() 303cdf0e10cSrcweir .DisplayOf_SinceTagValue( i_rData.Version() ); 304cdf0e10cSrcweir } 305cdf0e10cSrcweir else 306cdf0e10cSrcweir { 307cdf0e10cSrcweir sDisplay = i_rData.Version(); 308cdf0e10cSrcweir } 309cdf0e10cSrcweir 310cdf0e10cSrcweir if (sDisplay.empty()) 311cdf0e10cSrcweir return; 312cdf0e10cSrcweir 313cdf0e10cSrcweir Write_TagTitle( "Since " ); 314cdf0e10cSrcweir 315cdf0e10cSrcweir DefListDefinition * dpDef = new DefListDefinition; 316cdf0e10cSrcweir CurOut() << dpDef; 317cdf0e10cSrcweir 318cdf0e10cSrcweir Easy().Enter(*dpDef); 319cdf0e10cSrcweir CurOut() << sDisplay; 320cdf0e10cSrcweir Easy().Leave(); 321cdf0e10cSrcweir } 322cdf0e10cSrcweir 323cdf0e10cSrcweir void 324cdf0e10cSrcweir Docu_Display::Display_DT_Text( const DT_Text & i_rData ) 325cdf0e10cSrcweir { 326cdf0e10cSrcweir Write_TextToken( i_rData.Text() ); 327cdf0e10cSrcweir } 328cdf0e10cSrcweir 329cdf0e10cSrcweir void 330cdf0e10cSrcweir Docu_Display::Display_DT_MaybeLink( const DT_MaybeLink & i_rData ) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir // KORR_FUTURE 333cdf0e10cSrcweir Write_TextToken( i_rData.Text() ); 334cdf0e10cSrcweir } 335cdf0e10cSrcweir 336cdf0e10cSrcweir void 337cdf0e10cSrcweir Docu_Display::Display_DT_Whitespace( const DT_Whitespace & i_rData ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir static char sSpace[300] = 340cdf0e10cSrcweir " " 341cdf0e10cSrcweir " " 342cdf0e10cSrcweir " " 343cdf0e10cSrcweir " " 344cdf0e10cSrcweir " " 345cdf0e10cSrcweir " "; 346cdf0e10cSrcweir UINT8 nLength = i_rData.Length(); 347cdf0e10cSrcweir sSpace[nLength] = NULCH; 348cdf0e10cSrcweir CurOut() << sSpace; 349cdf0e10cSrcweir sSpace[nLength] = ' '; 350cdf0e10cSrcweir } 351cdf0e10cSrcweir 352cdf0e10cSrcweir void 353cdf0e10cSrcweir Docu_Display::Display_DT_Eol( const DT_Eol & ) 354cdf0e10cSrcweir { 355cdf0e10cSrcweir CurOut() << new html::Sbr; 356cdf0e10cSrcweir } 357cdf0e10cSrcweir 358cdf0e10cSrcweir void 359cdf0e10cSrcweir Docu_Display::Display_DT_Xml( const ary::info::DT_Xml & i_rData ) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir CurOut() << new xml::XmlCode( i_rData.Text() ); 362cdf0e10cSrcweir } 363cdf0e10cSrcweir 364cdf0e10cSrcweir const ary::cpp::Gate * 365cdf0e10cSrcweir Docu_Display::inq_Get_ReFinder() const 366cdf0e10cSrcweir { 367cdf0e10cSrcweir return &Env().Gate(); 368cdf0e10cSrcweir } 369cdf0e10cSrcweir 370cdf0e10cSrcweir void 371cdf0e10cSrcweir Docu_Display::Start_DocuBlock() 372cdf0e10cSrcweir { 373cdf0e10cSrcweir DYN DefList * dpDefList = new DefList; 374cdf0e10cSrcweir CurOut() << dpDefList; 375cdf0e10cSrcweir Easy().Enter( *dpDefList ); 376cdf0e10cSrcweir } 377cdf0e10cSrcweir 378cdf0e10cSrcweir void 379cdf0e10cSrcweir Docu_Display::Finish_DocuBlock() 380cdf0e10cSrcweir { 381cdf0e10cSrcweir Easy().Leave(); 382cdf0e10cSrcweir } 383cdf0e10cSrcweir 384cdf0e10cSrcweir void 385cdf0e10cSrcweir Docu_Display::Write_TagTitle( const char * i_sText, 386cdf0e10cSrcweir const char * ) 387cdf0e10cSrcweir { 388cdf0e10cSrcweir if ( strcmp(i_sText,"ATTENTION!") == 0 ) 389cdf0e10cSrcweir { 390cdf0e10cSrcweir CurOut() 391cdf0e10cSrcweir >> *new html::DefListTerm 392cdf0e10cSrcweir << new html::ClassAttr("attention") 393cdf0e10cSrcweir << i_sText; 394cdf0e10cSrcweir } 395cdf0e10cSrcweir else 396cdf0e10cSrcweir { 397cdf0e10cSrcweir CurOut() 398cdf0e10cSrcweir >> *new html::DefListTerm 399cdf0e10cSrcweir << i_sText; 400cdf0e10cSrcweir } 401cdf0e10cSrcweir } 402cdf0e10cSrcweir 403cdf0e10cSrcweir void 404cdf0e10cSrcweir Docu_Display::Write_TagContents( const DocuText & i_rDocuText ) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir DefListDefinition * dpDef = new DefListDefinition; 407cdf0e10cSrcweir CurOut() << dpDef; 408cdf0e10cSrcweir 409cdf0e10cSrcweir Easy().Enter(*dpDef); 410cdf0e10cSrcweir Write_Text(i_rDocuText); 411cdf0e10cSrcweir Easy().Leave(); 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir void 415cdf0e10cSrcweir Docu_Display::Write_Text( const ary::info::DocuText & i_rDocuText ) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir if ( i_rDocuText.IsNoHtml() ) 418cdf0e10cSrcweir { 419cdf0e10cSrcweir CurOut() 420cdf0e10cSrcweir << new xml::XmlCode("<pre>"); 421cdf0e10cSrcweir bUseHtmlInDocuTokens = false; 422cdf0e10cSrcweir } 423cdf0e10cSrcweir else 424cdf0e10cSrcweir { 425cdf0e10cSrcweir bUseHtmlInDocuTokens = true; 426cdf0e10cSrcweir } 427cdf0e10cSrcweir i_rDocuText.StoreAt( *this ); 428cdf0e10cSrcweir if ( i_rDocuText.IsNoHtml() ) 429cdf0e10cSrcweir { 430cdf0e10cSrcweir CurOut() 431cdf0e10cSrcweir << new xml::XmlCode("</pre>"); 432cdf0e10cSrcweir } 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir void 436cdf0e10cSrcweir Docu_Display::Write_TextToken( const String & i_sText ) 437cdf0e10cSrcweir { 438cdf0e10cSrcweir if ( bUseHtmlInDocuTokens ) 439cdf0e10cSrcweir CurOut() << new xml::XmlCode(i_sText); 440cdf0e10cSrcweir else 441cdf0e10cSrcweir CurOut() << i_sText; 442cdf0e10cSrcweir } 443cdf0e10cSrcweir 444cdf0e10cSrcweir void 445cdf0e10cSrcweir Docu_Display::Write_LinkableText( const ary::QualifiedName & i_sQuName ) 446cdf0e10cSrcweir { 447cdf0e10cSrcweir const ary::cpp::CodeEntity * 448cdf0e10cSrcweir pCe = FindUnambiguousCe( Env(), i_sQuName, pCurClassOverwrite ); 449cdf0e10cSrcweir if ( pCe != 0 ) 450cdf0e10cSrcweir { 451cdf0e10cSrcweir csi::xml::Element * 452cdf0e10cSrcweir pLink = new csi::html::Link( Link2Ce(Env(), *pCe) ); 453cdf0e10cSrcweir CurOut() << pLink; 454cdf0e10cSrcweir Easy().Enter(*pLink); 455cdf0e10cSrcweir Write_QualifiedName(i_sQuName); 456cdf0e10cSrcweir Easy().Leave(); 457cdf0e10cSrcweir } 458cdf0e10cSrcweir else 459cdf0e10cSrcweir { 460cdf0e10cSrcweir Write_QualifiedName(i_sQuName); 461cdf0e10cSrcweir } 462cdf0e10cSrcweir CurOut() << " "; 463cdf0e10cSrcweir } 464cdf0e10cSrcweir 465cdf0e10cSrcweir void 466cdf0e10cSrcweir Docu_Display::Write_QualifiedName( const ary::QualifiedName & i_sQuName ) 467cdf0e10cSrcweir { 468cdf0e10cSrcweir if ( i_sQuName.IsAbsolute() ) 469cdf0e10cSrcweir CurOut() << "::"; 470cdf0e10cSrcweir for ( ary::QualifiedName::namespace_iterator it = i_sQuName.first_namespace(); 471cdf0e10cSrcweir it != i_sQuName.end_namespace(); 472cdf0e10cSrcweir ++it ) 473cdf0e10cSrcweir { 474cdf0e10cSrcweir CurOut() << (*it) << "::"; 475cdf0e10cSrcweir } 476cdf0e10cSrcweir CurOut() << i_sQuName.LocalName(); 477cdf0e10cSrcweir if ( i_sQuName.IsFunction() ) 478cdf0e10cSrcweir CurOut() << "()"; 479cdf0e10cSrcweir } 480cdf0e10cSrcweir 481