diff options
Diffstat (limited to 'autodoc/source/display/idl')
50 files changed, 10000 insertions, 0 deletions
diff --git a/autodoc/source/display/idl/hfi_constgroup.cxx b/autodoc/source/display/idl/hfi_constgroup.cxx new file mode 100644 index 000000000000..d197e55234db --- /dev/null +++ b/autodoc/source/display/idl/hfi_constgroup.cxx @@ -0,0 +1,140 @@ +/* -*- 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 "hfi_constgroup.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_constgroup.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_property.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sCePrefix_Constants("constants group"); + + +namespace +{ + +const String + C_sList_Constants("Constants"); +const String + C_sList_Constants_Label("Constants"); +const String + C_sList_ConstantDetails("Constants' Details"); +const String + C_sList_ConstantDetails_Label("ConstantDetails"); + +enum E_SubListIndices +{ + sli_ConstantsSummary = 0, + sli_ConstantDetails = 1 +}; + + +} // anonymous namespace + + + +HF_IdlConstGroup::HF_IdlConstGroup( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlConstGroup::~HF_IdlConstGroup() +{ +} + +void +HF_IdlConstGroup::Produce_byData( const client & i_ce ) const +{ + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Constants, i_ce); + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + dyn_ce_list + dpConstants; + ary::idl::ifc_constgroup::attr::Get_Constants(dpConstants, i_ce); + + if ( (*dpConstants).operator bool() ) + { + produce_Members( *dpConstants, + C_sList_Constants, + C_sList_Constants_Label, + C_sList_ConstantDetails, + C_sList_ConstantDetails_Label ); + pNaviSubRow->SwitchOn(sli_ConstantsSummary); + pNaviSubRow->SwitchOn(sli_ConstantDetails); + } + pNaviSubRow->Produce_Row(); +} + +HF_NaviSubRow & +HF_IdlConstGroup::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce,true); // true := avoid link to Use-page. + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + ret.AddItem(C_sList_Constants, C_sList_Constants_Label, false); + ret.AddItem(C_sList_ConstantDetails, C_sList_ConstantDetails_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +void +HF_IdlConstGroup::produce_MemberDetails( HF_SubTitleTable & o_table, + const client & i_ce ) const +{ + HF_IdlConstant + aElement( Env(), o_table ); + aElement.Produce_byData(i_ce); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_constgroup.hxx b/autodoc/source/display/idl/hfi_constgroup.hxx new file mode 100644 index 000000000000..044f8925ed01 --- /dev/null +++ b/autodoc/source/display/idl/hfi_constgroup.hxx @@ -0,0 +1,68 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_CONSTGROUP_HXX +#define ADC_DISPLAY_HFI_CONSTGROUP_HXX + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + +class HF_IdlConstGroup : public HtmlFactory_Idl +{ + public: + HF_IdlConstGroup( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlConstGroup(); + + void Produce_byData( + const client & ce ) const; + private: + HF_NaviSubRow & make_Navibar( + const client & ce ) const; + virtual void produce_MemberDetails( + HF_SubTitleTable & o_table, + const client & ce ) const; +}; + + + +// IMPLEMENTATION + + +extern const String + C_sCePrefix_Constants; + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_doc.cxx b/autodoc/source/display/idl/hfi_doc.cxx new file mode 100644 index 000000000000..c379021a845e --- /dev/null +++ b/autodoc/source/display/idl/hfi_doc.cxx @@ -0,0 +1,194 @@ +/* -*- 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 "hfi_doc.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/doc/d_oldidldocu.hxx> +#include <ary_i/d_token.hxx> +#include <toolkit/hf_docentry.hxx> +#include "hfi_tag.hxx" +#include "hi_ary.hxx" + + + + +HF_IdlDocu::HF_IdlDocu( Environment & io_rEnv, + HF_DocEntryList & o_rOut ) + : HtmlFactory_Idl( io_rEnv, &o_rOut.CurOut() ), + rOut(o_rOut) +{ +} + +HF_IdlDocu::~HF_IdlDocu() +{ +} + +void +HF_IdlDocu::Produce_fromCodeEntity( const client & i_ce ) const +{ + const ce_info * + i_pDocu = Get_IdlDocu(i_ce.Docu()); + if (i_pDocu != 0) + Produce_byDocuAndScope(*i_pDocu, &i_ce, i_ce); +} + +void +HF_IdlDocu::Produce_fromReference( const ce_info & i_rDocuForReference, + const client & i_rScopeGivingCe ) const +{ + Produce_byDocuAndScope(i_rDocuForReference, 0, i_rScopeGivingCe ); +} + +void +HF_IdlDocu::Produce_byDocuAndScope( const ce_info & i_rDocu, + const client * i_pClient, + const client & i_rScopeGivingCe ) const +{ + bool bShort = NOT i_rDocu.Short().IsEmpty(); + bool bDescr = NOT i_rDocu.Description().IsEmpty(); + + if ( i_rDocu.IsDeprecated() + OR ( + (i_pClient != 0 ? i_pClient->SightLevel() == ary::idl::sl_File : false) + AND NOT i_rDocu.IsPublished() + ) + OR i_rDocu.IsOptional() ) + { // any usage restriction + rOut.Produce_Term("Usage Restrictions"); + + if ( i_rDocu.IsDeprecated() ) + rOut.Produce_Definition() >> *new Html::Italic << "deprecated"; + if ( (i_pClient != 0 ? i_pClient->SightLevel() == ary::idl::sl_File : false) + AND NOT i_rDocu.IsPublished() ) + rOut.Produce_Definition() >> *new Html::Italic << "not published"; + if ( i_rDocu.IsOptional() ) + rOut.Produce_Definition() >> *new Html::Italic << "optional"; + + if ( i_rDocu.IsDeprecated() AND + // KORR_FUTURE + // Workaround, because DocuTex2::IsEmpty() does not + // calculate whitespace tokens only as empty. + i_rDocu.DeprecatedText().Tokens().size() > 1 ) + { + rOut.Produce_Term("Deprecation Info"); + + HF_IdlDocuTextDisplay + aDescription( Env(), 0, i_rScopeGivingCe); + aDescription.Out().Enter( rOut.Produce_Definition() ); + i_rDocu.DeprecatedText().DisplayAt( aDescription ); + aDescription.Out().Leave(); + } + } // end if (<any usage restriction>) + + if ( bShort OR bDescr ) + { + rOut.Produce_Term("Description"); + HF_IdlDocuTextDisplay + aDescription( Env(), 0, i_rScopeGivingCe); + if (bShort) + { + aDescription.Out().Enter( rOut.Produce_Definition() ); + i_rDocu.Short().DisplayAt( aDescription ); + aDescription.Out().Leave(); + } + if (bDescr) + { + aDescription.Out().Enter( rOut.Produce_Definition() ); + i_rDocu.Description().DisplayAt( aDescription ); + aDescription.Out().Leave(); + } + } + + std::vector< csi::dsapi::DT_SeeAlsoAtTag* > + aSeeAlsosWithoutText; + std::vector< csi::dsapi::DT_SeeAlsoAtTag* > + aSeeAlsosWithText; + + for ( std::vector< ary::inf::AtTag2* >::const_iterator + iter = i_rDocu.Tags().begin(); + iter != i_rDocu.Tags().end(); + ++iter ) + { + csi::dsapi::DT_SeeAlsoAtTag* + pSeeAlso = dynamic_cast< csi::dsapi::DT_SeeAlsoAtTag * >(*iter); + if (pSeeAlso != 0 ) + { + if ( pSeeAlso->Text().IsEmpty() ) + { + aSeeAlsosWithoutText.push_back(pSeeAlso); + } + else + { + aSeeAlsosWithText.push_back(pSeeAlso); + } + continue; + } + + if ( strlen( (*iter)->Title() ) > 0 ) + { + HF_IdlTag + aTag(Env(), i_rScopeGivingCe); + Xml::Element & + rTerm = rOut.Produce_Term(); + aTag.Produce_byData( rTerm, + rOut.Produce_Definition(), + *(*iter) ); + } + } // end for + + if (aSeeAlsosWithoutText.size() > 0) + { + HF_IdlTag + aSeeAlsoTag(Env(), i_rScopeGivingCe); + Xml::Element & + rTerm = rOut.Produce_Term(); + aSeeAlsoTag.Produce_byData( rTerm, + rOut.Produce_Definition(), + aSeeAlsosWithoutText ); + } + + for ( std::vector< csi::dsapi::DT_SeeAlsoAtTag* >::const_iterator + itSee2 = aSeeAlsosWithText.begin(); + itSee2 != aSeeAlsosWithText.end(); + ++itSee2 ) + { + HF_IdlTag + aTag(Env(), i_rScopeGivingCe); + Xml::Element & + rTerm = rOut.Produce_Term(); + aTag.Produce_byData( rTerm, + rOut.Produce_Definition(), + *(*itSee2) ); + } // end for +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_doc.hxx b/autodoc/source/display/idl/hfi_doc.hxx new file mode 100644 index 000000000000..c27e9708b485 --- /dev/null +++ b/autodoc/source/display/idl/hfi_doc.hxx @@ -0,0 +1,88 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_DOC_HXX +#define ADC_DISPLAY_HFI_DOC_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + + +class HF_DocEntryList; + + +class HF_IdlDocu : public HtmlFactory_Idl +{ + public: + HF_IdlDocu( + Environment & io_rEnv, + HF_DocEntryList & o_rOut ); + virtual ~HF_IdlDocu(); + + + /** Produces documentation by the CodeInfo accompanying + ->i_ce. + */ + void Produce_fromCodeEntity( + const client & i_ce ) const; + + /** Produces documentation by the CodeInfo accompanying + a link or reference to a CodeEntity. + + @param i_rScopeGivingCe + Gives the scope from which links are to be calculated. + */ + void Produce_fromReference( + const ce_info & i_rDocuForReference, + const client & i_rScopeGivingCe ) const; + + private: + // Locals + /** Produces documentation. + + @param i_rScopeGivingCe + Gives the scope from which links are to be calculated. + */ + void Produce_byDocuAndScope( + const ce_info & i_rDocu, + const client * i_pClient, /// May be 0. + const client & i_rScopeGivingCe ) const; + + // DATA + HF_DocEntryList & rOut; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_enum.cxx b/autodoc/source/display/idl/hfi_enum.cxx new file mode 100644 index 000000000000..18f97880bc7f --- /dev/null +++ b/autodoc/source/display/idl/hfi_enum.cxx @@ -0,0 +1,136 @@ +/* -*- 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 "hfi_enum.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_enum.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_property.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sCePrefix_Enum("enum"); + +namespace +{ + +const String + C_sList_Values("Values"); +const String + C_sList_Values_Label("Values"); +const String + C_sList_ValueDetails("Values' Details"); +const String + C_sList_ValueDetails_Label("ValueDetails"); + +enum E_SubListIndices +{ + sli_ValuesSummary = 0, + sli_ValueDetails = 1 +}; + +} // anonymous namespace + +HF_IdlEnum::HF_IdlEnum( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlEnum::~HF_IdlEnum() +{ +} + +void +HF_IdlEnum::Produce_byData( const client & i_ce ) const +{ + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Enum, i_ce); + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + dyn_ce_list + dpValues; + ary::idl::ifc_enum::attr::Get_Values(dpValues, i_ce); + if ( (*dpValues).operator bool() ) + { + produce_Members( *dpValues, + C_sList_Values, + C_sList_Values_Label, + C_sList_ValueDetails, + C_sList_ValueDetails_Label ); + pNaviSubRow->SwitchOn(sli_ValuesSummary); + pNaviSubRow->SwitchOn(sli_ValueDetails); + } + pNaviSubRow->Produce_Row(); +} + +HF_NaviSubRow & +HF_IdlEnum::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce); + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + ret.AddItem(C_sList_Values, C_sList_Values_Label, false); + ret.AddItem(C_sList_ValueDetails, C_sList_ValueDetails_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +void +HF_IdlEnum::produce_MemberDetails( HF_SubTitleTable & o_table, + const client & i_ce) const +{ + HF_IdlEnumValue + aElement( Env(), o_table ); + aElement.Produce_byData(i_ce); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_enum.hxx b/autodoc/source/display/idl/hfi_enum.hxx new file mode 100644 index 000000000000..1f92b983a4ba --- /dev/null +++ b/autodoc/source/display/idl/hfi_enum.hxx @@ -0,0 +1,70 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_ENUM_HXX +#define ADC_DISPLAY_HFI_ENUM_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + + +class HF_IdlEnum : public HtmlFactory_Idl +{ + public: + HF_IdlEnum( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlEnum(); + + void Produce_byData( + const client & ce ) const; + private: + HF_NaviSubRow & make_Navibar( + const client & ce ) const; + virtual void produce_MemberDetails( + HF_SubTitleTable & o_table, + const client & ce ) const; +}; + + + +// IMPLEMENTATION + + +extern const String + C_sCePrefix_Enum; + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_globalindex.cxx b/autodoc/source/display/idl/hfi_globalindex.cxx new file mode 100644 index 000000000000..dc0766b665b8 --- /dev/null +++ b/autodoc/source/display/idl/hfi_globalindex.cxx @@ -0,0 +1,278 @@ +/* -*- 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 "hfi_globalindex.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <cosv/tpl/tpltools.hxx> +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_types4idl.hxx> +#include <ary/idl/i_module.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + + + +namespace +{ + +/** +*/ +enum E_Types +{ + t_service = 0, + t_interface = 1, + t_struct = 2, + t_exception = 3, + t_enum = 4, + t_typedef = 5, + t_constantsgroup = 6, + t_property = 7, + t_function = 8, + t_structelement = 9, + t_enumvalue = 10, + t_constant = 11, + t_module = 12, + t_singleton = 13, + t_attribute = 14, + t_siservice = 15, + t_sisingleton = 16, + t_MAX +}; + +String G_sDummy; + + +/* RC-Ids for IDL types (see reposy.cxx): + + Module 2000 + Interface 2001 + Function 2002 + Service 2003 + Property 2004 + + Enum 2005 + EnumValue 2006 + Typedef 2007 + Struct 2008 + StructElement 2009 + + Exception 2010 + ConstantGroup 2011 + Constant 2012 + Singleton 2013 + Attribute 2014 + SglIfcService 2015 + SglIfcSingleton 2016 +*/ +const int C_nNumberOfIdlTypes = 17; +const char * C_sTypeNames[C_nNumberOfIdlTypes] = + { "module ", "interface ", "function ", "service ", "property ", + "enum ", "value ", "typedef ", "struct ", "field ", + "exception ", "constants group ", "constant ","singleton ", "attribute ", + "service", "singleton" + }; +const char * C_sOwnerNames[C_nNumberOfIdlTypes] = + { "module ", "module ", "interface ", "module ", "service ", + "module ", "enum ", "module ", "module ", "", // could be struct or exception + "module ", "module ", "constants group ", "module ", "interface ", + "module", "module" + }; +const intt C_nNamesArrayOffset = intt(ary::idl::Module::class_id); +const int C_nIxField = 9; + + + + +const char C_cAlphabet[] = +"<a class=\"inverse\" href=\"index-1.html\"><B>A</B></a> <a class=\"inverse\" href=\"index-2.html\"><B>B</B></a> <a class=\"inverse\" href=\"index-3.html\"><B>C</B></a> <a class=\"inverse\" href=\"index-4.html\"><B>D</B></a> <a class=\"inverse\" href=\"index-5.html\"><B>E</B></a> " +"<a class=\"inverse\" href=\"index-6.html\"><B>F</B></a> <a class=\"inverse\" href=\"index-7.html\"><B>G</B></a> <a class=\"inverse\" href=\"index-8.html\"><B>H</B></a> <a class=\"inverse\" href=\"index-9.html\"><B>I</B></a> <a class=\"inverse\" href=\"index-10.html\"><B>J</B></a> " +"<a class=\"inverse\" href=\"index-11.html\"><B>K</B></a> <a class=\"inverse\" href=\"index-12.html\"><B>L</B></a> <a class=\"inverse\" href=\"index-13.html\"><B>M</B></a> <a class=\"inverse\" href=\"index-14.html\"><B>N</B></a> <a class=\"inverse\" href=\"index-15.html\"><B>O</B></a> " +"<a class=\"inverse\" href=\"index-16.html\"><B>P</B></a> <a class=\"inverse\" href=\"index-17.html\"><B>Q</B></a> <a class=\"inverse\" href=\"index-18.html\"><B>R</B></a> <a class=\"inverse\" href=\"index-19.html\"><B>S</B></a> <a class=\"inverse\" href=\"index-20.html\"><B>T</B></a> " +"<a class=\"inverse\" href=\"index-21.html\"><B>U</B></a> <a class=\"inverse\" href=\"index-22.html\"><B>V</B></a> <a class=\"inverse\" href=\"index-23.html\"><B>W</B></a> <a class=\"inverse\" href=\"index-24.html\"><B>X</B></a> <a class=\"inverse\" href=\"index-25.html\"><B>Y</B></a> " +"<a class=\"inverse\" href=\"index-26.html\"><B>Z</B></a>"; + + + +HF_IdlGlobalIndex::PageData G_PageData; + +} // end anonymous namespace + + +inline void +HF_IdlGlobalIndex::write_EntryItself( Xml::Element & o_destination, + const ary::idl::CodeEntity & i_ce, + const HF_IdlTypeText & i_typeLinkWriter ) const +{ + i_typeLinkWriter.Produce_IndexLink(o_destination, i_ce); + o_destination << " - "; +} + + +HF_IdlGlobalIndex::HF_IdlGlobalIndex( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlGlobalIndex::~HF_IdlGlobalIndex() +{ +} + +void +HF_IdlGlobalIndex::Produce_Page(ary::idl::alphabetical_index::E_Letter i_letter) const +{ + make_Navibar(); + + HF_TitleTable + aTitle(CurOut()); + StreamLock sl(100); + aTitle.Produce_Title( sl() + << "Global Index " + << ( i_letter != ary::idl::alphabetical_index::non_alpha + ? char(int(i_letter)-'a'+'A') + : '_' ) + << c_str ); + + // Letters Index + aTitle.Add_Row() + << new Xml::XmlCode( + "<p align=\"center\"><a href=\"index-1.html\"><b>A</b></a> <a href=\"index-2.html\"><b>B</b></a> <a href=\"index-3.html\"><b>C</b></a> <a href=\"index-4.html\"><b>D</b></a> <a href=\"index-5.html\"><b>E</b></a> <a href=\"index-6.html\"><b>F</b></a> <a href=\"index-7.html\"><b>G</b></a> <a href=\"index-8.html\"><b>H</b></a> <a href=\"index-9.html\"><b>I</b></a> <a href=\"index-10.html\"><b>J</b></a>" + " <a href=\"index-11.html\"><b>K</b></a> <a href=\"index-12.html\"><b>L</b></a> <a href=\"index-13.html\"><b>M</b></a> <a href=\"index-14.html\"><b>N</b></a> <a href=\"index-15.html\"><b>O</b></a> <a href=\"index-16.html\"><b>P</b></a> <a href=\"index-17.html\"><b>Q</b></a> <a href=\"index-18.html\"><b>R</b></a> <a href=\"index-19.html\"><b>S</b></a> <a href=\"index-20.html\"><b>T</b></a>" + " <a href=\"index-21.html\"><b>U</b></a> <a href=\"index-22.html\"><b>V</b></a> <a href=\"index-23.html\"><b>W</b></a> <a href=\"index-24.html\"><b>X</b></a> <a href=\"index-25.html\"><b>Y</b></a> <a href=\"index-26.html\"><b>Z</b></a> <a href=\"index-27.html\"><b>_</b></a></p>" ); + + Out().Enter(CurOut() >> *new Html::DefList); + + csv::erase_container(G_PageData); + Env().Data().Get_IndexData(G_PageData, i_letter); + + // Helper object to produce links to the index Entries. + HF_IdlTypeText aTypeLinkWriter(Env(),HF_IdlTypeText::use_for_javacompatible_index); + + PageData::const_iterator itEnd = G_PageData.end(); + for ( PageData::const_iterator iter = G_PageData.begin(); + iter != itEnd; + ++iter ) + { + produce_Line(iter, aTypeLinkWriter); + } // end for + + Out().Leave(); + CurOut() << new Html::HorizontalLine; +} + +void +HF_IdlGlobalIndex::make_Navibar() const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_IndexMainRow(); + + CurOut() << new Html::HorizontalLine(); +} + +void +HF_IdlGlobalIndex::produce_Line( PageData::const_iterator i_entry, + const HF_IdlTypeText & i_typeLinkWriter) const +{ + const client & + rCe = Env().Data().Find_Ce(*i_entry); + if (NOT rCe.Owner().IsValid()) + return; // Omit global namespace. + + // The destination for the created output: + Xml::Element & rDT = CurOut() >> *new Html::DefListTerm; + + /** The following code is intended to produce an output that + will be recognized by the context help system of Forte. + That is reached by making it similar to the indices, that + Javadoc produces. + If the link to the Entry contains a hashmark, the Forte-Help + requires following a link to the owner. + But if there is no hashmark, the following link must go to + the same Entry again. Doesn't make really sense :-(, but that's + like it is. + */ + write_EntryItself(rDT,rCe,i_typeLinkWriter); + if (rCe.SightLevel() == ary::idl::sl_Member) + write_OwnerOfEntry(rDT,rCe,i_typeLinkWriter); + else + write_EntrySecondTime(rDT,rCe,i_typeLinkWriter); + + // This produces an empty "<dd></dd>", which is also needed to reach + // similarity to the Javadoc index: + CurOut() << new Html::DefListDefinition; +} + +void +HF_IdlGlobalIndex::write_OwnerOfEntry( Xml::Element & o_destination, + const ary::idl::CodeEntity & i_ce, + const HF_IdlTypeText & i_typeLinkWriter ) const +{ + const client & + rOwner = Env().Data().Find_Ce(i_ce.Owner()); + + int nIx = int(i_ce.AryClass() - C_nNamesArrayOffset); + csv_assert(csv::in_range(0,nIx,C_nNumberOfIdlTypes)); + + o_destination << C_sTypeNames[nIx] + << "in "; + if (nIx != C_nIxField) + { + o_destination << C_sOwnerNames[nIx]; + } + else + { + uintt + nOwnerIx = rOwner.AryClass() - C_nNamesArrayOffset; + csv_assert( + nOwnerIx < static_cast< unsigned int >(C_nNumberOfIdlTypes)); + o_destination << C_sTypeNames[nOwnerIx]; + } + i_typeLinkWriter.Produce_IndexOwnerLink(o_destination, rOwner); +} + +void +HF_IdlGlobalIndex::write_EntrySecondTime( Xml::Element & o_destination, + const ary::idl::CodeEntity & i_ce, + const HF_IdlTypeText & i_typeLinkWriter ) const +{ + int nIx = int(i_ce.AryClass() - C_nNamesArrayOffset); + csv_assert(csv::in_range(0,nIx,C_nNumberOfIdlTypes)); + + o_destination << C_sTypeNames[nIx] + << " "; + i_typeLinkWriter.Produce_IndexSecondEntryLink(o_destination, i_ce); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_globalindex.hxx b/autodoc/source/display/idl/hfi_globalindex.hxx new file mode 100644 index 000000000000..fe1c254b47f6 --- /dev/null +++ b/autodoc/source/display/idl/hfi_globalindex.hxx @@ -0,0 +1,91 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_GLOBALINDEX_HXX +#define ADC_DISPLAY_HFI_GLOBALINDEX_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_gate.hxx> + + +class HF_IdlTypeText; + +class HF_IdlGlobalIndex : public HtmlFactory_Idl +{ + public: + typedef std::vector<ary::idl::Ce_id> PageData; + + HF_IdlGlobalIndex( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlGlobalIndex(); + + void Produce_Page( + ary::idl::alphabetical_index::E_Letter + i_letter ) const; + private: + void make_Navibar() const; /// Called by @->Produce_Page() + void produce_Line( /// Called by @->Produce_Page() + PageData::const_iterator + i_entry, + const HF_IdlTypeText & + i_typeLinkWriter ) const; + + void write_EntryItself( /// Called by @->produceLine() + Xml::Element & o_destination, + const ary::idl::CodeEntity & + i_entry, + const HF_IdlTypeText & + i_typeLinkWriter ) const; + + void write_OwnerOfEntry( /// Called by @->produceLine() + Xml::Element & o_destination, + const ary::idl::CodeEntity & + i_entry, + const HF_IdlTypeText & + i_typeLinkWriter ) const; + + void write_EntrySecondTime( /// Called by @->produceLine() + Xml::Element & o_destination, + const ary::idl::CodeEntity & + i_entry, + const HF_IdlTypeText & + i_typeLinkWriter ) const; +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_hierarchy.cxx b/autodoc/source/display/idl/hfi_hierarchy.cxx new file mode 100644 index 000000000000..c968b9d2c8d4 --- /dev/null +++ b/autodoc/source/display/idl/hfi_hierarchy.cxx @@ -0,0 +1,205 @@ +/* -*- 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 "hfi_hierarchy.hxx" + + +// NOT FULLY DECLARED SERVICES +#include <udm/html/htmlitem.hxx> +#include <ary/stdconstiter.hxx> +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_gate.hxx> +#include <ary/idl/i_type.hxx> +#include <ary/idl/ik_interface.hxx> +#include <ary/idl/ip_ce.hxx> +#include <ary/idl/ip_type.hxx> +#include "hfi_interface.hxx" +#include "hfi_typetext.hxx" +#include "hi_env.hxx" + + + +HF_IdlBaseNode::HF_IdlBaseNode( const TYPE & i_rType, + const GATE & i_rGate, + intt i_nPositionOffset, + HF_IdlBaseNode & io_rDerived ) + : nType(i_rType.TypeId()), + aBases(), + nCountBases(0), + nPosition(i_nPositionOffset), + pDerived(&io_rDerived) +{ + Ce_id nCe = i_rGate.Types().Search_CeRelatedTo(nType); + if (nCe.IsValid()) + { + GatherBases(i_rGate.Ces().Find_Ce(nCe), i_rGate); + } +} + +HF_IdlBaseNode::~HF_IdlBaseNode() +{ +} + +void +HF_IdlBaseNode::FillPositionList( std::vector< const HF_IdlBaseNode* > & o_rPositionList ) const +{ + for ( BaseList::const_iterator it = aBases.begin(); + it != aBases.end(); + ++it ) + { + (*it)->FillPositionList(o_rPositionList); + } // end for + + o_rPositionList.push_back(this); +} + +void +HF_IdlBaseNode::GatherBases( const CE & i_rCe, + const GATE & i_rGate ) +{ + ary::Dyn_StdConstIterator<ary::idl::CommentedRelation> + aHelp; + ary::idl::ifc_interface::attr::Get_Bases(aHelp,i_rCe); + + for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *aHelp; + it.operator bool(); + ++it ) + { + const TYPE & + rBaseType = i_rGate.Types().Find_Type((*it).Type()); + + Dyn<HF_IdlBaseNode> + pBaseNode( new HF_IdlBaseNode( rBaseType, + i_rGate, + nPosition, + *this ) + ); + + intt nAddedBases = pBaseNode->BaseCount() + 1; + nCountBases += nAddedBases; + nPosition += nAddedBases; + aBases.push_back( pBaseNode.Release() ); + } // end for +} + + +void +Write_BaseHierarchy( csi::xml::Element & o_rOut, + HtmlEnvironment_Idl & i_env, + const ary::idl::CodeEntity & i_ce ) +{ + csi::xml::Element & + rPre = o_rOut + >> *new csi::xml::AnElement("pre") + << new csi::html::StyleAttr("font-family:monospace;"); + + std::vector<uintt> + aSetColumns; + rPre + >> *new csi::html::Strong + << i_ce.LocalName(); + rPre + << "\n"; + Write_Bases( rPre, + i_env, + i_ce, + aSetColumns ); + rPre + << "\n"; + +} + + +void +Write_Bases( csi::xml::Element & o_out, + HtmlEnvironment_Idl & i_env, + const ary::idl::CodeEntity & i_rCe, + std::vector<uintt> & io_setColumns ) +{ + ary::Dyn_StdConstIterator<ary::idl::CommentedRelation> + aHelp; + ary::idl::ifc_interface::attr::Get_Bases(aHelp,i_rCe); + + for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *aHelp; + it.operator bool(); + // NO INCREMENT HERE, see below + ) + { + ary::idl::Type_id + nType = (*it).Type(); + ++it; + bool + bThereComesMore = it.operator bool(); + + ary::idl::Ce_id + nCe = i_env.Gate().Types().Search_CeRelatedTo(nType); + if (nCe.IsValid()) + { + // KORR_FUTURE + // Rather check for id(!) of com::sun::star::uno::XInterface. + if (i_env.Gate().Ces().Find_Ce(nCe).LocalName() == "XInterface") + continue; + } + + for (uintt i = 0; i < io_setColumns.size(); ++i) + { + if (io_setColumns[i] == 1) + o_out << new csi::xml::XmlCode("┃"); + else + o_out << " "; + o_out << " "; + } + + if (bThereComesMore) + o_out << new csi::xml::XmlCode("┣"); + else + o_out << new csi::xml::XmlCode("┗"); + o_out << " "; + + HF_IdlTypeText + aDisplay( i_env, o_out, true, i_env.CurPageCe()); + aDisplay.Produce_byData(nType); + o_out << "\n"; + + if (nCe.IsValid()) + { + io_setColumns.push_back(bThereComesMore ? 1 : 0); + + const ary::idl::CodeEntity & + rCe = i_env.Gate().Ces().Find_Ce(nCe); + Write_Bases( o_out, + i_env, + rCe, + io_setColumns ); + io_setColumns.pop_back(); + } + } // end for +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_hierarchy.hxx b/autodoc/source/display/idl/hfi_hierarchy.hxx new file mode 100644 index 000000000000..1da58b14cf0c --- /dev/null +++ b/autodoc/source/display/idl/hfi_hierarchy.hxx @@ -0,0 +1,127 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_HIERARCHY_HXX +#define ADC_DISPLAY_HFI_HIERARCHY_HXX + +// USED SERVICES + // BASE CLASSES + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_comrela.hxx> +#include <ary/idl/i_types4idl.hxx> + + +namespace csi +{ +namespace xml +{ + class Element; +} +} + + +class HF_IdlInterface; +class HtmlEnvironment_Idl; + + + +/** Represents a node in an pyramidic inheritance hierarchy which shall be + displayed in text mode. +*/ +class HF_IdlBaseNode +{ + public: + typedef ary::idl::CodeEntity CE; + typedef ary::idl::Type TYPE; + typedef ary::idl::Gate GATE; + typedef ary::idl::Ce_id Ce_id; + typedef ary::idl::Type_id Type_id; + + /** @descr + The constructor recursively calls further constructors of + HF_IdlBaseNode for the bases of ->i_rType, if ->i_rType matches to a + ->CE. + So it builds up a complete hierarchy tree of all base classes + of ->i_pEntity. + */ + HF_IdlBaseNode( + const TYPE & i_rType, + const GATE & i_rGate, + intt i_nPositionOffset, + HF_IdlBaseNode & io_rDerived ); + ~HF_IdlBaseNode(); + + /** Recursively fills ->o_rPositionList with the instances of base + classes in the order in which they will be displayed. + */ + void FillPositionList( + std::vector< const HF_IdlBaseNode* > & + o_rPositionList ) const; + + Type_id Type() const { return nType; } + intt BaseCount() const { return nCountBases; } + intt Position() const { return nPosition; } + int Xpos() const { return 3*Position(); } + int Ypos() const { return 2*Position(); } + const HF_IdlBaseNode * Derived() const { return pDerived; } + + private: + typedef std::vector< DYN HF_IdlBaseNode* > BaseList; + + void GatherBases( + const CE & i_rCe, + const GATE & i_rGate ); + + // DATA + Type_id nType; + BaseList aBases; + intt nCountBases; + intt nPosition; + HF_IdlBaseNode * pDerived; +}; + +void Write_BaseHierarchy( + csi::xml::Element & o_rOut, + HtmlEnvironment_Idl & + i_env, + const ary::idl::CodeEntity & + i_rCe ); + +void Write_Bases( + csi::xml::Element & o_rOut, + HtmlEnvironment_Idl & + i_env, + const ary::idl::CodeEntity & + i_rCe, + std::vector<uintt> & + io_setColumns ); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_interface.cxx b/autodoc/source/display/idl/hfi_interface.cxx new file mode 100644 index 000000000000..d5e35a5e2a83 --- /dev/null +++ b/autodoc/source/display/idl/hfi_interface.cxx @@ -0,0 +1,360 @@ +/* -*- 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 "hfi_interface.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_gate.hxx> +#include <ary/idl/ik_function.hxx> +#include <ary/idl/ik_interface.hxx> +#include <ary/idl/ip_ce.hxx> +#include <ary/idl/ip_type.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_doc.hxx" +#include "hfi_hierarchy.hxx" +#include "hfi_method.hxx" +#include "hfi_navibar.hxx" +#include "hfi_property.hxx" +#include "hfi_tag.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sCePrefix_Interface("interface"); + +namespace +{ + +const String + C_sBaseInterface("Base Interfaces"); +const String + C_sList_BaseComments("Comments on Base Interfaces"); +const String + C_sList_Methods("Methods' Summary"); +const String + C_sList_Methods_Label("MethodsSummary"); +const String + C_sDetails_Methods("Methods' Details"); +const String + C_sDetails_Methods_Label("MethodsDetails"); + +const String + C_sList_Attributes("Attributes' Summary"); +const String + C_sList_Attributes_Label("AttributesSummary"); +const String + C_sList_AttributesDetails("Attributes' Details"); +const String + C_sList_AttributesDetails_Label("AttributesDetails"); + + + +enum E_SubListIndices +{ + sli_MethodsSummay = 0, + sli_AttributesSummary = 1, + sli_MethodDetails = 2, + sli_AttributesDetails = 3 +}; + +} //anonymous namespace + + + + +HF_IdlInterface::HF_IdlInterface( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut), + eCurProducedMembers(mem_none) +{ +} + +HF_IdlInterface::~HF_IdlInterface() +{ +} + +void +HF_IdlInterface::Produce_byData( const client & i_ce ) const +{ + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + + produce_Title(aTitle, C_sCePrefix_Interface, i_ce); + + produce_BaseHierarchy( aTitle.Add_Row(), + i_ce, + C_sBaseInterface ); + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + dyn_ce_list dpFunctions; + ary::idl::ifc_interface::attr::Get_Functions(dpFunctions, i_ce); + if ( (*dpFunctions).operator bool() ) + { + eCurProducedMembers = mem_Functions; + + produce_Members( *dpFunctions, + C_sList_Methods, + C_sList_Methods_Label, + C_sDetails_Methods, + C_sDetails_Methods_Label, + HtmlFactory_Idl::viewtype_summary ); + pNaviSubRow->SwitchOn(sli_MethodsSummay); + } + + dyn_ce_list + dpAttributes; + ary::idl::ifc_interface::attr::Get_Attributes(dpAttributes, i_ce); + if ( (*dpAttributes).operator bool() ) + { + eCurProducedMembers = mem_Attributes; + + produce_Members( *dpAttributes, + C_sList_Attributes, + C_sList_Attributes_Label, + C_sList_AttributesDetails, + C_sList_AttributesDetails_Label, + HtmlFactory_Idl::viewtype_summary ); + pNaviSubRow->SwitchOn(sli_AttributesSummary); + } + + ary::idl::ifc_interface::attr::Get_Functions(dpFunctions, i_ce); + if ( (*dpFunctions).operator bool() ) + { + eCurProducedMembers = mem_Functions; + + produce_Members( *dpFunctions, + C_sList_Methods, + C_sList_Methods_Label, + C_sDetails_Methods, + C_sDetails_Methods_Label, + HtmlFactory_Idl::viewtype_details ); + pNaviSubRow->SwitchOn(sli_MethodDetails); + } + + ary::idl::ifc_interface::attr::Get_Attributes(dpAttributes, i_ce); + if ( (*dpAttributes).operator bool() ) + { + eCurProducedMembers = mem_Attributes; + + produce_Members( *dpAttributes, + C_sList_Attributes, + C_sList_Attributes_Label, + C_sList_AttributesDetails, + C_sList_AttributesDetails_Label, + HtmlFactory_Idl::viewtype_details ); + pNaviSubRow->SwitchOn(sli_AttributesDetails); + } + + eCurProducedMembers = mem_none; + + pNaviSubRow->Produce_Row(); +} + +DYN HF_NaviSubRow & +HF_IdlInterface::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce); + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + ret.AddItem(C_sList_Methods, C_sList_Methods_Label, false); + ret.AddItem(C_sList_Attributes, C_sList_Attributes_Label, false); + ret.AddItem(C_sDetails_Methods, C_sDetails_Methods_Label, false); + ret.AddItem(C_sList_AttributesDetails, C_sList_AttributesDetails_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +void +HF_IdlInterface::produce_MemberDetails( HF_SubTitleTable & o_table, + const client & i_ce ) const +{ + switch (eCurProducedMembers) + { + case mem_Functions: + break; + case mem_Attributes: + { + HF_IdlAttribute + aAttribute( Env(), o_table); + aAttribute.Produce_byData( i_ce ); + return; + }; + default: //Won't happen. + return; + } // end switch + + typedef ary::idl::ifc_function::attr funcAttr; + + HF_IdlMethod + aFunction( Env(), + o_table.Add_Row() + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_MDetail) ); + + ary::Dyn_StdConstIterator<ary::idl::Parameter> + pParameters; + funcAttr::Get_Parameters(pParameters, i_ce); + + ary::Dyn_StdConstIterator<ary::idl::Type_id> + pExceptions; + funcAttr::Get_Exceptions(pExceptions, i_ce); + + aFunction.Produce_byData( i_ce.LocalName(), + funcAttr::ReturnType(i_ce), + *pParameters, + *pExceptions, + funcAttr::IsOneway(i_ce), + funcAttr::HasEllipse(i_ce), + i_ce ); +} + +void +HF_IdlInterface::produce_BaseHierarchy( Xml::Element & o_screen, + const client & i_ce, + const String & i_sLabel ) const +{ + ary::Dyn_StdConstIterator<ary::idl::CommentedRelation> + pHelp; + ary::idl::ifc_interface::attr::Get_Bases(pHelp, i_ce); + if (NOT (*pHelp).operator bool()) + return; + + // Check for XInterface as only base: + ary::StdConstIterator<ary::idl::CommentedRelation> & + itTest = *pHelp; + ary::idl::Ce_id + nCe = Env().Gate().Types().Search_CeRelatedTo((*itTest).Type()); + if (nCe.IsValid()) + { + // KORR_FUTURE + // Rather check for id(!) of com::sun::star::uno::XInterface. + if (Env().Gate().Ces().Find_Ce(nCe).LocalName() == "XInterface") + { + ++itTest; + if (NOT itTest.operator bool()) + return; + } + } + + // Write hierarchy: + + HF_DocEntryList + aDocList( o_screen ); + aDocList.Produce_Term(i_sLabel); + Xml::Element & + rBaseList = aDocList.Produce_Definition(); + +// NEW + Write_BaseHierarchy(rBaseList, Env(), i_ce); + + // Write comments: + // KORR_FUTURE: Make sure, no empty table is constructed when comments list is empty. + HF_SubTitleTable + aBaseTable( aDocList.Produce_Definition(), + "", + C_sList_BaseComments, + 2, + HF_SubTitleTable::sublevel_3 ); + + ary::Dyn_StdConstIterator<ary::idl::CommentedRelation> + pBases; + ary::idl::ifc_interface::attr::Get_Bases(pBases, i_ce); + for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *pBases; + it.operator bool(); + ++it ) + { + Xml::Element & + rRow = aBaseTable.Add_Row(); + + Xml::Element & + rTerm = rRow + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_SummaryLeft); + HF_IdlTypeText + aTypeDisplay( Env(), rTerm, false, 0); + aTypeDisplay.Produce_byData((*it).Type()); + + Xml::Element & + rDocu = rRow + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_SummaryRight); + + HF_DocEntryList + aDocuList(rDocu); + + if ((*it).Info() != 0) + { +// aDocuList.Produce_Term("Comment on Base Reference"); + + HF_IdlDocu + aDocuDisplay(Env(), aDocuList); + aDocuDisplay.Produce_fromReference(*(*it).Info(), i_ce); + } + else + { + const client * + pCe = Env().Linker().Search_CeFromType((*it).Type()); + const ce_info * + pShort = pCe != 0 + ? Get_IdlDocu(pCe->Docu()) + : (const ce_info *)(0); + if ( pShort != 0 ) + { + aDocuList.Produce_NormalTerm("(referenced interface's summary:)"); + + Xml::Element & + rDef = aDocuList.Produce_Definition(); + HF_IdlDocuTextDisplay + aShortDisplay( Env(), &rDef, *pCe); + pShort->Short().DisplayAt(aShortDisplay); + } // end if (pShort != 0) + } // endif ( (*i_commentedRef).Info() != 0 ) else + } // end for +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_interface.hxx b/autodoc/source/display/idl/hfi_interface.hxx new file mode 100644 index 000000000000..5566649381da --- /dev/null +++ b/autodoc/source/display/idl/hfi_interface.hxx @@ -0,0 +1,93 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_INTERFACE_HXX +#define ADC_DISPLAY_HFI_INTERFACE_HXX + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_types4idl.hxx> +#include <ary/doc/d_oldidldocu.hxx> + + +class HF_NaviSubRow; +class HF_SubTitleTable; +class HF_IdlBaseNode; + +class HF_IdlInterface : public HtmlFactory_Idl +{ + public: + HF_IdlInterface( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlInterface(); + + void Produce_byData( + const client & i_ce ) const; + private: + // Locals + DYN HF_NaviSubRow & make_Navibar( + const client & i_ce ) const; + + virtual void produce_MemberDetails( + HF_SubTitleTable & o_table, + const client & ce ) const; + void produce_BaseHierarchy( + Xml::Element & o_screen, + const client & i_ce, + const String & i_sLabel ) const; + + // Locals + enum E_CurProducedMembers + { + mem_none, + mem_Functions, + mem_Attributes + }; + + // DATA + mutable E_CurProducedMembers + eCurProducedMembers; +}; + + + +// IMPLEMENTATION + +extern const String + C_sCePrefix_Interface; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_linklist.cxx b/autodoc/source/display/idl/hfi_linklist.cxx new file mode 100644 index 000000000000..f0cf47e29c8c --- /dev/null +++ b/autodoc/source/display/idl/hfi_linklist.cxx @@ -0,0 +1,380 @@ +/* -*- 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 "hfi_linklist.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_gate.hxx> +#include <ary/idl/ip_ce.hxx> +#include <ary/idl/ip_type.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_doc.hxx" +#include "hfi_tag.hxx" +#include "hfi_typetext.hxx" +#include "hi_ary.hxx" +#include "hi_env.hxx" + + + + +//******************* HF_CommentedLink_Table **********************************// + +HF_CommentedLink_Table::HF_CommentedLink_Table( Environment & io_rEnv, + Xml::Element & o_rOut, + const String & i_sTitle, + const String & i_sLabel, + bool i_bBorder ) + : HtmlFactory_Idl(io_rEnv,&o_rOut), + pTable( new Html::Table( (i_bBorder ? "1" : "0"), "100%", "5", "0") ), + pCurLinkColumn(0), + pCurCommentColumn(0) +{ + *pTable + << new Html::ClassAttr("commentedlinks"); + + CurOut() + >> *new Html::Label(i_sLabel) + << new Html::LineBreak; + CurOut() + << pTable; +// HF_SubTitle aTitle(*pTable); +// aTitle.Produce_it(i_sTitle); +} + +HF_CommentedLink_Table::~HF_CommentedLink_Table() +{ +} + +void +HF_CommentedLink_Table::Add_Line() +{ + Html::TableRow & + rRow = pTable->AddRow(); + + pCurLinkColumn = & (rRow.AddCell() + << new Html::WidthAttr("30%") + << new Xml::AnAttribute("valign","top") ); + pCurCommentColumn = & rRow.AddCell(); +} + +Xml::Element & +HF_CommentedLink_Table::Cur_LinkColumn() +{ + csv_assert(pCurLinkColumn != 0); + return *pCurLinkColumn; +} + +Xml::Element & +HF_CommentedLink_Table::Cur_CommentColumn() +{ + csv_assert(pCurCommentColumn != 0); + return *pCurCommentColumn; +} + + +//******************* HF_MemberTable **********************************// + +HF_MemberTable::HF_MemberTable( Environment & io_rEnv, + Xml::Element & o_rOut, + const String & i_sTitle, + const String & i_sLabel, + bool i_bInline ) + : HtmlFactory_Idl(io_rEnv,&o_rOut), + pTable( new Html::Table("1", "100%", "5", "0") ), + pCurDeclaration(0), + pCurDescription(0), + bInline(i_bInline) +{ + *pTable + << new Html::ClassAttr("memberlist"); + + CurOut() + >> *new Html::Label(i_sLabel) + << new Html::LineBreak; + CurOut() + << pTable; +// HF_SubTitle aTitle(*pTable); +// aTitle.Produce_it(i_sTitle); +} + +HF_MemberTable::~HF_MemberTable() +{ +} + +void +HF_MemberTable::Add_Line() +{ + if (bInline) + { + Html::TableRow & rRow = pTable->AddRow(); + + pCurDeclaration = &( rRow.AddCell() + << new Xml::AnAttribute("valign","top") + << new Html::WidthAttr("30%") ); + pCurDescription = & rRow.AddCell(); + } + else + { + Html::DefList * + pMemberSpace = new Html::DefList; + *pMemberSpace + << new Html::ClassAttr("member"); + + pTable->AddRow().AddCell() << pMemberSpace; + + pCurDeclaration = + & ( *pMemberSpace + >> *new Html::DefListTerm + << new Html::ClassAttr("member") ); + pCurDescription = + & ( *pMemberSpace + >> *new Html::DefListDefinition() + << new Html::ClassAttr("member") ); + } +} + +Xml::Element & +HF_MemberTable::Cur_Declaration() +{ + csv_assert(pCurDeclaration != 0); + return *pCurDeclaration; +} + +Xml::Element & +HF_MemberTable::Cur_Description() +{ + csv_assert(pCurDescription != 0); + return *pCurDescription; +} + + + +//******************* HF_IdlLinkList **********************************// + +HF_IdlLinkList::HF_IdlLinkList( Environment & io_rEnv, + Xml::Element * o_pOut ) + : HtmlFactory_Idl(io_rEnv,o_pOut) +{ +} + +HF_IdlLinkList::~HF_IdlLinkList() +{ +} + +void +HF_IdlLinkList::Produce_NamespaceMembers( const String & i_sTitle, + const String & i_sLabel, + const std::vector<ary::idl::Ce_id> & i_rList, + bool i_bNestedNamespaces ) const +{ + HF_CommentedLink_Table + aTableMaker( Env(), CurOut(), + i_sTitle, i_sLabel, + true ); + + std::vector<ary::idl::Ce_id>::const_iterator itEnd = i_rList.end(); + for ( std::vector<ary::idl::Ce_id>::const_iterator it = i_rList.begin(); + it != itEnd; + ++it ) + { + static String sEntryName; + static String sEntryLink; + const ce_info * + pDocu = 0; + Get_EntryData_NamespaceMembers( sEntryName, sEntryLink, pDocu, *it, i_bNestedNamespaces ); + aTableMaker.Add_Line(); + + aTableMaker.Cur_LinkColumn() + >> *new Html::Link(sEntryLink) + << sEntryName; + + if ( pDocu != 0 ) + { + HF_IdlShortDocu + aTextDisplay(Env(), aTableMaker.Cur_CommentColumn() ); + aTextDisplay.Produce_byData( pDocu ); + } + } // end for +} + +void +HF_IdlLinkList::Produce_GlobalLinks( const String & i_sTitle, + const String & i_sLabel, + ce_list & i_rList ) const +{ + HF_CommentedLink_Table + aTableMaker( Env(), CurOut(), + i_sTitle, i_sLabel, + true ); + + for ( ; i_rList; ++i_rList ) + { + aTableMaker.Add_Line(); + HF_IdlTypeText + aLinkText( Env(), aTableMaker.Cur_LinkColumn(), true ); + aLinkText.Produce_byData(*i_rList); + + const ce_info * + pDocu = Get_EntryDocu(*i_rList); + if ( pDocu != 0 ) + { + HF_IdlShortDocu + aTextDisplay(Env(), aTableMaker.Cur_CommentColumn() ); + aTextDisplay.Produce_byData( pDocu, *i_rList ); + } + } +} + +void +HF_IdlLinkList::Produce_GlobalCommentedLinks( const String & i_sTitle, + const String & i_sLabel, + comref_list & i_rList ) const +{ + HF_CommentedLink_Table + aTableMaker( Env(), CurOut(), + i_sTitle, i_sLabel, + true ); +/* + for ( ; i_rList; ++i_rList ) + { + aTableMaker.Add_Line(); + HF_IdlTypeText + aLinkText( Env(), aTableMaker.Cur_LinkColumn(), true ); + aLinkText.Produce_byData( (*i_rList).first ); + + HF_DocEntryList + aDocList( aTableMaker.Cur_CommentColumn() ); + if ( (*i_rList).second != 0 ) + { + HF_IdlDocu + aDocuDisplay( Env(), aDocList ); + aDocuDisplay.Produce_byData( (*i_rList).second ); + } + else + { + const ce_info * + pShort = Get_EntryDocu( + Env().Gate().Types().Search_CeRelatedTo( + (*i_rList).first) ); + if ( pShort != 0 ) + { + if (pShort->IsDeprecated()) + { + aDocList.Produce_Term() + << "[ DEPRECATED ]"; + } + if (pShort->IsOptional()) + { + aDocList.Produce_Term() + << "[ OPTIONAL ]"; + } + + aDocList.Produce_Term() + << "Description"; + + HF_IdlDocuTextDisplay + aShortDisplay( Env(), &aDocList.Produce_Definition() ); + aShortDisplay.Set_CurScopeTo( + Env().Gate().Types().Search_CeRelatedTo((*i_rList).first) ); + pShort->Short().DisplayAt(aShortDisplay); + } + } + } +*/ +} + +void +HF_IdlLinkList::Produce_MemberLinks( const String & i_sTitle, + const String & i_sLabel, + ce_list & i_rList ) const +{ + HF_CommentedLink_Table + aTableMaker( Env(), CurOut(), + i_sTitle, i_sLabel, + true ); + +/* + for ( ; i_rList; ++i_rList ) + { + const ary::idl::CodeEntity & + rCe = Env().Gate().Ces().Find_Ce(*i_rList); + + aTableMaker.Add_Line(); + aTableMaker.Cur_LinkColumn() + >> *new Html::Link( + StreamLock(200)() << "#" << rCe.LocalName() << c_str) + << rCe.LocalName(); + + const ce_info * + pDocu = rCe.Docu(); + if ( pDocu != 0 ) + { + HF_IdlShortDocu + aTextDisplay(Env(), aTableMaker.Cur_CommentColumn() ); + aTextDisplay.Produce_byData( *pDocu ); + } + } // end for +*/ +} + +void +HF_IdlLinkList::Get_EntryData_NamespaceMembers( + String & o_sEntryName, + String & o_sEntryLink, + const ce_info * & o_pDocu, + ce_id i_nMemberId, + bool i_bIsNestedNamespace ) const +{ + const ary::idl::CodeEntity & + rCe = Env().Data().Find_Ce(i_nMemberId); + + o_sEntryName = rCe.LocalName(); + o_sEntryLink = StreamLock(200)() << rCe.LocalName() + << ( i_bIsNestedNamespace + ? "/module-ix" + : "" ) + << ".html" + << c_str; + o_pDocu = rCe.Docu(); +} + +const ary::doc::OldIdlDocu * +HF_IdlLinkList::Get_EntryDocu(ce_id i_nMemberId) const +{ + if (i_nMemberId.IsValid()) + return Env().Data().Find_Ce(i_nMemberId).Docu(); + else + return 0; +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_linklist.hxx b/autodoc/source/display/idl/hfi_linklist.hxx new file mode 100644 index 000000000000..83a8998a2976 --- /dev/null +++ b/autodoc/source/display/idl/hfi_linklist.hxx @@ -0,0 +1,147 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_LINKLIST_HXX +#define ADC_DISPLAY_HFI_LINKLIST_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_comrela.hxx> +#include <ary_i/ci_text2.hxx> +#include <ary/doc/d_oldidldocu.hxx> + + + + +class HF_CommentedLink_Table : public HtmlFactory_Idl +{ + public: + HF_CommentedLink_Table( + Environment & io_rEnv, + Xml::Element & o_rOut, + const String & i_sTitle, + const String & i_sLabel, + bool i_bBorder = false ); + virtual ~HF_CommentedLink_Table(); + + void Add_Line(); + Xml::Element & Cur_LinkColumn(); + Xml::Element & Cur_CommentColumn(); + + private: + // DATA + Html::Table * pTable; + Xml::Element * pCurLinkColumn; + Xml::Element * pCurCommentColumn; +}; + +class HF_MemberTable : public HtmlFactory_Idl +{ + public: + HF_MemberTable( + Environment & io_rEnv, + Xml::Element & o_rOut, + const String & i_sTitle, + const String & i_sLabel, + bool i_bInline = false ); + virtual ~HF_MemberTable(); + + void Add_Line(); + Xml::Element & Cur_Declaration(); + Xml::Element & Cur_Description(); + + private: + // DATA + Html::Table * pTable; + Xml::Element * pCurDeclaration; + Xml::Element * pCurDescription; + bool bInline; +}; + + + + +class HF_IdlLinkList : public HtmlFactory_Idl +{ + public: + typedef ary::StdConstIterator<ary::idl::CommentedRelation> + comref_list; + + HF_IdlLinkList( + Environment & io_rEnv, + Xml::Element * o_pOut ); + virtual ~HF_IdlLinkList(); + + void Produce_NamespaceMembers( + const String & i_sTitle, + const String & i_sLabel, + const std::vector<ary::idl::Ce_id> & + i_rList, + bool i_bNestedNamespaces = false ) const; + void Produce_GlobalLinks( + const String & i_sTitle, + const String & i_sLabel, + ce_list & i_rList ) const; + void Produce_GlobalCommentedLinks( + const String & i_sTitle, + const String & i_sLabel, + comref_list & i_rList ) const; + void Produce_MemberLinks( + const String & i_sTitle, + const String & i_sLabel, + ce_list & i_rList ) const; + private: + void Get_EntryData_NamespaceMembers( + String & o_sEntryName, + String & o_sEntryLink, + const ce_info * & o_pDocuText, + ce_id i_nMemberId, + bool i_bIsNestedNamespace ) const; + const ce_info * Get_EntryDocu( + ce_id i_nMemberId ) const; +}; + + + + + + + + +// IMPLEMENTATION + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_method.cxx b/autodoc/source/display/idl/hfi_method.cxx new file mode 100644 index 000000000000..b5d1aa9d3d8c --- /dev/null +++ b/autodoc/source/display/idl/hfi_method.cxx @@ -0,0 +1,238 @@ +/* -*- 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 "hfi_method.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_exception.hxx> +#include <ary/idl/i_param.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_funcdecl.hxx> +#include "hfi_doc.hxx" +#include "hfi_globalindex.hxx" +#include "hfi_typetext.hxx" + + + + + +HF_IdlMethod::HF_IdlMethod( Environment & io_rEnv, + Xml::Element & o_cell) + : HtmlFactory_Idl(io_rEnv,&o_cell) +{ +} + + +HF_IdlMethod::~HF_IdlMethod() +{ +} + + +void +HF_IdlMethod::Produce_byData( const String & i_sName, + type_id i_nReturnType, + param_list & i_rParams, + type_list & i_rExceptions, + bool i_bOneway, + bool i_bEllipse, + const client & i_ce ) const +{ + CurOut() + >> *new Html::Label(i_sName) + << new Html::ClassAttr(C_sMemberTitle) + << i_sName; + enter_ContentCell(); + write_Declaration( i_sName, + i_nReturnType, + i_rParams, + i_rExceptions, + i_bOneway, + i_bEllipse ); + CurOut() << new Html::HorizontalLine; + write_Docu(CurOut(), i_ce); + leave_ContentCell(); +} + +void +HF_IdlMethod::write_Declaration( const String & i_sName, + type_id i_nReturnType, + param_list & i_rParams, + type_list & i_rExceptions, + bool i_bOneway, + bool i_bEllipse ) const +{ + HF_FunctionDeclaration + aDecl(CurOut(), "raises") ; + Xml::Element & + rReturnLine = aDecl.ReturnCell(); + + // Return line: + if (i_bOneway) + rReturnLine << "[oneway] "; + if (i_nReturnType.IsValid()) + { // Normal function, but not constructors: + HF_IdlTypeText + aReturn(Env(), rReturnLine, true); + aReturn.Produce_byData(i_nReturnType); + } + + // Main line: + Xml::Element & + rNameCell = aDecl.NameCell(); + rNameCell + >> *new Html::Bold + << i_sName; + + Xml::Element * + pParamEnd = 0; + + bool bParams = i_rParams.operator bool(); + if (bParams) + { + rNameCell + << "("; + + pParamEnd = write_Param( aDecl, *i_rParams ); + for (++i_rParams; i_rParams; ++i_rParams) + { + *pParamEnd << ","; + pParamEnd = write_Param( aDecl, *i_rParams ); + } // end for + + if (i_bEllipse) + { + Xml::Element & + rParamType = aDecl.NewParamTypeCell(); + rParamType + << " ..."; + pParamEnd = &rParamType; + } + *pParamEnd + << " )"; + } + else + { + rNameCell + << "()"; + } + + if ( i_rExceptions.operator bool() ) + { + Xml::Element & + rExcOut = aDecl.ExceptionCell(); + HF_IdlTypeText + aExc(Env(), rExcOut, true); + aExc.Produce_byData(*i_rExceptions); + + for (++i_rExceptions; i_rExceptions; ++i_rExceptions) + { + rExcOut + << "," + << new Html::LineBreak; + aExc.Produce_byData(*i_rExceptions); + } // end for + + rExcOut << " );"; + } + else if (bParams) + { + *pParamEnd << ";"; + } + else + { + rNameCell << ";"; + } +} + +Xml::Element * +HF_IdlMethod::write_Param( HF_FunctionDeclaration & o_decl, + const ary::idl::Parameter & i_param ) const +{ + Xml::Element & + rTypeCell = o_decl.NewParamTypeCell(); + Xml::Element & + rNameCell = o_decl.ParamNameCell(); + + switch ( i_param.Direction() ) + { + case ary::idl::param_in: + rTypeCell << "[in] "; + break; + case ary::idl::param_out: + rTypeCell << "[out] "; + break; + case ary::idl::param_inout: + rTypeCell << "[inout] "; + break; + } // end switch + + HF_IdlTypeText + aTypeWriter(Env(), rTypeCell, true); + aTypeWriter.Produce_byData( i_param.Type() ); + + rNameCell + << i_param.Name(); + return &rNameCell; +} + +const String sContentBorder("0"); +const String sContentWidth("96%"); +const String sContentPadding("5"); +const String sContentSpacing("0"); + +const String sBgWhite("#ffffff"); +const String sCenter("center"); + +void +HF_IdlMethod::enter_ContentCell() const +{ + + Xml::Element & + rContentCell = CurOut() + >> *new Html::Table( sContentBorder, + sContentWidth, + sContentPadding, + sContentSpacing ) + << new Html::ClassAttr("table-in-method") + << new Html::BgColorAttr(sBgWhite) + << new Html::AlignAttr(sCenter) + >> *new Html::TableRow + >> *new Html::TableCell; + Out().Enter(rContentCell); +} + + +void +HF_IdlMethod::leave_ContentCell() const +{ + Out().Leave(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_method.hxx b/autodoc/source/display/idl/hfi_method.hxx new file mode 100644 index 000000000000..7da0e5fd605c --- /dev/null +++ b/autodoc/source/display/idl/hfi_method.hxx @@ -0,0 +1,106 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_METHOD_HXX +#define ADC_DISPLAY_HFI_METHOD_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_param.hxx> +#include <ary/doc/d_oldidldocu.hxx> +typedef ary::doc::OldIdlDocu CodeInfo; +#include "hfi_linklist.hxx" + + + +namespace csi +{ + namespace idl + { + class Parameter; + } +} + +class HF_FunctionDeclaration; + +class HF_IdlMethod : public HtmlFactory_Idl +{ + public: + typedef ary::StdConstIterator<ary::idl::Parameter> param_list; + + HF_IdlMethod( + Environment & io_rEnv, + Xml::Element & o_cell ); + virtual ~HF_IdlMethod(); + + void Produce_byData( + const String & i_sName, + type_id i_nReturnType, + param_list & i_rParams, + type_list & i_rExceptions, + bool i_bOneway, + bool i_bEllipse, + const client & i_ce ) const; + private: + void write_Declaration( + const String & i_sName, + type_id i_nReturnType, + param_list & i_rParams, + type_list & i_rExceptions, + bool i_bOneway, + bool i_bEllipse ) const; +// void write_Param( +// HF_IdlTypeText & o_type, +// Xml::Element & o_names, +// const ary::idl::Parameter & +// i_param ) const; + + Xml::Element * write_Param( + HF_FunctionDeclaration & + o_decl, + const ary::idl::Parameter & + i_param ) const; + void enter_ContentCell() const; + void leave_ContentCell() const; +}; + + + +// IMPLEMENTATION + + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_module.cxx b/autodoc/source/display/idl/hfi_module.cxx new file mode 100644 index 000000000000..eb65a14de9ae --- /dev/null +++ b/autodoc/source/display/idl/hfi_module.cxx @@ -0,0 +1,302 @@ +/* -*- 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 "hfi_module.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_module.hxx> +#include <ary/idl/ik_module.hxx> +#include <ary/doc/d_oldidldocu.hxx> +#include <ary/getncast.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_doc.hxx" +#include "hfi_navibar.hxx" +#include "hfi_tag.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sCePrefix_Module("module"); + +namespace +{ + +const String + C_sList_NestedModules("Nested Modules"); +const String + C_sList_NestedModules_Label("NestedModules"); +const String + C_sList_Services("Services"); +const String + C_sList_Singletons("Singletons"); +const String + C_sList_Interfaces("Interfaces"); +const String + C_sList_Structs("Structs"); +const String + C_sList_Exceptions("Exceptions"); +const String + C_sList_Enums("Enums"); +const String + C_sList_Typedefs("Typedefs"); +const String + C_sList_ConstGroups("Constant Groups"); +const String + C_sList_ConstGroups_Label("ConstantGroups"); + + +enum E_SubListIndices +{ // In case of changes, also adapt make_Navibar() !! + sli_NestedModules = 0, + sli_Services = 1, + sli_Singletons = 2, + sli_Interfaces = 3, + sli_Structs = 4, + sli_Exceptions = 5, + sli_Enums = 6, + sli_Typedefs = 7, + sli_ConstGroups = 8 +}; + +} //anonymous namespace + + +HF_IdlModule::HF_IdlModule( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlModule::~HF_IdlModule() +{ +} + +typedef ary::idl::ifc_module::attr ModuleAttr; + + +void +HF_IdlModule::Produce_byData( const client & i_ce ) const +{ + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + if ( Env().CurPosition().Depth() > 0 ) + { + aNameChain.Produce_CompleteChain_forModule(Env().CurPosition(), nameChainLinker); + + StreamLock + sl(200); + aTitle.Produce_Title( sl() + << C_sCePrefix_Module + << " " + << i_ce.LocalName() + << c_str ); + } + else + { + aTitle.Produce_Title( "Global Module" ); + } + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + + // Write children lists: + ce_ptr_list aNestedModules; + ce_ptr_list aServices; + ce_ptr_list aInterfaces; + ce_ptr_list aStructs; + ce_ptr_list aExceptions; + ce_ptr_list aEnums; + ce_ptr_list aTypedefs; + ce_ptr_list aConstantGroups; + ce_ptr_list aSingletons; + + ModuleAttr::Get_AllChildrenSeparated( + aNestedModules, + aServices, + aInterfaces, + aStructs, + aExceptions, + aEnums, + aTypedefs, + aConstantGroups, + aSingletons, + Env().Data().Ces(), + i_ce ); + + // Has this to be in the order of enum E_SubListIndices ??? + if (produce_ChildList(C_sList_NestedModules, C_sList_NestedModules_Label, aNestedModules )) + pNaviSubRow->SwitchOn(sli_NestedModules); + if (produce_ChildList(C_sList_Services, C_sList_Services, aServices)) + pNaviSubRow->SwitchOn(sli_Services); + if (produce_ChildList(C_sList_Singletons, C_sList_Singletons, aSingletons)) + pNaviSubRow->SwitchOn(sli_Singletons); + if (produce_ChildList(C_sList_Interfaces, C_sList_Interfaces, aInterfaces)) + pNaviSubRow->SwitchOn(sli_Interfaces); + if (produce_ChildList(C_sList_Structs, C_sList_Structs, aStructs)) + pNaviSubRow->SwitchOn(sli_Structs); + if (produce_ChildList(C_sList_Exceptions, C_sList_Exceptions, aExceptions)) + pNaviSubRow->SwitchOn(sli_Exceptions); + if (produce_ChildList(C_sList_Enums, C_sList_Enums, aEnums)) + pNaviSubRow->SwitchOn(sli_Enums); + if (produce_ChildList(C_sList_Typedefs, C_sList_Typedefs, aTypedefs)) + pNaviSubRow->SwitchOn(sli_Typedefs); + if (produce_ChildList(C_sList_ConstGroups, C_sList_ConstGroups_Label, aConstantGroups)) + pNaviSubRow->SwitchOn(sli_ConstGroups); + pNaviSubRow->Produce_Row(); +} + +DYN HF_NaviSubRow & +HF_IdlModule::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_ModuleMainRow(i_ce); + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + + // Has to be in the order of E_SubListIndices: + ret.AddItem(C_sList_NestedModules, C_sList_NestedModules_Label, false); + ret.AddItem(C_sList_Services, C_sList_Services, false); + ret.AddItem(C_sList_Singletons, C_sList_Singletons, false); + ret.AddItem(C_sList_Interfaces, C_sList_Interfaces, false); + ret.AddItem(C_sList_Structs, C_sList_Structs, false); + ret.AddItem(C_sList_Exceptions, C_sList_Exceptions, false); + ret.AddItem(C_sList_Enums, C_sList_Enums, false); + ret.AddItem(C_sList_Typedefs, C_sList_Typedefs, false); + ret.AddItem(C_sList_ConstGroups, C_sList_ConstGroups_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +bool +HF_IdlModule::produce_ChildList( const String & i_sName, + const String & i_sLabel, + const ce_ptr_list & i_list ) const +{ + if ( i_list.size() == 0 ) + return false; + + HF_SubTitleTable + aTable( CurOut(), + i_sLabel, + i_sName, + 2 ); + + ce_ptr_list::const_iterator + itEnd = i_list.end(); + for ( ce_ptr_list::const_iterator it = i_list.begin(); + it != itEnd; + ++it ) + { + Xml::Element & + rRow = aTable.Add_Row(); + produce_Link(rRow, *it); + produce_LinkDoc(rRow, *it); + } // end for + + return true; +} + +void +HF_IdlModule::produce_Link( Xml::Element & o_row, + const client * i_ce ) const +{ + csv_assert(i_ce != 0); + Xml::Element & + rCell = o_row + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_SummaryLeft); + + if ( NOT ary::is_type<ary::idl::Module>(*i_ce) ) + { + HF_IdlTypeText + aText(Env(), rCell, true); + aText.Produce_byData(i_ce->CeId()); + } + else + { + StreamLock slBuf(100); + rCell + >> *new Html::Link( slBuf() << i_ce->LocalName() + << "/module-ix.html" + << c_str ) + << i_ce->LocalName(); + } +} + +void +HF_IdlModule::produce_LinkDoc( Xml::Element & o_row, + const client * i_ce ) const +{ + csv_assert(i_ce != 0); + + // We need the cell in any case, because, the rendering may be hurt else. + Xml::Element & + rCell = o_row + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_SummaryRight); + + const client & + rCe = *i_ce; + const ce_info * + pShort = Get_IdlDocu(rCe.Docu()); + if ( pShort == 0 ) + return; + + + if (pShort->IsDeprecated()) + { + rCell << "[ DEPRECATED ]" << new Html::LineBreak; + } + if (pShort->IsOptional()) + { + rCell << "[ OPTIONAL ]" << new Html::LineBreak; + } + + HF_IdlDocuTextDisplay + aShortDisplay(Env(), &rCell, *i_ce); + pShort->Short().DisplayAt(aShortDisplay); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_module.hxx b/autodoc/source/display/idl/hfi_module.hxx new file mode 100644 index 000000000000..23aa25176cb5 --- /dev/null +++ b/autodoc/source/display/idl/hfi_module.hxx @@ -0,0 +1,85 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_MODULE_HXX +#define ADC_DISPLAY_HFI_MODULE_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + + +class HF_NaviSubRow; + +class HF_IdlModule : public HtmlFactory_Idl +{ + public: + HF_IdlModule( + Environment & io_rEnv, // The CurDirectory() is the one of the here displayed Module. + Xml::Element & o_rOut ); + virtual ~HF_IdlModule(); + + void Produce_byData( + const client & i_ce ) const; + private: + typedef std::vector< const ary::idl::CodeEntity* > ce_ptr_list; + + DYN HF_NaviSubRow & make_Navibar( + const client & i_ce ) const; + bool produce_ChildList( + const String & i_sName, + const String & i_sLabel, + const ce_ptr_list & i_list ) const; + void produce_Link( + Xml::Element & o_row, + const client * i_ce ) const; + void produce_LinkDoc( + Xml::Element & o_row, + const client * i_ce ) const; +}; + + + +// IMPLEMENTATION + + +extern const String + C_sCePrefix_Module; + + + + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_navibar.cxx b/autodoc/source/display/idl/hfi_navibar.cxx new file mode 100644 index 000000000000..eb33b3e84905 --- /dev/null +++ b/autodoc/source/display/idl/hfi_navibar.cxx @@ -0,0 +1,227 @@ +/* -*- 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 "hfi_navibar.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <toolkit/hf_navi_main.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include "hfi_interface.hxx" +#include "hfi_module.hxx" +#include "hfi_service.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sLocalManualLinks("#devmanual"); + + +const String C_sTop = "Overview"; +const String C_sModule = "Module"; +const String C_sUse = "Use"; +const String C_sManual = "Devguide"; +const String C_sIndex = "Index"; + + + + +HF_IdlNavigationBar::HF_IdlNavigationBar( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlNavigationBar::~HF_IdlNavigationBar() +{ +} + +void +HF_IdlNavigationBar::Produce_CeMainRow( const client & i_ce, + bool i_bNoUsePage ) +{ + HF_NaviMainRow + aNaviMain( CurOut() ); + + StreamLock aLink(500); + StreamStr & rLink = aLink(); + + Env().Get_LinkTo( rLink.reset(), + Env().OutputTree().Overview() ); + aNaviMain.Add_StdItem( C_sTop, rLink.c_str() ); + + Env().Get_LinkTo( rLink.reset(), + Env().Linker().PositionOf_CurModule() ); + aNaviMain.Add_StdItem( C_sModule, rLink.c_str() ); + + if (i_bNoUsePage) + { + aNaviMain.Add_NoneItem( C_sUse ); + } + else + { + Env().Get_LinkTo( rLink.reset(), + Env().Linker().PositionOf_CurXRefs(i_ce.LocalName()) ); + aNaviMain.Add_StdItem( C_sUse, rLink.c_str() ); + } + + const StringVector & + rManualDescrs = i_ce.Secondaries().Links2DescriptionInManual(); + if (rManualDescrs.size() == 2) + { + aNaviMain.Add_StdItem(C_sManual, Env().Link2Manual( rManualDescrs.front() )); + } + else if (rManualDescrs.size() > 2) + { + aNaviMain.Add_StdItem(C_sManual, C_sLocalManualLinks); + } + else + { + aNaviMain.Add_NoneItem( C_sManual ); + } + + Env().Get_LinkTo( rLink.reset(), + Env().Linker().PositionOf_Index() ); + aNaviMain.Add_StdItem( C_sIndex, rLink.c_str() ); + + aNaviMain.Produce_Row(); +} + +void +HF_IdlNavigationBar::Produce_CeXrefsMainRow( const client & i_ce ) +{ + HF_NaviMainRow + aNaviMain( CurOut() ); + + StreamLock aLink(500); + StreamStr & rLink = aLink(); + + Env().Get_LinkTo( rLink.reset(), + Env().OutputTree().Overview() ); + aNaviMain.Add_StdItem( C_sTop, rLink.c_str() ); + + Env().Get_LinkTo( rLink.reset(), + Env().Linker().PositionOf_CurModule() ); + aNaviMain.Add_StdItem( C_sModule, rLink.c_str() ); + + aNaviMain.Add_SelfItem( C_sUse ); + + const StringVector & + rManualDescrs = i_ce.Secondaries().Links2DescriptionInManual(); + if (rManualDescrs.size() == 2) + { + aNaviMain.Add_StdItem(C_sManual, Env().Link2Manual( rManualDescrs.front() )); + } + else if (rManualDescrs.size() > 2) + { + aNaviMain.Add_StdItem(C_sManual, C_sLocalManualLinks); + } + else + { + aNaviMain.Add_NoneItem( C_sManual ); + } + + Env().Get_LinkTo( rLink.reset(), + Env().Linker().PositionOf_Index() ); + aNaviMain.Add_StdItem( C_sIndex, rLink.c_str() ); + + aNaviMain.Produce_Row(); +} + +void +HF_IdlNavigationBar::Produce_ModuleMainRow( const client & i_ce ) +{ + HF_NaviMainRow + aNaviMain( CurOut() ); + + StreamLock aLink(500); + StreamStr & rLink = aLink(); + + Env().Get_LinkTo( rLink.reset(), + Env().OutputTree().Overview() ); + aNaviMain.Add_StdItem( C_sTop, rLink.c_str() ); + + aNaviMain.Add_SelfItem( C_sModule ); + + aNaviMain.Add_NoneItem( C_sUse ); + + const StringVector & + rManualDescrs = i_ce.Secondaries().Links2DescriptionInManual(); + if (rManualDescrs.size() == 1) + { + aNaviMain.Add_StdItem(C_sManual, Env().Link2Manual( rManualDescrs.front() )); + } + else if (rManualDescrs.size() > 1) + { + aNaviMain.Add_StdItem(C_sManual, C_sLocalManualLinks); + } + else + { + aNaviMain.Add_NoneItem( C_sManual ); + } + + Env().Get_LinkTo( rLink.reset(), + Env().Linker().PositionOf_Index() ); + aNaviMain.Add_StdItem( C_sIndex, rLink.c_str() ); + + aNaviMain.Produce_Row(); +} + +void +HF_IdlNavigationBar::Produce_IndexMainRow() +{ + HF_NaviMainRow + aNaviMain( CurOut() ); + + StreamLock aLink(500); + StreamStr & rLink = aLink(); + + Env().Get_LinkTo( rLink.reset(), + Env().OutputTree().Overview() ); + aNaviMain.Add_StdItem( C_sTop, rLink.c_str() ); + + aNaviMain.Add_NoneItem( C_sModule ); + aNaviMain.Add_NoneItem( C_sUse ); + aNaviMain.Add_NoneItem( C_sManual ); + + aNaviMain.Add_SelfItem( C_sIndex ); + + aNaviMain.Produce_Row(); + + CurOut() << new Html::HorizontalLine(); +} + +DYN HF_NaviSubRow & +HF_IdlNavigationBar::Add_SubRow() +{ + return *new HF_NaviSubRow( CurOut() ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_navibar.hxx b/autodoc/source/display/idl/hfi_navibar.hxx new file mode 100644 index 000000000000..d6ffc16ba455 --- /dev/null +++ b/autodoc/source/display/idl/hfi_navibar.hxx @@ -0,0 +1,85 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_NAVIBAR_HXX +#define ADC_DISPLAY_HFI_NAVIBAR_HXX + + +// USED SERVICES + // BASE CLASSES + // COMPONENTS +#include "hi_factory.hxx" + // PARAMETERS + +namespace ary +{ +namespace idl +{ +class CodeEntity; +} +} + + +class HF_NaviSubRow; + +/** @resp + Creates a navigation bar for an IDL HTML documentation page. +*/ +class HF_IdlNavigationBar : public HtmlFactory_Idl +{ + public: + HF_IdlNavigationBar( + HtmlEnvironment_Idl & + io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlNavigationBar(); + + void Produce_CeMainRow( + const client & i_ce, + bool i_bNoUsePage = false ); + void Produce_CeXrefsMainRow( + const client & i_ce ); + void Produce_ModuleMainRow( + const client & i_ce ); + void Produce_IndexMainRow(); + + /** Adds the subrow to the o_rOut argument of the constructor. + */ + DYN HF_NaviSubRow & Add_SubRow(); + + private: + const ary::idl::CodeEntity * + pCe; +}; + +extern const String + C_sLocalManualLinks; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_property.cxx b/autodoc/source/display/idl/hfi_property.cxx new file mode 100644 index 000000000000..f10e6694799c --- /dev/null +++ b/autodoc/source/display/idl/hfi_property.cxx @@ -0,0 +1,453 @@ +/* -*- 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 "hfi_property.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_attribute.hxx> +#include <ary/idl/ik_constant.hxx> +#include <ary/idl/ik_enumvalue.hxx> +#include <ary/idl/ik_property.hxx> +#include <ary/idl/ik_structelem.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_typetext.hxx" +#include "hfi_doc.hxx" +#include "hfi_tag.hxx" +#include "hi_env.hxx" +#include "hi_ary.hxx" +#include "hi_linkhelper.hxx" + +void +HF_IdlDataMember::Produce_byData( const client & ce ) const +{ + write_Title(ce); + enter_ContentCell(); + write_Declaration(ce); + write_Description(ce); + leave_ContentCell(); +} + +HF_IdlDataMember::HF_IdlDataMember( Environment & io_rEnv, + HF_SubTitleTable & o_table ) + : HtmlFactory_Idl( io_rEnv, + &(o_table.Add_Row() + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_MDetail)) + ) +{ +} + +const String sContentBorder("0"); +const String sContentWidth("96%"); +const String sContentPadding("5"); +const String sContentSpacing("0"); + +const String sBgWhite("#ffffff"); +const String sCenter("center"); + +void +HF_IdlDataMember::write_Title( const client & i_ce ) const +{ + CurOut() + >> *new Html::Label(i_ce.LocalName()) + << new Html::ClassAttr(C_sMemberTitle) + << i_ce.LocalName(); +} + +void +HF_IdlDataMember::write_Description( const client & i_ce ) const +{ + CurOut() << new Html::HorizontalLine; + write_Docu(CurOut(), i_ce); +} + +void +HF_IdlDataMember::enter_ContentCell() const +{ + + Xml::Element & + rContentCell = CurOut() + >> *new Html::Table( sContentBorder, + sContentWidth, + sContentPadding, + sContentSpacing ) + << new Html::ClassAttr("table-in-data") + << new Html::BgColorAttr(sBgWhite) + << new Html::AlignAttr(sCenter) + >> *new Html::TableRow + >> *new Html::TableCell; + Out().Enter(rContentCell); +} + + +void +HF_IdlDataMember::leave_ContentCell() const +{ + Out().Leave(); +} + + +HF_IdlProperty::~HF_IdlProperty() +{ +} + +typedef ary::idl::ifc_property::attr PropertyAttr; + +void +HF_IdlProperty::write_Declaration( const client & i_ce ) const +{ + if (PropertyAttr::HasAnyStereotype(i_ce)) + { + CurOut() << "[ "; + if (PropertyAttr::IsReadOnly(i_ce)) + CurOut() << "readonly "; + if (PropertyAttr::IsBound(i_ce)) + CurOut() << "bound "; + if (PropertyAttr::IsConstrained(i_ce)) + CurOut() << "constrained "; + if (PropertyAttr::IsMayBeAmbiguous(i_ce)) + CurOut() << "maybeambiguous "; + if (PropertyAttr::IsMayBeDefault(i_ce)) + CurOut() << "maybedefault "; + if (PropertyAttr::IsMayBeVoid(i_ce)) + CurOut() << "maybevoid "; + if (PropertyAttr::IsRemovable(i_ce)) + CurOut() << "removable "; + if (PropertyAttr::IsTransient(i_ce)) + CurOut() << "transient "; + CurOut() << "] "; + } // end if + + HF_IdlTypeText + aType( Env(), CurOut(), true ); + aType.Produce_byData( PropertyAttr::Type(i_ce) ); + + CurOut() << " " >> *new Html::Bold << i_ce.LocalName(); + CurOut() << ";"; +} + + + + +HF_IdlAttribute::~HF_IdlAttribute() +{ +} + +typedef ary::idl::ifc_attribute::attr AttributeAttr; + +void +HF_IdlAttribute::write_Declaration( const client & i_ce ) const +{ + if (AttributeAttr::HasAnyStereotype(i_ce)) + { + CurOut() << "[ "; + if (AttributeAttr::IsReadOnly(i_ce)) + CurOut() << "readonly "; + if (AttributeAttr::IsBound(i_ce)) + CurOut() << "bound "; + CurOut() << "] "; + } + + HF_IdlTypeText + aType( Env(), CurOut(), true ); + aType.Produce_byData( AttributeAttr::Type(i_ce) ); + + CurOut() + << " " + >> *new Html::Bold + << i_ce.LocalName(); + + dyn_type_list pGetExceptions; + dyn_type_list pSetExceptions; + AttributeAttr::Get_GetExceptions(pGetExceptions, i_ce); + AttributeAttr::Get_SetExceptions(pSetExceptions, i_ce); + + bool bGetRaises = (*pGetExceptions).IsValid(); + bool bSetRaises = (*pSetExceptions).IsValid(); + bool bRaises = bGetRaises OR bSetRaises; + if (bRaises) + { + HF_DocEntryList aSub(CurOut()); + + if (bGetRaises) + { + Xml::Element & + rGet = aSub.Produce_Definition(); + HF_IdlTypeText + aExc(Env(), rGet, true); + type_list & itExc = *pGetExceptions; + + rGet << "get raises ("; + aExc.Produce_byData(*itExc); + for (++itExc; itExc.operator bool(); ++itExc) + { + rGet + << ","; + aExc.Produce_byData(*itExc); + } // end for + rGet << ")"; + if (NOT bSetRaises) + rGet << ";"; + } // end if (bGetRaises) + + if (bSetRaises) + { + Xml::Element & + rSet = aSub.Produce_Definition(); + HF_IdlTypeText + aExc(Env(), rSet, true); + type_list & itExc = *pSetExceptions; + + rSet << "set raises ("; + aExc.Produce_byData(*itExc); + for (++itExc; itExc.operator bool(); ++itExc) + { + rSet + << ","; + aExc.Produce_byData(*itExc); + } // end for + rSet << ");"; + } // end if (bSetRaises) + } + else + { + CurOut() << ";"; + } +} + + + + +HF_IdlEnumValue::~HF_IdlEnumValue() +{ +} + +typedef ary::idl::ifc_enumvalue::attr EnumValueAttr; + +void +HF_IdlEnumValue::write_Declaration( const client & i_ce ) const +{ + CurOut() + >> *new Html::Bold + << i_ce.LocalName(); + + const String & + rValue = EnumValueAttr::Value(i_ce); + if ( NOT rValue.empty() ) + { CurOut() << " " // << " = " // In the moment this is somehow in the value + << rValue; + // CurOut() << ","; // In the moment this is somehow in the value + } + else + CurOut() << ","; +} + + +HF_IdlConstant::~HF_IdlConstant() +{ +} + +typedef ary::idl::ifc_constant::attr ConstantAttr; + +void +HF_IdlConstant::write_Declaration( const client & i_ce ) const +{ + CurOut() << "const "; + HF_IdlTypeText + aType( Env(), CurOut(), true ); + aType.Produce_byData(ConstantAttr::Type(i_ce)); + CurOut() + << " " + >> *new Html::Bold + << i_ce.LocalName(); + const String & + rValue = ConstantAttr::Value(i_ce); + CurOut() << " " // << " = " // In the moment this is somehow in the value + << rValue; + // << ";"; // In the moment this is somehow in the value +} + + +HF_IdlStructElement::~HF_IdlStructElement() +{ +} + +typedef ary::idl::ifc_structelement::attr StructElementAttr; + +void +HF_IdlStructElement::write_Declaration( const client & i_ce ) const +{ + HF_IdlTypeText + aType( Env(), CurOut(), true ); + aType.Produce_byData(StructElementAttr::Type(i_ce)); + CurOut() + << " " + >> *new Html::Bold + << i_ce.LocalName(); + CurOut() + << ";"; +} + +HF_IdlCommentedRelationElement::~HF_IdlCommentedRelationElement() +{ +} + +void +HF_IdlCommentedRelationElement::produce_Summary( Environment & io_env, + Xml::Element & io_context, + const comref & i_commentedRef, + const client & i_rScopeGivingCe ) +{ + csv_assert( i_commentedRef.Info() ); + + const ce_info & rDocu = *i_commentedRef.Info(); + + bool bShort = NOT rDocu.Short().IsEmpty(); + bool bDescr = NOT rDocu.Description().IsEmpty(); + + if ( bShort ) + { + HF_IdlDocuTextDisplay + aDescription(io_env, 0, i_rScopeGivingCe); + + Xml::Element& rPara = io_context >> *new Html::Paragraph; + aDescription.Out().Enter( rPara ); + rDocu.Short().DisplayAt( aDescription ); + + // if there's more than just the summary - i.e. a description, or usage restrictions, or tags -, + // then add a link to the details section + if ( bDescr OR rDocu.IsDeprecated() OR rDocu.IsOptional() OR NOT rDocu.Tags().empty() ) + { + StreamLock aLocalLink(100); + aLocalLink() << "#" << get_LocalLinkName(io_env, i_commentedRef); + + aDescription.Out().Out() << "("; + aDescription.Out().Out() + >> *new Html::Link( aLocalLink().c_str() ) + << "details"; + aDescription.Out().Out() << ")"; + } + + aDescription.Out().Leave(); + } +} + +void +HF_IdlCommentedRelationElement::produce_LinkDoc( Environment & io_env, + const client & i_ce, + Xml::Element & io_context, + const comref & i_commentedRef, + const E_DocType i_docType ) +{ + if ( i_commentedRef.Info() != 0 ) + { + if ( i_docType == doctype_complete ) + { + HF_DocEntryList aDocList(io_context); + HF_IdlDocu aDocuDisplay(io_env, aDocList); + + aDocuDisplay.Produce_fromReference(*i_commentedRef.Info(), i_ce); + } + else + { + produce_Summary(io_env, io_context, i_commentedRef, i_ce); + } + } + else + { + HF_DocEntryList aDocList(io_context); + + const client * + pCe = io_env.Linker().Search_CeFromType(i_commentedRef.Type()); + const ce_info * + pShort = pCe != 0 + ? Get_IdlDocu(pCe->Docu()) + : (const ce_info *)(0); + if ( pShort != 0 ) + { + aDocList.Produce_NormalTerm("(referenced entity's summary:)"); + Xml::Element & + rDef = aDocList.Produce_Definition(); + HF_IdlDocuTextDisplay + aShortDisplay( io_env, &rDef, *pCe); + pShort->Short().DisplayAt(aShortDisplay); + } // end if (pShort != 0) + } // endif ( (*i_commentedRef).Info() != 0 ) else +} + + +String +HF_IdlCommentedRelationElement::get_LocalLinkName( Environment & io_env, + const comref & i_commentedRef ) +{ + StringVector aModules; + String sLocalName; + ce_id nCe; + int nSequenceCount = 0; + + const ary::idl::Type & + rType = io_env.Data().Find_Type(i_commentedRef.Type()); + io_env.Data().Get_TypeText(aModules, sLocalName, nCe, nSequenceCount, rType); + + // speaking strictly, this is not correct: If we have two interfaces with the same local + // name, but in different modules, then the link name will be ambiguous. However, this should + // be too seldom a case to really make the link names that ugly by adding the module information. + return sLocalName; +} + +void +HF_IdlCommentedRelationElement::write_Title( const client & /*i_ce*/ ) const +{ + + Xml::Element & + rAnchor = CurOut() + >> *new Html::Label(get_LocalLinkName(Env(), m_relation)) + << new Html::ClassAttr(C_sMemberTitle); + + HF_IdlTypeText + aText(Env(), rAnchor, true); + aText.Produce_byData(m_relation.Type()); +} + +void +HF_IdlCommentedRelationElement::write_Declaration( const client & /*i_ce*/ ) const +{ + // nothing to do here - an entity which is a commented relation does not have a declaration +} + +void +HF_IdlCommentedRelationElement::write_Description( const client & i_ce ) const +{ + produce_LinkDoc( Env(), i_ce, CurOut(), m_relation, doctype_complete ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_property.hxx b/autodoc/source/display/idl/hfi_property.hxx new file mode 100644 index 000000000000..3c6da79fc61d --- /dev/null +++ b/autodoc/source/display/idl/hfi_property.hxx @@ -0,0 +1,185 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_PROPERTY_HXX +#define ADC_DISPLAY_HFI_PROPERTY_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_comrela.hxx> + +class HF_SubTitleTable; + +class HF_IdlDataMember : public HtmlFactory_Idl +{ + public: + void Produce_byData( + const client & ce ) const; + protected: + HF_IdlDataMember( + Environment & io_rEnv, + HF_SubTitleTable & o_table ); + virtual ~HF_IdlDataMember() {} + + private: + virtual void write_Title( + const client & i_ce ) const; + + virtual void write_Declaration( + const client & i_ce ) const = 0; + + virtual void write_Description( + const client & i_ce ) const; + + void enter_ContentCell() const; + void leave_ContentCell() const; +}; + + + +class HF_IdlProperty : public HF_IdlDataMember +{ + public: + HF_IdlProperty( + Environment & io_rEnv, + HF_SubTitleTable & o_table ) + : HF_IdlDataMember(io_rEnv, o_table) {} + virtual ~HF_IdlProperty(); + private: + virtual void write_Declaration( + const client & i_ce ) const; +}; + +class HF_IdlAttribute : public HF_IdlDataMember +{ + public: + HF_IdlAttribute( + Environment & io_rEnv, + HF_SubTitleTable & o_table ) + : HF_IdlDataMember(io_rEnv, o_table) {} + virtual ~HF_IdlAttribute(); + + private: + virtual void write_Declaration( + const client & i_ce ) const; +}; + + +class HF_IdlEnumValue : public HF_IdlDataMember +{ + public: + HF_IdlEnumValue( + Environment & io_rEnv, + HF_SubTitleTable & o_table ) + : HF_IdlDataMember(io_rEnv, o_table) {} + virtual ~HF_IdlEnumValue(); + + private: + virtual void write_Declaration( + const client & i_ce ) const; +}; + +class HF_IdlConstant : public HF_IdlDataMember +{ + public: + HF_IdlConstant( + Environment & io_rEnv, + HF_SubTitleTable & o_table ) + : HF_IdlDataMember(io_rEnv, o_table) {} + virtual ~HF_IdlConstant(); + + private: + virtual void write_Declaration( + const client & i_ce ) const; +}; + + +class HF_IdlStructElement : public HF_IdlDataMember +{ + public: + HF_IdlStructElement( + Environment & io_rEnv, + HF_SubTitleTable & o_table ) + : HF_IdlDataMember(io_rEnv, o_table) {} + virtual ~HF_IdlStructElement(); + + private: + virtual void write_Declaration( + const client & i_ce ) const; +}; + +class HF_IdlCommentedRelationElement : public HF_IdlDataMember +{ + public: + HF_IdlCommentedRelationElement( + Environment & io_rEnv, + HF_SubTitleTable & o_table, + const ary::idl::CommentedRelation& i_relation ) + : HF_IdlDataMember(io_rEnv, o_table) + , m_relation( i_relation ) + { + } + virtual ~HF_IdlCommentedRelationElement(); + + typedef ::ary::idl::CommentedRelation comref; + + static void produce_LinkDoc( + Environment & io_env, + const client & i_ce, + Xml::Element & io_context, + const comref & i_commentedRef, + const E_DocType i_docType ); + + private: + virtual void write_Title( + const client & i_ce ) const; + virtual void write_Declaration( + const client & i_ce ) const; + virtual void write_Description( + const client & i_ce ) const; + private: + static void produce_Summary( Environment & io_env, + Xml::Element & io_context, + const comref & i_commentedRef, + const client & i_rScopeGivingCe ); + + static String get_LocalLinkName( Environment & io_env, + const comref & i_commentedRef ); + + private: + const ary::idl::CommentedRelation& m_relation; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_service.cxx b/autodoc/source/display/idl/hfi_service.cxx new file mode 100644 index 000000000000..ad19d336e7f1 --- /dev/null +++ b/autodoc/source/display/idl/hfi_service.cxx @@ -0,0 +1,365 @@ +/* -*- 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 "hfi_service.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_property.hxx> +#include <ary/idl/ik_service.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_doc.hxx" +#include "hfi_navibar.hxx" +#include "hfi_property.hxx" +#include "hfi_tag.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + + + +extern const String + C_sCePrefix_Service("service"); + +namespace +{ + +const String + C_sList_IncludedServices("Services' Summary"); +const String + C_sList_IncludedServices_Heading("Included Services - Summary"); +const String + C_sList_IncludedServices_Label("ServicesSummary"); +const String + C_sList_IncludedServicesDetails("Services' Details"); +const String + C_sList_IncludedServicesDetails_Heading("Included Services - Details"); +const String + C_sList_IncludedServicesDetails_Label("ServicesDetails"); +const String + C_sList_ExportedInterfaces("Interfaces' Summary"); +const String + C_sList_ExportedInterfaces_Heading("Exported Interfaces - Summary"); +const String + C_sList_ExportedInterfaces_Label("InterfacesSummary"); +const String + C_sList_ExportedInterfacesDetails("Interfaces' Details"); +const String + C_sList_ExportedInterfacesDetails_Heading("Exported Interfaces - Details"); +const String + C_sList_ExportedInterfacesDetails_Label("InterfacesDetails"); +const String + C_sList_Properties("Properties' Summary"); +const String + C_sList_Properties_Label("PropertiesSummary"); +const String + C_sList_PropertiesDetails("Properties' Details"); +const String + C_sList_PropertiesDetails_Label("PropertiesDetails"); + + +enum E_SubListIndices +{ + sli_IncludedServicesSummary = 0, + sli_InterfacesSummary = 1, + sli_PropertiesSummary = 2, + sli_IncludedServicesDetails = 3, + sli_InterfacesDetails = 4, + sli_PropertiesDetails = 5 +}; + +} //anonymous namespace + + +HF_IdlService::HF_IdlService( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlService::~HF_IdlService() +{ + +} + +typedef ::ary::idl::ifc_service::attr + ServiceAttr; +typedef ::ary::Dyn_StdConstIterator< ::ary::idl::CommentedRelation > + dyn_comref_list; + +void +HF_IdlService::produce_CommentedRelations( const client & i_ce, + comref_list & it_list, + const String & i_summaryTitle, + const String & i_summaryLabel, + const String & i_detailsTitle, + const String & i_detailsLabel, + const E_DocType i_docType ) const +{ + csv_assert( it_list ); + + bool bSummaryOnly = ( i_docType == doctype_summaryOnly ); + HF_SubTitleTable aTable( + CurOut(), + bSummaryOnly ? i_summaryLabel : i_detailsLabel, + bSummaryOnly ? i_summaryTitle : i_detailsTitle, + 2 ); + + for ( ; it_list; ++it_list ) + { + Xml::Element & + rRow = aTable.Add_Row(); + + if ( bSummaryOnly ) + { + produce_Link(rRow, (*it_list).Type()); + produce_LinkSummary(i_ce, rRow, *it_list); + } + else + { + HF_IdlCommentedRelationElement + aRelation( Env(), aTable, *it_list ); + aRelation.Produce_byData( i_ce ); + } + } // end for +} + +void +HF_IdlService::Produce_byData( const client & i_ce ) const +{ + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Service, i_ce); + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + // produce ... + // - included services: summary + dyn_comref_list dpIncludedServices; + ServiceAttr::Get_IncludedServices(dpIncludedServices, i_ce); + if ( (*dpIncludedServices).operator bool() ) + { + produce_CommentedRelations( i_ce, *dpIncludedServices, + C_sList_IncludedServices_Heading, + C_sList_IncludedServices_Label, + C_sList_IncludedServicesDetails_Heading, + C_sList_IncludedServicesDetails_Label, + doctype_summaryOnly ); + pNaviSubRow->SwitchOn(sli_IncludedServicesSummary); + } + + // - exported interfaces: summary + dyn_comref_list dpExportedInterfaces; + ServiceAttr::Get_ExportedInterfaces(dpExportedInterfaces, i_ce); + if ( (*dpExportedInterfaces).operator bool() ) + { + produce_CommentedRelations( i_ce, *dpExportedInterfaces, + C_sList_ExportedInterfaces_Heading, + C_sList_ExportedInterfaces_Label, + C_sList_ExportedInterfacesDetails_Heading, + C_sList_ExportedInterfacesDetails_Label, + doctype_summaryOnly ); + pNaviSubRow->SwitchOn(sli_InterfacesSummary); + } + + // - supported properties: summary + dyn_ce_list dpProperties; + ServiceAttr::Get_Properties(dpProperties, i_ce); + if ( (*dpProperties).operator bool() ) + { + produce_Members( *dpProperties, + C_sList_Properties, + C_sList_Properties_Label, + C_sList_PropertiesDetails, + C_sList_PropertiesDetails_Label, + viewtype_summary ); + pNaviSubRow->SwitchOn(sli_PropertiesSummary); + } + + // - included services: details + ServiceAttr::Get_IncludedServices(dpIncludedServices, i_ce); + if ( (*dpIncludedServices).operator bool() ) + { + produce_CommentedRelations( i_ce, *dpIncludedServices, + C_sList_IncludedServices_Heading, + C_sList_IncludedServices_Label, + C_sList_IncludedServicesDetails_Heading, + C_sList_IncludedServicesDetails_Label, + doctype_complete ); + pNaviSubRow->SwitchOn(sli_IncludedServicesDetails); + } + + // - exported interfaces: details + ServiceAttr::Get_ExportedInterfaces(dpExportedInterfaces, i_ce); + if ( (*dpExportedInterfaces).operator bool() ) + { + produce_CommentedRelations( i_ce, *dpExportedInterfaces, + C_sList_ExportedInterfaces_Heading, + C_sList_ExportedInterfaces_Label, + C_sList_ExportedInterfacesDetails_Heading, + C_sList_ExportedInterfacesDetails_Label, + doctype_complete ); + pNaviSubRow->SwitchOn(sli_InterfacesDetails); + } + + // supported properties: details + ServiceAttr::Get_Properties(dpProperties, i_ce); + if ( (*dpProperties).operator bool() ) + { + produce_Members( *dpProperties, + C_sList_Properties, + C_sList_Properties_Label, + C_sList_PropertiesDetails, + C_sList_PropertiesDetails_Label, + viewtype_details ); + pNaviSubRow->SwitchOn(sli_PropertiesDetails); + } + + pNaviSubRow->Produce_Row(); + CurOut() << new Xml::XmlCode("<br> "); +} + +typedef ary::idl::ifc_property::attr PropertyAttr; + +void +HF_IdlService::produce_SummaryDeclaration( Xml::Element & o_row, + const client & i_property ) const +{ + // KORR_FUTURE + // Put this in to HF_IdlProperty! + + Xml::Element & + rCell = o_row + >> *new Html::TableCell + << new Html::ClassAttr( C_sCellStyle_SummaryLeft ); + + if (PropertyAttr::HasAnyStereotype(i_property)) + { + rCell << "[ "; + if (PropertyAttr::IsReadOnly(i_property)) + rCell << "readonly "; + if (PropertyAttr::IsBound(i_property)) + rCell << "bound "; + if (PropertyAttr::IsConstrained(i_property)) + rCell << "constrained "; + if (PropertyAttr::IsMayBeAmbiguous(i_property)) + rCell << "maybeambiguous "; + if (PropertyAttr::IsMayBeDefault(i_property)) + rCell << "maybedefault "; + if (PropertyAttr::IsMayBeVoid(i_property)) + rCell << "maybevoid "; + if (PropertyAttr::IsRemovable(i_property)) + rCell << "removable "; + if (PropertyAttr::IsTransient(i_property)) + rCell << "transient "; + rCell << "] "; + } // end if + + HF_IdlTypeText + aType( Env(), rCell, true ); + aType.Produce_byData( PropertyAttr::Type(i_property) ); + + StreamLock aLocalLink(100); + aLocalLink() << "#" << i_property.LocalName(); + rCell + << new Html::LineBreak + >> *new Html::Link( aLocalLink().c_str() ) + << i_property.LocalName(); +} + +DYN HF_NaviSubRow & +HF_IdlService::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce); + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + ret.AddItem(C_sList_IncludedServices, C_sList_IncludedServices_Label, false); + ret.AddItem(C_sList_ExportedInterfaces, C_sList_ExportedInterfaces_Label, false); + ret.AddItem(C_sList_Properties, C_sList_Properties_Label, false); + ret.AddItem(C_sList_IncludedServicesDetails, C_sList_IncludedServicesDetails_Label, false); + ret.AddItem(C_sList_ExportedInterfacesDetails, C_sList_ExportedInterfacesDetails_Label, false); + ret.AddItem(C_sList_PropertiesDetails, C_sList_PropertiesDetails_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +void +HF_IdlService::produce_Link( Xml::Element & o_row, + type_id i_type ) const +{ + Xml::Element & + rCell = o_row + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_SummaryLeft); + HF_IdlTypeText + aText(Env(), rCell, true); + aText.Produce_byData(i_type); +} + +void +HF_IdlService::produce_LinkSummary( const client & i_ce, + Xml::Element & o_row, + const comref & i_commentedRef ) const +{ + Xml::Element & + rCell = o_row + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_SummaryRight); + + HF_IdlCommentedRelationElement::produce_LinkDoc( Env(), i_ce, rCell, i_commentedRef, doctype_summaryOnly ); +} + +void +HF_IdlService::produce_MemberDetails( HF_SubTitleTable & o_table, + const client & i_ce ) const +{ + HF_IdlProperty + aProperty( Env(), o_table); + aProperty.Produce_byData( i_ce ); +} + + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_service.hxx b/autodoc/source/display/idl/hfi_service.hxx new file mode 100644 index 000000000000..95c6f4163548 --- /dev/null +++ b/autodoc/source/display/idl/hfi_service.hxx @@ -0,0 +1,101 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_SERVICE_HXX +#define ADC_DISPLAY_HFI_SERVICE_HXX + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_comrela.hxx> + +class HF_NaviSubRow; +class HF_SubTitleTable; + +class HF_IdlService : public HtmlFactory_Idl +{ + public: + typedef ::ary::idl::CommentedRelation comref; + typedef ::ary::StdConstIterator< comref > comref_list; + + HF_IdlService( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlService(); + + void Produce_byData( + const client & i_ce ) const; + private: + // Overwritten from HtmlFactory_Idl: + virtual void produce_SummaryDeclaration( + Xml::Element & o_row, + const client & i_ce ) const; + + // Locals + DYN HF_NaviSubRow & make_Navibar( + const client & i_ce ) const; + + void produce_Link( + Xml::Element & o_row, + type_id i_type ) const; + void produce_LinkSummary( + const client & i_ce, + Xml::Element & o_row, + const comref & i_commentedRef ) const; + + void produce_MemberDetails( /// of property + HF_SubTitleTable & o_table, + const client & i_ce ) const; + + void produce_CommentedRelations( + const client & i_ce, + comref_list & it_list, + const String & i_summaryTitle, + const String & i_summaryLabel, + const String & i_detailsTitle, + const String & i_detailsLabel, + const E_DocType i_docType ) const; + +}; + + + +// IMPLEMENTATION + +extern const String + C_sCePrefix_Service; + + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_singleton.cxx b/autodoc/source/display/idl/hfi_singleton.cxx new file mode 100644 index 000000000000..39daf4b927ee --- /dev/null +++ b/autodoc/source/display/idl/hfi_singleton.cxx @@ -0,0 +1,136 @@ +/* -*- 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 "hfi_singleton.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_singleton.hxx> +#include <ary/idl/ik_sisingleton.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + + +extern const String + C_sCePrefix_Singleton("singleton"); + +const String + C_sAssociatedService("Associated Service"); +const String + C_sImplementedInterface("Supported Interface"); + + + +HF_IdlSingleton::HF_IdlSingleton( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlSingleton::~HF_IdlSingleton() +{ + +} + +typedef ::ary::idl::ifc_singleton::attr SingletonAttr; +typedef ::ary::idl::ifc_sglifcsingleton::attr SglIfcSingletonAttr; + +void +HF_IdlSingleton::Produce_byData_ServiceBased( const client & i_ce ) const +{ + make_Navibar(i_ce); + + HF_TitleTable + aTitle(CurOut()); + + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Singleton, i_ce); + + HF_DocEntryList + aTopList( aTitle.Add_Row() ); + aTopList.Produce_Term(C_sAssociatedService); + + HF_IdlTypeText + aAssociatedService( Env(), aTopList.Produce_Definition(), true ); + aAssociatedService.Produce_byData( SingletonAttr::AssociatedService(i_ce) ); + + CurOut() << new Html::HorizontalLine; + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); +} + +void +HF_IdlSingleton::Produce_byData_InterfaceBased( const client & i_ce ) const +{ + make_Navibar(i_ce); + + HF_TitleTable + aTitle(CurOut()); + + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Singleton, i_ce); + + HF_DocEntryList + aTopList( aTitle.Add_Row() ); + aTopList.Produce_Term(C_sImplementedInterface); + + HF_IdlTypeText + aImplementedInterface( Env(), aTopList.Produce_Definition(), true ); + aImplementedInterface.Produce_byData( SglIfcSingletonAttr::BaseInterface(i_ce) ); + + CurOut() << new Html::HorizontalLine; + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); +} + +void +HF_IdlSingleton::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce,true); // true := avoid link to Use-page. + + CurOut() << new Html::HorizontalLine(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_singleton.hxx b/autodoc/source/display/idl/hfi_singleton.hxx new file mode 100644 index 000000000000..3d1ec1b5c2fd --- /dev/null +++ b/autodoc/source/display/idl/hfi_singleton.hxx @@ -0,0 +1,71 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_SINGLETON_HXX +#define ADC_DISPLAY_HFI_SINGLETON_HXX + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + +class HF_NaviSubRow; + + +class HF_IdlSingleton : public HtmlFactory_Idl +{ + public: + HF_IdlSingleton( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlSingleton(); + + void Produce_byData_ServiceBased( + const client & i_ce ) const; + void Produce_byData_InterfaceBased( + const client & i_ce ) const; + private: + void make_Navibar( + const client & i_ce ) const; +}; + + + +// IMPLEMENTATION + +extern const String + C_sCePrefix_Singleton; + + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_siservice.cxx b/autodoc/source/display/idl/hfi_siservice.cxx new file mode 100644 index 000000000000..7e36c79e07c1 --- /dev/null +++ b/autodoc/source/display/idl/hfi_siservice.cxx @@ -0,0 +1,178 @@ +/* -*- 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 "hfi_siservice.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_function.hxx> +#include <ary/idl/ik_siservice.hxx> +#include <ary/doc/d_oldidldocu.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_doc.hxx" +#include "hfi_method.hxx" +#include "hfi_navibar.hxx" +#include "hfi_typetext.hxx" +#include "hi_env.hxx" +#include "hi_linkhelper.hxx" + + + +namespace +{ + +const String + C_sImplementedInterface("Supported Interface"); + +const String + C_sList_Constructors("Constructors' Summary"); +const String + C_sList_Constructors_Label("ConstructorsSummary"); +const String + C_sDetails_Constructors("Constructors' Details"); +const String + C_sDetails_Constructors_Label("ConstructorsDetails"); + + +enum E_SubListIndices +{ + sli_ConstructorsSummary = 0, + sli_ConstructorsDetails = 1 +}; + +} //anonymous namespace + + +HF_IdlSglIfcService::HF_IdlSglIfcService( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlSglIfcService::~HF_IdlSglIfcService() +{ +} + +typedef ::ary::idl::ifc_sglifcservice::attr SglIfcServiceAttr; + +void +HF_IdlSglIfcService::Produce_byData( const client & i_ce ) const +{ + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Service, i_ce); + + HF_DocEntryList + aTopList( aTitle.Add_Row() ); + aTopList.Produce_Term(C_sImplementedInterface); + + HF_IdlTypeText + aImplementedInterface( Env(), aTopList.Produce_Definition(), true, &i_ce); + aImplementedInterface.Produce_byData( SglIfcServiceAttr::BaseInterface(i_ce) ); + + CurOut() << new Html::HorizontalLine; + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + dyn_ce_list + dpConstructors; + SglIfcServiceAttr::Get_Constructors(dpConstructors, i_ce); + if ( (*dpConstructors).operator bool() ) + { + produce_Members( *dpConstructors, + C_sList_Constructors, + C_sList_Constructors_Label, + C_sDetails_Constructors, + C_sDetails_Constructors_Label ); + pNaviSubRow->SwitchOn(sli_ConstructorsSummary); + pNaviSubRow->SwitchOn(sli_ConstructorsDetails); + } + + pNaviSubRow->Produce_Row(); + CurOut() << new Xml::XmlCode("<br> "); +} + +DYN HF_NaviSubRow & +HF_IdlSglIfcService::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce, true); + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + ret.AddItem(C_sList_Constructors, C_sList_Constructors_Label, false); + ret.AddItem(C_sDetails_Constructors, C_sDetails_Constructors_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +typedef ary::idl::ifc_function::attr funcAttr; + +void +HF_IdlSglIfcService::produce_MemberDetails( HF_SubTitleTable & o_table, + const client & i_ce ) const +{ + HF_IdlMethod + aConstructor( Env(), + o_table.Add_Row() + >> *new Html::TableCell + << new Html::ClassAttr(C_sCellStyle_MDetail) ); + + ary::Dyn_StdConstIterator<ary::idl::Parameter> + pParameters; + funcAttr::Get_Parameters(pParameters, i_ce); + + ary::Dyn_StdConstIterator<ary::idl::Type_id> + pExceptions; + funcAttr::Get_Exceptions(pExceptions, i_ce); + + aConstructor.Produce_byData( i_ce.LocalName(), + funcAttr::ReturnType(i_ce), + *pParameters, + *pExceptions, + funcAttr::IsOneway(i_ce), + funcAttr::HasEllipse(i_ce), + i_ce ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_siservice.hxx b/autodoc/source/display/idl/hfi_siservice.hxx new file mode 100644 index 000000000000..e1953a93a1ca --- /dev/null +++ b/autodoc/source/display/idl/hfi_siservice.hxx @@ -0,0 +1,74 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_SISERVICE_HXX +#define ADC_DISPLAY_HFI_SISERVICE_HXX + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS +#include <ary/idl/i_comrela.hxx> + +class HF_NaviSubRow; +class HF_SubTitleTable; + +class HF_IdlSglIfcService : public HtmlFactory_Idl +{ + public: + HF_IdlSglIfcService( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlSglIfcService(); + + void Produce_byData( + const client & i_ce ) const; + private: + DYN HF_NaviSubRow & make_Navibar( + const client & i_ce ) const; + + void produce_MemberDetails( + HF_SubTitleTable & o_table, + const client & i_ce ) const; +}; + + + +// IMPLEMENTATION + +extern const String + C_sCePrefix_Service; + + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_struct.cxx b/autodoc/source/display/idl/hfi_struct.cxx new file mode 100644 index 000000000000..ada9d7618ca2 --- /dev/null +++ b/autodoc/source/display/idl/hfi_struct.cxx @@ -0,0 +1,206 @@ +/* -*- 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 "hfi_struct.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_struct.hxx> +#include <ary/idl/ik_exception.hxx> +#include <ary/idl/ik_struct.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_navi_sub.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_property.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sCePrefix_Struct("struct"); +extern const String + C_sCePrefix_Exception("exception"); + + +namespace +{ + +const String + C_sBaseStruct("Base Hierarchy"); +const String + C_sBaseException("Base Hierarchy"); + +const String + C_sList_Elements("Elements' Summary"); +const String + C_sList_Elements_Label("Elements"); + +const String + C_sList_ElementDetails("Elements' Details"); +const String + C_sList_ElementDetails_Label("ElementDetails"); + +enum E_SubListIndices +{ + sli_ElementsSummary = 0, + sli_ElementsDetails = 1 +}; + +} // anonymous namespace + + + +HF_IdlStruct::HF_IdlStruct( Environment & io_rEnv, + Xml::Element & o_rOut, + bool i_bIsException ) + : HtmlFactory_Idl(io_rEnv, &o_rOut), + bIsException(i_bIsException) +{ +} + +HF_IdlStruct::~HF_IdlStruct() +{ +} + +void +HF_IdlStruct::Produce_byData( const client & i_ce ) const +{ + const ary::idl::Struct * + pStruct = + bIsException + ? 0 + : static_cast< const ary::idl::Struct* >(&i_ce); + bool bIsTemplate = + pStruct != 0 + ? pStruct->TemplateParameterType().IsValid() + : false; + + Dyn<HF_NaviSubRow> + pNaviSubRow( &make_Navibar(i_ce) ); + + HF_TitleTable + aTitle(CurOut()); + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + + // Title: + StreamLock + slAnnotations(200); + get_Annotations(slAnnotations(), i_ce); + + StreamLock rTitle(200); + if (bIsTemplate) + rTitle() << "template "; + rTitle() + << (bIsException + ? C_sCePrefix_Exception + : C_sCePrefix_Struct) + << " " + << i_ce.LocalName(); + if (bIsTemplate) + { + csv_assert(pStruct != 0); + rTitle() + << "<" + << pStruct->TemplateParameter() + << ">"; + } + aTitle.Produce_Title(slAnnotations().c_str(), rTitle().c_str()); + + // Bases: + produce_Bases( aTitle.Add_Row(), + i_ce, + bIsException + ? C_sBaseException + : C_sBaseStruct ); + + // Docu: + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); + + // Elements: + dyn_ce_list + dpElements; + if (bIsException) + ary::idl::ifc_exception::attr::Get_Elements(dpElements, i_ce); + else + ary::idl::ifc_struct::attr::Get_Elements(dpElements, i_ce); + + if ( (*dpElements).operator bool() ) + { + produce_Members( *dpElements, + C_sList_Elements, + C_sList_Elements_Label, + C_sList_ElementDetails, + C_sList_ElementDetails_Label ); + pNaviSubRow->SwitchOn(sli_ElementsSummary); + pNaviSubRow->SwitchOn(sli_ElementsDetails); + } + pNaviSubRow->Produce_Row(); +} + +HtmlFactory_Idl::type_id +HF_IdlStruct::inq_BaseOf( const client & i_ce ) const +{ + return bIsException + ? ary::idl::ifc_exception::attr::Base(i_ce) + : ary::idl::ifc_struct::attr::Base(i_ce); +} + +HF_NaviSubRow & +HF_IdlStruct::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce); + + DYN HF_NaviSubRow & + ret = aNaviBar.Add_SubRow(); + ret.AddItem(C_sList_Elements, C_sList_Elements_Label, false); + ret.AddItem(C_sList_ElementDetails, C_sList_ElementDetails_Label, false); + + CurOut() << new Html::HorizontalLine(); + return ret; +} + +void +HF_IdlStruct::produce_MemberDetails( HF_SubTitleTable & o_table, + const client & i_ce) const +{ + HF_IdlStructElement + aElement( Env(), o_table ); + aElement.Produce_byData(i_ce); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_struct.hxx b/autodoc/source/display/idl/hfi_struct.hxx new file mode 100644 index 000000000000..4c51a4c66c84 --- /dev/null +++ b/autodoc/source/display/idl/hfi_struct.hxx @@ -0,0 +1,81 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_STRUCT_HXX +#define ADC_DISPLAY_HFI_STRUCT_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + +/** Is used to display ->ary::idl::Exception s as well as ->ary::idl::Struct s. +*/ +class HF_IdlStruct : public HtmlFactory_Idl +{ + public: + + HF_IdlStruct( + Environment & io_rEnv, + Xml::Element & o_rOut, + bool i_bIsException ); + virtual ~HF_IdlStruct(); + + void Produce_byData( + const client & ce ) const; + private: + // Interface HtmlFactory_Idl: + virtual type_id inq_BaseOf( + const client & i_ce ) const; + // Locals + HF_NaviSubRow & make_Navibar( + const client & ce ) const; + virtual void produce_MemberDetails( + HF_SubTitleTable & o_table, + const client & ce ) const; + // DATA + bool bIsException; +}; + + + +// IMPLEMENTATION + + +extern const String + C_sCePrefix_Struct; +extern const String + C_sCePrefix_Exception; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_tag.cxx b/autodoc/source/display/idl/hfi_tag.cxx new file mode 100644 index 000000000000..a2b97a4b41ff --- /dev/null +++ b/autodoc/source/display/idl/hfi_tag.cxx @@ -0,0 +1,357 @@ +/* -*- 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 "hfi_tag.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_module.hxx> +#include <ary_i/ci_text2.hxx> +#include <ary_i/d_token.hxx> +#include <toolkit/out_tree.hxx> +#include <adc_cl.hxx> +#include <adc_msg.hxx> +#include "hfi_typetext.hxx" +#include "hi_ary.hxx" +#include "hi_env.hxx" +#include "hi_linkhelper.hxx" + + +using ary::inf::DocuTex2; + + +inline void +HF_IdlTag::Enter_TextOut( Xml::Element & o_rText ) const +{ + aTextOut.Out().Enter(o_rText); +} + +inline void +HF_IdlTag::Leave_TextOut() const +{ + aTextOut.Out().Leave(); +} + +inline void +HF_IdlTag::PutText_Out( const ary::inf::DocuTex2 & i_rText ) const +{ + i_rText.DisplayAt( const_cast< HF_IdlDocuTextDisplay& >(aTextOut) ); +} + + + +HF_IdlTag::HF_IdlTag( Environment & io_rEnv, + const ary::idl::CodeEntity & i_rScopeGivingCe ) + : HtmlFactory_Idl( io_rEnv, 0 ), + pTitleOut(0), + aTextOut(io_rEnv, 0, i_rScopeGivingCe) +{ +} + +HF_IdlTag::~HF_IdlTag() +{ +} + +void +HF_IdlTag::Produce_byData( Xml::Element & o_rTitle, + Xml::Element & o_rText, + const ary::inf::AtTag2 & i_rTag ) const +{ + pTitleOut = &o_rTitle; + Enter_TextOut(o_rText); + i_rTag.DisplayAt( const_cast< HF_IdlTag& >(*this) ); + Leave_TextOut(); +} + +void +HF_IdlTag::Produce_byData( Xml::Element & o_rTitle, + Xml::Element & o_rText, + const std::vector< csi::dsapi::DT_SeeAlsoAtTag* > & + i_seeAlsoVector ) const +{ + o_rTitle << "See also"; + for ( std::vector< csi::dsapi::DT_SeeAlsoAtTag* >::const_iterator + it = i_seeAlsoVector.begin(); + it != i_seeAlsoVector.end(); + ++it ) + { + if (it != i_seeAlsoVector.begin()) + { + o_rText << ", "; + } + HF_IdlTypeText + aLinkText(Env(), o_rText, true, &aTextOut.ScopeGivingCe()); + aLinkText.Produce_byData( (*it)->LinkText() ); + } +} + +void +HF_IdlTag::Display_StdAtTag( const csi::dsapi::DT_StdAtTag & i_rTag ) +{ + if ( i_rTag.Text().IsEmpty() ) + return; + + csv_assert( pTitleOut != 0 ); + *pTitleOut << i_rTag.Title(); + PutText_Out( i_rTag.Text() ); +} + +void +HF_IdlTag::Display_SeeAlsoAtTag( const csi::dsapi::DT_SeeAlsoAtTag & i_rTag ) +{ + if ( i_rTag.Text().IsEmpty() ) + return; + + csv_assert( pTitleOut != 0 ); + *pTitleOut << "See also"; + + HF_IdlTypeText aLinkText(Env(),aTextOut.CurOut(),true, &aTextOut.ScopeGivingCe()); + aLinkText.Produce_byData( i_rTag.LinkText() ); + + aTextOut.CurOut() << new Html::LineBreak; + PutText_Out( i_rTag.Text() ); +} + +void +HF_IdlTag::Display_ParameterAtTag( const csi::dsapi::DT_ParameterAtTag & i_rTag ) +{ + csv_assert( pTitleOut != 0 ); + StreamLock sl(100); + *pTitleOut + << ( sl() << "Parameter " << i_rTag.Title() << c_str ); + PutText_Out( i_rTag.Text() ); +} + +void +HF_IdlTag::Display_SinceAtTag( const csi::dsapi::DT_SinceAtTag & i_rTag ) +{ + csv_assert(pTitleOut != 0); + + if ( i_rTag.Text().IsEmpty() ) + { + return; + } + + // Transform the value of the @since tag into the text to be displayed. + String sDisplay = + autodoc::CommandLine::Get_().DisplayOf_SinceTagValue( + i_rTag.Text().TextOfFirstToken() ); + if (sDisplay.empty()) + return; + + *pTitleOut << "Since "; + DocuTex2 aHelp; + aHelp.AddToken(* new csi::dsapi::DT_TextToken(sDisplay)); + PutText_Out(aHelp); +} + + +//******************** HF_IdlShortDocu *********************/ + +HF_IdlShortDocu::HF_IdlShortDocu( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl( io_rEnv, &o_rOut ) +{ +} + +HF_IdlShortDocu::~HF_IdlShortDocu() +{ +} + +void +HF_IdlShortDocu::Produce_byData( const ary::idl::CodeEntity & i_rCe ) +{ + const ce_info * + pDocu = Get_IdlDocu(i_rCe.Docu()); + if (pDocu == 0) + return; + + const ce_info & + rDocu = *pDocu; + if ( rDocu.IsDeprecated() ) + { + CurOut() + >> *new Html::Bold + << "[ DEPRECATED ]" << new Html::LineBreak; + } + if ( rDocu.IsOptional() ) + { + CurOut() + >> *new Html::Bold + << "[ OPTIONAL ]" << new Html::LineBreak; + } + + HF_IdlDocuTextDisplay + aText( Env(), &CurOut(), i_rCe); + rDocu.Short().DisplayAt(aText); +} + + +//******************** HF_IdlDocuTextDisplay *********************/ + + +HF_IdlDocuTextDisplay::HF_IdlDocuTextDisplay( Environment & io_rEnv, + Xml::Element * o_pOut, + const ary::idl::CodeEntity & i_rScopeGivingCe ) + : HtmlFactory_Idl(io_rEnv, o_pOut), + sScope(), + sLinkToken(), + bGatherLink(false), + pScopeGivingCe(&i_rScopeGivingCe) +{ +} + +HF_IdlDocuTextDisplay::~HF_IdlDocuTextDisplay() +{ +} + +void +HF_IdlDocuTextDisplay::Display_TextToken( const csi::dsapi::DT_TextToken & i_rToken ) +{ + if (bGatherLink) + { + if (sLinkToken.length() == 0) + { + sLinkToken = i_rToken.GetText(); + return; + } + else + { + if ( pScopeGivingCe == 0 ) + { // only in original file + TheMessages().Out_TypeVsMemberMisuse(sLinkToken, Env().CurPageCe_AsText(), 0); + } + + StopLinkGathering(); + } + } // endif (bGatherLink) + + CurOut() << new Xml::XmlCode( i_rToken.GetText() ); +} + +void +HF_IdlDocuTextDisplay::Display_White() +{ + CurOut() << " "; +} + +void +HF_IdlDocuTextDisplay::Display_MupType( const csi::dsapi::DT_MupType & i_rToken ) +{ + if (i_rToken.IsBegin()) + { + StartLinkGathering(i_rToken.Scope()); + } + else + { + if (bGatherLink) + { + CreateTypeLink(); + StopLinkGathering(); + } + } +} + +void +HF_IdlDocuTextDisplay::Display_MupMember( const csi::dsapi::DT_MupMember & i_rToken ) +{ + if (i_rToken.IsBegin()) + { + StartLinkGathering(i_rToken.Scope()); + } + else + { + if (bGatherLink) + { + CreateMemberLink(); + StopLinkGathering(); + } + } +} + +void +HF_IdlDocuTextDisplay::Display_MupConst( const csi::dsapi::DT_MupConst & i_rToken ) +{ + CurOut() + >> *new Html::Bold + << i_rToken.GetText(); +} + +void +HF_IdlDocuTextDisplay::Display_Style( const csi::dsapi::DT_Style & i_rToken ) +{ + CurOut() << new Xml::XmlCode( i_rToken.GetText() ); +} + +void +HF_IdlDocuTextDisplay::Display_EOL() +{ + CurOut() << "\n"; +} + +void +HF_IdlDocuTextDisplay::CreateTypeLink() +{ + if (strchr(sLinkToken,':') != 0) + { + TheMessages().Out_TypeVsMemberMisuse(sLinkToken, Env().CurPageCe_AsFile(".idl"), 0); + CurOut() << sLinkToken; + return; + } + HF_IdlTypeText aLink(Env(), CurOut(), true, &ScopeGivingCe()); + aLink.Produce_LinkInDocu(sScope, sLinkToken, String::Null_()); +} + +void +HF_IdlDocuTextDisplay::CreateMemberLink() +{ + + HF_IdlTypeText aLink(Env(), CurOut(), true, &ScopeGivingCe()); + + const char * + sSplit = strchr(sLinkToken,':'); + + if (sSplit != 0) + { + String sCe(sLinkToken.c_str(), sSplit - sLinkToken.c_str()); + String sMember(sSplit+2); + + if (NOT sScope.empty() OR ScopeGivingCe().LocalName() != sCe ) + aLink.Produce_LinkInDocu(sScope, sCe, sMember); + else + aLink.Produce_LocalLinkInDocu(sMember); + } + else + { + aLink.Produce_LocalLinkInDocu(sLinkToken); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_tag.hxx b/autodoc/source/display/idl/hfi_tag.hxx new file mode 100644 index 000000000000..ed247bf27a4a --- /dev/null +++ b/autodoc/source/display/idl/hfi_tag.hxx @@ -0,0 +1,180 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_TAG_HXX +#define ADC_DISPLAY_HFI_TAG_HXX + +// BASE CLASSES +#include "hi_factory.hxx" +#include <ary_i/disdocum.hxx> +// USED SERVICES +#include <ary/idl/i_types4idl.hxx> +#include <ary_i/ci_atag2.hxx> +#include <ary_i/ci_text2.hxx> +#include <ary/doc/d_oldidldocu.hxx> + +#include <toolkit/hf_docentry.hxx> + +namespace ary +{ +namespace idl +{ + class Module; +} +} + + + + +/** This class is an implementation of ary::inf::DocuText_Display + and will be used by that interface. +*/ +class HF_IdlDocuTextDisplay : public HtmlFactory_Idl, + public ary::inf::DocuText_Display +{ + public: + HF_IdlDocuTextDisplay( + Environment & io_rEnv, + Xml::Element * o_pOut, + const ary::idl::CodeEntity & + i_rScopeGivingCe ); + virtual ~HF_IdlDocuTextDisplay(); + + const ary::idl::CodeEntity & + ScopeGivingCe() const { return *pScopeGivingCe; } + private: + virtual void Display_TextToken( + const csi::dsapi::DT_TextToken & + i_rToken ); + virtual void Display_White(); + + virtual void Display_MupType( + const csi::dsapi::DT_MupType & + i_rToken ); + virtual void Display_MupMember( + const csi::dsapi::DT_MupMember & + i_rToken ); + virtual void Display_MupConst( + const csi::dsapi::DT_MupConst & + i_rToken ); + virtual void Display_Style( + const csi::dsapi::DT_Style & i_rToken ); + virtual void Display_EOL(); + + // Local + void StartLinkGathering( + const String & i_sScope ) + { sLinkToken = ""; sScope = i_sScope; bGatherLink = true; } + void StopLinkGathering() { bGatherLink = false; } + /** @precond + The scope is in sScope, the name is in sLinkToken. + */ + void CreateTypeLink(); + /** @precond + The scope is in sScope, the qualified member-name is in sLinkToken. + */ + void CreateMemberLink(); + + // DATA + String sScope; + String sLinkToken; + bool bGatherLink; + const ary::idl::CodeEntity * + pScopeGivingCe; +}; + + + +class HF_IdlShortDocu : public HtmlFactory_Idl +{ + public: + HF_IdlShortDocu( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlShortDocu(); + + void Produce_byData( + const ary::idl::CodeEntity & + i_rCe ); +}; + + + +class HF_IdlTag : public HtmlFactory_Idl, + public ary::inf::DocuTag_Display +{ + public: + HF_IdlTag( + Environment & io_rEnv, + const ary::idl::CodeEntity & + i_rScopeGivingCe ); + virtual ~HF_IdlTag(); + + void Produce_byData( + Xml::Element & o_rTitle, + Xml::Element & o_rText, + const ary::inf::AtTag2 & + i_rTag ) const; + void Produce_byData( + Xml::Element & o_rTitle, + Xml::Element & o_rText, + const std::vector< csi::dsapi::DT_SeeAlsoAtTag* > & + i_seeAlsoVector ) const; + private: + virtual void Display_StdAtTag( + const csi::dsapi::DT_StdAtTag & + i_rToken ); + virtual void Display_SeeAlsoAtTag( + const csi::dsapi::DT_SeeAlsoAtTag & + i_rToken ); + virtual void Display_ParameterAtTag( + const csi::dsapi::DT_ParameterAtTag & + i_rToken ); + virtual void Display_SinceAtTag( + const csi::dsapi::DT_SinceAtTag & + i_rToken ); + + void Enter_TextOut( + Xml::Element & o_rText ) const; + void Leave_TextOut() const; + void PutText_Out( + const ary::inf::DocuTex2 & + i_rText ) const; + // DATA + mutable Xml::Element * + pTitleOut; + mutable HF_IdlDocuTextDisplay + aTextOut; +}; + + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_typedef.cxx b/autodoc/source/display/idl/hfi_typedef.cxx new file mode 100644 index 000000000000..b1b717572b65 --- /dev/null +++ b/autodoc/source/display/idl/hfi_typedef.cxx @@ -0,0 +1,95 @@ +/* -*- 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 "hfi_typedef.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_typedef.hxx> +#include <toolkit/hf_docentry.hxx> +#include <toolkit/hf_linachain.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + + +HF_IdlTypedef::HF_IdlTypedef( Environment & io_rEnv, + Xml::Element & o_rOut ) + : HtmlFactory_Idl(io_rEnv, &o_rOut) +{ +} + +HF_IdlTypedef::~HF_IdlTypedef() +{ +} + +typedef ary::idl::ifc_typedef::attr TypedefAttr; + +void +HF_IdlTypedef::Produce_byData( const client & i_ce ) const +{ + make_Navibar(i_ce); + + HF_TitleTable + aTitle(CurOut()); + + HF_LinkedNameChain + aNameChain(aTitle.Add_Row()); + + aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); + produce_Title(aTitle, C_sCePrefix_Typedef, i_ce); + + HF_DocEntryList + aTopList( aTitle.Add_Row() ); + aTopList.Produce_Term("Defining Type"); + + HF_IdlTypeText + aDefinition( Env(), aTopList.Produce_Definition(), true ); + aDefinition.Produce_byData( TypedefAttr::DefiningType(i_ce) ); + + CurOut() << new Html::HorizontalLine; + + write_Docu(aTitle.Add_Row(), i_ce); + CurOut() << new Html::HorizontalLine(); +} + +void +HF_IdlTypedef::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeMainRow(i_ce); + + CurOut() << new Html::HorizontalLine(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_typedef.hxx b/autodoc/source/display/idl/hfi_typedef.hxx new file mode 100644 index 000000000000..3ef08d494fe4 --- /dev/null +++ b/autodoc/source/display/idl/hfi_typedef.hxx @@ -0,0 +1,67 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_TYPEDEF_HXX +#define ADC_DISPLAY_HFI_TYPEDEF_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + + +class HF_IdlTypedef : public HtmlFactory_Idl +{ + public: + HF_IdlTypedef( + Environment & io_rEnv, + Xml::Element & o_rOut ); + virtual ~HF_IdlTypedef(); + + void Produce_byData( + const client & ce ) const; + private: + void make_Navibar( + const client & ce ) const; +}; + + + +// IMPLEMENTATION + + +const String + C_sCePrefix_Typedef("typedef"); + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_typetext.cxx b/autodoc/source/display/idl/hfi_typetext.cxx new file mode 100644 index 000000000000..458f5d12ae02 --- /dev/null +++ b/autodoc/source/display/idl/hfi_typetext.cxx @@ -0,0 +1,760 @@ +/* -*- 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 "hfi_typetext.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <string.h> +#include <ary/idl/i_type.hxx> +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_module.hxx> +#include <ary/idl/i_module.hxx> +#include <ary/idl/ik_ce.hxx> +#include <adc_cl.hxx> +#include <adc_msg.hxx> +#include "hi_linkhelper.hxx" + + + + + + +inline const ary::idl::Module * +HF_IdlTypeText::referingModule() const +{ + if (pReferingCe == 0) + return Env().Linker().Search_CurModule(); + else + return &Env().Data().Find_Module(pReferingCe->NameRoom()); +} + +inline const HF_IdlTypeText::client * +HF_IdlTypeText::referingCe() const +{ + return pReferingCe; +} + + +HF_IdlTypeText::HF_IdlTypeText( Environment & io_rEnv, + Xml::Element & o_rOut, + bool i_bWithLink, + const client * i_pScopeGivingCe ) + : HtmlFactory_Idl(io_rEnv, &o_rOut), + pReferingCe( i_pScopeGivingCe ), + bWithLink(i_bWithLink) +{ +} + +HF_IdlTypeText::HF_IdlTypeText( Environment & io_rEnv, + E_Index ) + : HtmlFactory_Idl(io_rEnv, 0), + pReferingCe( 0 ), + bWithLink(true) +{ +} + +HF_IdlTypeText::~HF_IdlTypeText() +{ +} + +void +HF_IdlTypeText::Produce_byData(ary::idl::Type_id i_idType) const +{ + StringVector aModule_; + String sName; + ce_id nCe; + int nSequenceCount = 0; + csv::erase_container(aModule_); + + const ary::idl::Type & + rType = Env().Data().Find_Type(i_idType); + Env().Data().Get_TypeText(aModule_, sName, nCe, nSequenceCount, rType); + + if ( Env().Data().IsBuiltInOrRelated(rType) ) + { + produce_BuiltIn(sName,nSequenceCount); + } + else + { + produce_FromStd( aModule_, + sName, + String::Null_(), + nSequenceCount, + (nCe.IsValid() ? exists_yes : exists_no), + rType.FirstEnclosedNonSequenceType(Env().Gate()).TemplateParameters() ); + } +} + +void +HF_IdlTypeText::Produce_byData( ary::idl::Ce_id i_idCe ) const +{ + StringVector aModule_; + String sCe; + String sMember; + csv::erase_container(aModule_); + + const ary::idl::CodeEntity & + rCe = Env().Data().Find_Ce(i_idCe); + Env().Data().Get_CeText(aModule_, sCe, sMember, rCe); + produce_FromStd(aModule_, sCe, sMember, 0, exists_yes); +} + +void +HF_IdlTypeText::Produce_byData( const String & i_sFullName ) const +{ + if ( strncmp(i_sFullName,"http://", 7) == 0 ) + { + CurOut() + >> *new Html::Link(i_sFullName) + << i_sFullName; + return; + } + + StringVector aModule_; + String sCe, + sMember; + int nSequence = 0; + String sTypeText; + csv::erase_container(aModule_); + + const ary::idl::Module * + pScopeModule = referingModule(); + if (pScopeModule == 0) + { + // SYNTAX_ERR, but rather logical error: Missing module. + CurOut() << i_sFullName; + // KORR_FUTURE + // How to put a message about this? + // errorOut_UnresolvedLink(i_sFullName); + return; + } + + const char * sTypeStart = strrchr(i_sFullName,'<'); + if ( sTypeStart != 0 ) + { + const char * sTypeEnd = strchr(i_sFullName,'>'); + if (sTypeEnd == 0) + { // SYNTAX_ERR + CurOut() << i_sFullName; + // KORR_FUTURE + // How to put a message about this? + // errorOut_UnresolvedLink(i_sFullName); + return; + } + + nSequence = count_Sequences(i_sFullName); + sTypeStart++; + sTypeText.assign(sTypeStart, sTypeEnd-sTypeStart); + } + else + { + sTypeText = i_sFullName; + } + + csv::erase_container(aModule_); + bool bFound = // KORR : Check the semantics of this, see if ce really exists, if it is a member? + Env().Data().Search_Ce( aModule_, + sCe,sMember, + sTypeText, + *pScopeModule ); + if (NOT bFound) + { + if ( strchr(sTypeText,':') == 0 + AND + *sTypeText.c_str() != 'X' ) // This is a HACK, make this correct! + { + Produce_LocalLinkInDocu(sTypeText); + return; + } + CurOut() << i_sFullName; + // KORR + // How to put a message about this? + // errorOut_UnresolvedLink(i_sFullName); + return; + } + + produce_FromStd(aModule_, sCe, sMember, nSequence, exists_yes); +} + +void +HF_IdlTypeText::Produce_LinkInDocu( const String & i_scope, + const String & i_name, + const String & i_member ) const +{ + StringVector aModule_; + String sName; + csv::erase_container(aModule_); + + const ary::idl::Module * + pScopeModule = referingModule(); + if (pScopeModule == 0) + { + // SYNTAX_ERR, but rather logical error: Missing module. + CurOut() << i_scope << "::" << i_name; + if (NOT i_member.empty()) + CurOut() << "::" << i_member; + return; + } + + bool + bFound = Env().Data().Search_CesModule( aModule_, + i_scope, + i_name, + *pScopeModule ); + if (NOT bFound) + { + CurOut() << i_scope << "::" << i_name; + if (NOT i_member.empty()) + CurOut() << "::" << i_member; + return; + } + produce_FromStd(aModule_, i_name, i_member, 0, exists_yes); +} + +void +HF_IdlTypeText::Produce_LocalLinkInDocu( const String & i_member ) const +{ + StringVector aModule_; + String sName; + csv::erase_container(aModule_); + + csv_assert(referingCe() != 0); + if ( referingModule() == Env().Linker().Search_CurModule() ) + { + StreamLock slLink(200); + if (referingCe()->SightLevel() == ary::idl::sl_Member) + { + slLink() << "#" << i_member; + } + else + { + slLink() << referingCe()->LocalName() + << ".html#" + << i_member; + } + CurOut() + >> *new Html::Link(slLink().c_str()) + << i_member; + return; + } + + String sDummyMember; + Env().Data().Get_CeText(aModule_, sName, sDummyMember, *referingCe()); + produce_FromStd(aModule_, sName, i_member, 0, exists_yes); +} + +void +HF_IdlTypeText::Produce_IndexLink( Xml::Element & o_out, + const client & i_ce ) const +{ + StringVector aModule_; + String sCe; + String sMember; + csv::erase_container(aModule_); + + Out().Enter(o_out); + + Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce); + produce_IndexLink(aModule_, sCe, sMember, false); + + Out().Leave(); +} + +void +HF_IdlTypeText::Produce_IndexOwnerLink( Xml::Element & o_out, + const client & i_owner ) const +{ + StringVector aModule_; + String sCe; + String sMember; + csv::erase_container(aModule_); + + Out().Enter(o_out); + + if (i_owner.Owner().IsValid()) + { + Env().Data().Get_CeText(aModule_, sCe, sMember, i_owner); + produce_IndexLink(aModule_, sCe, sMember, true); + } + else + { // global namespace: + + CurOut() + << "." + >> *new Html::Link("../module-ix.html") + << "global namespace"; + } + + + Out().Leave(); +} + +void +HF_IdlTypeText::Produce_IndexSecondEntryLink( Xml::Element & o_out, + const client & i_ce ) const +{ + StringVector aModule_; + String sCe; + String sMember; + csv::erase_container(aModule_); + + Out().Enter(o_out); + + Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce); + produce_IndexLink(aModule_, sCe, sMember, true); + Out().Leave(); +} + + +void +HF_IdlTypeText::produce_FromStd( const StringVector & i_module, + const String & i_ce, + const String & i_member, + int i_sequenceCount, + E_Existence i_ceExists, + const std::vector<ary::idl::Type_id> * + i_templateParameters ) const +{ + if (i_ceExists == exists_no) + { + if ( is_ExternLink(i_module) ) + { + produce_ExternLink(i_module,i_ce,i_member,i_sequenceCount,i_templateParameters); + return; + } + errorOut_UnresolvedLink(i_module, i_ce, i_member); + } + + output::Node & + rCeNode = Env().OutputTree().Provide_Node(i_module); + output::Position + aTargetPos(rCeNode); + bool + bShowModule = rCeNode != Env().CurPosition().RelatedNode() + ? i_module.size() > 0 + : false; + bool + bUseMember = NOT i_member.empty(); + bool + bLink2Module = i_ceExists == exists_yes; + bool + bLink2Ce = i_ceExists == exists_yes; + bool + bLink2Member = NOT Env().Is_MemberExistenceCheckRequired() + AND i_ceExists == exists_yes; + bool + bHasCeOrName = NOT i_ce.empty(); + + if (i_sequenceCount > 0) + start_Sequence(i_sequenceCount); + + StreamLock aLink(300); + StreamStr & rLink = aLink(); + + // Produce output: module + if (bShowModule) + { + int nMax = i_module.size() - 1; + int nCount = 0; + StringVector::const_iterator + itm = i_module.begin(); + for ( ; + nCount < nMax; + ++itm, ++nCount ) + { + CurOut() << "::" << *itm; + } + + CurOut() << "::"; + if (bLink2Module) + { + aTargetPos.Set_File(output::ModuleFileName()); + Env().Linker().Get_Link2Position(rLink, aTargetPos); + CurOut() + >> *new Html::Link( rLink.c_str() ) + << *itm; + rLink.reset(); + } + else + { + CurOut() << *itm; + } + + if (bHasCeOrName) + CurOut() << "::"; + } // end if (bShowModule) + + // CodeEntity and member: + aTargetPos.Set_File( rLink << i_ce << ".html" << c_str ); + rLink.reset(); + + if (bHasCeOrName) + { + if (bLink2Ce) + { + Env().Linker().Get_Link2Position(rLink, aTargetPos); + CurOut() + >> *new Html::Link(rLink.c_str()) + << i_ce; + rLink.reset(); + } + else + { + CurOut() << i_ce; + } + + if (i_templateParameters != 0) + write_TemplateParameterList(*i_templateParameters); + + if (bUseMember) + { + CurOut() << "::"; + + if (bLink2Member) + { + bool bFunction = strstr(i_member,"()") != 0; + String sMember( i_member ); + if (bFunction) + sMember.assign(i_member.c_str(), sMember.length()-2); + + Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember); + CurOut() + >> *new Html::Link(rLink.c_str()) + << i_member; + rLink.reset(); + } + else + { + CurOut() + << i_member; + } + } // endif (bUseMember) + } // endif (bHasCeOrName) + + if (i_sequenceCount > 0) + finish_Sequence(i_sequenceCount); +} + +void +HF_IdlTypeText::produce_BuiltIn( const String & i_type, + int i_sequenceCount ) const +{ + if (i_sequenceCount > 0) + start_Sequence(i_sequenceCount); + CurOut() << i_type; + if (i_sequenceCount > 0) + finish_Sequence(i_sequenceCount); +} + +void +HF_IdlTypeText::produce_IndexLink( const StringVector & i_module, + const String & i_ce, + const String & i_member, + bool i_bIsOwner ) const +{ + output::Node & + rCeNode = Env().OutputTree().Provide_Node(i_module); + output::Position + aTargetPos(rCeNode); + bool + bShowModule = i_bIsOwner OR (i_module.size() > 0 AND i_ce.empty()); + bool + bShowNonModule = NOT bShowModule OR (i_bIsOwner AND NOT i_ce.empty()); + bool + bUseMember = NOT i_member.empty(); + + StreamLock aLink(300); + StreamStr & rLink = aLink(); + + // Produce output: module + if (bShowModule) + { + if (i_bIsOwner) + { + int nMax = bShowNonModule ? i_module.size() : i_module.size() - 1; + int nCount = 0; + for ( StringVector::const_iterator itm = i_module.begin(); + nCount < nMax; + ++itm, ++nCount ) + { + CurOut() << "::" << *itm; + } + CurOut() << ":: ."; + } + + if (NOT bShowNonModule) + { + aTargetPos.Set_File(output::ModuleFileName()); + Env().Linker().Get_Link2Position(rLink, aTargetPos); + CurOut() + >> *new Html::Link( rLink.c_str() ) + >> *new Html::Bold + << i_module.back(); + rLink.reset(); + } + } // end if (bShowModule) + + if (bShowNonModule) + { + aTargetPos.Set_File( rLink << i_ce << ".html" << c_str ); + rLink.reset(); + + if (bUseMember) + { + bool bFunction = strstr(i_member,"()") != 0; + String sMember( i_member ); + if (bFunction) + sMember.assign(i_member.c_str(), sMember.length()-2); + Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember); + CurOut() + >> *new Html::Link(rLink.c_str()) + >> *new Html::Bold + << i_member; + rLink.reset(); + } + else + { + Env().Linker().Get_Link2Position(rLink, aTargetPos); + if (i_bIsOwner) + { + CurOut() + >> *new Html::Link(rLink.c_str()) + << i_ce; + } + else + { + CurOut() + >> *new Html::Link(rLink.c_str()) + >> *new Html::Bold + << i_ce; + } + rLink.reset(); + } + } // endif (bHasCeOrName) +} + +int +HF_IdlTypeText::count_Sequences( const char * i_sFullType ) const +{ + int ret = 0; + + for ( const char * pCount = i_sFullType; + *pCount != 0; + ) + { + pCount = strstr(pCount,"sequence"); + if (pCount != 0) + { + pCount += sizeof("sequence"); // = strlen(sequence) + 1 for '<'. + if ( *(pCount-1) == '\0' ) + { + // SYNTAX_ERR + return 0; + } + ++ret; + } + } // end for + + return ret; +} + +void +HF_IdlTypeText::start_Sequence( int i_count ) const +{ + csv_assert( i_count > 0 ); + for (int i = 0; i < i_count; ++i ) + { + CurOut() << "sequence< "; + } +} + +void +HF_IdlTypeText::finish_Sequence( int i_count ) const +{ + csv_assert( i_count > 0 ); + for (int i = 0; i < i_count; ++i ) + { + CurOut() << " >"; + } +} + +void +HF_IdlTypeText::errorOut_UnresolvedLink( const char * i_name ) const +{ + StreamLock slFile(1000); + + // KORR + // Handle links in cited documentation from other entities. + slFile() << Env().CurPageCe_AsText(); + slFile().pop_back(5); + slFile() << ".idl"; + + // KORR + // Retrieve, correct line number. + TheMessages().Out_UnresolvedLink( i_name, + slFile().c_str(), + 0 ); +} + +void +HF_IdlTypeText::errorOut_UnresolvedLink( const StringVector & i_module, + const String & i_ce, + const String & i_member ) const +{ + StreamLock slName(500); + + if (i_module.size() > 0) + { + slName().operator_join(i_module.begin(), i_module.end(), "::"); + if (NOT i_ce.empty()) + slName() << "::"; + } + if (NOT i_ce.empty()) + { + slName() << i_ce; + if (NOT i_member.empty()) + slName() << "::" << i_member; + } + errorOut_UnresolvedLink(slName().c_str()); +} + +bool +HF_IdlTypeText::is_ExternLink( const StringVector & i_module ) const +{ + const autodoc::CommandLine & + rCmdLine = autodoc::CommandLine::Get_(); + uintt nExtNspLength = rCmdLine.ExternNamespace().length(); + if (nExtNspLength == 0) + return false; + + StreamStr s(1000); + s << "::"; + s.operator_join( i_module.begin(), + i_module.end(), + "::" ); + + if (s.length() < nExtNspLength) + return false; + return ( strncmp( rCmdLine.ExternNamespace().c_str(), + s.c_str(), + nExtNspLength ) == 0 ); +} + +void +HF_IdlTypeText::produce_ExternLink( const StringVector & i_module, + const String & i_ce, + const String & i_member, + int i_sequenceCount, + const std::vector<ary::idl::Type_id> * + i_templateParameters ) const +{ + // KORR + // Look again at this code and take some time. + + StreamLock aLink(1000); + StreamStr & rLink = aLink(); + + rLink << autodoc::CommandLine::Get_().ExternRoot(); + rLink.operator_join( i_module.begin(), + i_module.end(), + "/" ); + rLink << '/' + << i_ce + << ".html"; + if (i_member.length() > 0) + rLink << "/#" << i_member; + + if (i_sequenceCount > 0) + start_Sequence(i_sequenceCount); + + // module + int nMax = i_module.size(); + int nCount = 0; + StringVector::const_iterator + itm = i_module.begin(); + for ( ; + nCount < nMax; + ++itm, ++nCount ) + { + CurOut() << "::" << *itm; + } + CurOut() << "::"; + + + // CodeEntity + if (i_member.length() == 0) + { + CurOut() + >> *new Html::Link(rLink.c_str()) + << i_ce; + } + else + { + CurOut() + << i_ce; + } + + if (i_templateParameters != 0) + write_TemplateParameterList(*i_templateParameters); + + // Member + if (i_member.length() > 0) + { + CurOut() + >> *new Html::Link(rLink.c_str()) + << i_member; + } + + if (i_sequenceCount > 0) + finish_Sequence(i_sequenceCount); +} + +void +HF_IdlTypeText::write_TemplateParameterList( + const std::vector<ary::idl::Type_id> & i_templateParameters ) const +{ + if (i_templateParameters.size() == 0) + return; + + HF_IdlTypeText + aTemplateParamWriter(Env(), CurOut(), true, pReferingCe); + CurOut() << "< "; + std::vector<ary::idl::Type_id>::const_iterator + it = i_templateParameters.begin(); + aTemplateParamWriter.Produce_byData(*it); + for ( ++it; it != i_templateParameters.end(); ++it ) + { + CurOut() << ", "; + aTemplateParamWriter.Produce_byData(*it); + } + CurOut() << " >"; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_typetext.hxx b/autodoc/source/display/idl/hfi_typetext.hxx new file mode 100644 index 000000000000..6d8c690976af --- /dev/null +++ b/autodoc/source/display/idl/hfi_typetext.hxx @@ -0,0 +1,160 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_TYPETEXT_HXX +#define ADC_DISPLAY_HFI_TYPETEXT_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + + +class HF_IdlTypeText : public HtmlFactory_Idl +{ + public: + enum E_Index { use_for_javacompatible_index }; + + HF_IdlTypeText( + Environment & io_rEnv, + Xml::Element & o_rOut, + bool i_bWithLink, + const client * i_pScopeGivingCe = 0 ); + HF_IdlTypeText( + Environment & io_rEnv, + E_Index e ); + virtual ~HF_IdlTypeText(); + + void Produce_byData( + ary::idl::Type_id i_idType ) const; + void Produce_byData( + ary::idl::Ce_id i_idCe ) const; + void Produce_byData( + const String & i_sFullName ) const; + void Produce_LinkInDocu( + const String & i_scope, + const String & i_name, + const String & i_member ) const; + void Produce_LocalLinkInDocu( + const String & i_member ) const; + + /// Produce the first link for Java-help understood index entries. + void Produce_IndexLink( + Xml::Element & o_out, + const client & i_ce ) const; + /** Produce the second link for Java-help understood index entries. + For members this will be a link to their owner (this function is + used), else see @->Produce_IndexSecondEntryLink(); + */ + void Produce_IndexOwnerLink( + Xml::Element & o_out, + const client & i_owner ) const; + /** Produce the second link for Java-help understood index entries. + For non- members this will again be a link to to the entry itself + (this function is used), else see @->Produce_IndexOwnerLink(); + */ + void Produce_IndexSecondEntryLink( + Xml::Element & o_out, + const client & i_ce ) const; + private: + // Locals + enum E_Existence + { + exists_dontknow, + exists_yes, + exists_no + }; + + void produce_FromStd( + const StringVector & + i_module, + const String & i_ce, + const String & i_member, + int i_sequenceCount, + E_Existence i_ceExists, + const std::vector<ary::idl::Type_id> * + i_templateParameters = 0 ) const; + void produce_BuiltIn( + const String & i_type, + int i_sequenceCount ) const; + void produce_IndexLink( + const StringVector & + i_module, + const String & i_ce, + const String & i_member, + bool i_bIsOwner ) const; + int count_Sequences( + const char * i_sFullType ) const; + void start_Sequence( + int i_count ) const; + void finish_Sequence( + int i_count ) const; + void errorOut_UnresolvedLink( + const char * i_name ) const; + void errorOut_UnresolvedLink( + const StringVector & + i_module, + const String & i_ce, + const String & i_member ) const; + bool is_ExternLink( + const StringVector & + i_module ) const; + void produce_ExternLink( + const StringVector & + i_module, + const String & i_ce, + const String & i_member, + int i_sequenceCount, + const std::vector<ary::idl::Type_id> * + i_templateParameters ) const; + void write_TemplateParameterList( + const std::vector<ary::idl::Type_id> & + i_templateParameters ) const; + const ary::idl::Module * + referingModule() const; + const client * referingCe() const; + + // DATA + mutable const client * + pReferingCe; + bool bWithLink; +}; + + + +// IMPLEMENTATION + + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_xrefpage.cxx b/autodoc/source/display/idl/hfi_xrefpage.cxx new file mode 100644 index 000000000000..e067308295ca --- /dev/null +++ b/autodoc/source/display/idl/hfi_xrefpage.cxx @@ -0,0 +1,276 @@ +/* -*- 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 "hfi_xrefpage.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_gate.hxx> +#include <ary/idl/ip_ce.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_navibar.hxx" +#include "hfi_typetext.hxx" +#include "hi_env.hxx" + + +namespace +{ + +const String + C_sTitleStart("uses of "); +const String + C_sCRLF("\n"); +const String + C_sDevMan("References in Developers Guide"); + +} // anonymous namespace + + + +HF_IdlXrefs::HF_IdlXrefs( Environment & io_rEnv, + Xml::Element & o_rOut, + const String & i_prefix, + const client & i_ce ) + : HtmlFactory_Idl(io_rEnv, &o_rOut), + rContentDirectory(*new Html::Paragraph), + pClient(&i_ce) +{ + produce_Main(i_prefix, i_ce); +} + +HF_IdlXrefs::~HF_IdlXrefs() +{ +} + +void +HF_IdlXrefs::Write_ManualLinks( const client & i_ce ) const +{ + const StringVector & + rLinks2Refs = i_ce.Secondaries().Links2RefsInManual(); + if ( rLinks2Refs.size() == 0 ) + { + rContentDirectory + << C_sDevMan + << new Html::LineBreak + << C_sCRLF; + return; + } + + + rContentDirectory + >> *new Html::Link("#devmanrefs") + << C_sDevMan + << new Html::LineBreak + << C_sCRLF; + + HF_SubTitleTable + aList(CurOut(), "devmanrefs", C_sDevMan, 1); + Xml::Element & + rOutCell = aList.Add_Row() >>* new Html::TableCell; + + csv_assert(rLinks2Refs.size() % 2 == 0); + for ( StringVector::const_iterator it = rLinks2Refs.begin(); + it != rLinks2Refs.end(); + ++it ) + { + Xml::Element & + rLink = rOutCell >> *new Html::Link( Env().Link2Manual(*it)); + if ( (*(it+1)).empty() ) + + // HACK KORR_FUTURE + // Research what happens with manual links which contain normal characters + // in non-utf-8 texts. And research, why utfF-8 does not work here. + rLink << new Xml::XmlCode(*it); + else + // HACK KORR_FUTURE, see above. + rLink << new Xml::XmlCode( *(it+1) ); + rOutCell + << new Html::LineBreak + << C_sCRLF; + ++it; + } // end for +} + +void +HF_IdlXrefs::Produce_List( const char * i_title, + const char * i_label, + ce_list & i_iterator ) const +{ + if (NOT i_iterator) + { + rContentDirectory + << i_title + << new Html::LineBreak + << C_sCRLF; + return; + } + + csv_assert(*i_label == '#'); + + rContentDirectory + >> *new Html::Link(i_label) + << i_title + << new Html::LineBreak + << C_sCRLF; + + HF_SubTitleTable + aList(CurOut(), i_label+1, i_title, 1); + Xml::Element & + rOutCell = aList.Add_Row() >>* new Html::TableCell; + HF_IdlTypeText + aTypeWriter(Env(), rOutCell, true, pClient); + for ( ce_list & it = i_iterator; it; ++it ) + { + aTypeWriter.Produce_byData(*it); + rOutCell << new Html::LineBreak; + } // end for +} + +void +HF_IdlXrefs::Produce_Tree( const char * i_title, + const char * i_label, + const client & i_ce, + F_GET_SUBLIST i_sublistcreator ) const +{ + dyn_ce_list pResult; + (*i_sublistcreator)(pResult, i_ce); + + if (NOT (*pResult).operator bool()) + { + rContentDirectory + << i_title + << new Html::LineBreak + << C_sCRLF; + return; + } + + csv_assert(*i_label == '#'); + + rContentDirectory + >> *new Html::Link(i_label) + << i_title + << new Html::LineBreak + << C_sCRLF; + + HF_SubTitleTable + aList(CurOut(), i_label+1, i_title, 1); + Xml::Element & + rOut = aList.Add_Row() + >>* new Html::TableCell + >> *new csi::xml::AnElement("pre") + << new csi::html::StyleAttr("font-family:monospace;"); + + recursive_make_ListInTree( rOut, + 0, + i_ce, + *pResult, + i_sublistcreator ); +} + +void +HF_IdlXrefs::produce_Main( const String & i_prefix, + const client & i_ce ) const +{ + make_Navibar(i_ce); + + HF_TitleTable + aTitle(CurOut()); + StreamLock sl(200); + aTitle.Produce_Title( sl() + << C_sTitleStart + << i_prefix + << " " + << i_ce.LocalName() + << c_str ); + + aTitle.Add_Row() << &rContentDirectory; + sl().reset(); + rContentDirectory + >> *new Html::Link( sl() << i_ce.LocalName() + << ".html" + << c_str ) + >> *new Html::Bold + << "back to " + << i_prefix + << " " + << i_ce.LocalName(); + rContentDirectory + << new Html::LineBreak + << new Html::LineBreak + << C_sCRLF; + + CurOut() << new Html::HorizontalLine(); +} + +void +HF_IdlXrefs::make_Navibar( const client & i_ce ) const +{ + HF_IdlNavigationBar + aNaviBar(Env(), CurOut()); + aNaviBar.Produce_CeXrefsMainRow(i_ce); + CurOut() << new Html::HorizontalLine(); +} + +void +HF_IdlXrefs::recursive_make_ListInTree( Xml::Element & o_rDisplay, + uintt i_level, + const client & i_ce, + ce_list & i_iterator, + F_GET_SUBLIST i_sublistcreator ) const +{ + const char * sLevelIndentation = " "; + + HF_IdlTypeText + aTypeWriter(Env(), o_rDisplay, true, &i_ce); + for ( ; i_iterator.operator bool(); ++i_iterator ) + { + for (uintt i = 0; i < i_level; ++i) + { + o_rDisplay << sLevelIndentation; + } // end for + + aTypeWriter.Produce_byData(*i_iterator); + o_rDisplay << C_sCRLF; + + dyn_ce_list pResult; + const client & rCe = Env().Gate().Ces().Find_Ce(*i_iterator); + (*i_sublistcreator)(pResult, rCe); + if ( (*pResult).operator bool() ) + { + recursive_make_ListInTree( o_rDisplay, + i_level + 1, + rCe, + *pResult, + i_sublistcreator ); + } + } // end for +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hfi_xrefpage.hxx b/autodoc/source/display/idl/hfi_xrefpage.hxx new file mode 100644 index 000000000000..34bde3af9722 --- /dev/null +++ b/autodoc/source/display/idl/hfi_xrefpage.hxx @@ -0,0 +1,107 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFI_XREFPAGE_HXX +#define ADC_DISPLAY_HFI_XREFPAGE_HXX + + + +// USED SERVICES + // BASE CLASSES +#include "hi_factory.hxx" + // COMPONENTS + // PARAMETERS + + +class HF_IdlXrefs : public HtmlFactory_Idl +{ + public: + typedef void (*F_GET_SUBLIST)(dyn_ce_list&, const client&); + + HF_IdlXrefs( + Environment & io_rEnv, + Xml::Element & o_rOut, + const String & i_prefix, + const client & i_ce); + virtual ~HF_IdlXrefs(); + + /** @descr + Only lists which are tried to be produced by Produce_List() or + Produce_Tree(), will occur in the content directory of the page. + They will have links, if the list or tree has at least one element, + else the list is mentioned in the directory without link. + + @param i_label [*i_label == '#'] + */ + void Produce_List( + const char * i_title, + const char * i_label, + ce_list & i_iterator ) const; + void Write_ManualLinks( + const client & i_ce ) const; + /** @descr + Only lists which are tried to be produced by Produce_List() or + Produce_Tree(), will occur in the content directory of the page. + They will have links, if the list or tree has at least one element, + else the list is mentioned in the directory without link. + + @param i_label [*i_label == '#'] + */ + void Produce_Tree( + const char * i_title, + const char * i_label, + const client & i_ce, + F_GET_SUBLIST i_sublistcreator ) const; + + private: + // Locals + void produce_Main( + const String & i_prefix, + const client & i_ce ) const; + void make_Navibar( + const client & i_ce ) const; + /// @return true if there are any elements in sub lists. + void recursive_make_ListInTree( + Xml::Element & o_rDisplay, + uintt i_level, /// 0 is highest + const client & i_ce, + ce_list & i_iterator, + F_GET_SUBLIST i_sublistcreator ) const; + + // DATA + Xml::Element & rContentDirectory; + const client * pClient; +}; + + + +// IMPLEMENTATION + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_ary.cxx b/autodoc/source/display/idl/hi_ary.cxx new file mode 100644 index 000000000000..855b9ede1536 --- /dev/null +++ b/autodoc/source/display/idl/hi_ary.cxx @@ -0,0 +1,273 @@ +/* -*- 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 "hi_ary.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <cosv/ploc_dir.hxx> +#include <ary/idl/i_gate.hxx> +#include <ary/idl/i_module.hxx> +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_type.hxx> +#include <ary/idl/ip_ce.hxx> +#include <ary/idl/ip_type.hxx> + + +inline const ary::idl::Gate & +AryAccess::gate() const + { return rGate; } + +inline const ary::idl::CePilot & +AryAccess::ces() const + { return rGate.Ces(); } + +inline const ary::idl::TypePilot & +AryAccess::types() const + { return rGate.Types(); } + +inline const ary::idl::Module * +AryAccess::find_SubModule( const ary::idl::Module & i_parent, + const String & i_name ) const +{ + ary::idl::Ce_id + nModule = i_parent.Search_Name(i_name); + return ces().Search_Module(nModule); +} + +bool +AryAccess::nextName( const char * & io_TextPtr, + String & o_name ) const +{ + if ( strncmp(io_TextPtr,"::", 2) == 0 ) + io_TextPtr += 2; + + const char * pEnd = strchr(io_TextPtr,':'); + size_t nLen = pEnd == 0 + ? strlen(io_TextPtr) + : pEnd - io_TextPtr; + o_name.assign(io_TextPtr, nLen); + io_TextPtr += nLen; + + return nLen > 0; +} + + + +AryAccess::AryAccess( const ary::idl::Gate & i_rGate ) + : rGate(i_rGate) +{ +} + +const ary::idl::Module & +AryAccess::GlobalNamespace() const +{ + return ces().GlobalNamespace(); +} + +const ary::idl::Module & +AryAccess::Find_Module( ary::idl::Ce_id i_ce ) const +{ + return ces().Find_Module(i_ce); +} + + +const ary::idl::CodeEntity & +AryAccess::Find_Ce( ary::idl::Ce_id i_ce ) const +{ + return ces().Find_Ce(i_ce); +} + +const ary::idl::Type & +AryAccess::Find_Type( ary::idl::Type_id i_type ) const +{ + return types().Find_Type(i_type); +} + +ary::idl::Ce_id +AryAccess::CeFromType( ary::idl::Type_id i_type ) const +{ + return types().Search_CeRelatedTo(i_type); +} + +bool +AryAccess::IsBuiltInOrRelated( const ary::idl::Type & i_type ) const +{ + return types().IsBuiltInOrRelated(i_type); +} + +bool +AryAccess::Search_Ce( StringVector & o_module, + String & o_mainEntity, + String & o_memberEntity, + const char * i_sText, + const ary::idl::Module & i_referingScope ) const +{ + o_module.erase(o_module.begin(),o_module.end()); + o_mainEntity = String::Null_(); + o_memberEntity = String::Null_(); + + const ary::idl::Module * pModule = 0; + + if ( strncmp(i_sText, "::", 2) == 0 + OR strncmp(i_sText, "com::sun::star", 14) == 0 ) + pModule = &GlobalNamespace(); + else + { + pModule = &i_referingScope; + ces().Get_Text(o_module, o_mainEntity, o_memberEntity, *pModule); + } + + const char * pNext = i_sText; + String sNextName; + + // Find Module: + while ( nextName(pNext, sNextName) ) + { + const ary::idl::Module * + pSub = find_SubModule(*pModule, sNextName); + if (pSub != 0) + { + pModule = pSub; + o_module.push_back(sNextName); + } + else + break; + } + + // Find main CodeEntity: + if ( sNextName.length() == 0 ) + return true; + const ary::idl::Ce_id + nCe = pModule->Search_Name(sNextName); + if (NOT nCe.IsValid()) + return false; + o_mainEntity = sNextName; + + // Find member: + if ( *pNext == 0 ) + return true; + nextName(pNext, o_memberEntity); + if (strchr(o_memberEntity,':') != 0) + return false; // This must not happen in IDL + + return true; +} + +bool +AryAccess::Search_CesModule( StringVector & o_module, + const String & i_scope, + const String & i_ce, + const ary::idl::Module & i_referingScope ) const +{ + o_module.erase(o_module.begin(),o_module.end()); + + const ary::idl::Module * + pModule = 0; + + if ( strncmp(i_scope, "::", 2) == 0 + OR strncmp(i_scope, "com::sun::star", 14) == 0 ) + pModule = &GlobalNamespace(); + else + { + pModule = &i_referingScope; + static String Dummy1; + static String Dummy2; + ces().Get_Text(o_module, Dummy1, Dummy2, *pModule); + } + + const char * pNext = i_scope; + String sNextName; + + // Find Module: + while ( nextName(pNext, sNextName) ) + { + const ary::idl::Module * + pSub = find_SubModule(*pModule, sNextName); + if (pSub != 0) + { + pModule = pSub; + o_module.push_back(sNextName); + } + else + return false; + } // end while + return pModule->Search_Name(i_ce).IsValid(); +} + +const ary::idl::Module * +AryAccess::Search_Module( const StringVector & i_nameChain ) const +{ + const ary::idl::Module * ret = + &GlobalNamespace(); + for ( StringVector::const_iterator it = i_nameChain.begin(); + it != i_nameChain.end(); + ++it ) + { + ret = find_SubModule(*ret, *it); + if (ret == 0) + break; + } // end for + return ret; +} + +void +AryAccess::Get_CeText( StringVector & o_module, + String & o_ce, + String & o_member, + const ary::idl::CodeEntity & i_ce ) const +{ + ces().Get_Text(o_module, o_ce, o_member, i_ce); +} + +void +AryAccess::Get_TypeText( StringVector & o_module, + String & o_sCe, + ary::idl::Ce_id & o_nCe, + int & o_sequenceCount, + const ary::idl::Type & i_type ) const +{ + i_type.Get_Text(o_module, o_sCe, o_nCe, o_sequenceCount, gate()); +} + +void +AryAccess::Get_IndexData( std::vector<ary::idl::Ce_id> & o_data, + ary::idl::alphabetical_index::E_Letter i_letter ) const +{ + rGate.Ces().Get_AlphabeticalIndex(o_data, i_letter); +} + + +const ary::idl::CePilot & +AryAccess::Ces() const +{ + return rGate.Ces(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_ary.hxx b/autodoc/source/display/idl/hi_ary.hxx new file mode 100644 index 000000000000..21dc60454fd5 --- /dev/null +++ b/autodoc/source/display/idl/hi_ary.hxx @@ -0,0 +1,164 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HI_ARY_HXX +#define ADC_DISPLAY_HI_ARY_HXX + + +// USED SERVICES + // BASE CLASSES + // COMPONENTS +#include <ary/idl/i_types4idl.hxx> + // PARAMETERS +#include <ary/idl/i_gate.hxx> +#include <ary/doc/d_docu.hxx> +#include <ary/doc/d_oldidldocu.hxx> + + +namespace ary +{ +namespace idl +{ + class Module; + class Gate; + class CePilot; + class TypePilot; +} +} +namespace output +{ + class Position; +} + + + + +inline const ary::doc::OldIdlDocu * +Get_IdlDocu(const ary::doc::Documentation & i_doc) +{ + return dynamic_cast< const ary::doc::OldIdlDocu* >(i_doc.Data()); +} + + + + + +/** A helper class to wrap the access to data in the Autodoc Repository. +*/ +class AryAccess +{ + public: + // LIFECYCLE + AryAccess( + const ary::idl::Gate & + i_rGate ); + // INQUIRY + const ary::idl::Module & + GlobalNamespace() const; + const ary::idl::Module & + Find_Module( + ary::idl::Ce_id i_ce ) const; + const ary::idl::CodeEntity & + Find_Ce( + ary::idl::Ce_id i_ce ) const; + const ary::idl::Type & + Find_Type( + ary::idl::Type_id i_type ) const; + ary::idl::Ce_id CeFromType( + ary::idl::Type_id i_type ) const; + bool IsBuiltInOrRelated( + const ary::idl::Type & + i_type ) const; + bool Search_Ce( + StringVector & o_module, + String & o_mainEntity, + String & o_memberEntity, + const char * i_sText, + const ary::idl::Module & + i_referingScope ) const; + bool Search_CesModule( + StringVector & o_module, + const String & i_scope, + const String & i_ce, + const ary::idl::Module & + i_referingScope ) const; + const ary::idl::Module * + Search_Module( + const StringVector & + i_nameChain ) const; + + void Get_CeText( + StringVector & o_module, + String & o_ce, + String & o_member, + const ary::idl::CodeEntity & + i_ce ) const; + void Get_TypeText( + StringVector & o_module, + String & o_sCe, + ary::idl::Ce_id & o_nCe, + int & o_sequenceCount, + const ary::idl::Type & + i_type ) const; + void Get_IndexData( + std::vector<ary::idl::Ce_id> & + o_data, + ary::idl::alphabetical_index::E_Letter + i_letter ) const; + + const ary::idl::CePilot & + Ces() const; + private: + const ary::idl::Module * + find_SubModule( + const ary::idl::Module & + i_parent, + const String & i_name ) const; + + /// Gets "::"-separated names out of a string. + bool nextName( + const char * & io_TextPtr, + String & o_name ) const; + + + const ary::idl::Gate & + gate() const; + const ary::idl::CePilot & + ces() const; + const ary::idl::TypePilot & + types() const; + // DATA + const ary::idl::Gate & + rGate; +}; + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_display.cxx b/autodoc/source/display/idl/hi_display.cxx new file mode 100644 index 000000000000..b3eaa76279d6 --- /dev/null +++ b/autodoc/source/display/idl/hi_display.cxx @@ -0,0 +1,200 @@ +/* -*- 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 <idl/hi_display.hxx> + + +// NOT FULLY DEFINED SERVICES +#include <cosv/file.hxx> +#include <ary/idl/i_ce.hxx> +#include <ary/idl/i_module.hxx> +#include <ary/getncast.hxx> +#include <toolkit/out_tree.hxx> +#include <cfrstd.hxx> +#include "hi_ary.hxx" +#include "hi_env.hxx" +#include "hi_main.hxx" + + +extern const String C_sCssFilename_Idl; + + +inline bool +HtmlDisplay_Idl::IsModule( const ary::idl::CodeEntity & i_ce ) const +{ + return ary::is_type<ary::idl::Module>(i_ce); +} + +inline const ary::idl::Module & +HtmlDisplay_Idl::Module_Cast( const ary::idl::CodeEntity & i_ce ) const +{ + return ary::ary_cast<ary::idl::Module>(i_ce); +} + + + + +HtmlDisplay_Idl::HtmlDisplay_Idl() + : pCurPageEnv(), + pMainDisplay() +{ +} + +HtmlDisplay_Idl::~HtmlDisplay_Idl() +{ +} + +void +HtmlDisplay_Idl::do_Run( const char * i_sOutputDirectory, + const ary::idl::Gate & i_rAryGate, + const display::CorporateFrame & i_rLayout ) +{ + SetRunData( i_sOutputDirectory, i_rAryGate, i_rLayout ); + + Create_StartFile(); + Create_CssFile(); + Create_FilesInNameTree(); + Create_IndexFiles(); + Create_FilesInProjectTree(); + Create_PackageList(); + Create_HelpFile(); +} + +void +HtmlDisplay_Idl::SetRunData( const char * i_sOutputDirectory, + const ary::idl::Gate & i_rAryGate, + const display::CorporateFrame & i_rLayout ) +{ + csv::ploc::Path aOutputDir( i_sOutputDirectory, true ); + pCurPageEnv = new HtmlEnvironment_Idl( aOutputDir, i_rAryGate, i_rLayout ); + pMainDisplay = new MainDisplay_Idl(*pCurPageEnv); +} + +void +HtmlDisplay_Idl::Create_StartFile() +{ +} + +void +HtmlDisplay_Idl::Create_FilesInNameTree() +{ + Cout() << "\nCreate files in subtree namespaces ..." << Endl(); + + const ary::idl::Module & + rGlobalNamespace = pCurPageEnv->Data().GlobalNamespace(); + pCurPageEnv->Goto_Directory( pCurPageEnv->OutputTree().NamesRoot(), true ); + + RecursiveDisplay_Module(rGlobalNamespace); + + Cout() << "... done." << Endl(); +} + +void +HtmlDisplay_Idl::Create_IndexFiles() +{ + Cout() << "\nCreate files in subtree index ..." << Endl(); + pCurPageEnv->Goto_Directory( pCurPageEnv->OutputTree().IndexRoot(), true ); + pMainDisplay->WriteGlobalIndices(); + Cout() << "... done.\n" << Endl(); +} + +typedef ary::Dyn_StdConstIterator<ary::idl::Ce_id> Dyn_CeIterator; +typedef ary::StdConstIterator<ary::idl::Ce_id> CeIterator; + +void +HtmlDisplay_Idl::RecursiveDisplay_Module( const ary::idl::Module & i_module ) +{ + i_module.Accept(*pMainDisplay); + + Dyn_CeIterator + aMembers; + i_module.Get_Names(aMembers); + + for ( CeIterator & iter = *aMembers; + iter; + ++iter ) + { + const ary::idl::CodeEntity & + rCe = pCurPageEnv->Data().Find_Ce(*iter); + + if ( NOT IsModule(rCe) ) + rCe.Accept(*pMainDisplay); + else + { + pCurPageEnv->Goto_DirectoryLevelDown( rCe.LocalName(), true ); + RecursiveDisplay_Module( Module_Cast(rCe) ); + pCurPageEnv->Goto_DirectoryLevelUp(); + } + } // end for +} + +void +HtmlDisplay_Idl::Create_FilesInProjectTree() +{ +} + +void +HtmlDisplay_Idl::Create_PackageList() +{ +} + +void +HtmlDisplay_Idl::Create_HelpFile() +{ +} + +void +HtmlDisplay_Idl::Create_CssFile() +{ + Cout() << "\nCreate css file ..." << Endl(); + + pCurPageEnv->Goto_Directory( pCurPageEnv->OutputTree().Root(), true ); + pCurPageEnv->Set_CurFile( C_sCssFilename_Idl ); + + StreamLock + slCurFilePath(700); + pCurPageEnv->Get_CurFilePath(slCurFilePath()); + + csv::File + aCssFile(slCurFilePath().c_str(), csv::CFM_CREATE); + csv::OpenCloseGuard + aOpenGuard(aCssFile); + if (NOT aOpenGuard) + { + Cerr() << "Can't create file " << slCurFilePath().c_str() << "." << Endl(); + return; + } + + aCssFile.write("/* Autodoc css file for IDL documentation */\n\n\n"); + aCssFile.write(pCurPageEnv->Layout().CssStyle()); + aCssFile.write("\n\n\n"); + aCssFile.write(pCurPageEnv->Layout().CssStylesExplanation()); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_env.cxx b/autodoc/source/display/idl/hi_env.cxx new file mode 100644 index 000000000000..db4589efbe43 --- /dev/null +++ b/autodoc/source/display/idl/hi_env.cxx @@ -0,0 +1,202 @@ +/* -*- 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 "hi_env.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <cosv/ploc_dir.hxx> +#include <cfrstd.hxx> +#include <toolkit/out_tree.hxx> +#include "hi_ary.hxx" +#include "hi_linkhelper.hxx" + + + +const String C_s_index_files("index-files"); + +const String C_sUseFileSuffix("-use.html"); +const String C_IndexA_FileName("index-1.html"); + + +HtmlEnvironment_Idl::HtmlEnvironment_Idl( const csv::ploc::Path & i_rOutputDir, + const ary::idl::Gate & i_rGate, + const display::CorporateFrame & i_rLayout ) + : aOutputRoot(i_rOutputDir), + pData(new AryAccess(i_rGate)), + pGate(&i_rGate), + pOutputTree(new output::Tree), + aCurPosition(pOutputTree->Root()), + pCurPageCe(0), + pLayout(&i_rLayout), + pLinker() +{ + StringVector aHelp; + pOutputTree->Set_NamesRoot(aHelp); + + aHelp.push_back(output::IndexFilesDirName()); + pOutputTree->Set_IndexRoot(aHelp); + + (*aHelp.begin()) = String("com"); + aHelp.push_back(String("sun")); + aHelp.push_back(String("star")); + pOutputTree->Set_Overview(aHelp, output::ModuleFileName() ); + + pLinker = new LinkHelper(*this); +} + +HtmlEnvironment_Idl::~HtmlEnvironment_Idl() +{ +} + +namespace +{ +StringVector G_aChain; +} + +void +HtmlEnvironment_Idl::Goto_Directory( output::Position i_pos, + bool i_bCreateDirectoryIfNecessary ) +{ + aCurPosition = i_pos; + aCurPath = aOutputRoot.MyPath(); + + aCurPosition.Get_Chain(G_aChain); + for ( StringVector::const_iterator it = G_aChain.begin(); + it != G_aChain.end(); + ++it ) + { + aCurPath.DirChain() += *it; + } + + if (i_bCreateDirectoryIfNecessary) + create_Directory(aCurPath); +} + +void +HtmlEnvironment_Idl::Goto_DirectoryLevelDown( const String & i_subDirName, + bool i_bCreateDirectoryIfNecessary ) +{ + aCurPosition +=(i_subDirName); + + aCurPath.SetFile(String::Null_()); + aCurPath.DirChain() += i_subDirName; + + if (i_bCreateDirectoryIfNecessary) + create_Directory(aCurPath); +} + +void +HtmlEnvironment_Idl::Goto_DirectoryLevelUp() +{ + aCurPosition -= 1; + + aCurPath.SetFile(String::Null_()); + aCurPath.DirChain() -= 1; +} + +void +HtmlEnvironment_Idl::Set_CurFile( const String & i_fileName ) +{ + aCurPath.SetFile(i_fileName); +} + +void +HtmlEnvironment_Idl::create_Directory( const csv::ploc::Path & i_path ) + +{ + csv::ploc::Directory aCurDir(i_path); + if (NOT aCurDir.Exists()) + aCurDir.PhysicalCreate(); +} + +inline bool +IsAbsoluteLink(const char * i_link) +{ + const char + shttp[] = "http://"; + const char + sfile[] = "file://"; + const int + csize = sizeof shttp - 1; + csv_assert(csize == sizeof sfile - 1); + + return strncmp(i_link,shttp,csize) == 0 + OR strncmp(i_link,sfile,csize) == 0; +} + + +const char * +HtmlEnvironment_Idl::Link2Manual( const String & i_link ) const +{ + if ( IsAbsoluteLink(i_link.c_str()) ) + return i_link; + + static StreamStr aLink_(200); + aLink_.reset(); + String + sDvgRoot(pLayout->DevelopersGuideHtmlRoot()); + if (sDvgRoot.empty()) + sDvgRoot = "../DevelopersGuide"; + + // KORR_FUTURE + // Enhance performance by calculating this only one time: + if ( NOT IsAbsoluteLink(sDvgRoot.c_str()) ) + aCurPosition.Get_LinkToRoot(aLink_); + aLink_ << sDvgRoot + << "/" + << i_link; + return aLink_.c_str(); +} + +String +HtmlEnvironment_Idl::CurPageCe_AsText() const +{ + return CurPageCe_AsFile(".html"); +} + +String +HtmlEnvironment_Idl::CurPageCe_AsFile(const char * i_sEnding) const +{ + if (pCurPageCe == 0) + return String::Null_(); + + static StringVector aModule_; + String sCe; + String sDummy; + Data().Get_CeText(aModule_, sCe, sDummy, *pCurPageCe); + StreamLock slCe(500); + if (aModule_.size() > 0) + slCe().operator_join(aModule_.begin(), aModule_.end(), "/"); + if (NOT sCe.empty()) + slCe() << "/" << sCe << i_sEnding; + return String(slCe().c_str()); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_env.hxx b/autodoc/source/display/idl/hi_env.hxx new file mode 100644 index 000000000000..675db9ab7ab6 --- /dev/null +++ b/autodoc/source/display/idl/hi_env.hxx @@ -0,0 +1,163 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HI_ENV_HXX +#define ADC_DISPLAY_HI_ENV_HXX + + +// USED SERVICES + // BASE CLASSES + // COMPONENTS +#include <cosv/ploc.hxx> +#include <cosv/ploc_dir.hxx> + // PARAMETERS +#include <toolkit/out_position.hxx> + +namespace ary +{ +namespace idl +{ + class Gate; + class CodeEntity; +} +} +namespace display +{ + class CorporateFrame; +} +namespace output +{ + class Tree; +} + +class AryAccess; +class LinkHelper; + +/** @resp + Provides enviroment information to the HTML factory + classes. + + @descr + All information that is not included in the data, especially + about the layout of the output tree and the access to + information from the repository are provided here. + + @see HtmlFactory +*/ +class HtmlEnvironment_Idl +{ + public: + // LIFECYCLE + HtmlEnvironment_Idl( + const csv::ploc::Path & + io_rOutputDir, + const ary::idl::Gate & + i_rGate, + const display::CorporateFrame & + i_rLayout ); + ~HtmlEnvironment_Idl(); + + // OPERATIONS + void Goto_Directory( + output::Position i_pos, + bool i_bCreateDirectoryIfNecessary ); + void Goto_DirectoryLevelDown( + const String & i_subDirName, + bool i_bCreateDirectoryIfNecessary ); + void Goto_DirectoryLevelUp(); + void Set_CurFile( + const String & i_fileName ); + void Set_CurPageCe( + const ary::idl::CodeEntity * + i_ce ) + { pCurPageCe = i_ce; } + // INQUIRY + const ary::idl::Gate & + Gate() const { return *pGate; } + const AryAccess & Data() const { return *pData; } + const char * Link2Manual( + const String & i_link ) const; + + /// This may be reimplemented for removing dead links to members. + bool Is_MemberExistenceCheckRequired() const + { return false; } + + /// @return Holds only the current directory, not the current file. + output::Position & CurPosition() const { return aCurPosition; } + void Get_CurFilePath( + StreamStr & o_buffer ) const + { o_buffer << aCurPath; } + + const display::CorporateFrame & + Layout() const { return *pLayout; } + const LinkHelper & Linker() const { return *pLinker; } + + void Get_LinkTo( + StreamStr & o_result, + output::Position i_destination ) + { CurPosition().Get_LinkTo(o_result, i_destination); } + String CurPageCe_AsText() const; + String CurPageCe_AsFile( + const char * i_sEnding) const; + const ary::idl::CodeEntity * + CurPageCe() const { return pCurPageCe; } + + // ACCESS + output::Tree & OutputTree() { return *pOutputTree; } + + private: + // Local + void create_Directory( + const csv::ploc::Path & + i_path ); + + // DATA + csv::ploc::Directory + aOutputRoot; + csv::ploc::Path aCurPath; + + Dyn<AryAccess> pData; /// @invariant *pData is valid. + const ary::idl::Gate * + pGate; /// @invariant pGate != 0. + Dyn<output::Tree> pOutputTree; /// @invariant *pOutputTree is valid. + mutable output::Position + aCurPosition; + const ary::idl::CodeEntity * + pCurPageCe; + + const display::CorporateFrame * + pLayout; + + Dyn<LinkHelper> pLinker; +}; + + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_factory.cxx b/autodoc/source/display/idl/hi_factory.cxx new file mode 100644 index 000000000000..d194d6015744 --- /dev/null +++ b/autodoc/source/display/idl/hi_factory.cxx @@ -0,0 +1,323 @@ +/* -*- 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 "hi_factory.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_ce.hxx> +#include <toolkit/hf_title.hxx> +#include "hfi_doc.hxx" +#include "hfi_navibar.hxx" +#include "hfi_tag.hxx" +#include "hfi_typetext.hxx" +#include "hi_linkhelper.hxx" + + +extern const String + C_sCellStyle_SummaryLeft("imsum_left"); +extern const String + C_sCellStyle_SummaryRight("imsum_right"); +extern const String + C_sCellStyle_MDetail("imdetail"); +extern const String + C_sMemberTitle("membertitle"); + + +namespace +{ + +const char C_sSpace[92] = " " + " " + " "; +} + + +void +HtmlFactory_Idl::produce_SummaryDeclaration( Xml::Element & o_row, + const client & i_ce ) const +{ + produce_InternalLink(o_row, i_ce); +} + +void +HtmlFactory_Idl::produce_InternalLink( Xml::Element & o_screen, + const client & i_ce ) const +{ + StreamLock aLocalLink(100); + aLocalLink() << "#" << i_ce.LocalName(); + + o_screen + >> *new Html::TableCell + << new Html::ClassAttr( C_sCellStyle_SummaryLeft ) + >> *new Html::Link( aLocalLink().c_str() ) + << i_ce.LocalName(); +} + +void +HtmlFactory_Idl::produce_ShortDoc( Xml::Element & o_screen, + const client & i_ce ) const +{ + Xml::Element & + rDetailsRowCell = o_screen + >> *new Html::TableCell + << new Html::ClassAttr( C_sCellStyle_SummaryRight ); + HF_IdlShortDocu + aLinkDoc(Env(), rDetailsRowCell); + aLinkDoc.Produce_byData( i_ce ); + + rDetailsRowCell << new Xml::XmlCode(" "); +} + +// KORR_FUTURE: Does not belong here (implementation inheritance)! +void +HtmlFactory_Idl::produce_Bases( Xml::Element & o_screen, + const client & i_ce, + const String & i_sLabel ) const +{ + ary::idl::Type_id nBaseT = baseOf(i_ce); + if ( nBaseT.IsValid() ) + { + HF_DocEntryList + aDocList( o_screen ); + aDocList.Produce_Term(i_sLabel); + + int nDepth = 0; + Xml::Element & + rBaseList = aDocList.Produce_Definition() + >> *new Xml::AnElement("pre") + << new Xml::AnAttribute("style","font-family:monospace;"); + rBaseList + >> *new Html::Strong + << i_ce.LocalName(); + rBaseList + << "\n"; + recursive_ShowBases( rBaseList, + nBaseT, + nDepth ); + } +} + +void +HtmlFactory_Idl::produce_Members( ce_list & it_list, + const String & i_summaryTitle, + const String & i_summaryLabel, + const String & i_detailsTitle, + const String & i_detailsLabel, + const E_MemberViewType i_viewType ) const +{ + csv_assert( it_list ); + + Dyn< HF_SubTitleTable > pSummary; + if ( ( i_viewType == viewtype_summary ) + || ( i_viewType == viewtype_complete ) + ) + { + pSummary = new HF_SubTitleTable( + CurOut(), + i_summaryLabel, + i_summaryTitle, + 2 ); + } + + Dyn< HF_SubTitleTable > pDetails; + if ( ( i_viewType == viewtype_details ) + || ( i_viewType == viewtype_complete ) + ) + { + pDetails = new HF_SubTitleTable( + CurOut(), + i_detailsLabel, + i_detailsTitle, + 1 ); + } + + for ( ; it_list.operator bool(); ++it_list ) + { + const ary::idl::CodeEntity & + rCe = Env().Data().Find_Ce(*it_list); + + if ( pSummary ) + { + Xml::Element & + rSummaryRow = pSummary->Add_Row(); + produce_SummaryDeclaration(rSummaryRow, rCe); +// produce_InternalLink(rSummaryRow, rCe); + produce_ShortDoc(rSummaryRow, rCe); + } + + if ( pDetails ) + produce_MemberDetails(*pDetails, rCe); + } +} + +void +HtmlFactory_Idl::produce_Title( HF_TitleTable & o_title, + const String & i_label, + const client & i_ce ) const +{ + StreamLock + slAnnotations(200); + get_Annotations(slAnnotations(), i_ce); + StreamLock + slTitle(200); + slTitle() << i_label << " " << i_ce.LocalName(); + o_title.Produce_Title( slAnnotations().c_str(), + slTitle().c_str() ); +} + +void +HtmlFactory_Idl::get_Annotations( StreamStr & o_out, + const client & i_ce ) const +{ + const ary::doc::OldIdlDocu * + doc = Get_IdlDocu(i_ce.Docu()); + if (doc != 0) + { + if (doc->IsDeprecated()) + o_out << "deprecated "; + if (NOT doc->IsPublished()) + o_out << "unpublished "; + } + + // KORR + // Need to display "unpublished", if there is no docu. +} + +void +HtmlFactory_Idl::write_Docu( Xml::Element & o_screen, + const client & i_ce ) const +{ + const ary::doc::OldIdlDocu * + doc = Get_IdlDocu(i_ce.Docu()); + if (doc != 0) + { + HF_DocEntryList + aDocuList( o_screen ); + HF_IdlDocu + aDocu( Env(), aDocuList ); + aDocu.Produce_fromCodeEntity(i_ce); + } + + write_ManualLinks(o_screen, i_ce); +} + +void +HtmlFactory_Idl::write_ManualLinks( Xml::Element & o_screen, + const client & i_ce ) const +{ + const StringVector & + rLinks2Descrs = i_ce.Secondaries().Links2DescriptionInManual(); + if ( rLinks2Descrs.size() == 0 ) + return; + + o_screen + >> *new Html::Label(C_sLocalManualLinks.c_str()+1) // Leave out the leading '#'. + << " "; + HF_DocEntryList + aDocuList( o_screen ); + aDocuList.Produce_Term("Developers Guide"); + csv_assert(rLinks2Descrs.size() % 2 == 0); + for ( StringVector::const_iterator it = rLinks2Descrs.begin(); + it != rLinks2Descrs.end(); + ++it ) + { + Xml::Element & + rLink = aDocuList.Produce_Definition() >> *new Html::Link( Env().Link2Manual(*it)); + if ( (*(it+1)).empty() ) + // HACK KORR_FUTURE + // Research what happens with manual links which contain normal characters + // in non-utf-8 texts. And research, why utfF-8 does not work here. + rLink << new Xml::XmlCode(*it); + else + rLink << new Xml::XmlCode( *(it+1) ); + ++it; + } // end for +} + +void +HtmlFactory_Idl::produce_MemberDetails( HF_SubTitleTable & , + const client & ) const +{ + // Dummy, which does not need to do anything. +} + +void +HtmlFactory_Idl::recursive_ShowBases( Xml::Element & o_screen, + type_id i_baseType, + int & io_nDepth ) const +{ + // Show this base + ++io_nDepth; + const ary::idl::CodeEntity * + pCe = Env().Linker().Search_CeFromType(i_baseType); + + csv_assert(io_nDepth > 0); + if (io_nDepth > 30) + io_nDepth = 30; + o_screen + << (C_sSpace + 93 - 3*io_nDepth) + << new csi::xml::XmlCode("┗") + << " "; + + if (pCe == 0) + { + HF_IdlTypeText + aText( Env(), o_screen, false ); + aText.Produce_byData( i_baseType ); + o_screen + << "\n"; + --io_nDepth; + return; + } + + HF_IdlTypeText + aBaseLink( Env(), o_screen, true ); + aBaseLink.Produce_byData(pCe->CeId()); + o_screen + << "\n"; + + // Bases + ary::idl::Type_id + nBaseT = baseOf(*pCe); + if (nBaseT.IsValid()) + recursive_ShowBases(o_screen,nBaseT,io_nDepth); + + --io_nDepth; + return; +} + +HtmlFactory_Idl::type_id +HtmlFactory_Idl::inq_BaseOf( const client & ) const +{ + // Unused dummy. + return type_id(0); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_factory.hxx b/autodoc/source/display/idl/hi_factory.hxx new file mode 100644 index 000000000000..fff162e083f5 --- /dev/null +++ b/autodoc/source/display/idl/hi_factory.hxx @@ -0,0 +1,172 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HI_FACTORY_HXX +#define ADC_DISPLAY_HI_FACTORY_HXX + + +// USED SERVICES + // BASE CLASSES +#include <toolkit/htmlfactory.hxx> + // COMPONENTS + // PARAMETERS +#include <ary/stdconstiter.hxx> +#include <ary/idl/i_types4idl.hxx> +#include <toolkit/out_position.hxx> + + +namespace ary +{ +namespace idl +{ + class Module; +} +namespace doc +{ + class OldIdlDocu; +} +} + + +class HtmlEnvironment_Idl; +class LinkHelper; +class HF_NaviSubRow; +class HF_TitleTable; +class HF_SubTitleTable; + + +class HtmlFactory_Idl : public HtmlFactory<HtmlEnvironment_Idl> +{ + public: + enum E_MemberViewType + { + viewtype_summary, // the summary of the members + viewtype_details, // the details of the members + viewtype_complete // everything + }; + + enum E_DocType + { + doctype_summaryOnly, // only the summary + doctype_complete // the complete documentation + }; + + public: + typedef ary::idl::CodeEntity client; + typedef ary::idl::Ce_id ce_id; + typedef ary::idl::Type_id type_id; + typedef ary::doc::OldIdlDocu ce_info; + + typedef ary::Dyn_StdConstIterator<ce_id> dyn_ce_list; + typedef ary::Dyn_StdConstIterator<type_id> dyn_type_list; + typedef ary::StdConstIterator<ce_id> ce_list; + typedef ary::StdConstIterator<type_id> type_list; + + typedef HtmlEnvironment_Idl Environment; + typedef output::Position OutPosition; + + protected: + HtmlFactory_Idl( + Environment & io_rEnv, + Xml::Element * o_pOut = 0 ) + : HtmlFactory<Environment>(io_rEnv, o_pOut) + { } + virtual ~HtmlFactory_Idl() {} + + /** The default version only calls ->produce_InternalLink(). + This may be overwritten by derived classes. + */ + virtual void produce_SummaryDeclaration( + Xml::Element & o_row, + const client & i_ce ) const; + void produce_InternalLink( + Xml::Element & o_row, + const client & i_ce ) const; + void produce_ShortDoc( + Xml::Element & o_row, + const client & i_ce ) const; + + // KORR_FUTURE: Does not belong here (implementation inheritance)! + void produce_Bases( + Xml::Element & o_screen, + const client & i_ce, + const String & i_sLabel ) const; + void produce_Members( + ce_list & it_list, + const String & i_summaryTitle, + const String & i_summaryLabel, + const String & i_detailsTitle, + const String & i_detailsLabel, + const E_MemberViewType i_viewType = viewtype_complete ) const; + + void produce_Title( + HF_TitleTable & o_title, + const String & i_label, + const client & i_ce ) const; + void get_Annotations( + StreamStr & o_out, + const client & i_ce ) const; + + /// Writes complete docu in standard format. + void write_Docu( + Xml::Element & o_screen, + const client & i_ce ) const; + + void write_ManualLinks( + Xml::Element & o_screen, + const client & i_ce ) const; + private: + // Dummy does nothing + virtual void produce_MemberDetails( + HF_SubTitleTable & o_table, + const client & i_ce ) const; + void recursive_ShowBases( + Xml::Element & o_screen, + type_id i_baseType, + int & io_nDepth ) const; + type_id baseOf( + const client & i_ce ) const + { return inq_BaseOf(i_ce); } + virtual type_id inq_BaseOf( + const client & i_ce ) const; +}; + + +extern const String + C_sCellStyle_SummaryLeft; +extern const String + C_sCellStyle_SummaryRight; +extern const String + C_sCellStyle_MDetail; +extern const String + C_sMemberTitle; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_linkhelper.cxx b/autodoc/source/display/idl/hi_linkhelper.cxx new file mode 100644 index 000000000000..4d6ae7a735ad --- /dev/null +++ b/autodoc/source/display/idl/hi_linkhelper.cxx @@ -0,0 +1,99 @@ +/* -*- 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 "hi_linkhelper.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <ary/idl/i_module.hxx> + + + + +const ary::idl::Module * +LinkHelper::Search_CurModule() const +{ + return Search_Module( rEnv.CurPosition().RelatedNode() ); +} + +const ary::idl::Module * +LinkHelper::Search_Module( output::Node & i_node ) const +{ + static StringVector aNames_; + + output::Node::relative_id + nId = i_node.RelatedNameRoom(); + if (nId == 0) + { + csv::erase_container(aNames_); + i_node.Get_Chain(aNames_); + const ary::idl::Module * pModule = + rEnv.Data().Search_Module(aNames_); + if ( pModule == 0 ) + return 0; + nId = static_cast<output::Node::relative_id>(pModule->Id()); + rEnv.CurPosition().RelatedNode().Set_RelatedNameRoom(nId); + } + + return & rEnv.Data().Find_Module( ary::idl::Ce_id(nId) ); +} + +namespace +{ + const String C_sXrefsSuffix("-xref"); +} + + +LinkHelper::OutPosition +LinkHelper::PositionOf_CurXRefs( const String & i_ceName ) const +{ + StreamLock sl(100); + return OutPosition( rEnv.CurPosition(), + sl() << i_ceName + << C_sXrefsSuffix + << ".html" + << c_str ); +} + +const String & +LinkHelper::XrefsSuffix() const +{ + return C_sXrefsSuffix; +} + + +String +nameChainLinker( const char * ) +{ + static const String + sModuleFileName_( output::ModuleFileName() ); + return sModuleFileName_; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_linkhelper.hxx b/autodoc/source/display/idl/hi_linkhelper.hxx new file mode 100644 index 000000000000..4bac748fa072 --- /dev/null +++ b/autodoc/source/display/idl/hi_linkhelper.hxx @@ -0,0 +1,108 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HI_LINKHELPER_HXX +#define ADC_DISPLAY_HI_LINKHELPER_HXX + + +// USED SERVICES + // BASE CLASSES + // COMPONENTS + // PARAMETERS +#include "hi_ary.hxx" +#include "hi_env.hxx" +#include <toolkit/out_position.hxx> +#include <toolkit/out_tree.hxx> + + +class LinkHelper +{ + public: + typedef ary::idl::CodeEntity CE; + typedef output::Position OutPosition; + + LinkHelper( + HtmlEnvironment_Idl & + io_rEnv ) + : rEnv(io_rEnv) {} + + OutPosition PositionOf_CurModule() const + { return OutPosition( rEnv.CurPosition(), + output::ModuleFileName()); } + + OutPosition PositionOf_CurXRefs( + const String & i_ceName) const; + OutPosition PositionOf_Index() const + { OutPosition ret1 = rEnv.OutputTree().IndexRoot(); + return OutPosition( ret1, String(output::IndexFile_A()) ); } + + + const ary::idl::Module * + Search_CurModule() const; + const ary::idl::Module * + Search_Module( + output::Node & i_node ) const; + + const CE * Search_CeFromType( + ary::idl::Type_id i_type ) const; + + void Get_Link2Position( + StreamStr & o_link, + OutPosition & i_pos ) const + { rEnv.CurPosition().Get_LinkTo(o_link, i_pos); } + + void Get_Link2Member( + StreamStr & o_link, + OutPosition & i_ownerPos, + const String & i_memberName ) const + { Get_Link2Position(o_link, i_ownerPos); + o_link << "#" << i_memberName; } + const String & XrefsSuffix() const; + + private: + HtmlEnvironment_Idl & rEnv; +}; + +inline const ary::idl::CodeEntity * +LinkHelper::Search_CeFromType( ary::idl::Type_id i_type ) const +{ + ary::idl::Ce_id nCe = rEnv.Data().CeFromType(i_type); + if (nCe.IsValid()) + return &rEnv.Data().Find_Ce(nCe); + return 0; +} + + + +String nameChainLinker( + const char * i_levelName ); + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_main.cxx b/autodoc/source/display/idl/hi_main.cxx new file mode 100644 index 000000000000..f6b346fcdc15 --- /dev/null +++ b/autodoc/source/display/idl/hi_main.cxx @@ -0,0 +1,766 @@ +/* -*- 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 "hi_main.hxx" + + +// NOT FULLY DEFINED SERVICES +#include <algorithm> +#include <cosv/ploc.hxx> +#include <cosv/file.hxx> +#include <ary/idl/i_ce.hxx> +#include <ary/idl/ik_ce.hxx> +#include <ary/idl/ik_enum.hxx> +#include <ary/idl/ik_typedef.hxx> +#include <ary/idl/ik_interface.hxx> +#include <ary/idl/ik_struct.hxx> +#include <ary/idl/ik_exception.hxx> +#include <ary/idl/i_constant.hxx> +#include <ary/idl/i_constgroup.hxx> +#include <ary/idl/i_enum.hxx> +#include <ary/idl/i_singleton.hxx> +#include <ary/idl/i_sisingleton.hxx> +#include <ary/idl/i_exception.hxx> +#include <ary/idl/i_interface.hxx> +#include <ary/idl/i_service.hxx> +#include <ary/idl/i_siservice.hxx> +#include <ary/idl/i_struct.hxx> +#include <ary/idl/i_typedef.hxx> +#include <ary/idl/i_module.hxx> +#include <cfrstd.hxx> +#include <toolkit/htmlfile.hxx> +#include <toolkit/out_position.hxx> +#include <toolkit/out_tree.hxx> +#include "hfi_constgroup.hxx" +#include "hfi_enum.hxx" +#include "hfi_globalindex.hxx" +#include "hfi_interface.hxx" +#include "hfi_module.hxx" +#include "hfi_struct.hxx" +#include "hfi_service.hxx" +#include "hfi_singleton.hxx" +#include "hfi_siservice.hxx" +#include "hfi_typedef.hxx" +#include "hfi_xrefpage.hxx" +#include "hi_env.hxx" +#include "hi_linkhelper.hxx" + + +using ::ary::idl::Ce_id; +using ::ary::idl::Type_id; +using ::ary::idl::ifc_ce::Dyn_CeIterator; + + + +extern const String C_sCssFilename_Idl("idl.css"); + +/* +typedef ::ary::Dyn_StdConstIterator< ::ary::idl::CommentedRelation> + Dyn_ComRefIterator; +namespace read_module = ::ary::idl::ifc_module; +namespace read_interface = ::ary::idl::ifc_interface; +namespace read_service = ::ary::idl::ifc_service; +namespace read_struct = ::ary::idl::ifc_struct; +namespace read_exception = ::ary::idl::ifc_exception; +namespace read_enum = ::ary::idl::ifc_enum; +namespace read_typedef = ::ary::idl::ifc_typedef; +namespace read_constgroup = ::ary::idl::ifc_constantsgroup; +*/ + +namespace +{ + +/** @resp + Inits (constructor) and creates (destructor) the current + html documentation file ( MainDisplay_Idl.pMyFile ). +*/ +class Guard_CurFile +{ + public: + Guard_CurFile( /// For CodeEntities + DocuFile_Html & io_client, + HtmlEnvironment_Idl & + io_env, + const ary::idl::CodeEntity & + i_ce, + const String & i_titlePrefix ); + Guard_CurFile( /// For Use pages + DocuFile_Html & io_client, + HtmlEnvironment_Idl & + io_env, + const String & i_fileName, + const String & i_titlePrefix ); + Guard_CurFile( /// For Modules + DocuFile_Html & io_client, + HtmlEnvironment_Idl & + io_env, + const ary::idl::CodeEntity & + i_ce ); + Guard_CurFile( /// For Indices + DocuFile_Html & io_client, + HtmlEnvironment_Idl & + io_env, + char i_letter ); + ~Guard_CurFile(); + private: + DocuFile_Html & rClient; + HtmlEnvironment_Idl & + rEnv; + +}; + +/** @resp + Sets and releases the current factory pointer + ( MainDisplay_Idl.pCurFactory ). +*/ +class Guard_CurFactoryPtr +{ + public: + Guard_CurFactoryPtr( + HtmlFactory_Idl *& io_client, + HtmlFactory_Idl & i_factory ) + : rpClient(io_client) + { rpClient = &i_factory; } + + ~Guard_CurFactoryPtr() + { rpClient = 0; } + + private: + HtmlFactory_Idl *& rpClient; + +}; + + +Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client, + HtmlEnvironment_Idl & io_env, + const ary::idl::CodeEntity & i_ce, + const String & i_titlePrefix ) + : rClient(io_client), + rEnv(io_env) +{ // For Ces + StreamLock sl(300); + io_env.Set_CurFile( sl() << i_ce.LocalName() + << ".html" + << c_str ); + StreamLock aCurFilePath(700); + io_env.Get_CurFilePath(aCurFilePath()); + + rClient.EmptyBody(); + csv::ploc::Path + aLocation(aCurFilePath().c_str()); + rClient.SetLocation(aLocation); + sl().reset(); + rClient.SetTitle( sl() << i_titlePrefix + << " " + << i_ce.LocalName() + << c_str ); + sl().reset(); + rClient.SetRelativeCssPath( + sl() << io_env.CurPosition().LinkToRoot() + << C_sCssFilename_Idl + << c_str ); + + io_env.Set_CurPageCe(&i_ce); +} + +Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client, + HtmlEnvironment_Idl & io_env, + const String & i_fileName, + const String & i_titlePrefix ) + : rClient(io_client), + rEnv(io_env) +{ // For Use pages + StreamLock sl(300); + io_env.Set_CurFile( sl() << i_fileName + << ".html" + << c_str ); + StreamLock aCurFilePath(700); + io_env.Get_CurFilePath(aCurFilePath()); + csv::ploc::Path + aLocation(aCurFilePath().c_str()); + + rClient.EmptyBody(); + rClient.SetLocation(aLocation); + sl().reset(); + rClient.SetTitle( sl() << i_titlePrefix << " " << i_fileName << c_str ); + sl().reset(); + rClient.SetRelativeCssPath( + sl() << io_env.CurPosition().LinkToRoot() + << C_sCssFilename_Idl + << c_str ); + + io_env.Set_CurPageCe(0); +} + +Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client, + HtmlEnvironment_Idl & io_env, + const ary::idl::CodeEntity & i_ce ) + : rClient(io_client), + rEnv(io_env) +{ // For Modules + io_env.Set_CurFile( output::ModuleFileName() ); + StreamLock aCurFilePath(700); + io_env.Get_CurFilePath(aCurFilePath()); + csv::ploc::Path + aLocation(aCurFilePath().c_str()); + + rClient.EmptyBody(); + rClient.SetLocation(aLocation); + StreamLock sl(300); + rClient.SetTitle( sl() << "Module " << io_env.CurPosition().Name() << c_str ); + sl().reset(); + rClient.SetRelativeCssPath( + sl() << io_env.CurPosition().LinkToRoot() + << C_sCssFilename_Idl + << c_str ); + + io_env.Set_CurPageCe(&i_ce); +} + +Guard_CurFile::Guard_CurFile( DocuFile_Html & io_client, + HtmlEnvironment_Idl & io_env, + char i_letter ) + : rClient(io_client), + rEnv(io_env) +{ // For Index pages + StreamLock sl(300); + io_env.Set_CurFile( sl() << "index-" + << ( i_letter != '_' + ? int(i_letter)-'a'+1 + : 27 ) + << ".html" + << c_str ); + StreamLock aCurFilePath(700); + io_env.Get_CurFilePath(aCurFilePath()); + csv::ploc::Path + aLocation(aCurFilePath().c_str()); + + rClient.EmptyBody(); + rClient.SetLocation(aLocation); + sl().reset(); + rClient.SetTitle( sl() << "Global Index " + << ( i_letter != '_' + ? char(i_letter-'a'+'A') + : '_' ) + << c_str ); + sl().reset(); + rClient.SetRelativeCssPath( + sl() << "../" + << C_sCssFilename_Idl + << c_str ); +} + +Guard_CurFile::~Guard_CurFile() +{ + rClient.CreateFile(); + rEnv.Set_CurPageCe(0); +} + + +} // anonymous namespace + + + + +MainDisplay_Idl::MainDisplay_Idl( HtmlEnvironment_Idl & io_rEnv ) + : pEnv(&io_rEnv), + pMyFile(new DocuFile_Html), + pCurFactory(0) +{ +// pMyFile->SetStyle( Env().Layout().CssStyle() ); + pMyFile->SetCopyright( Env().Layout().CopyrightText() ); +} + +MainDisplay_Idl::~MainDisplay_Idl() +{ +} + + +void +MainDisplay_Idl::WriteGlobalIndices() +{ + for ( const char * pLetter = "abcdefghijklmnopqrstuvwxyz_X"; *pLetter != 'X'; ++pLetter ) + { + Guard_CurFile gFile( *pMyFile, Env(), *pLetter ); + + HF_IdlGlobalIndex aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_Page( ary::idl::alphabetical_index::E_Letter(*pLetter) ); + } // end for +} + + +void +MainDisplay_Idl::do_Process( const ary::idl::Module & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce ); + HF_IdlModule aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Interface & i_ce ) +{ + do_InterfaceDescr(i_ce); + do_Interface2s(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Service & i_ce ) +{ + do_ServiceDescr(i_ce); + do_Service2s(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::SglIfcService & i_ce ) +{ + do_SglIfcServiceDescr(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Struct & i_ce ) +{ + do_StructDescr(i_ce); + do_Struct2s(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Exception & i_ce ) +{ + do_ExceptionDescr(i_ce); + do_Exception2s(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Enum & i_ce ) +{ + do_EnumDescr(i_ce); + do_Enum2s(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Typedef & i_ce ) +{ + do_TypedefDescr(i_ce); + do_Typedef2s(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::ConstantsGroup & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Constants' Group" ); + HF_IdlConstGroup aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::Singleton & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Singleton" ); + HF_IdlSingleton aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData_ServiceBased(i_ce); +} + +void +MainDisplay_Idl::do_Process( const ary::idl::SglIfcSingleton & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Singleton" ); + HF_IdlSingleton aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData_InterfaceBased(i_ce); +} + +void +MainDisplay_Idl::do_InterfaceDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Interface" ); + HF_IdlInterface aInterface( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aInterface); + + aInterface.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_ServiceDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Service" ); + HF_IdlService aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_SglIfcServiceDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Service" ); + HF_IdlSglIfcService aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_StructDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Struct" ); + HF_IdlStruct aFactory( *pEnv, pMyFile->Body(), false ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_ExceptionDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Exception" ); + HF_IdlStruct aFactory( *pEnv, pMyFile->Body(), true ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_EnumDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Enum" ); + HF_IdlEnum aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_TypedefDescr( const ary::idl::CodeEntity & i_ce ) +{ + Guard_CurFile gFile( *pMyFile, + Env(), + i_ce, + "Typedef" ); + HF_IdlTypedef aFactory( *pEnv, pMyFile->Body() ); + Guard_CurFactoryPtr gFactory(pCurFactory,aFactory); + + aFactory.Produce_byData(i_ce); +} + +void +MainDisplay_Idl::do_Interface2s( const ary::idl::CodeEntity & i_ce ) +{ + StreamLock sl(100); + String sUsesFileName( + sl() + << i_ce.LocalName() + << Env().Linker().XrefsSuffix() + << c_str ); + Guard_CurFile gFile( *pMyFile, + Env(), + sUsesFileName, + "Uses of Interface" ); + HF_IdlXrefs aUses( *pEnv, + pMyFile->Body(), + C_sCePrefix_Interface, + i_ce ); + + + aUses.Produce_Tree( + "Derived Interfaces", + "#Deriveds", + i_ce, + &ary::idl::ifc_interface::xref::Get_Derivations ); + + Dyn_CeIterator pXrefList; + + ary::idl::ifc_interface::xref::Get_SynonymTypedefs(pXrefList,i_ce); + aUses.Produce_List( + "Synonym Typedefs", + "#Synonyms", + *pXrefList ); + ary::idl::ifc_interface::xref::Get_ExportingServices(pXrefList,i_ce); + aUses.Produce_List( + "Services which Support this Interface", + "#SupportingServices", + *pXrefList ); + ary::idl::ifc_interface::xref::Get_ExportingSingletons(pXrefList,i_ce); + aUses.Produce_List( + "Singletons which Support this Interface", + "#SupportingSingletons", + *pXrefList ); + ary::idl::ifc_interface::xref::Get_AsReturns(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Return Type", + "#Returns", + *pXrefList ); + ary::idl::ifc_interface::xref::Get_AsParameters(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Parameter", + "#Parameters", + *pXrefList ); + ary::idl::ifc_interface::xref::Get_AsDataTypes(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Data Type", + "#DataTypes", + *pXrefList ); + aUses.Write_ManualLinks(i_ce); +} + +void +MainDisplay_Idl::do_Service2s( const ary::idl::CodeEntity & i_ce ) +{ + StreamLock sl(100); + String sUsesFileName( + sl() + << i_ce.LocalName() + << Env().Linker().XrefsSuffix() + << c_str ); + Guard_CurFile gFile( *pMyFile, + Env(), + sUsesFileName, + "Uses of Service" ); + HF_IdlXrefs aUses( *pEnv, + pMyFile->Body(), + C_sCePrefix_Service, + i_ce ); + Dyn_CeIterator pXrefList; + ary::idl::ifc_service::xref::Get_IncludingServices(pXrefList,i_ce); + aUses.Produce_List( + "Services which Include this Service", + "#IncludingServices", + *pXrefList ); + + ary::idl::ifc_service::xref::Get_InstantiatingSingletons(pXrefList,i_ce); + aUses.Produce_List( + "Singletons which Instantiate this Service", + "#Singletons", + *pXrefList ); + aUses.Write_ManualLinks(i_ce); +} + +void +MainDisplay_Idl::do_Struct2s( const ary::idl::CodeEntity & i_ce ) +{ + StreamLock sl(100); + String sUsesFileName( + sl() + << i_ce.LocalName() + << Env().Linker().XrefsSuffix() + << c_str ); + Guard_CurFile gFile( *pMyFile, + Env(), + sUsesFileName, + "Uses of Struct" ); + HF_IdlXrefs aUses( *pEnv, + pMyFile->Body(), + C_sCePrefix_Struct, + i_ce ); + + aUses.Produce_Tree( + "Derived Structs", + "#Deriveds", + i_ce, + &ary::idl::ifc_struct::xref::Get_Derivations ); + + Dyn_CeIterator pXrefList; + + ary::idl::ifc_struct::xref::Get_SynonymTypedefs(pXrefList,i_ce); + aUses.Produce_List( + "Synonym Typedefs", + "#Synonyms", + *pXrefList ); + ary::idl::ifc_struct::xref::Get_AsReturns(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Return Type", + "#Returns", + *pXrefList ); + ary::idl::ifc_struct::xref::Get_AsParameters(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Parameter", + "#Parameters", + *pXrefList ); + ary::idl::ifc_struct::xref::Get_AsDataTypes(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Data Type", + "#DataTypes", + *pXrefList ); + aUses.Write_ManualLinks(i_ce); +} + +void +MainDisplay_Idl::do_Exception2s( const ary::idl::CodeEntity & i_ce ) +{ + StreamLock sl(100); + String sUsesFileName( + sl() + << i_ce.LocalName() + << Env().Linker().XrefsSuffix() + << c_str ); + Guard_CurFile gFile( *pMyFile, + Env(), + sUsesFileName, + "Uses of Exception" ); + HF_IdlXrefs aUses( *pEnv, + pMyFile->Body(), + C_sCePrefix_Exception, + i_ce ); + + aUses.Produce_Tree( + "Derived Exceptions", + "#Deriveds", + i_ce, + &ary::idl::ifc_exception::xref::Get_Derivations ); + + Dyn_CeIterator pXrefList; + + ary::idl::ifc_exception::xref::Get_RaisingFunctions(pXrefList,i_ce); + aUses.Produce_List( + "Raising Functions", + "#Raisers", + *pXrefList ); + aUses.Write_ManualLinks(i_ce); +} + +void +MainDisplay_Idl::do_Enum2s( const ary::idl::CodeEntity & i_ce ) +{ + StreamLock sl(100); + String sUsesFileName( + sl() + << i_ce.LocalName() + << Env().Linker().XrefsSuffix() + << c_str ); + Guard_CurFile gFile( *pMyFile, + Env(), + sUsesFileName, + "Uses of Enum" ); + HF_IdlXrefs aUses( *pEnv, + pMyFile->Body(), + C_sCePrefix_Enum, + i_ce ); + Dyn_CeIterator pXrefList; + ary::idl::ifc_enum::xref::Get_SynonymTypedefs(pXrefList,i_ce); + aUses.Produce_List( + "Synonym Typedefs", + "#Synonyms", + *pXrefList ); + ary::idl::ifc_enum::xref::Get_AsReturns(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Return Type", + "#Returns", + *pXrefList ); + ary::idl::ifc_enum::xref::Get_AsParameters(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Parameter", + "#Parameters", + *pXrefList ); + ary::idl::ifc_enum::xref::Get_AsDataTypes(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Data Type", + "#DataTypes", + *pXrefList ); + aUses.Write_ManualLinks(i_ce); +} + +void +MainDisplay_Idl::do_Typedef2s( const ary::idl::CodeEntity & i_ce ) +{ + StreamLock sl(100); + String sUsesFileName( + sl() << i_ce.LocalName() + << Env().Linker().XrefsSuffix() + << c_str ); + Guard_CurFile gFile( *pMyFile, + Env(), + sUsesFileName, + "Uses of Typedef" ); + HF_IdlXrefs aUses( *pEnv, + pMyFile->Body(), + C_sCePrefix_Typedef, + i_ce ); + Dyn_CeIterator pXrefList; + ary::idl::ifc_typedef::xref::Get_SynonymTypedefs(pXrefList,i_ce); + aUses.Produce_List( + "Synonym Typedefs", + "#Synonyms", + *pXrefList ); + ary::idl::ifc_typedef::xref::Get_AsReturns(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Return Type", + "#Returns", + *pXrefList ); + ary::idl::ifc_typedef::xref::Get_AsParameters(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Parameter", + "#Parameters", + *pXrefList ); + ary::idl::ifc_typedef::xref::Get_AsDataTypes(pXrefList,i_ce); + aUses.Produce_List( + "Uses as Data Type", + "#DataTypes", + *pXrefList ); + aUses.Write_ManualLinks(i_ce); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/hi_main.hxx b/autodoc/source/display/idl/hi_main.hxx new file mode 100644 index 000000000000..a70daa4087a1 --- /dev/null +++ b/autodoc/source/display/idl/hi_main.hxx @@ -0,0 +1,181 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef ADC_DISPLAY_HFIDMAIN_HXX +#define ADC_DISPLAY_HFIDMAIN_HXX + + + +// USED SERVICES + // BASE CLASSES +#include <cosv/tpl/processor.hxx> + // COMPONENTS +#include "hi_factory.hxx" + // PARAMETERS + + +class HtmlEnvironment_Idl; +class HtmlFactory_Idl; +class DocuFile_Html; + +namespace ary +{ +namespace idl +{ + + class Module; + class Service; + class SglIfcService; + class Interface; + class Struct; + class Exception; + class Enum; + class Typedef; + class ConstantsGroup; + class Singleton; + class SglIfcSingleton; + +} // namespace idl +} // namespace ary + + +class MainDisplay_Idl : public csv::ProcessorIfc, + public csv::ConstProcessor<ary::idl::Module>, + public csv::ConstProcessor<ary::idl::Service>, + public csv::ConstProcessor<ary::idl::SglIfcService>, + public csv::ConstProcessor<ary::idl::Interface>, + public csv::ConstProcessor<ary::idl::Struct>, + public csv::ConstProcessor<ary::idl::Exception>, + public csv::ConstProcessor<ary::idl::Enum>, + public csv::ConstProcessor<ary::idl::Typedef>, + public csv::ConstProcessor<ary::idl::ConstantsGroup>, + public csv::ConstProcessor<ary::idl::Singleton>, + public csv::ConstProcessor<ary::idl::SglIfcSingleton> +{ + public: + MainDisplay_Idl( + HtmlEnvironment_Idl & + io_rEnv ); + virtual ~MainDisplay_Idl(); + + void WriteGlobalIndices(); + + void Display_NamedEntityHierarchy(); + + private: + // Interface csv::ProcessorIfc: + virtual void do_Process( + const ary::idl::Module & i_client ); + virtual void do_Process( + const ary::idl::Service & i_client ); + virtual void do_Process( + const ary::idl::SglIfcService & + i_client ); + virtual void do_Process( + const ary::idl::Interface & i_client ); + virtual void do_Process( + const ary::idl::Struct & i_client ); + virtual void do_Process( + const ary::idl::Exception & i_client ); + virtual void do_Process( + const ary::idl::Enum & i_client ); + virtual void do_Process( + const ary::idl::Typedef & i_client ); + virtual void do_Process( + const ary::idl::ConstantsGroup & + i_client ); + virtual void do_Process( + const ary::idl::Singleton & i_client ); + virtual void do_Process( + const ary::idl::SglIfcSingleton & + i_client ); + // Locals + void do_ServiceDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_SglIfcServiceDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_InterfaceDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_StructDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_ExceptionDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_EnumDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_TypedefDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_SingletonDescr( + const ary::idl::CodeEntity & + i_rData ); + void do_Service2s( + const ary::idl::CodeEntity & + i_rData ); + void do_Interface2s( + const ary::idl::CodeEntity & + i_rData ); + void do_Struct2s( + const ary::idl::CodeEntity & + i_rData ); + void do_Exception2s( + const ary::idl::CodeEntity & + i_rData ); + void do_Enum2s( + const ary::idl::CodeEntity & + i_rData ); + void do_Typedef2s( + const ary::idl::CodeEntity & + i_rData ); + void do_Singleton2s( + const ary::idl::CodeEntity & + i_rData ); + + const HtmlEnvironment_Idl & + Env() const { return *pEnv; } + HtmlEnvironment_Idl & + Env() { return *pEnv; } + Xml::Element & CurHtmlOut() { return pCurFactory->CurOut(); } + + // DATA + HtmlEnvironment_Idl * + pEnv; + Dyn<DocuFile_Html> pMyFile; + HtmlFactory_Idl * pCurFactory; +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/autodoc/source/display/idl/makefile.mk b/autodoc/source/display/idl/makefile.mk new file mode 100644 index 000000000000..383983a1fb22 --- /dev/null +++ b/autodoc/source/display/idl/makefile.mk @@ -0,0 +1,77 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +PRJ=..$/..$/.. + +PRJNAME=autodoc +TARGET=display_idl + + +# --- Settings ----------------------------------------------------- + +ENABLE_EXCEPTIONS=true +PRJINC=$(PRJ)$/source + +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/source$/mkinc$/fullcpp.mk + + +# --- Files -------------------------------------------------------- + +OBJFILES= \ + $(OBJ)$/hfi_constgroup.obj \ + $(OBJ)$/hfi_doc.obj \ + $(OBJ)$/hfi_enum.obj \ + $(OBJ)$/hfi_globalindex.obj \ + $(OBJ)$/hfi_hierarchy.obj \ + $(OBJ)$/hfi_interface.obj \ + $(OBJ)$/hfi_method.obj \ + $(OBJ)$/hfi_module.obj \ + $(OBJ)$/hfi_navibar.obj \ + $(OBJ)$/hfi_property.obj \ + $(OBJ)$/hfi_service.obj \ + $(OBJ)$/hfi_singleton.obj \ + $(OBJ)$/hfi_siservice.obj \ + $(OBJ)$/hfi_struct.obj \ + $(OBJ)$/hfi_tag.obj \ + $(OBJ)$/hfi_typedef.obj \ + $(OBJ)$/hfi_typetext.obj \ + $(OBJ)$/hfi_xrefpage.obj \ + $(OBJ)$/hi_ary.obj \ + $(OBJ)$/hi_display.obj \ + $(OBJ)$/hi_env.obj \ + $(OBJ)$/hi_factory.obj \ + $(OBJ)$/hi_linkhelper.obj \ + $(OBJ)$/hi_main.obj + + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + + + |