| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _XMLOFF_XMLSECTIONEXPORT_HXX_ |
| #define _XMLOFF_XMLSECTIONEXPORT_HXX_ |
| |
| #include <rtl/ustring.hxx> |
| #include <com/sun/star/uno/Reference.h> |
| #include <com/sun/star/uno/Sequence.h> |
| #include <com/sun/star/beans/PropertyValue.hpp> |
| #include <xmloff/xmltoken.hxx> |
| |
| class SvXMLExport; |
| class XMLTextParagraphExport; |
| namespace com { namespace sun { namespace star { |
| namespace text |
| { |
| class XTextSection; |
| class XDocumentIndex; |
| class XTextContent; |
| } |
| namespace beans |
| { |
| class XPropertySet; |
| } |
| namespace container |
| { |
| class XIndexReplace; |
| } |
| } } } |
| |
| |
| enum SectionTypeEnum |
| { |
| TEXT_SECTION_TYPE_SECTION, |
| |
| // indices: keep index valued together and do not change order, |
| // because they are used to index into array |
| TEXT_SECTION_TYPE_TOC, |
| TEXT_SECTION_TYPE_TABLE, |
| TEXT_SECTION_TYPE_ILLUSTRATION, |
| TEXT_SECTION_TYPE_OBJECT, |
| TEXT_SECTION_TYPE_USER, |
| TEXT_SECTION_TYPE_ALPHABETICAL, |
| TEXT_SECTION_TYPE_BIBLIOGRAPHY, |
| |
| // index header sections: |
| TEXT_SECTION_TYPE_HEADER, |
| |
| TEXT_SECTION_TYPE_UNKNOWN |
| }; |
| |
| |
| /** |
| * This class handles the export of sections and indices (which are, |
| * internally, just sections). It is intended to be used only from |
| * within the XMLTextParagraphExport class. |
| */ |
| class XMLSectionExport |
| { |
| const ::rtl::OUString sCondition; |
| const ::rtl::OUString sCreateFromChapter; |
| const ::rtl::OUString sCreateFromEmbeddedObjects; |
| const ::rtl::OUString sCreateFromGraphicObjects; |
| const ::rtl::OUString sCreateFromLabels; |
| const ::rtl::OUString sCreateFromMarks; |
| const ::rtl::OUString sCreateFromOtherEmbeddedObjects; |
| const ::rtl::OUString sCreateFromOutline; |
| const ::rtl::OUString sCreateFromStarCalc; |
| const ::rtl::OUString sCreateFromStarChart; |
| const ::rtl::OUString sCreateFromStarDraw; |
| const ::rtl::OUString sCreateFromStarImage; |
| const ::rtl::OUString sCreateFromStarMath; |
| const ::rtl::OUString sCreateFromTables; |
| const ::rtl::OUString sCreateFromTextFrames; |
| const ::rtl::OUString sDdeCommandElement; |
| const ::rtl::OUString sDdeCommandFile; |
| const ::rtl::OUString sDdeCommandType; |
| const ::rtl::OUString sFileLink; |
| const ::rtl::OUString sIsCaseSensitive; |
| const ::rtl::OUString sIsProtected; |
| const ::rtl::OUString sIsVisible; |
| const ::rtl::OUString sLabelCategory; |
| const ::rtl::OUString sLabelDisplayType; |
| const ::rtl::OUString sLevel; |
| const ::rtl::OUString sLevelFormat; |
| const ::rtl::OUString sLevelParagraphStyles; |
| const ::rtl::OUString sLinkRegion; |
| const ::rtl::OUString sMainEntryCharacterStyleName; |
| const ::rtl::OUString sParaStyleHeading; |
| const ::rtl::OUString sParaStyleLevel; |
| const ::rtl::OUString sTitle; |
| const ::rtl::OUString sName; |
| const ::rtl::OUString sUseAlphabeticalSeparators; |
| const ::rtl::OUString sUseCombinedEntries; |
| const ::rtl::OUString sUseDash; |
| const ::rtl::OUString sUseKeyAsEntry; |
| const ::rtl::OUString sUseLevelFromSource; |
| const ::rtl::OUString sUsePP; |
| const ::rtl::OUString sUseUpperCase; |
| const ::rtl::OUString sIsCommaSeparated; |
| const ::rtl::OUString sIsAutomaticUpdate; |
| const ::rtl::OUString sIsRelativeTabstops; |
| const ::rtl::OUString sCreateFromLevelParagraphStyles; |
| const ::rtl::OUString sDocumentIndex; |
| const ::rtl::OUString sContentSection; |
| const ::rtl::OUString sHeaderSection; |
| |
| const ::rtl::OUString sTextSection; |
| const ::rtl::OUString sIsGlobalDocumentSection; |
| const ::rtl::OUString sProtectionKey; |
| const ::rtl::OUString sSortAlgorithm; |
| const ::rtl::OUString sLocale; |
| const ::rtl::OUString sUserIndexName; |
| |
| const ::rtl::OUString sIsCurrentlyVisible; |
| const ::rtl::OUString sHeadingStyleName; |
| |
| const ::rtl::OUString sEmpty; |
| |
| SvXMLExport& rExport; |
| XMLTextParagraphExport& rParaExport; |
| |
| sal_Bool bHeadingDummiesExported; |
| |
| public: |
| XMLSectionExport(SvXMLExport& rExp, |
| XMLTextParagraphExport& rParaExp); |
| |
| /** |
| * export section or index start and source elements. This |
| * method handles the section styles, and delegates to the |
| * appropriate section or index method. |
| */ |
| void ExportSectionStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rSection, |
| sal_Bool bAutoStyles); |
| |
| /** |
| * export section or index end elements |
| */ |
| void ExportSectionEnd( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rSection, |
| sal_Bool bAutoStyles); |
| |
| /** |
| * Should the content of this section be exported? |
| * (E.g. linked sections in global documents are not always exported) |
| */ |
| sal_Bool IsMuteSection( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rSection) const; |
| |
| /** |
| * XTextContent-version of IsMuteSection(Reference<XTextSection>&) |
| * returns *true* for all non-section elements |
| */ |
| sal_Bool IsMuteSection( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextContent > & rSection, |
| /// return value if this content doesn't support the section property |
| sal_Bool bDefault) const; |
| |
| /** |
| * Determine whether rContent is contained in rEnclosingSection. If the |
| * current section of rContent can not be determined, return bDefault. |
| */ |
| sal_Bool IsInSection( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rEnclosingSection, |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextContent > & rContent, |
| /// return value if this content doesn't support the section property |
| sal_Bool bDefault); |
| |
| /** |
| * Export the configuration element for bibliography indices. |
| * |
| * (This is part of XMLSectionExport because all section- and |
| * index-related items are handled here.) |
| */ |
| static void ExportBibliographyConfiguration(SvXMLExport& rExport); |
| |
| /** export a heading for every level. This is used by master documents |
| * to not loose the heading information if master documents are exported |
| * without section contents |
| */ |
| void ExportMasterDocHeadingDummies(); |
| |
| |
| |
| protected: |
| |
| inline SvXMLExport& GetExport() { return rExport; } |
| inline XMLTextParagraphExport& GetParaExport() { return rParaExport; } |
| |
| // export methods for section and index start: |
| |
| /// export an index start element. |
| void ExportIndexStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XDocumentIndex > & rSection); |
| |
| /// export an index header start element. |
| void ExportIndexHeaderStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rSection); |
| |
| /// export a proper section (and source elements) |
| void ExportRegularSectionStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rSection); |
| |
| /// export a table of content (and source element) |
| void ExportTableOfContentStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export a table index (and source element) |
| void ExportTableIndexStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export an object index (and source element) |
| void ExportObjectIndexStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export an illustration index (and source element) |
| void ExportIllustrationIndexStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export an alphabetical/keyword index (and source element) |
| void ExportAlphabeticalIndexStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export a user index (and source element) |
| void ExportUserIndexStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export the bibliography (and source element) |
| void ExportBibliographyStart( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rIndex); |
| |
| // helper methods: |
| |
| /** |
| * If this section is an index, the index is written in the |
| * rIndex parameter. The return value is sal_True for all "special" |
| * sections. |
| * |
| * Thus we have: |
| * return sal_False: regular section |
| * return sal_True, xIndex is empty: index header section |
| * return sal_True, xIndex is set: index section */ |
| sal_Bool GetIndex( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XTextSection > & rSection, |
| ::com::sun::star::uno::Reference < |
| ::com::sun::star::text::XDocumentIndex > & rIndex) const; |
| |
| /// map service name to section type |
| enum SectionTypeEnum MapSectionType(const ::rtl::OUString& rSectionName); |
| |
| /** |
| * Export the index element start (for all index types). |
| * |
| * All additional attributes (usually none) for the index element |
| * should have been set at GetExport() before calling this method. |
| */ |
| void ExportBaseIndexStart( |
| ::xmloff::token::XMLTokenEnum eElement, |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /** |
| * Export the index source element (common for all index types). |
| * |
| * All additional attributes for the source element should have |
| * been set at the GetExport() before calling this method. |
| */ |
| void ExportBaseIndexSource( |
| SectionTypeEnum eType, /// index type |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /** |
| * Export the index body (common for all index types). |
| */ |
| void ExportBaseIndexBody( |
| SectionTypeEnum eType, /// index type |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| |
| /** |
| * Helper method to export common attributes for table and |
| * illustration indices |
| */ |
| void ExportTableAndIllustrationIndexSourceAttributes( |
| const ::com::sun::star::uno::Reference < |
| ::com::sun::star::beans::XPropertySet > & rSection); |
| |
| /// export one template for the specific index type |
| sal_Bool ExportIndexTemplate( |
| SectionTypeEnum eType, /// index type |
| sal_Int32 nLevel, /// outline level (if applicable) |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet, |
| ::com::sun::star::uno::Sequence< |
| ::com::sun::star::uno::Sequence< |
| ::com::sun::star::beans::PropertyValue> > & rValues); |
| |
| /// export a single template element (e.g. span or tab-stop) |
| void ExportIndexTemplateElement( |
| SectionTypeEnum eType, //i90246, needed for ODF 1.0, 1.0 and 1.2 management |
| ::com::sun::star::uno::Sequence< |
| ::com::sun::star::beans::PropertyValue> & rValues); |
| |
| /// export level paragraph styles |
| void ExportLevelParagraphStyles( |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::container::XIndexReplace> & xStyles); |
| |
| |
| /// helper to export boolean properties |
| void ExportBoolean( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet, |
| const ::rtl::OUString& sPropertyName, |
| enum ::xmloff::token::XMLTokenEnum eAttributeName, |
| sal_Bool bDefault, |
| sal_Bool bInvert = sal_False); |
| }; |
| |
| #endif |