LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/display/idl - hfi_typetext.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 281 353 79.6 %
Date: 2012-12-27 Functions: 24 27 88.9 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <precomp.h>
      21             : #include "hfi_typetext.hxx"
      22             : 
      23             : 
      24             : // NOT FULLY DEFINED SERVICES
      25             : #include <string.h>
      26             : #include <ary/idl/i_type.hxx>
      27             : #include <ary/idl/i_ce.hxx>
      28             : #include <ary/idl/i_module.hxx>
      29             : #include <ary/idl/i_module.hxx>
      30             : #include <ary/idl/ik_ce.hxx>
      31             : #include <adc_cl.hxx>
      32             : #include <adc_msg.hxx>
      33             : #include "hi_linkhelper.hxx"
      34             : 
      35             : 
      36             : 
      37             : 
      38             : 
      39             : 
      40             : inline const ary::idl::Module *
      41        9169 : HF_IdlTypeText::referingModule() const
      42             : {
      43        9169 :     if (pReferingCe == 0)
      44           0 :         return Env().Linker().Search_CurModule();
      45             :     else
      46        9169 :         return &Env().Data().Find_Module(pReferingCe->NameRoom());
      47             : }
      48             : 
      49             : inline const HF_IdlTypeText::client *
      50        1036 : HF_IdlTypeText::referingCe() const
      51             : {
      52        1036 :     return pReferingCe;
      53             : }
      54             : 
      55             : 
      56       49530 : HF_IdlTypeText::HF_IdlTypeText( Environment &       io_rEnv,
      57             :                                 Xml::Element &      o_rOut,
      58             :                                 const client *      i_pScopeGivingCe )
      59             :     :   HtmlFactory_Idl(io_rEnv, &o_rOut),
      60       49530 :         pReferingCe( i_pScopeGivingCe )
      61             : {
      62       49530 : }
      63             : 
      64          27 : HF_IdlTypeText::HF_IdlTypeText( Environment &       io_rEnv,
      65             :                                 E_Index             )
      66             :     :   HtmlFactory_Idl(io_rEnv, 0),
      67          27 :         pReferingCe( 0 )
      68             : {
      69          27 : }
      70             : 
      71       49557 : HF_IdlTypeText::~HF_IdlTypeText()
      72             : {
      73       49557 : }
      74             : 
      75             : void
      76       33226 : HF_IdlTypeText::Produce_byData(ary::idl::Type_id i_idType) const
      77             : {
      78       33226 :     StringVector        aModule_;
      79       33226 :     String              sName;
      80       33226 :     ce_id               nCe;
      81       33226 :     int                 nSequenceCount = 0;
      82       33226 :     csv::erase_container(aModule_);
      83             : 
      84             :     const ary::idl::Type &
      85       33226 :         rType = Env().Data().Find_Type(i_idType);
      86       33226 :     Env().Data().Get_TypeText(aModule_, sName, nCe, nSequenceCount, rType);
      87             : 
      88       33226 :     if ( Env().Data().IsBuiltInOrRelated(rType) )
      89             :     {
      90       17289 :         produce_BuiltIn(sName,nSequenceCount);
      91             :     }
      92             :     else
      93             :     {
      94             :         produce_FromStd( aModule_,
      95             :                          sName,
      96       15937 :                          String::Null_(),
      97             :                          nSequenceCount,
      98       15937 :                          (nCe.IsValid() ? exists_yes : exists_no),
      99       47811 :                          rType.FirstEnclosedNonSequenceType(Env().Gate()).TemplateParameters() );
     100       33226 :     }
     101       33226 : }
     102             : 
     103             : void
     104       23980 : HF_IdlTypeText::Produce_byData( ary::idl::Ce_id i_idCe ) const
     105             : {
     106       23980 :     StringVector        aModule_;
     107       23980 :     String              sCe;
     108       23980 :     String              sMember;
     109       23980 :     csv::erase_container(aModule_);
     110             : 
     111             :     const ary::idl::CodeEntity &
     112       23980 :         rCe = Env().Data().Find_Ce(i_idCe);
     113       23980 :     Env().Data().Get_CeText(aModule_, sCe, sMember, rCe);
     114       23980 :     produce_FromStd(aModule_, sCe, sMember, 0, exists_yes);
     115       23980 : }
     116             : 
     117             : void
     118        1615 : HF_IdlTypeText::Produce_byData( const String & i_sFullName ) const
     119             : {
     120        1615 :     if ( strncmp(i_sFullName,"http://", 7) == 0 )
     121             :     {
     122          56 :         CurOut()
     123         112 :             >> *new Html::Link(i_sFullName)
     124          56 :                 << i_sFullName;
     125             :         return;
     126             :     }
     127             : 
     128        1559 :     StringVector        aModule_;
     129        1559 :     String              sCe,
     130        1559 :                         sMember;
     131        1559 :     int                 nSequence = 0;
     132        1559 :     String              sTypeText;
     133        1559 :     csv::erase_container(aModule_);
     134             : 
     135             :     const ary::idl::Module *
     136        1559 :         pScopeModule = referingModule();
     137        1559 :     if (pScopeModule == 0)
     138             :     {
     139             :         // SYNTAX_ERR, but rather logical error: Missing module.
     140           0 :         CurOut() << i_sFullName;
     141             :         // KORR_FUTURE
     142             :         // How to put a message about this?
     143             :         // errorOut_UnresolvedLink(i_sFullName);
     144             :         return;
     145             :     }
     146             : 
     147        1559 :     const char * sTypeStart = strrchr(i_sFullName,'<');
     148        1559 :     if ( sTypeStart != 0 )
     149             :     {
     150           0 :         const char * sTypeEnd = strchr(i_sFullName,'>');
     151           0 :         if (sTypeEnd == 0)
     152             :         {   // SYNTAX_ERR
     153           0 :             CurOut() << i_sFullName;
     154             :             // KORR_FUTURE
     155             :             // How to put a message about this?
     156             :             // errorOut_UnresolvedLink(i_sFullName);
     157             :             return;
     158             :         }
     159             : 
     160           0 :         nSequence = count_Sequences(i_sFullName);
     161           0 :         sTypeStart++;
     162           0 :         sTypeText.assign(sTypeStart, sTypeEnd-sTypeStart);
     163             :     }
     164             :     else
     165             :     {
     166        1559 :         sTypeText = i_sFullName;
     167             :     }
     168             : 
     169        1559 :     csv::erase_container(aModule_);
     170             : 
     171        1559 :     if (NOT ( Env().Data().Search_Ce(aModule_, sCe,sMember, sTypeText, *pScopeModule) ) )
     172             :     {
     173         513 :         if ( strchr(sTypeText,':') == 0
     174             :              AND
     175         236 :              *sTypeText.c_str() != 'X' )    // This is a HACK, make this correct!
     176             :         {
     177         225 :             Produce_LocalLinkInDocu(sTypeText);
     178             :             return;
     179             :         }
     180          52 :         CurOut() << i_sFullName;
     181             :         // KORR
     182             :         // How to put a message about this?
     183             :         // errorOut_UnresolvedLink(i_sFullName);
     184             :         return;
     185             :     }
     186             : 
     187        1282 :     produce_FromStd(aModule_, sCe, sMember, nSequence, exists_yes);
     188             : }
     189             : 
     190             : void
     191        6612 : HF_IdlTypeText::Produce_LinkInDocu( const String &      i_scope,
     192             :                                     const String &      i_name,
     193             :                                     const String &      i_member ) const
     194             : {
     195        6612 :     StringVector        aModule_;
     196        6612 :     String              sName;
     197        6612 :     csv::erase_container(aModule_);
     198             : 
     199             :     const ary::idl::Module *
     200        6612 :         pScopeModule = referingModule();
     201        6612 :     if (pScopeModule == 0)
     202             :     {
     203             :         // SYNTAX_ERR, but rather logical error: Missing module.
     204           0 :         CurOut() << i_scope << "::" << i_name;
     205           0 :         if (NOT i_member.empty())
     206           0 :             CurOut() << "::" << i_member;
     207             :         return;
     208             :     }
     209             : 
     210        6612 :     if (NOT ( Env().Data().Search_CesModule( aModule_, i_scope, i_name, *pScopeModule) ) )
     211             :     {
     212         191 :         CurOut() << i_scope << "::" << i_name;
     213         191 :         if (NOT i_member.empty())
     214          56 :             CurOut() << "::" << i_member;
     215             :         return;
     216             :     }
     217        6421 :     produce_FromStd(aModule_, i_name, i_member, 0, exists_yes);
     218             : }
     219             : 
     220             : void
     221         998 : HF_IdlTypeText::Produce_LocalLinkInDocu( const String & i_member ) const
     222             : {
     223         998 :     StringVector        aModule_;
     224         998 :     String              sName;
     225         998 :     csv::erase_container(aModule_);
     226             : 
     227             :     csv_assert(referingCe() != 0);
     228         998 :     if ( referingModule() == Env().Linker().Search_CurModule() )
     229             :     {
     230         998 :         StreamLock slLink(200);
     231         998 :         if (referingCe()->SightLevel() == ary::idl::sl_Member)
     232             :         {
     233         960 :             slLink() << "#" << i_member;
     234             :         }
     235             :         else
     236             :         {
     237          38 :             slLink() << referingCe()->LocalName()
     238          38 :                      << ".html#"
     239          38 :                      << i_member;
     240             :         }
     241         998 :         CurOut()
     242        2994 :             >> *new Html::Link(slLink().c_str())
     243         998 :                << i_member;
     244        1996 :         return;
     245             :     }
     246             : 
     247           0 :     String sDummyMember;
     248           0 :     Env().Data().Get_CeText(aModule_, sName, sDummyMember, *referingCe());
     249           0 :     produce_FromStd(aModule_, sName, i_member, 0, exists_yes);
     250             : }
     251             : 
     252             : void
     253       19526 : HF_IdlTypeText::Produce_IndexLink( Xml::Element &   o_out,
     254             :                                    const client &   i_ce ) const
     255             : {
     256       19526 :     StringVector        aModule_;
     257       19526 :     String              sCe;
     258       19526 :     String              sMember;
     259       19526 :     csv::erase_container(aModule_);
     260             : 
     261       19526 :     Out().Enter(o_out);
     262             : 
     263       19526 :     Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce);
     264       19526 :     produce_IndexLink(aModule_, sCe, sMember, false);
     265             : 
     266       19526 :     Out().Leave();
     267       19526 : }
     268             : 
     269             : void
     270       15274 : HF_IdlTypeText::Produce_IndexOwnerLink( Xml::Element &  o_out,
     271             :                                         const client &  i_owner ) const
     272             : {
     273       15274 :     StringVector        aModule_;
     274       15274 :     String              sCe;
     275       15274 :     String              sMember;
     276       15274 :     csv::erase_container(aModule_);
     277             : 
     278       15274 :     Out().Enter(o_out);
     279             : 
     280       15274 :     if (i_owner.Owner().IsValid())
     281             :     {
     282       15274 :         Env().Data().Get_CeText(aModule_, sCe, sMember, i_owner);
     283       15274 :         produce_IndexLink(aModule_, sCe, sMember, true);
     284             :     }
     285             :     else
     286             :     {   // global namespace:
     287             : 
     288           0 :         CurOut()
     289           0 :             << "."
     290           0 :             >> *new Html::Link("../module-ix.html")
     291           0 :                << "global namespace";
     292             :     }
     293             : 
     294             : 
     295       15274 :     Out().Leave();
     296       15274 : }
     297             : 
     298             : void
     299        4252 : HF_IdlTypeText::Produce_IndexSecondEntryLink( Xml::Element &      o_out,
     300             :                                               const client &      i_ce ) const
     301             : {
     302        4252 :     StringVector        aModule_;
     303        4252 :     String              sCe;
     304        4252 :     String              sMember;
     305        4252 :     csv::erase_container(aModule_);
     306             : 
     307        4252 :     Out().Enter(o_out);
     308             : 
     309        4252 :     Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce);
     310        4252 :     produce_IndexLink(aModule_, sCe, sMember, true);
     311        4252 :     Out().Leave();
     312        4252 : }
     313             : 
     314             : 
     315             : void
     316       47620 : HF_IdlTypeText::produce_FromStd( const StringVector & i_module,
     317             :                                  const String &       i_ce,
     318             :                                  const String &       i_member,
     319             :                                  int                  i_sequenceCount,
     320             :                                  E_Existence          i_ceExists,
     321             :                                  const std::vector<ary::idl::Type_id> *
     322             :                                                       i_templateParameters ) const
     323             : {
     324       47620 :     if (i_ceExists == exists_no)
     325             :     {
     326          10 :         if ( is_ExternLink(i_module) )
     327             :         {
     328           0 :             produce_ExternLink(i_module,i_ce,i_member,i_sequenceCount,i_templateParameters);
     329       47620 :             return;
     330             :         }
     331          10 :         errorOut_UnresolvedLink(i_module, i_ce, i_member);
     332             :     }
     333             : 
     334             :     output::Node &
     335       47620 :         rCeNode = Env().OutputTree().Provide_Node(i_module);
     336             :     output::Position
     337       47620 :         aTargetPos(rCeNode);
     338             :     bool
     339       47620 :         bShowModule = rCeNode != Env().CurPosition().RelatedNode()
     340       24211 :                             ?   i_module.size() > 0
     341       71831 :                             :   false;
     342             :     bool
     343       47620 :         bUseMember = NOT i_member.empty();
     344             :     bool
     345       47620 :         bLink2Module = i_ceExists == exists_yes;
     346             :     bool
     347       47620 :         bLink2Ce = i_ceExists == exists_yes;
     348             :     bool
     349       47620 :         bLink2Member = NOT Env().Is_MemberExistenceCheckRequired()
     350       47620 :                        AND i_ceExists == exists_yes;
     351             :     bool
     352       47620 :         bHasCeOrName = NOT i_ce.empty();
     353             : 
     354       47620 :     if (i_sequenceCount > 0)
     355         626 :         start_Sequence(i_sequenceCount);
     356             : 
     357       47620 :     StreamLock  aLink(300);
     358       47620 :     StreamStr & rLink = aLink();
     359             : 
     360             :     // Produce output: module
     361       47620 :     if (bShowModule)
     362             :     {
     363       24208 :         int nMax = i_module.size() - 1;
     364       24208 :         int nCount = 0;
     365             :         StringVector::const_iterator
     366       24208 :             itm = i_module.begin();
     367      100572 :         for ( ;
     368             :               nCount < nMax;
     369             :               ++itm, ++nCount )
     370             :         {
     371       76364 :             CurOut() << "::" << *itm;
     372             :         }
     373             : 
     374       24208 :         CurOut() << "::";
     375       24208 :         if (bLink2Module)
     376             :         {
     377       24201 :             aTargetPos.Set_File(output::ModuleFileName());
     378       24201 :             Env().Linker().Get_Link2Position(rLink, aTargetPos);
     379       24201 :             CurOut()
     380       72603 :                 >> *new Html::Link( rLink.c_str() )
     381       48402 :                     << *itm;
     382       24201 :             rLink.reset();
     383             :         }
     384             :         else
     385             :         {
     386           7 :             CurOut() << *itm;
     387             :         }
     388             : 
     389       24208 :         if (bHasCeOrName)
     390       24207 :             CurOut() << "::";
     391             :     }   // end if (bShowModule)
     392             : 
     393             :     // CodeEntity and member:
     394       47620 :     aTargetPos.Set_File( rLink << i_ce << ".html" << c_str );
     395       47620 :     rLink.reset();
     396             : 
     397       47620 :     if (bHasCeOrName)
     398             :     {
     399       47616 :         if (bLink2Ce)
     400             :         {
     401       47606 :             Env().Linker().Get_Link2Position(rLink, aTargetPos);
     402       47606 :             CurOut()
     403      142818 :                 >> *new Html::Link(rLink.c_str())
     404       47606 :                     << i_ce;
     405       47606 :             rLink.reset();
     406             :         }
     407             :         else
     408             :         {
     409          10 :             CurOut() << i_ce;
     410             :         }
     411             : 
     412       47616 :         if (i_templateParameters != 0)
     413       15934 :             write_TemplateParameterList(*i_templateParameters);
     414             : 
     415       47616 :         if (bUseMember)
     416             :         {
     417        8767 :             CurOut() << "::";
     418             : 
     419        8767 :             if (bLink2Member)
     420             :             {
     421        8767 :                 bool bFunction = strstr(i_member,"()") != 0;
     422        8767 :                 String sMember( i_member );
     423        8767 :                 if (bFunction)
     424        6450 :                     sMember.assign(i_member.c_str(), sMember.length()-2);
     425             : 
     426        8767 :                 Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember);
     427        8767 :                 CurOut()
     428       26301 :                     >> *new Html::Link(rLink.c_str())
     429        8767 :                         << i_member;
     430        8767 :                 rLink.reset();
     431             :             }
     432             :             else
     433             :             {
     434           0 :                 CurOut()
     435           0 :                     << i_member;
     436             :             }
     437             :         }   // endif (bUseMember)
     438             :     }   // endif (bHasCeOrName)
     439             : 
     440       47620 :     if (i_sequenceCount > 0)
     441         626 :         finish_Sequence(i_sequenceCount);
     442             : }
     443             : 
     444             : void
     445       17289 : HF_IdlTypeText::produce_BuiltIn( const String &      i_type,
     446             :                                  int                 i_sequenceCount ) const
     447             : {
     448       17289 :     if (i_sequenceCount > 0)
     449         515 :         start_Sequence(i_sequenceCount);
     450       17289 :     CurOut() << i_type;
     451       17289 :     if (i_sequenceCount > 0)
     452         515 :         finish_Sequence(i_sequenceCount);
     453       17289 : }
     454             : 
     455             : void
     456       39052 : HF_IdlTypeText::produce_IndexLink( const StringVector & i_module,
     457             :                                    const String &       i_ce,
     458             :                                    const String &       i_member,
     459             :                                    bool                 i_bIsOwner ) const
     460             : {
     461             :     output::Node &
     462       39052 :         rCeNode = Env().OutputTree().Provide_Node(i_module);
     463             :     output::Position
     464       39052 :         aTargetPos(rCeNode);
     465             :     bool
     466       39052 :         bShowModule = i_bIsOwner OR (i_module.size() > 0 AND i_ce.empty());
     467             :     bool
     468       39052 :         bShowNonModule = NOT bShowModule OR (i_bIsOwner AND NOT i_ce.empty());
     469             :     bool
     470       39052 :         bUseMember = NOT i_member.empty();
     471             : 
     472       39052 :     StreamLock  aLink(300);
     473       39052 :     StreamStr & rLink = aLink();
     474             : 
     475             :     // Produce output: module
     476       39052 :     if (bShowModule)
     477             :     {
     478       19644 :         if (i_bIsOwner)
     479             :         {
     480       19526 :             int nMax = bShowNonModule ? i_module.size() : i_module.size() - 1;
     481       19526 :             int nCount = 0;
     482      100295 :             for ( StringVector::const_iterator itm = i_module.begin();
     483             :                   nCount < nMax;
     484             :                   ++itm, ++nCount )
     485             :             {
     486       80769 :                 CurOut() << "::" << *itm;
     487             :             }
     488       19526 :             CurOut() << ":: .";
     489             :         }
     490             : 
     491       19644 :         if (NOT bShowNonModule)
     492             :         {
     493         236 :             aTargetPos.Set_File(output::ModuleFileName());
     494         236 :             Env().Linker().Get_Link2Position(rLink, aTargetPos);
     495         236 :             CurOut()
     496         708 :                 >> *new Html::Link( rLink.c_str() )
     497         472 :                     >> *new Html::Bold
     498         472 :                         << i_module.back();
     499         236 :             rLink.reset();
     500             :         }
     501             :     }   // end if (bShowModule)
     502             : 
     503       39052 :     if (bShowNonModule)
     504             :     {
     505       38816 :         aTargetPos.Set_File( rLink << i_ce << ".html" << c_str );
     506       38816 :         rLink.reset();
     507             : 
     508       38816 :         if (bUseMember)
     509             :         {
     510       15274 :             bool bFunction = strstr(i_member,"()") != 0;
     511       15274 :             String sMember( i_member );
     512       15274 :             if (bFunction)
     513        5595 :                 sMember.assign(i_member.c_str(), sMember.length()-2);
     514       15274 :             Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember);
     515       15274 :             CurOut()
     516       45822 :                 >> *new Html::Link(rLink.c_str())
     517       30548 :                     >> *new Html::Bold
     518       15274 :                         << i_member;
     519       15274 :             rLink.reset();
     520             :         }
     521             :         else
     522             :         {
     523       23542 :             Env().Linker().Get_Link2Position(rLink, aTargetPos);
     524       23542 :             if (i_bIsOwner)
     525             :             {
     526       19408 :                 CurOut()
     527       58224 :                     >> *new Html::Link(rLink.c_str())
     528       19408 :                        << i_ce;
     529             :             }
     530             :             else
     531             :             {
     532        4134 :                 CurOut()
     533       12402 :                     >> *new Html::Link(rLink.c_str())
     534        8268 :                            >> *new Html::Bold
     535        4134 :                             << i_ce;
     536             :             }
     537       23542 :             rLink.reset();
     538             :         }
     539       39052 :     }   // endif (bHasCeOrName)
     540       39052 : }
     541             : 
     542             : int
     543           0 : HF_IdlTypeText::count_Sequences( const char * i_sFullType ) const
     544             : {
     545           0 :     int ret = 0;
     546             : 
     547           0 :     for ( const char * pCount = i_sFullType;
     548             :           *pCount != 0;
     549             :            )
     550             :     {
     551           0 :         pCount = strstr(pCount,"sequence");
     552           0 :         if (pCount != 0)
     553             :         {
     554           0 :             pCount += sizeof("sequence");   // = strlen(sequence) + 1 for '<'.
     555           0 :             if ( *(pCount-1) == '\0' )
     556             :             {
     557             :                 // SYNTAX_ERR
     558           0 :                 return 0;
     559             :             }
     560           0 :             ++ret;
     561             :         }
     562             :     }   // end for
     563             : 
     564           0 :     return ret;
     565             : }
     566             : 
     567             : void
     568        1141 : HF_IdlTypeText::start_Sequence( int i_count ) const
     569             : {
     570             :     csv_assert( i_count > 0 );
     571        2335 :     for (int i = 0; i < i_count; ++i )
     572             :     {
     573        1194 :         CurOut() << "sequence< ";
     574             :     }
     575        1141 : }
     576             : 
     577             : void
     578        1141 : HF_IdlTypeText::finish_Sequence( int i_count ) const
     579             : {
     580             :     csv_assert( i_count > 0 );
     581        2335 :     for (int i = 0; i < i_count; ++i )
     582             :     {
     583        1194 :         CurOut() << " >";
     584             :     }
     585        1141 : }
     586             : 
     587             : void
     588          10 : HF_IdlTypeText::errorOut_UnresolvedLink( const char *        i_name ) const
     589             : {
     590          10 :     StreamLock slFile(1000);
     591             : 
     592             :     // KORR
     593             :     // Handle links in cited documentation from other entities.
     594          10 :     slFile() << Env().CurPageCe_AsText();
     595          10 :     slFile().pop_back(5);
     596          10 :     slFile() << ".idl";
     597             : 
     598             :     // KORR
     599             :     // Retrieve, correct line number.
     600          10 :     TheMessages().Out_UnresolvedLink( i_name,
     601          10 :                                       slFile().c_str(),
     602          20 :                                       0 );
     603          10 : }
     604             : 
     605             : void
     606          10 : HF_IdlTypeText::errorOut_UnresolvedLink( const StringVector & i_module,
     607             :                                          const String &       i_ce,
     608             :                                          const String &       i_member ) const
     609             : {
     610          10 :     StreamLock slName(500);
     611             : 
     612          10 :     if (i_module.size() > 0)
     613             :     {
     614           7 :         slName().operator_join(i_module.begin(), i_module.end(), "::");
     615           7 :          if (NOT i_ce.empty())
     616           7 :             slName() << "::";
     617             :     }
     618          10 :     if (NOT i_ce.empty())
     619             :     {
     620          10 :         slName() << i_ce;
     621          10 :         if (NOT i_member.empty())
     622           0 :             slName() << "::" << i_member;
     623             :     }
     624          10 :     errorOut_UnresolvedLink(slName().c_str());
     625          10 : }
     626             : 
     627             : bool
     628          10 : HF_IdlTypeText::is_ExternLink( const StringVector & i_module ) const
     629             : {
     630             :     const autodoc::CommandLine &
     631          10 :         rCmdLine = autodoc::CommandLine::Get_();
     632          10 :     uintt nExtNspLength = rCmdLine.ExternNamespace().length();
     633          10 :     if (nExtNspLength == 0)
     634          10 :         return false;
     635             : 
     636           0 :     StreamStr s(1000);
     637           0 :     s << "::";
     638             :     s.operator_join( i_module.begin(),
     639             :                      i_module.end(),
     640           0 :                      "::" );
     641             : 
     642           0 :     if (s.length() < nExtNspLength)
     643           0 :         return false;
     644           0 :     return ( strncmp( rCmdLine.ExternNamespace().c_str(),
     645             :                       s.c_str(),
     646           0 :                       nExtNspLength ) == 0 );
     647             : }
     648             : 
     649             : void
     650           0 : HF_IdlTypeText::produce_ExternLink( const StringVector & i_module,
     651             :                                     const String &       i_ce,
     652             :                                     const String &       i_member,
     653             :                                     int                  i_sequenceCount,
     654             :                                     const std::vector<ary::idl::Type_id> *
     655             :                                                          i_templateParameters ) const
     656             : {
     657             :     // KORR
     658             :     // Look again at this code and take some time.
     659             : 
     660           0 :     StreamLock  aLink(1000);
     661           0 :     StreamStr & rLink = aLink();
     662             : 
     663           0 :     rLink << autodoc::CommandLine::Get_().ExternRoot();
     664             :     rLink.operator_join( i_module.begin(),
     665             :                          i_module.end(),
     666           0 :                          "/" );
     667           0 :     rLink << '/'
     668           0 :           << i_ce
     669           0 :           << ".html";
     670           0 :     if (i_member.length() > 0)
     671           0 :         rLink << "/#" << i_member;
     672             : 
     673           0 :     if (i_sequenceCount > 0)
     674           0 :         start_Sequence(i_sequenceCount);
     675             : 
     676             :     // module
     677           0 :     int nMax = i_module.size();
     678           0 :     int nCount = 0;
     679             :     StringVector::const_iterator
     680           0 :         itm = i_module.begin();
     681           0 :     for ( ;
     682             :           nCount < nMax;
     683             :           ++itm, ++nCount )
     684             :     {
     685           0 :         CurOut() << "::" << *itm;
     686             :     }
     687           0 :     CurOut() << "::";
     688             : 
     689             : 
     690             :     // CodeEntity
     691           0 :     if (i_member.length() == 0)
     692             :     {
     693           0 :         CurOut()
     694           0 :            >> *new Html::Link(rLink.c_str())
     695           0 :               << i_ce;
     696             :     }
     697             :     else
     698             :     {
     699           0 :         CurOut()
     700           0 :             << i_ce;
     701             :     }
     702             : 
     703           0 :     if (i_templateParameters != 0)
     704           0 :         write_TemplateParameterList(*i_templateParameters);
     705             : 
     706             :     // Member
     707           0 :     if (i_member.length() > 0)
     708             :     {
     709           0 :         CurOut()
     710           0 :             >> *new Html::Link(rLink.c_str())
     711           0 :                 << i_member;
     712             :     }
     713             : 
     714           0 :     if (i_sequenceCount > 0)
     715           0 :         finish_Sequence(i_sequenceCount);
     716           0 : }
     717             : 
     718             : void
     719       15934 : HF_IdlTypeText::write_TemplateParameterList(
     720             :                     const std::vector<ary::idl::Type_id> & i_templateParameters ) const
     721             : {
     722       15934 :     if (i_templateParameters.empty())
     723       15934 :         return;
     724             : 
     725             :     HF_IdlTypeText
     726          20 :         aTemplateParamWriter(Env(), CurOut(), pReferingCe);
     727          20 :     CurOut() << "< ";
     728             :     std::vector<ary::idl::Type_id>::const_iterator
     729          20 :         it = i_templateParameters.begin();
     730          20 :     aTemplateParamWriter.Produce_byData(*it);
     731          27 :     for ( ++it; it != i_templateParameters.end(); ++it )
     732             :     {
     733           7 :         CurOut() << ", ";
     734           7 :         aTemplateParamWriter.Produce_byData(*it);
     735             :     }
     736          20 :     CurOut() << " >";
     737           3 : }
     738             : 
     739             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10