diff options
Diffstat (limited to 'autodoc/source/display/html/pm_class.cxx')
-rw-r--r-- | autodoc/source/display/html/pm_class.cxx | 813 |
1 files changed, 0 insertions, 813 deletions
diff --git a/autodoc/source/display/html/pm_class.cxx b/autodoc/source/display/html/pm_class.cxx deleted file mode 100644 index 8c22be5c..00000000 --- a/autodoc/source/display/html/pm_class.cxx +++ /dev/null @@ -1,813 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include <precomp.h> -#include "pm_class.hxx" - - -// NOT FULLY DEFINED SERVICES -#include <ary/cpp/c_gate.hxx> -#include <ary/cpp/c_class.hxx> -#include <ary/cpp/c_tydef.hxx> -#include <ary/cpp/cp_ce.hxx> -#include <ary/loc/loc_file.hxx> -#include <ary/loc/locp_le.hxx> -#include <ary/getncast.hxx> -#include "hd_chlst.hxx" -#include "hd_docu.hxx" -#include "hdimpl.hxx" -#include "html_kit.hxx" -#include "navibar.hxx" -#include "opageenv.hxx" -#include "pagemake.hxx" -#include "strconst.hxx" - -using namespace adcdisp; - -using namespace csi; -using csi::html::HorizontalLine; -using csi::html::LineBreak; -using csi::html::Link; -using csi::html::Table; -using csi::html::TableRow; -using csi::html::TableCell; - -using ary::cpp::CesConstIterator; -using ary::doc::OldCppDocu; - -const char * const C_sTitle_InnerClasses = "Classes"; -const char * const C_sTitle_InnerStructs = "Structs"; -const char * const C_sTitle_InnerUnions = "Unions"; -const char * const C_sTitle_Methods = "Methods"; -const char * const C_sTitle_StaticMethods = "Static Methods"; -const char * const C_sTitle_Data = "Data"; -const char * const C_sTitle_StaticData = "Static Data"; - -const char * const C_sLabel_StaticOperations = "static_ops"; -const char * const C_sLabel_StaticVariables = "static_vars"; - -const char * const C_sTitlePublic = "Public Members"; -const char * const C_sTitleProtected = "Protected Members"; -const char * const C_sTitlePrivate = "Private Members"; -const char * const C_sMprTitles[3] = { C_sTitlePublic, - C_sTitleProtected, - C_sTitlePrivate - }; -const char * const C_sSummaryTitlePublic = "Public Members"; -const char * const C_sSummaryTitleProtected = "Protected Members"; -const char * const C_sSummaryTitlePrivate = "Private Members"; -const char * - C_sMprSummaryTitles[3] = - { C_sSummaryTitlePublic, C_sSummaryTitleProtected, C_sSummaryTitlePrivate }; -const char * - C_sMprPrefixes[3] = - { "publ_", "prot_", "priv_" }; -const char * - C_sSummaryItems_Titles[PageMaker_Class::cl_MAX] = - { C_sTitle_InnerClasses, C_sTitle_InnerStructs, C_sTitle_InnerUnions, - C_sTitle_Enums, C_sTitle_Typedefs, - C_sTitle_Methods, C_sTitle_StaticMethods, C_sTitle_Data, C_sTitle_StaticData }; -const char * - C_sSummaryItems_Labels[PageMaker_Class::cl_MAX] = - { C_sLabel_Classes, C_sLabel_Structs, C_sLabel_Unions, - C_sLabel_Enums, C_sLabel_Typedefs, - C_sLabel_Operations, C_sLabel_StaticOperations, - C_sLabel_Variables, C_sLabel_StaticVariables }; - - -const ary::cpp::E_Protection - aProt[3] = { ary::cpp::PROTECT_public, - ary::cpp::PROTECT_protected, - ary::cpp::PROTECT_private }; - - -PageMaker_Class::PageMaker_Class( PageDisplay & io_rPage, - const ary::cpp::Class & i_rClass ) - : SpecializedPageMaker(io_rPage), - pMe( &i_rClass ), - pChildDisplay( new ChildList_Display(io_rPage.Env(), i_rClass) ), - pNavi(0) - // pProtectionArea, - // bChildLists_Exist -{ - int i_max = 3 * cl_MAX; - for (int i = 0; i < i_max; i++) - { - bChildLists_Exist[i] = false; - } // end for -} - -PageMaker_Class::~PageMaker_Class() -{ -} - -void -PageMaker_Class::MakePage() -{ - pNavi = new NavigationBar( Env(), Me() ); - - Write_NavBar(); - Write_TopArea(); - Write_DocuArea(); - Write_ChildLists(); - - pNavi->Write_SubRows(); - pNavi = 0; -} - -void -PageMaker_Class::Write_NavBar() -{ - NavigationBar aNavi( Env(), Me() ); - pNavi->Write( CurOut() ); - CurOut() << new HorizontalLine; -} - -inline bool -IsInterface(const ary::doc::Documentation & i_doc) -{ - const OldCppDocu * - doc = Get_CppDocu(i_doc); - return doc != 0 - ? doc->IsInterface() - : false; -} - -void -PageMaker_Class::Write_TopArea() -{ - TemplateClause fTemplateClause; - PageTitle_Std fTitle; - - Page().Write_NameChainWithLinks( Me() ); - - fTemplateClause( CurOut(), Me().TemplateParameters() ); - fTitle( CurOut(), Get_ClassTypeKey(Me()), Me().LocalName() ); - - CurOut() << new HorizontalLine; - - Write_BaseHierarchy(); - Write_DerivedList(); - - CurOut() << new LineBreak; - - adcdisp::FlagTable - aFlags( CurOut(), 4 ); - aFlags.SetColumn( 0, "virtual", - Me().Virtuality() != ary::cpp::VIRTUAL_none ); - aFlags.SetColumn( 1, "abstract", - Me().Virtuality() == ary::cpp::VIRTUAL_abstract ); - aFlags.SetColumn( 2, "interface", - IsInterface(Me().Docu()) - OR Me().Virtuality() == ary::cpp::VIRTUAL_abstract ); - aFlags.SetColumn( 3, "template", - Me().TemplateParameters().size() > 0 ); -} - -void -PageMaker_Class::Write_DocuArea() -{ - Docu_Display aDocuShow( Env() ); - - aDocuShow.Assign_Out(CurOut()); - Me().Accept( aDocuShow ); - aDocuShow.Unassign_Out(); - - ary::loc::File & - rFile = Env().Gate().Locations().Find_File( Me().Location() ); - - adcdisp::ExplanationList - aFileText( CurOut() ); - aFileText.AddEntry("File"); - aFileText.Def() - << rFile.LocalName(); - - CurOut() << new HorizontalLine; -} - -void -PageMaker_Class::Write_ChildLists() -{ - int i_max = 3 * cl_MAX; - for (int i = 0; i < i_max; i++) - { - bChildLists_Exist[i] = false; - } // end for - - csi::html::DefListDefinition & - rPublic = Setup_MemberSegment_Out( mp_public ); - csi::html::DefListDefinition & - rProtected = Setup_MemberSegment_Out( mp_protected ); - csi::html::DefListDefinition & - rPrivate = Setup_MemberSegment_Out( mp_private ); - - Write_ChildList_forClasses( rPublic, - rProtected, - rPrivate, - C_sLabel_Classes, - C_sTitle_InnerClasses, - ary::cpp::CK_class ); - Write_ChildList_forClasses( rPublic, - rProtected, - rPrivate, - C_sLabel_Structs, - C_sTitle_InnerStructs, - ary::cpp::CK_struct ); - Write_ChildList_forClasses( rPublic, - rProtected, - rPrivate, - C_sLabel_Unions, - C_sTitle_InnerUnions, - ary::cpp::CK_union ); - - Write_ChildList( ary::cpp::Class::SLOT_Enums, - cl_Enums, - C_sLabel_Enums, - C_sTitle_Enums, - rPublic, - rProtected, - rPrivate ); - Write_ChildList( ary::cpp::Class::SLOT_Typedefs, - cl_Typedefs, - C_sLabel_Typedefs, - C_sTitle_Typedefs, - rPublic, - rProtected, - rPrivate ); - - Write_ChildList( ary::cpp::Class::SLOT_Operations, - cl_Operations, - C_sLabel_Operations, - C_sTitle_Methods, - rPublic, - rProtected, - rPrivate ); - Write_ChildList( ary::cpp::Class::SLOT_StaticOperations, - cl_StaticOperations, - C_sLabel_StaticOperations, - C_sTitle_StaticMethods, - rPublic, - rProtected, - rPrivate ); - Write_ChildList( ary::cpp::Class::SLOT_Data, - cl_Data, - C_sLabel_Variables, - C_sTitle_Data, - rPublic, - rProtected, - rPrivate ); - Write_ChildList( ary::cpp::Class::SLOT_StaticData, - cl_StaticData, - C_sLabel_StaticVariables, - C_sTitle_StaticData, - rPublic, - rProtected, - rPrivate ); - - Create_NaviSubRow(mp_public); // Also puts out or deletes pPublic. - Create_NaviSubRow(mp_protected); // Also puts out or deletes pProtected. - Create_NaviSubRow(mp_private); // Also puts out or deletes pPrivate. -} - -void -PageMaker_Class::Write_ChildList( ary::SlotAccessId i_nSlot, - E_ChidList i_eChildListIndex, - const char * i_sLabel, - const char * i_sListTitle, - csi::xml::Element & o_rPublic, - csi::xml::Element & o_rProtected, - csi::xml::Element & o_rPrivate ) - -{ - bool bPublic_ChildrenExist = false; - bool bProtected_ChildrenExist = false; - bool bPrivate_ChildrenExist = false; - - ChildList_Display::Area_Result - aPublic_Result( bPublic_ChildrenExist, o_rPublic ); - ChildList_Display::Area_Result - aProtected_Result( bProtected_ChildrenExist, o_rProtected ); - ChildList_Display::Area_Result - aPrivate_Result( bPrivate_ChildrenExist, o_rPrivate ); - - String sLabelPublic = ChildListLabel(i_sLabel, mp_public); - String sLabelProtected = ChildListLabel(i_sLabel, mp_protected); - String sLabelPrivate = ChildListLabel(i_sLabel, mp_private); - - pChildDisplay->Run_Members( aPublic_Result, - aProtected_Result, - aPrivate_Result, - i_nSlot, - sLabelPublic, - sLabelProtected, - sLabelPrivate, - i_sListTitle ); - - bChildLists_Exist[i_eChildListIndex] - = bPublic_ChildrenExist; - bChildLists_Exist[i_eChildListIndex + cl_MAX] - = bProtected_ChildrenExist; - bChildLists_Exist[i_eChildListIndex + 2*cl_MAX] - = bPrivate_ChildrenExist; - - if (bPublic_ChildrenExist) - o_rPublic << new HorizontalLine; - if (bProtected_ChildrenExist) - o_rProtected << new HorizontalLine; - if (bPrivate_ChildrenExist) - o_rPrivate << new HorizontalLine; -} - -void -PageMaker_Class::Write_ChildList_forClasses( csi::xml::Element & o_rPublic, - csi::xml::Element & o_rProtected, - csi::xml::Element & o_rPrivate, - const char * i_sLabel, - const char * i_sListTitle, - ary::cpp::E_ClassKey i_eFilter ) -{ - bool bPublic_ChildrenExist = false; - bool bProtected_ChildrenExist = false; - bool bPrivate_ChildrenExist = false; - - ChildList_Display::Area_Result - aPublic_Result( bPublic_ChildrenExist, o_rPublic ); - ChildList_Display::Area_Result - aProtected_Result( bProtected_ChildrenExist, o_rProtected ); - ChildList_Display::Area_Result - aPrivate_Result( bPrivate_ChildrenExist, o_rPrivate ); - - String sLabelPublic = ChildListLabel(i_sLabel, mp_public); - String sLabelProtected = ChildListLabel(i_sLabel, mp_protected); - String sLabelPrivate = ChildListLabel(i_sLabel, mp_private); - - pChildDisplay->Run_MemberClasses( aPublic_Result, - aProtected_Result, - aPrivate_Result, - ary::cpp::Class::SLOT_NestedClasses, - sLabelPublic, - sLabelProtected, - sLabelPrivate, - i_sListTitle, - i_eFilter ); - - bChildLists_Exist[int(cl_NestedClasses)+int(i_eFilter)] - = bPublic_ChildrenExist; - bChildLists_Exist[int(cl_NestedClasses)+int(i_eFilter) + cl_MAX] - = bProtected_ChildrenExist; - bChildLists_Exist[int(cl_NestedClasses)+int(i_eFilter) + 2*cl_MAX] - = bPrivate_ChildrenExist; - - if (bPublic_ChildrenExist) - o_rPublic << new HorizontalLine; - if (bProtected_ChildrenExist) - o_rProtected << new HorizontalLine; - if (bPrivate_ChildrenExist) - o_rPrivate << new HorizontalLine; -} - -const char * -PageMaker_Class::ChildListLabel( const char * i_sLabel, E_MemberProtection i_eMpr ) -{ - static char sResult[100]; - strcpy( sResult, C_sMprPrefixes[i_eMpr] ); // SAFE STRCPY (#100211# - checked) - strcat( sResult, i_sLabel ); // SAFE STRCAT (#100211# - checked) - return sResult; -} - -csi::html::DefListDefinition & -PageMaker_Class::Setup_MemberSegment_Out( E_MemberProtection i_eMpr ) -{ - html::DefList * pDefList = new html::DefList; - pProtectionArea[i_eMpr] = pDefList; - - pDefList->AddTerm() - << new html::ClassAttr("subtitle") - >> *new html::Label( C_sMprPrefixes[i_eMpr] ) - >> *new html::Headline(3) - << C_sMprTitles[i_eMpr]; - return pDefList->AddDefinition(); -} - -void -PageMaker_Class::Create_NaviSubRow( E_MemberProtection i_eMpr ) -{ - int nIndexAdd = int(cl_MAX) * int(i_eMpr); - - bool bEmpty = true; - for (int e = 0; e < cl_MAX; e++) - { - if ( bChildLists_Exist[e + nIndexAdd] ) - { - bEmpty = false; - break; - } - } // end for - if (bEmpty) - { - pProtectionArea[i_eMpr] = 0; - return; - } - else // - { - CurOut() << pProtectionArea[i_eMpr].Release(); - } // endif - - pNavi->MakeSubRow( C_sMprSummaryTitles[i_eMpr] ); - for (int i = 0; i < cl_MAX; i++) - { - pNavi->AddItem( C_sSummaryItems_Titles[i], - ChildListLabel( C_sSummaryItems_Labels[i], i_eMpr ), - bChildLists_Exist[i+nIndexAdd] ); - } // end for -} - -void -PageMaker_Class::Write_DerivedList() -{ - adcdisp::ExplanationList - aDeriveds( CurOut() ); - aDeriveds.AddEntry( "Known Derived Classes" ); - - if ( Me().KnownDerivatives().Size() == 0 ) - { - aDeriveds.Def() << "None."; - return; - } - - typedef ary::List_Rid RidList; - - CesConstIterator - itEnd = Me().KnownDerivatives().End(); - for ( CesConstIterator it = Me().KnownDerivatives().Begin(); - it != itEnd; - ++it ) - { - const ary::cpp::CodeEntity & - rCe = Env().Gate().Ces().Find_Ce(*it); - - aDeriveds.Def() - >> *new html::Link( Link2Ce(Env(),rCe) ) - << rCe.LocalName(); - aDeriveds.Def() - << new html::LineBreak; - } // end for -} - - -// ============== Creating a classes base hierarchy ====================== // - - -namespace -{ - -class Node -{ - public: - Node( - const ary::cpp::Class & - i_rClass, - ary::cpp::Type_id i_nClassType, - const ary::cpp::Gate & - i_rGate, - intt i_nPositionOffset, - Node * io_pDerived = 0, - ary::cpp::E_Protection - i_eProtection = ary::cpp::PROTECT_global, - bool i_bVirtual = false ); - ~Node(); - - void FillPositionList( - std::vector< const Node* > & - o_rPositionList ) const; - void Write2( - csi::xml::Element & o_rOut, - const OuputPage_Environment & - i_rEnv ) const; - - intt BaseCount() const { return nCountBases; } - intt Position() const { return nPosition; } - int Xpos() const { return 3*Position(); } - int Ypos() const { return 2*Position(); } - const Node * Derived() const { return pDerived; } - - private: - typedef std::vector< DYN Node* > BaseList; - - void IncrBaseCount(); - - // DATA - BaseList aBases; - intt nCountBases; - Node * pDerived; - - String sName; - const ary::cpp::Class * - pClass; - ary::cpp::Type_id nClassType; - ary::cpp::E_Protection - eProtection; - bool bVirtual; - - intt nPosition; -}; - -void WriteNodeHierarchy( - csi::xml::Element & o_rOut, - const OuputPage_Environment & - i_rEnv, - const Node & i_rClass ); - -const ary::cpp::Class * - HereFind_Class( - const ary::cpp::Gate & - i_rGate, - ary::cpp::Type_id i_nReferingTypeId ); - -} // anonymous namespace - -void -PageMaker_Class::Write_BaseHierarchy() -{ - adcdisp::ExplanationList aBases( CurOut() ); - aBases.AddEntry( "Base Classes" ); - - if ( Me().BaseClasses().size() == 0 ) - { - aBases.Def() << "None."; - } - else - { - Dyn< Node > - pBaseGraph( new Node(Me(), ary::cpp::Type_id(0), Env().Gate(), 0) ); - WriteNodeHierarchy( aBases.Def(), Env(), *pBaseGraph ); - } -} - - - -namespace -{ - -void -WriteNodeHierarchy( csi::xml::Element & o_rOut, - const OuputPage_Environment & i_rEnv, - const Node & i_rClass ) -{ - typedef const Node * NodePtr; - typedef std::vector<NodePtr> NodeList; - - NodeList aPositionList; - intt nSize = i_rClass.Position()+1; - aPositionList.reserve(nSize); - i_rClass.FillPositionList( aPositionList ); - - xml::Element & - rPre = o_rOut - >> *new xml::AnElement("pre") - << new html::StyleAttr("font-family:monospace;"); - - for ( int line = 0; line < nSize; ++line ) - { - char * sLine1 = new char[2 + line*5]; - char * sLine2 = new char[1 + line*5]; - *sLine1 = '\0'; - *sLine2 = '\0'; - - bool bBaseForThisLineReached = false; - for ( int col = 0; col < line; ++col ) - { - intt nDerivPos = aPositionList[col]->Derived()->Position(); - - if ( nDerivPos >= line ) - strcat(sLine1, " | "); - else - strcat(sLine1, " "); - - if ( nDerivPos > line ) - { - strcat(sLine2, " | "); - } - else if ( nDerivPos == line ) - { - if (bBaseForThisLineReached) - strcat(sLine2, "--+--"); - else - { - bBaseForThisLineReached = true; - strcat(sLine2, " +--"); - } - } - else // nDerivPos < line - { - if (bBaseForThisLineReached) - strcat(sLine2, "-----"); - else - strcat(sLine2, " "); - } - } // end for (col) - strcat(sLine1,"\n"); - rPre - << sLine1 - << sLine2; - delete [] sLine1; - delete [] sLine2; - - aPositionList[line]->Write2( rPre, i_rEnv ); - rPre << "\n"; - } // end for (line) -} - -const ary::cpp::Class * -HereFind_Class( const ary::cpp::Gate & i_rGate, - ary::cpp::Type_id i_nReferingTypeId ) -{ - const ary::cpp::CodeEntity * - pCe = i_rGate.Search_RelatedCe( i_nReferingTypeId ); - - if ( pCe != 0 ) - { - if ( ary::is_type<ary::cpp::Class>(*pCe) ) - { - return ary::ary_cast<ary::cpp::Class>(pCe); - } - else if ( ary::is_type<ary::cpp::Typedef>(*pCe) ) - { - const ary::cpp::Typedef * - pTydef = ary::ary_cast<ary::cpp::Typedef>(pCe); - return HereFind_Class( i_rGate, pTydef->DescribingType() ); - } - } - - static const ary::cpp::Class aClassNull_( "Base class not found", - ary::cpp::Ce_id(0), - ary::cpp::PROTECT_global, - ary::loc::Le_id(0), - ary::cpp::CK_class ); - return &aClassNull_; -} - - - -//********************* Node ***********************// - -Node::Node( const ary::cpp::Class & i_rClass, - ary::cpp::Type_id i_nClassType, - const ary::cpp::Gate & i_rGate, - intt i_nPositionOffset, - Node * io_pDerived, - ary::cpp::E_Protection i_eProtection, - bool i_bVirtual ) - : aBases(), - nCountBases(0), - pDerived(io_pDerived), - pClass(&i_rClass), - nClassType(i_nClassType), - eProtection(i_eProtection), - bVirtual(i_bVirtual), - nPosition(i_nPositionOffset) -{ - typedef ary::cpp::List_Bases BList; - - for ( BList::const_iterator it = i_rClass.BaseClasses().begin(); - it != i_rClass.BaseClasses().end(); - ++it ) - { - const ary::cpp::Class * - pBaseClass = HereFind_Class( i_rGate, (*it).nId ); - - Dyn<Node> - pBase( new Node(*pBaseClass, - (*it).nId, - i_rGate, - nPosition, - this, - (*it).eProtection, - (*it).eVirtuality == ary::cpp::VIRTUAL_virtual) - ); - IncrBaseCount(); - nPosition += pBase->BaseCount() + 1; - aBases.push_back( pBase.Release() ); - } // end for -} - -Node::~Node() -{ -} - -void -Node::FillPositionList( std::vector< const Node* > & o_rPositionList ) const -{ - for ( BaseList::const_iterator it = aBases.begin(); - it != aBases.end(); - ++it ) - { - (*it)->FillPositionList(o_rPositionList); - } // end for - - if( o_rPositionList.size() != uintt(Position()) ) - { - csv_assert(false); - } - o_rPositionList.push_back(this); -} - -void -Node::Write2( csi::xml::Element & o_rOut, - const OuputPage_Environment & i_rEnv ) const -{ - if ( Derived() == 0 ) - { - o_rOut - >> *new xml::AnElement("span") - << new html::ClassAttr("btself") - << pClass->LocalName(); - return; - } - - csi::xml::Element * - pOut = & ( o_rOut >> *new xml::AnElement("span") ); - switch ( eProtection ) - { - case ary::cpp::PROTECT_public: - if (bVirtual) - *pOut << new html::ClassAttr("btvpubl"); - else - *pOut << new html::ClassAttr("btpubl"); - break; - case ary::cpp::PROTECT_protected: - if (bVirtual) - *pOut << new html::ClassAttr("btvprot"); - else - *pOut << new html::ClassAttr("btprot"); - break; - case ary::cpp::PROTECT_private: - if (bVirtual) - *pOut << new html::ClassAttr("btvpriv"); - else - *pOut << new html::ClassAttr("btpriv"); - break; - default: // do nothing. - ; - } // end switch - - csi::xml::Element & rOut = *pOut; - - Get_LinkedTypeText( rOut, i_rEnv, nClassType, false ); - rOut << " ("; - if ( bVirtual ) - rOut << "virtual "; - switch ( eProtection ) - { - case ary::cpp::PROTECT_public: - rOut << "public)"; - break; - case ary::cpp::PROTECT_protected: - rOut << "protected)"; - break; - case ary::cpp::PROTECT_private: - rOut << "private)"; - break; - default: // do nothing. - ; - } // end switch -} - -void -Node::IncrBaseCount() -{ - ++nCountBases; - if (pDerived != 0) - pDerived->IncrBaseCount(); -} - - -} // anonymous namespace - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |