diff options
author | Daniel Vogelheim <dvo@openoffice.org> | 2000-11-14 13:42:50 +0000 |
---|---|---|
committer | Daniel Vogelheim <dvo@openoffice.org> | 2000-11-14 13:42:50 +0000 |
commit | c26ca6c062ac2181a6acf5adf18e2a68b0605273 (patch) | |
tree | ae4790e4ae8ea6f125fd868d3230954f7f61ad67 /xmloff/source/text | |
parent | b71e1da56b515e6ad6f69be7edce75c2c0d658ed (diff) |
#80284# XML im-/export continued
- changed: section and TOC im-/export restructured to accomodate indices
- added: im-/export of all index types (implemented but disabled due to API problems)
- changed: auto style Add(), Find() made public on txtparae.hxx
- changed: text:section-source-dde into office:dde-source
- changed: dde attribute names now use standard terminology
Diffstat (limited to 'xmloff/source/text')
34 files changed, 5886 insertions, 912 deletions
diff --git a/xmloff/source/text/XMLIndexAlphabeticalSourceContext.cxx b/xmloff/source/text/XMLIndexAlphabeticalSourceContext.cxx new file mode 100644 index 000000000000..c7f721243041 --- /dev/null +++ b/xmloff/source/text/XMLIndexAlphabeticalSourceContext.cxx @@ -0,0 +1,302 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexAlphabeticalSourceContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXALPHABETICALSOURCECONTEXT_HXX_ +#include "XMLIndexAlphabeticalSourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTITLETEMPLATECONTEXT_HXX_ +#include "XMLIndexTitleTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTOCSTYLESCONTEXT_HXX_ +#include "XMLIndexTOCStylesContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + + + + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + +const sal_Char sAPI_MainEntryCharacterStyleName[] = "MainEntryCharacterStyleName"; +const sal_Char sAPI_UseAlphabeticalSeparators[] = "UseAlphabeticalSeparators"; +const sal_Char sAPI_UseCombinedEntries[] = "UseCombinedEntries"; +const sal_Char sAPI_IsCaseSensitive[] = "IsCaseSensitive"; +const sal_Char sAPI_UseKeyAsEntry[] = "UseKeyAsEntry"; +const sal_Char sAPI_UseUpperCase[] = "UseUpperCase"; +const sal_Char sAPI_UseDash[] = "UseDash"; +const sal_Char sAPI_UsePP[] = "UsePP"; + + +TYPEINIT1( XMLIndexAlphabeticalSourceContext, XMLIndexSourceBaseContext ); + +XMLIndexAlphabeticalSourceContext::XMLIndexAlphabeticalSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet) : + XMLIndexSourceBaseContext(rImport, nPrfx, rLocalName, + rPropSet, sal_False), + sMainEntryStyleName(), + bMainEntryStyleNameOK(sal_False), + bSeparators(sal_False), + bCombineEntries(sal_True), + bCaseSensitive(sal_True), + bEntry(sal_False), + bUpperCase(sal_False), + bCombineDash(sal_False), + bCombinePP(sal_True), + sMainEntryCharacterStyleName(RTL_CONSTASCII_USTRINGPARAM( + sAPI_MainEntryCharacterStyleName)), + sUseAlphabeticalSeparators(RTL_CONSTASCII_USTRINGPARAM( + sAPI_UseAlphabeticalSeparators)), + sUseCombinedEntries(RTL_CONSTASCII_USTRINGPARAM( + sAPI_UseCombinedEntries)), + sIsCaseSensitive(RTL_CONSTASCII_USTRINGPARAM(sAPI_IsCaseSensitive)), + sUseKeyAsEntry(RTL_CONSTASCII_USTRINGPARAM(sAPI_UseKeyAsEntry)), + sUseUpperCase(RTL_CONSTASCII_USTRINGPARAM(sAPI_UseUpperCase)), + sUseDash(RTL_CONSTASCII_USTRINGPARAM(sAPI_UseDash)), + sUsePP(RTL_CONSTASCII_USTRINGPARAM(sAPI_UsePP)) +{ +} + +XMLIndexAlphabeticalSourceContext::~XMLIndexAlphabeticalSourceContext() +{ +} + +void XMLIndexAlphabeticalSourceContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) +{ + sal_Bool bTmp; + + switch (eParam) + { + case XML_TOK_INDEXSOURCE_MAIN_ENTRY_STYLE: + sMainEntryStyleName = rValue; + bMainEntryStyleNameOK = sal_True; + break; + + case XML_TOK_INDEXSOURCE_IGNORE_CASE: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bCaseSensitive = !bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_SEPARATORS: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bSeparators = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_COMBINE_ENTRIES: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bCombineEntries = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_COMBINE_WITH_DASH: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bCombineDash = bTmp; + } + break; + case XML_TOK_INDEXSOURCE_KEYS_AS_ENTRIES: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bEntry = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_COMBINE_WITH_PP: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bCombinePP = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_CAPITALIZE: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUpperCase = bTmp; + } + break; + + default: + XMLIndexSourceBaseContext::ProcessAttribute(eParam, rValue); + break; + } +} + +void XMLIndexAlphabeticalSourceContext::EndElement() +{ + + Any aAny; + + if (bMainEntryStyleNameOK) + { + aAny <<= sMainEntryStyleName; + rIndexPropertySet->setPropertyValue(sMainEntryCharacterStyleName,aAny); + } + + aAny.setValue(&bSeparators, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUseAlphabeticalSeparators, aAny); + + aAny.setValue(&bCombineEntries, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUseCombinedEntries, aAny); + + aAny.setValue(&bCaseSensitive, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sIsCaseSensitive, aAny); + + aAny.setValue(&bEntry, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUseKeyAsEntry, aAny); + + aAny.setValue(&bUpperCase, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUseUpperCase, aAny); + + aAny.setValue(&bCombineDash, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUseDash, aAny); + + aAny.setValue(&bCombinePP, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUsePP, aAny); + + XMLIndexSourceBaseContext::EndElement(); +} + +SvXMLImportContext* XMLIndexAlphabeticalSourceContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_alphabetical_index_entry_template, + sizeof(sXML_alphabetical_index_entry_template)-1))) + { + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameAlphaMap, + sXML_outline_level, + aLevelStylePropNameAlphaMap, + aAllowedTokenTypesAlpha); + } + else + { + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); + } +} diff --git a/xmloff/source/text/XMLIndexAlphabeticalSourceContext.hxx b/xmloff/source/text/XMLIndexAlphabeticalSourceContext.hxx new file mode 100644 index 000000000000..dcec8f1247de --- /dev/null +++ b/xmloff/source/text/XMLIndexAlphabeticalSourceContext.hxx @@ -0,0 +1,134 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexAlphabeticalSourceContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXALPHABETICALSOURCECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXALPHABETICALSOURCECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } +namespace rtl { class OUString; } + + +/** + * Import alphabetical (keyword) index source element + */ +class XMLIndexAlphabeticalSourceContext : public XMLIndexSourceBaseContext +{ + const ::rtl::OUString sMainEntryCharacterStyleName; + const ::rtl::OUString sUseAlphabeticalSeparators; + const ::rtl::OUString sUseCombinedEntries; + const ::rtl::OUString sIsCaseSensitive; + const ::rtl::OUString sUseKeyAsEntry; + const ::rtl::OUString sUseUpperCase; + const ::rtl::OUString sUseDash; + const ::rtl::OUString sUsePP; + + ::rtl::OUString sMainEntryStyleName; + sal_Bool bMainEntryStyleNameOK; + + sal_Bool bSeparators; + sal_Bool bCombineEntries; + sal_Bool bCaseSensitive; + sal_Bool bEntry; + sal_Bool bUpperCase; + sal_Bool bCombineDash; + sal_Bool bCombinePP; + +public: + + TYPEINFO(); + + XMLIndexAlphabeticalSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet); + + ~XMLIndexAlphabeticalSourceContext(); + +protected: + + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); + + virtual void EndElement(); + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexBibliographyEntryContext.cxx b/xmloff/source/text/XMLIndexBibliographyEntryContext.cxx new file mode 100644 index 000000000000..324064a00ae5 --- /dev/null +++ b/xmloff/source/text/XMLIndexBibliographyEntryContext.cxx @@ -0,0 +1,240 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexBibliographyEntryContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXBIBLIOGRAPHYENTRYCONTEXT_HXX_ +#include "XMLIndexBibliographyEntryContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _COM_SUN_STAR_TEXT_BIBLIOGRAPHYDATAFIELD_HPP_ +#include <com/sun/star/text/BibliographyDataField.hpp> +#endif + + +using namespace ::com::sun::star::text; + +using ::rtl::OUString; +using ::com::sun::star::beans::PropertyValue; +using ::com::sun::star::beans::PropertyValues; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + + +const sal_Char sAPI_TokenType[] = "TokenType"; +const sal_Char sAPI_CharacterStyleName[] = "CharacterStyleName"; + +TYPEINIT1( XMLIndexBibliographyEntryContext, XMLIndexSimpleEntryContext); + +XMLIndexBibliographyEntryContext::XMLIndexBibliographyEntryContext( + SvXMLImport& rImport, + XMLIndexTemplateContext& rTemplate, + sal_uInt16 nPrfx, + const OUString& rLocalName ) : + XMLIndexSimpleEntryContext(rImport, + rTemplate.sTokenBibliographyDataField, + rTemplate, + nPrfx, rLocalName), + nBibliographyInfo(BibliographyDataField::IDENTIFIER), + bBibliographyInfoOK(sal_False) +{ +} + +XMLIndexBibliographyEntryContext::~XMLIndexBibliographyEntryContext() +{ +} + +SvXMLEnumMapEntry __READONLY_DATA aBibliographyDataFieldMap[] = +{ + { sXML_address, BibliographyDataField::ADDRESS }, + { sXML_annote, BibliographyDataField::ANNOTE }, + { sXML_author, BibliographyDataField::AUTHOR }, + { sXML_bibiliographic_type, BibliographyDataField::BIBILIOGRAPHIC_TYPE }, + { sXML_booktitle, BibliographyDataField::BOOKTITLE }, + { sXML_chapter, BibliographyDataField::CHAPTER }, + { sXML_custom1, BibliographyDataField::CUSTOM1 }, + { sXML_custom2, BibliographyDataField::CUSTOM2 }, + { sXML_custom3, BibliographyDataField::CUSTOM3 }, + { sXML_custom4, BibliographyDataField::CUSTOM4 }, + { sXML_custom5, BibliographyDataField::CUSTOM5 }, + { sXML_edition, BibliographyDataField::EDITION }, + { sXML_editor, BibliographyDataField::EDITOR }, + { sXML_howpublished, BibliographyDataField::HOWPUBLISHED }, + { sXML_identifier, BibliographyDataField::IDENTIFIER }, + { sXML_institution, BibliographyDataField::INSTITUTION }, + { sXML_isbn, BibliographyDataField::ISBN }, + { sXML_journal, BibliographyDataField::JOURNAL }, + { sXML_month, BibliographyDataField::MONTH }, + { sXML_note, BibliographyDataField::NOTE }, + { sXML_number, BibliographyDataField::NUMBER }, + { sXML_organizations, BibliographyDataField::ORGANIZATIONS }, + { sXML_pages, BibliographyDataField::PAGES }, + { sXML_publisher, BibliographyDataField::PUBLISHER }, + { sXML_report_type, BibliographyDataField::REPORT_TYPE }, + { sXML_school, BibliographyDataField::SCHOOL }, + { sXML_series, BibliographyDataField::SERIES }, + { sXML_title, BibliographyDataField::TITLE }, + { sXML_url, BibliographyDataField::URL }, + { sXML_volume, BibliographyDataField::VOLUME }, + { sXML_year, BibliographyDataField::YEAR }, + { NULL, NULL } +}; + +void XMLIndexBibliographyEntryContext::StartElement( + const Reference<XAttributeList> & xAttrList) +{ + // handle both, style name and bibliography info + sal_Int32 nLength = xAttrList->getLength(); + for(sal_Int32 nAttr = 0; nAttr < nLength; nAttr++) + { + OUString sLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). + GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), + &sLocalName ); + if (XML_NAMESPACE_TEXT == nPrefix) + { + if (sLocalName.equalsAsciiL(sXML_style_name, + sizeof(sXML_style_name)-1)) + { + sCharStyleName = xAttrList->getValueByIndex(nAttr); + bCharStyleNameOK = sal_True; + } + else if (sLocalName.equalsAsciiL(sXML_bibliography_data_field, + sizeof(sXML_bibliography_data_field)-1)) + { + sal_uInt16 nTmp; + if (SvXMLUnitConverter::convertEnum( + nTmp, xAttrList->getValueByIndex(nAttr), + aBibliographyDataFieldMap)) + { + nBibliographyInfo = nTmp; + bBibliographyInfoOK = sal_True; + } + } + } + } + + // if we have a style name, set it! + if (bCharStyleNameOK) + { + nValues++; + } + + // always bibliography; else element is not valid + nValues++; +} + +void XMLIndexBibliographyEntryContext::EndElement() +{ + // only valid, if we have bibliography info + if (bBibliographyInfoOK) + { + XMLIndexSimpleEntryContext::EndElement(); + } +} + +void XMLIndexBibliographyEntryContext::FillPropertyValues( + ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue> & rValues) +{ + // entry name and (optionally) style name in parent class + XMLIndexSimpleEntryContext::FillPropertyValues(rValues); + + // bibliography data field + sal_Int32 nIndex = bCharStyleNameOK ? 2 : 1; + rValues[nIndex].Name = rTemplateContext.sBibliographyDataField; + Any aAny; + aAny <<= nBibliographyInfo; + rValues[nIndex].Value = aAny; +} diff --git a/xmloff/source/text/XMLIndexBibliographyEntryContext.hxx b/xmloff/source/text/XMLIndexBibliographyEntryContext.hxx new file mode 100644 index 000000000000..52958be7657c --- /dev/null +++ b/xmloff/source/text/XMLIndexBibliographyEntryContext.hxx @@ -0,0 +1,126 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexBibliographyEntryContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXBIBLIOGRAPHYENTRYCONTEXT_HXX_ +#define _XMLOFF_XMLINDEXBIBLIOGRAPHYENTRYCONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSIMPLEENTRYCONTEXT_HXX_ +#include "XMLIndexSimpleEntryContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_H_ +#include <com/sun/star/uno/Sequence.h> +#endif + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ +#include <com/sun/star/beans/PropertyValue.hpp> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } +} } } +namespace rtl { class OUString; } +class XMLIndexTemplateContext; + +/** + * Import bibliography index entry templates + */ +class XMLIndexBibliographyEntryContext : public XMLIndexSimpleEntryContext +{ + // bibliography info + sal_Int16 nBibliographyInfo; + sal_Bool bBibliographyInfoOK; + +public: + + TYPEINFO(); + + XMLIndexBibliographyEntryContext( + SvXMLImport& rImport, + XMLIndexTemplateContext& rTemplate, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName ); + + ~XMLIndexBibliographyEntryContext(); + +protected: + + /** process parameters */ + virtual void StartElement( + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList); + + /** call FillPropertyValues and insert into template */ + virtual void EndElement(); + + /** fill property values for this template entry */ + virtual void FillPropertyValues( + ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue> & rValues); + +}; + +#endif diff --git a/xmloff/source/text/XMLIndexBibliographySourceContext.cxx b/xmloff/source/text/XMLIndexBibliographySourceContext.cxx new file mode 100644 index 000000000000..fd0d37361d62 --- /dev/null +++ b/xmloff/source/text/XMLIndexBibliographySourceContext.cxx @@ -0,0 +1,184 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexBibliographySourceContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXBIBLIOGRAPHYSOURCECONTEXT_HXX_ +#include "XMLIndexBibliographySourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTITLETEMPLATECONTEXT_HXX_ +#include "XMLIndexTitleTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTOCSTYLESCONTEXT_HXX_ +#include "XMLIndexTOCStylesContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + + +TYPEINIT1(XMLIndexBibliographySourceContext, XMLIndexSourceBaseContext); + + +XMLIndexBibliographySourceContext::XMLIndexBibliographySourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet) : + XMLIndexSourceBaseContext(rImport, nPrfx, rLocalName, + rPropSet, sal_False) +{ +} + +XMLIndexBibliographySourceContext::~XMLIndexBibliographySourceContext() +{ +} + +void XMLIndexBibliographySourceContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) +{ + // We have no attributes. Who wants attributes, anyway? +} + + +void XMLIndexBibliographySourceContext::EndElement() +{ + // No attributes, no properties. +} + + +SvXMLImportContext* XMLIndexBibliographySourceContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_bibliography_entry_template, + sizeof(sXML_bibliography_entry_template)-1))) + { + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameBibliographyMap, + sXML_bibliography_type, + aLevelStylePropNameBibliographyMap, + aAllowedTokenTypesBibliography); + } + else + { + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); + } + +} diff --git a/xmloff/source/text/XMLIndexBibliographySourceContext.hxx b/xmloff/source/text/XMLIndexBibliographySourceContext.hxx new file mode 100644 index 000000000000..0866506d6555 --- /dev/null +++ b/xmloff/source/text/XMLIndexBibliographySourceContext.hxx @@ -0,0 +1,115 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexBibliographySourceContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXBIBLIOGRAPHYSOURCECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXBIBLIOGRAPHYSOURCECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } +namespace rtl { class OUString; } + + +/** + * Import bibliography source element + */ +class XMLIndexBibliographySourceContext : public XMLIndexSourceBaseContext +{ + +public: + + TYPEINFO(); + + XMLIndexBibliographySourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet); + + ~XMLIndexBibliographySourceContext(); + +protected: + + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); + + virtual void EndElement(); + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexChapterInfoEntryContext.cxx b/xmloff/source/text/XMLIndexChapterInfoEntryContext.cxx new file mode 100644 index 000000000000..16452d7794b5 --- /dev/null +++ b/xmloff/source/text/XMLIndexChapterInfoEntryContext.cxx @@ -0,0 +1,205 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexChapterInfoEntryContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXCHAPTERINFOENTRYCONTEXT_HXX_ +#include "XMLIndexChapterInfoEntryContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _COM_SUN_STAR_TEXT_CHAPTERFORMAT_HPP_ +#include <com/sun/star/text/ChapterFormat.hpp> +#endif + + +using namespace ::com::sun::star::text; + +using ::rtl::OUString; +using ::com::sun::star::beans::PropertyValue; +using ::com::sun::star::beans::PropertyValues; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + + + +TYPEINIT1( XMLIndexChapterInfoEntryContext, XMLIndexSimpleEntryContext); + +XMLIndexChapterInfoEntryContext::XMLIndexChapterInfoEntryContext( + SvXMLImport& rImport, + XMLIndexTemplateContext& rTemplate, + sal_uInt16 nPrfx, + const OUString& rLocalName ) : + XMLIndexSimpleEntryContext(rImport, rTemplate.sTokenChapterInfo, + rTemplate, nPrfx, rLocalName), + nChapterInfo(ChapterFormat::NAME_NUMBER), + bChapterInfoOK(sal_False) +{ +} + +XMLIndexChapterInfoEntryContext::~XMLIndexChapterInfoEntryContext() +{ +} + +static const SvXMLEnumMapEntry aChapterDisplayMap[] = +{ + { sXML_name, ChapterFormat::NAME }, + { sXML_number, ChapterFormat::NUMBER }, + { sXML_number_and_name, ChapterFormat::NAME_NUMBER }, +// not supported by the template: +// { sXML_plain_number_and_name, ChapterFormat::NO_PREFIX_SUFFIX }, +// { sXML_plain_number, ChapterFormat::DIGIT }, + { 0, 0 } +}; + +void XMLIndexChapterInfoEntryContext::StartElement( + const Reference<XAttributeList> & xAttrList) +{ + // handle both, style name and bibliography info + sal_Int32 nLength = xAttrList->getLength(); + for(sal_Int32 nAttr = 0; nAttr < nLength; nAttr++) + { + OUString sLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). + GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), + &sLocalName ); + if (XML_NAMESPACE_TEXT == nPrefix) + { + if (sLocalName.equalsAsciiL(sXML_style_name, + sizeof(sXML_style_name)-1)) + { + sCharStyleName = xAttrList->getValueByIndex(nAttr); + bCharStyleNameOK = sal_True; + } + else if (sLocalName.equalsAsciiL(sXML_display, + sizeof(sXML_display)-1)) + { + sal_uInt16 nTmp; + if (SvXMLUnitConverter::convertEnum( + nTmp, xAttrList->getValueByIndex(nAttr), + aChapterDisplayMap)) + { + nChapterInfo = nTmp; + bChapterInfoOK = sal_True; + } + } + } + } + + // if we have a style name, set it! + if (bCharStyleNameOK) + { + nValues++; + } + + // if we have chaper info, set it! + if (bChapterInfoOK) + { + nValues++; + } +} + +void XMLIndexChapterInfoEntryContext::FillPropertyValues( + ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue> & rValues) +{ + // entry name and (optionally) style name in parent class + XMLIndexSimpleEntryContext::FillPropertyValues(rValues); + + // chapter info field + sal_Int32 nIndex = bCharStyleNameOK ? 2 : 1; + rValues[nIndex].Name = rTemplateContext.sChapterFormat; + Any aAny; + aAny <<= nChapterInfo; + rValues[nIndex].Value = aAny; +} diff --git a/xmloff/source/text/XMLIndexChapterInfoEntryContext.hxx b/xmloff/source/text/XMLIndexChapterInfoEntryContext.hxx new file mode 100644 index 000000000000..a588a50a3d0b --- /dev/null +++ b/xmloff/source/text/XMLIndexChapterInfoEntryContext.hxx @@ -0,0 +1,122 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexChapterInfoEntryContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXCHAPTERINFOENTRYCONTEXT_HXX_ +#define _XMLOFF_XMLINDEXCHAPTERINFOENTRYCONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSIMPLEENTRYCONTEXT_HXX_ +#include "XMLIndexSimpleEntryContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_H_ +#include <com/sun/star/uno/Sequence.h> +#endif + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ +#include <com/sun/star/beans/PropertyValue.hpp> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } +} } } +namespace rtl { class OUString; } +class XMLIndexTemplateContext; + +/** + * Import chapter info index entry templates + */ +class XMLIndexChapterInfoEntryContext : public XMLIndexSimpleEntryContext +{ + // chapter format + sal_Int16 nChapterInfo; + sal_Bool bChapterInfoOK; + +public: + + TYPEINFO(); + + XMLIndexChapterInfoEntryContext( + SvXMLImport& rImport, + XMLIndexTemplateContext& rTemplate, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName ); + + ~XMLIndexChapterInfoEntryContext(); + +protected: + + /** process parameters */ + virtual void StartElement( + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList); + + /** fill property values for this template entry */ + virtual void FillPropertyValues( + ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue> & rValues); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx b/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx new file mode 100644 index 000000000000..b01c19fbb392 --- /dev/null +++ b/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx @@ -0,0 +1,157 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexIllustrationSourceContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXILLUSTRATIONSOURCECONTEXT_HXX_ +#include "XMLIndexIllustrationSourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + + +TYPEINIT1(XMLIndexIllustrationSourceContext, XMLIndexTableSourceContext); + + +XMLIndexIllustrationSourceContext::XMLIndexIllustrationSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet) : + XMLIndexTableSourceContext(rImport, nPrfx, rLocalName, rPropSet) +{ +} + +XMLIndexIllustrationSourceContext::~XMLIndexIllustrationSourceContext() +{ +} + +SvXMLImportContext* XMLIndexIllustrationSourceContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_illustration_index_entry_template, + sizeof(sXML_illustration_index_entry_template)-1))) + { + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameTableMap, + NULL, // no outline-level attr + aLevelStylePropNameTableMap, + aAllowedTokenTypesTable); + } + else + { + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); + } + +} diff --git a/xmloff/source/text/XMLIndexIllustrationSourceContext.hxx b/xmloff/source/text/XMLIndexIllustrationSourceContext.hxx new file mode 100644 index 000000000000..79c7d97d1d9f --- /dev/null +++ b/xmloff/source/text/XMLIndexIllustrationSourceContext.hxx @@ -0,0 +1,111 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexIllustrationSourceContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXILLUSTRATIONSOURCECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXILLUSTRATIONSOURCECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXTABLESOURCECONTEXT_HXX_ +#include "XMLIndexTableSourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } +namespace rtl { class OUString; } + + +/** + * Import illustration index source element; + * + * All logic is inherited from table source context. The only difference is + * the different child context (illustration entry template). + */ +class XMLIndexIllustrationSourceContext : public XMLIndexTableSourceContext +{ +public: + + TYPEINFO(); + + XMLIndexIllustrationSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet); + + ~XMLIndexIllustrationSourceContext(); + +protected: + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexObjectSourceContext.cxx b/xmloff/source/text/XMLIndexObjectSourceContext.cxx new file mode 100644 index 000000000000..865217d53336 --- /dev/null +++ b/xmloff/source/text/XMLIndexObjectSourceContext.cxx @@ -0,0 +1,278 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexObjectSourceContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXOBJECTSOURCECONTEXT_HXX_ +#include "XMLIndexObjectSourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTITLETEMPLATECONTEXT_HXX_ +#include "XMLIndexTitleTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTOCSTYLESCONTEXT_HXX_ +#include "XMLIndexTOCStylesContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + + + + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + +const sal_Char sAPI_CreateFromStarCalc[] = "CreateFromStarCalc"; +const sal_Char sAPI_CreateFromStarChart[] = "CreateFromStarChart"; +const sal_Char sAPI_CreateFromStarDraw[] = "CreateFromStarDraw"; +const sal_Char sAPI_CreateFromStarImage[] = "CreateFromStarImage"; +const sal_Char sAPI_CreateFromStarMath[] = "CreateFromStarMath"; +const sal_Char sAPI_CreateFromOtherEmbeddedObjects[] = "CreateFromOtherEmbeddedObjects"; + +TYPEINIT1( XMLIndexObjectSourceContext, XMLIndexSourceBaseContext ); + +XMLIndexObjectSourceContext::XMLIndexObjectSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet) : + XMLIndexSourceBaseContext(rImport, nPrfx, rLocalName, + rPropSet, sal_False), + sCreateFromStarCalc(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromStarCalc)), + sCreateFromStarChart(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromStarChart)), + sCreateFromStarDraw(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromStarDraw)), + sCreateFromStarImage(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromStarImage)), + sCreateFromStarMath(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromStarMath)), + sCreateFromOtherEmbeddedObjects(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromOtherEmbeddedObjects)), + bUseCalc(sal_False), + bUseChart(sal_False), + bUseDraw(sal_False), + bUseImage(sal_False), + bUseMath(sal_False), + bUseOtherObjects(sal_False) +{ +} + +XMLIndexObjectSourceContext::~XMLIndexObjectSourceContext() +{ +} + +void XMLIndexObjectSourceContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) +{ + switch (eParam) + { + sal_Bool bTmp; + + case XML_TOK_INDEXSOURCE_USE_OTHER_OBJECTS: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseOtherObjects = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_SHEET: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseCalc = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_CHART: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseChart = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_DRAW: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseDraw = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_IMAGE: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseImage = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_MATH: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseMath = bTmp; + } + break; + + default: + XMLIndexSourceBaseContext::ProcessAttribute(eParam, rValue); + break; + } +} + +void XMLIndexObjectSourceContext::EndElement() +{ + Any aAny; + + aAny.setValue(&bUseCalc, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromStarCalc, aAny); + + aAny.setValue(&bUseChart, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromStarChart, aAny); + + aAny.setValue(&bUseDraw, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromStarDraw, aAny); + + aAny.setValue(&bUseImage, ::getBooleanCppuType()); +// TODO: wait for API +// rIndexPropertySet->setPropertyValue(sCreateFromStarImage, aAny); + + aAny.setValue(&bUseMath, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromStarMath, aAny); + + aAny.setValue(&bUseOtherObjects, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromOtherEmbeddedObjects, aAny); + + XMLIndexSourceBaseContext::EndElement(); +} + +SvXMLImportContext* XMLIndexObjectSourceContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_object_index_entry_template, + sizeof(sXML_object_index_entry_template)-1))) + { + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameTableMap, + NULL, // no outline-level attr + aLevelStylePropNameTableMap, + aAllowedTokenTypesTable); + } + else + { + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); + } + +} diff --git a/xmloff/source/text/XMLIndexObjectSourceContext.hxx b/xmloff/source/text/XMLIndexObjectSourceContext.hxx new file mode 100644 index 000000000000..aebfebd4a4b9 --- /dev/null +++ b/xmloff/source/text/XMLIndexObjectSourceContext.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexObjectSourceContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXOBJECTSOURCECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXOBJECTSOURCECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } +namespace rtl { class OUString; } + + +/** + * Import object index source element + */ +class XMLIndexObjectSourceContext : public XMLIndexSourceBaseContext +{ + const ::rtl::OUString sCreateFromStarCalc; + const ::rtl::OUString sCreateFromStarChart; + const ::rtl::OUString sCreateFromStarDraw; + const ::rtl::OUString sCreateFromStarImage; + const ::rtl::OUString sCreateFromStarMath; + const ::rtl::OUString sCreateFromOtherEmbeddedObjects; + + sal_Bool bUseCalc; + sal_Bool bUseChart; + sal_Bool bUseDraw; + sal_Bool bUseImage; + sal_Bool bUseMath; + sal_Bool bUseOtherObjects; + +public: + + TYPEINFO(); + + XMLIndexObjectSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet); + + ~XMLIndexObjectSourceContext(); + +protected: + + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); + + virtual void EndElement(); + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexSimpleEntryContext.hxx b/xmloff/source/text/XMLIndexSimpleEntryContext.hxx index e96ce4cd3d06..c627e70cbcf9 100644 --- a/xmloff/source/text/XMLIndexSimpleEntryContext.hxx +++ b/xmloff/source/text/XMLIndexSimpleEntryContext.hxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexSimpleEntryContext.hxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -94,11 +94,11 @@ class XMLIndexSimpleEntryContext : public SvXMLImportContext // entry type const ::rtl::OUString& rEntryType; +protected: // character style ::rtl::OUString sCharStyleName; sal_Bool bCharStyleNameOK; -protected: // surrounding template XMLIndexTemplateContext& rTemplateContext; diff --git a/xmloff/source/text/XMLIndexSourceBaseContext.cxx b/xmloff/source/text/XMLIndexSourceBaseContext.cxx new file mode 100644 index 000000000000..cc334e304f7f --- /dev/null +++ b/xmloff/source/text/XMLIndexSourceBaseContext.cxx @@ -0,0 +1,338 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexSourceBaseContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTITLETEMPLATECONTEXT_HXX_ +#include "XMLIndexTitleTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTOCSTYLESCONTEXT_HXX_ +#include "XMLIndexTOCStylesContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + + + + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + +const sal_Char sAPI_CreateFromChapter[] = "CreateFromChapter"; + +static __FAR_DATA SvXMLTokenMapEntry aIndexSourceTokenMap[] = +{ + { XML_NAMESPACE_TEXT, + sXML_outline_level, + XML_TOK_INDEXSOURCE_OUTLINE_LEVEL}, + { XML_NAMESPACE_TEXT, + sXML_use_index_marks, + XML_TOK_INDEXSOURCE_USE_INDEX_MARKS }, + { XML_NAMESPACE_TEXT, + sXML_index_scope, + XML_TOK_INDEXSOURCE_INDEX_SCOPE }, + { XML_NAMESPACE_TEXT, + sXML_relative_tab_stop_position, + XML_TOK_INDEXSOURCE_RELATIVE_TABS } , + { XML_NAMESPACE_TEXT, + sXML_use_other_objects, + XML_TOK_INDEXSOURCE_USE_OTHER_OBJECTS }, + { XML_NAMESPACE_TEXT, + sXML_use_spreadsheet_objects, + XML_TOK_INDEXSOURCE_USE_SHEET }, + { XML_NAMESPACE_TEXT, + sXML_use_chart_objects, + XML_TOK_INDEXSOURCE_USE_CHART }, + { XML_NAMESPACE_TEXT, + sXML_use_draw_objects, + XML_TOK_INDEXSOURCE_USE_DRAW }, + { XML_NAMESPACE_TEXT, + sXML_use_image_objects, + XML_TOK_INDEXSOURCE_USE_IMAGE }, + { XML_NAMESPACE_TEXT, + sXML_use_math_objects, + XML_TOK_INDEXSOURCE_USE_MATH }, + { XML_NAMESPACE_TEXT, + sXML_main_entry_style_name, + XML_TOK_INDEXSOURCE_MAIN_ENTRY_STYLE }, + { XML_NAMESPACE_TEXT, + sXML_ignore_case, + XML_TOK_INDEXSOURCE_IGNORE_CASE }, + { XML_NAMESPACE_TEXT, + sXML_alphabetical_separators, + XML_TOK_INDEXSOURCE_SEPARATORS }, + { XML_NAMESPACE_TEXT, + sXML_combine_entries, + XML_TOK_INDEXSOURCE_COMBINE_ENTRIES }, + { XML_NAMESPACE_TEXT, + sXML_combine_entries_with_dash, + XML_TOK_INDEXSOURCE_COMBINE_WITH_DASH }, + { XML_NAMESPACE_TEXT, + sXML_use_keys_as_entries, + XML_TOK_INDEXSOURCE_KEYS_AS_ENTRIES }, + { XML_NAMESPACE_TEXT, + sXML_combine_entries_with_pp, + XML_TOK_INDEXSOURCE_COMBINE_WITH_PP }, + { XML_NAMESPACE_TEXT, + sXML_capitalize_entries, + XML_TOK_INDEXSOURCE_CAPITALIZE }, + { XML_NAMESPACE_TEXT, + sXML_use_objects, + XML_TOK_INDEXSOURCE_USE_OBJECTS }, + { XML_NAMESPACE_TEXT, + sXML_use_graphics, + XML_TOK_INDEXSOURCE_USE_GRAPHICS }, + { XML_NAMESPACE_TEXT, + sXML_use_tables, + XML_TOK_INDEXSOURCE_USE_TABLES }, + { XML_NAMESPACE_TEXT, + sXML_use_floating_frames, + XML_TOK_INDEXSOURCE_USE_FRAMES }, + { XML_NAMESPACE_TEXT, + sXML_copy_outline_levels, + XML_TOK_INDEXSOURCE_COPY_OUTLINE_LEVELS }, + { XML_NAMESPACE_TEXT, + sXML_use_caption, + XML_TOK_INDEXSOURCE_USE_CAPTION }, + { XML_NAMESPACE_TEXT, + sXML_caption_sequence_name, + XML_TOK_INDEXSOURCE_SEQUENCE_NAME }, + { XML_NAMESPACE_TEXT, + sXML_caption_sequence_format, + XML_TOK_INDEXSOURCE_SEQUENCE_FORMAT }, + + XML_TOKEN_MAP_END +}; + + +TYPEINIT1( XMLIndexSourceBaseContext, SvXMLImportContext ); + +XMLIndexSourceBaseContext::XMLIndexSourceBaseContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet, + sal_Bool bLevelFormats) : + SvXMLImportContext(rImport, nPrfx, rLocalName), + rIndexPropertySet(rPropSet), + bChapterIndex(sal_False), + bRelativeTabs(sal_True), + bUseLevelFormats(bLevelFormats), + sCreateFromChapter(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromChapter)) +{ +} + +XMLIndexSourceBaseContext::~XMLIndexSourceBaseContext() +{ +} + +void XMLIndexSourceBaseContext::StartElement( + const Reference<XAttributeList> & xAttrList) +{ + SvXMLTokenMap aTokenMap(aIndexSourceTokenMap); + + // process attributes + sal_Int32 nLength = xAttrList->getLength(); + for(sal_Int32 i=0; i<nLength; i++) + { + // map to IndexSourceParamEnum + OUString sLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). + GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName ); + sal_uInt16 nToken = aTokenMap.Get(nPrefix, sLocalName); + + // process attribute + ProcessAttribute((enum IndexSourceParamEnum)nToken, + xAttrList->getValueByIndex(i)); + } +} + +void XMLIndexSourceBaseContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) +{ + switch (eParam) + { + case XML_TOK_INDEXSOURCE_INDEX_SCOPE: + if (rValue.equalsAsciiL(sXML_chapter, sizeof(sXML_chapter)-1)) + { + bChapterIndex = sal_True; + } + break; + + case XML_TOK_INDEXSOURCE_RELATIVE_TABS: + { + sal_Bool bTmp; + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bRelativeTabs = bTmp; + } + break; + } + + default: + // unknown attribute -> ignore + break; + } +} + +void XMLIndexSourceBaseContext::EndElement() +{ + Any aAny; + + aAny.setValue(&bRelativeTabs, ::getBooleanCppuType()); + // TODO: api lacking +// rIndexPropertySet->setPropertyValue(s..., aAny); + + aAny.setValue(&bChapterIndex, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromChapter, aAny); +} + +SvXMLImportContext* XMLIndexSourceBaseContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + SvXMLImportContext* pContext = NULL; + + if (XML_NAMESPACE_TEXT == nPrefix) + { + if (rLocalName.equalsAsciiL(sXML_index_title_template, + sizeof(sXML_index_title_template)-1)) + { + pContext = new XMLIndexTitleTemplateContext(GetImport(), + rIndexPropertySet, + nPrefix, rLocalName); + } + else if (bUseLevelFormats && + rLocalName.equalsAsciiL(sXML_index_source_styles, + sizeof(sXML_index_source_styles)-1)) + { + pContext = new XMLIndexTOCStylesContext(GetImport(), + rIndexPropertySet, + nPrefix, rLocalName); + } + // else: unknown element in text namespace -> ignore + } + // else: unknown namespace -> ignore + + // use default context + if (pContext == NULL) + { + pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, + xAttrList); + } + + return pContext; +} diff --git a/xmloff/source/text/XMLIndexSourceBaseContext.hxx b/xmloff/source/text/XMLIndexSourceBaseContext.hxx new file mode 100644 index 000000000000..1e2dfec454e4 --- /dev/null +++ b/xmloff/source/text/XMLIndexSourceBaseContext.hxx @@ -0,0 +1,165 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexSourceBaseContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } + +enum IndexSourceParamEnum +{ + XML_TOK_INDEXSOURCE_OUTLINE_LEVEL, + XML_TOK_INDEXSOURCE_USE_INDEX_MARKS, + XML_TOK_INDEXSOURCE_INDEX_SCOPE, + XML_TOK_INDEXSOURCE_RELATIVE_TABS, + XML_TOK_INDEXSOURCE_USE_OTHER_OBJECTS, + XML_TOK_INDEXSOURCE_USE_SHEET, + XML_TOK_INDEXSOURCE_USE_CHART, + XML_TOK_INDEXSOURCE_USE_DRAW, + XML_TOK_INDEXSOURCE_USE_IMAGE, + XML_TOK_INDEXSOURCE_USE_MATH, + XML_TOK_INDEXSOURCE_MAIN_ENTRY_STYLE, + XML_TOK_INDEXSOURCE_IGNORE_CASE, + XML_TOK_INDEXSOURCE_SEPARATORS, + XML_TOK_INDEXSOURCE_COMBINE_ENTRIES, + XML_TOK_INDEXSOURCE_COMBINE_WITH_DASH, + XML_TOK_INDEXSOURCE_KEYS_AS_ENTRIES, + XML_TOK_INDEXSOURCE_COMBINE_WITH_PP, + XML_TOK_INDEXSOURCE_CAPITALIZE, + XML_TOK_INDEXSOURCE_USE_OBJECTS, + XML_TOK_INDEXSOURCE_USE_GRAPHICS, + XML_TOK_INDEXSOURCE_USE_TABLES, + XML_TOK_INDEXSOURCE_USE_FRAMES, + XML_TOK_INDEXSOURCE_COPY_OUTLINE_LEVELS, + XML_TOK_INDEXSOURCE_USE_CAPTION, + XML_TOK_INDEXSOURCE_SEQUENCE_NAME, + XML_TOK_INDEXSOURCE_SEQUENCE_FORMAT +}; + + +/** + * Superclass for index source elements + */ +class XMLIndexSourceBaseContext : public SvXMLImportContext +{ + const ::rtl::OUString sCreateFromChapter; + + sal_Bool bUseLevelFormats; + + sal_Bool bChapterIndex; /// chapter-wise or document index? + sal_Bool bRelativeTabs; /// tab stops relative to margin or indent? + +protected: + + /// property set of index; must be accessible to subclasses + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rIndexPropertySet; + +public: + + TYPEINFO(); + + XMLIndexSourceBaseContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet, + sal_Bool bLevelFormats); + + ~XMLIndexSourceBaseContext(); + +protected: + + virtual void StartElement( + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList); + + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); + + virtual void EndElement(); + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexTOCContext.cxx b/xmloff/source/text/XMLIndexTOCContext.cxx index 95657bb43223..6e4047962b90 100644 --- a/xmloff/source/text/XMLIndexTOCContext.cxx +++ b/xmloff/source/text/XMLIndexTOCContext.cxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexTOCContext.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -84,6 +84,30 @@ #include "XMLIndexTOCSourceContext.hxx" #endif +#ifndef _XMLOFF_XMLINDEXOBJECTSOURCECONTEXT_HXX_ +#include "XMLIndexObjectSourceContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXALPHABETICALSOURCECONTEXT_HXX_ +#include "XMLIndexAlphabeticalSourceContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXUSERSOURCECONTEXT_HXX_ +#include "XMLIndexUserSourceContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXBIBLIOGRAPHYSOURCECONTEXT_HXX_ +#include "XMLIndexBibliographySourceContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTABLESOURCECONTEXT_HXX_ +#include "XMLIndexTableSourceContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXILLUSTRATIONSOURCECONTEXT_HXX_ +#include "XMLIndexIllustrationSourceContext.hxx" +#endif + #ifndef _XMLOFF_XMLICTXT_HXX #include "xmlictxt.hxx" #endif @@ -112,6 +136,10 @@ #include "prstylei.hxx" #endif +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + #ifndef _TOOLS_DEBUG_HXX #include <tools/debug.hxx> #endif @@ -120,6 +148,11 @@ #include <rtl/ustring.hxx> #endif +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + + using namespace ::com::sun::star::uno; using namespace ::com::sun::star::text; @@ -132,12 +165,67 @@ using ::com::sun::star::lang::XMultiServiceFactory; TYPEINIT1(XMLIndexTOCContext, SvXMLImportContext); +static const sal_Char* aIndexServiceMap[] = +{ + "com.sun.star.text.ContentIndex", + "com.sun.star.text.DocumentIndex", + "com.sun.star.text.TableIndex", + "com.sun.star.text.ObjectIndex", + "com.sun.star.text.Bibliography", + "com.sun.star.text.UserIndex", + "com.sun.star.text.IllustrationsIndex" +}; + +static const sal_Char* aIndexSourceElementMap[] = +{ + sXML_table_of_content_source, + sXML_alphabetical_index_source, + sXML_table_index_source, + sXML_object_index_source, + sXML_bibliography_source, + sXML_user_index_source, + sXML_illustration_index_source +}; + +SvXMLEnumMapEntry __READONLY_DATA aIndexTypeMap[] = +{ + { sXML_table_of_content, TEXT_INDEX_TOC }, + { sXML_alphabetical_index, TEXT_INDEX_ALPHABETICAL }, + { sXML_table_index, TEXT_INDEX_TABLE }, + { sXML_object_index, TEXT_INDEX_OBJECT }, + { sXML_bibliography, TEXT_INDEX_BIBLIOGRAPHY }, + { sXML_user_index, TEXT_INDEX_USER }, + { sXML_illustration_index, TEXT_INDEX_ILLUSTRATION }, + { NULL, NULL } +}; + + XMLIndexTOCContext::XMLIndexTOCContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLocalName ) : - SvXMLImportContext(rImport, nPrfx, rLocalName) + SvXMLImportContext(rImport, nPrfx, rLocalName), + pSourceElementName(NULL), + bValid(sal_False) { + if (XML_NAMESPACE_TEXT == nPrfx) + { + sal_uInt16 nTmp; + if (SvXMLUnitConverter::convertEnum(nTmp, rLocalName, aIndexTypeMap)) + { + // check for array index: + DBG_ASSERT(nTmp >= 0, "index too low"); + DBG_ASSERT(nTmp < (sizeof(aIndexServiceMap)/sizeof(sal_Char*)), + "index too high"); + DBG_ASSERT(sizeof(aIndexServiceMap) == + sizeof(aIndexSourceElementMap), + "service and source element maps must be same size"); + + eIndexType = (enum IndexTypeEnum)nTmp; + pSourceElementName = aIndexSourceElementMap[eIndexType]; + bValid = sal_True; + } + } } XMLIndexTOCContext::~XMLIndexTOCContext() @@ -147,43 +235,45 @@ XMLIndexTOCContext::~XMLIndexTOCContext() void XMLIndexTOCContext::StartElement( const Reference<XAttributeList> & xAttrList) { - // TODO: solve properly when API is up to task - const sal_Char sAPI_toc[] = "com.sun.star.text.ContentIndex"; - const OUString sContentIndex(RTL_CONSTASCII_USTRINGPARAM(sAPI_toc)); - - // create table of content (via MultiServiceFactory) - Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),UNO_QUERY); - if( xFactory.is() ) + if (bValid) { - Reference<XInterface> xIfc = xFactory->createInstance(sContentIndex); - if( xIfc.is() ) + // create table of content (via MultiServiceFactory) + Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(), + UNO_QUERY); + if( xFactory.is() ) { - Reference<XTextContent> xTextContent(xIfc, UNO_QUERY); - GetImport().GetTextImport()->InsertTextContent(xTextContent); + Reference<XInterface> xIfc = + xFactory->createInstance( + OUString::createFromAscii(aIndexServiceMap[eIndexType])); + if( xIfc.is() ) + { + Reference<XTextContent> xTextContent(xIfc, UNO_QUERY); + GetImport().GetTextImport()->InsertTextContent(xTextContent); - Reference<XPropertySet> xPropSet(xIfc, UNO_QUERY); - xTOCPropertySet = xPropSet; + Reference<XPropertySet> xPropSet(xIfc, UNO_QUERY); + xTOCPropertySet = xPropSet; + } } - } - // find text:style-name attribute and set section style - sal_Int32 nCount = xAttrList->getLength(); - for(sal_Int32 nAttr = 0; nAttr < nCount; nAttr++) - { - OUString sLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). - GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), - &sLocalName ); - if ( (XML_NAMESPACE_TEXT == nPrefix) && - (sLocalName.equalsAsciiL(sXML_style_name, - sizeof(sXML_style_name)-1)) ) + // find text:style-name attribute and set section style + sal_Int32 nCount = xAttrList->getLength(); + for(sal_Int32 nAttr = 0; nAttr < nCount; nAttr++) { - XMLPropStyleContext* pStyle = - GetImport().GetTextImport()->FindSectionStyle( - xAttrList->getValueByIndex(nAttr)); - if (pStyle != NULL) + OUString sLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). + GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), + &sLocalName ); + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (sLocalName.equalsAsciiL(sXML_style_name, + sizeof(sXML_style_name)-1)) ) { - pStyle->FillPropertySet( xTOCPropertySet ); + XMLPropStyleContext* pStyle = + GetImport().GetTextImport()->FindSectionStyle( + xAttrList->getValueByIndex(nAttr)); + if (pStyle != NULL) + { + pStyle->FillPropertySet( xTOCPropertySet ); + } } } } @@ -201,18 +291,65 @@ SvXMLImportContext* XMLIndexTOCContext::CreateChildContext( { SvXMLImportContext* pContext = NULL; - if ( (XML_NAMESPACE_TEXT == nPrefix) && - (rLocalName.equalsAsciiL(sXML_table_of_content_source, - sizeof(sXML_table_of_content_source)-1)) ) + if (bValid) { - pContext = new XMLIndexTOCSourceContext(GetImport(), - nPrefix, rLocalName, - xTOCPropertySet); - } - else - { - // TODO: text content + if (XML_NAMESPACE_TEXT == nPrefix) + { + if (rLocalName.equalsAsciiL(sXML_index_body, + sizeof(sXML_index_body)-1)) + { + // TODO: text content + } + else if (0 == rLocalName.compareToAscii(pSourceElementName)) + { + // instantiate source context for this index type + switch (eIndexType) + { + case TEXT_INDEX_TOC: + pContext = new XMLIndexTOCSourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + case TEXT_INDEX_OBJECT: + pContext = new XMLIndexObjectSourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + case TEXT_INDEX_ALPHABETICAL: + pContext = new XMLIndexAlphabeticalSourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + case TEXT_INDEX_USER: + pContext = new XMLIndexUserSourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + case TEXT_INDEX_BIBLIOGRAPHY: + pContext = new XMLIndexBibliographySourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + case TEXT_INDEX_TABLE: + pContext = new XMLIndexTableSourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + case TEXT_INDEX_ILLUSTRATION: + pContext = new XMLIndexIllustrationSourceContext( + GetImport(), nPrefix, rLocalName, xTOCPropertySet); + break; + + default: + DBG_ERROR("index type not implemented"); + break; + } + } + // else: ignore + } + // else: no text: namespace -> ignore } + // else: not valid -> ignore // default: ignore if (pContext == NULL) diff --git a/xmloff/source/text/XMLIndexTOCContext.hxx b/xmloff/source/text/XMLIndexTOCContext.hxx index e91c783fd326..01875024bde1 100644 --- a/xmloff/source/text/XMLIndexTOCContext.hxx +++ b/xmloff/source/text/XMLIndexTOCContext.hxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexTOCContext.hxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -78,8 +78,27 @@ namespace com { namespace sun { namespace star { namespace rtl { class OUString; } +enum IndexTypeEnum +{ + TEXT_INDEX_TOC, + TEXT_INDEX_ALPHABETICAL, + TEXT_INDEX_TABLE, + TEXT_INDEX_OBJECT, + TEXT_INDEX_BIBLIOGRAPHY, + TEXT_INDEX_USER, + TEXT_INDEX_ILLUSTRATION, + + TEXT_INDEX_UNKNOWN +}; + + /** - * Import table of context + * Import all indices. + * + * Originally, this class would import only the TOC (table of + * content), but now it's role has been expanded to handle all + * indices, and hence is named inappropriately. Depending on the + * element name it decides which index source element context to create. */ class XMLIndexTOCContext : public SvXMLImportContext { @@ -88,6 +107,13 @@ class XMLIndexTOCContext : public SvXMLImportContext ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xTOCPropertySet; + enum IndexTypeEnum eIndexType; + + /** source element name (for CreateChildContext) */ + const sal_Char* pSourceElementName; + + sal_Bool bValid; + public: TYPEINFO(); diff --git a/xmloff/source/text/XMLIndexTOCSourceContext.cxx b/xmloff/source/text/XMLIndexTOCSourceContext.cxx index b3aeaf78fb58..b11a2c8ef69f 100644 --- a/xmloff/source/text/XMLIndexTOCSourceContext.cxx +++ b/xmloff/source/text/XMLIndexTOCSourceContext.cxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexTOCSourceContext.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -134,26 +134,23 @@ const sal_Char sAPI_CreateFromOutline[] = "CreateFromOutline"; const sal_Char sAPI_CreateFromMarks[] = "CreateFromMarks"; const sal_Char sAPI_Level[] = "Level"; -TYPEINIT1( XMLIndexTOCSourceContext, SvXMLImportContext ); +TYPEINIT1( XMLIndexTOCSourceContext, XMLIndexSourceBaseContext ); XMLIndexTOCSourceContext::XMLIndexTOCSourceContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLocalName, Reference<XPropertySet> & rPropSet) : - SvXMLImportContext(rImport, nPrfx, rLocalName), - rTOCPropertySet(rPropSet), + XMLIndexSourceBaseContext(rImport, nPrfx, rLocalName, + rPropSet, sal_True), // use all chapters by default nOutlineLevel(rImport.GetTextImport()->GetChapterNumbering()-> getCount()), bUseOutline(sal_True), bUseMarks(sal_True), - bChapterIndex(sal_False), - bRelativeTabs(sal_True), sCreateFromMarks(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromMarks)), sLevel(RTL_CONSTASCII_USTRINGPARAM(sAPI_Level)), - sCreateFromChapter(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromChapter)), - sCreateFromOutline(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromOutline)) + sCreateFromOutline(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromOutline)) { } @@ -161,92 +158,44 @@ XMLIndexTOCSourceContext::~XMLIndexTOCSourceContext() { } -enum IndexTOCSourceTokenEnum +void XMLIndexTOCSourceContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) { - XML_TOK_TOCSOURCE_OUTLINE_LEVEL, - XML_TOK_TOCSOURCE_USE_INDEX_MARKS, - XML_TOK_TOCSOURCE_INDEX_SCOPE, - XML_TOK_TOCSOURCE_RELATIVE_TABS -}; - -static __FAR_DATA SvXMLTokenMapEntry aIndexTOCSourceTokenMap[] = -{ - { XML_NAMESPACE_TEXT, sXML_outline_level, XML_TOK_TOCSOURCE_OUTLINE_LEVEL}, - { XML_NAMESPACE_TEXT, sXML_use_index_marks, - XML_TOK_TOCSOURCE_USE_INDEX_MARKS }, - { XML_NAMESPACE_TEXT, sXML_index_scope, XML_TOK_TOCSOURCE_INDEX_SCOPE }, - { XML_NAMESPACE_TEXT, sXML_relative_tab_stop_position, - XML_TOK_TOCSOURCE_RELATIVE_TABS } , - XML_TOKEN_MAP_END -}; - -void XMLIndexTOCSourceContext::StartElement( - const Reference<XAttributeList> & xAttrList) -{ - SvXMLTokenMap aTokenMap(aIndexTOCSourceTokenMap); - - // process attributes - sal_Int32 nLength = xAttrList->getLength(); - for(sal_Int32 i=0; i<nLength; i++) + switch (eParam) { - - OUString sLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). - GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName ); - - OUString sAttr = xAttrList->getValueByIndex(i); - - switch (aTokenMap.Get(nPrefix, sLocalName)) - { - case XML_TOK_TOCSOURCE_OUTLINE_LEVEL: - if (sAttr.equalsAsciiL(sXML_none, sizeof(sXML_none)-1)) - { - bUseOutline = sal_False; - } - else - { - sal_Int32 nTmp; - if (SvXMLUnitConverter::convertNumber( - nTmp, sAttr, 1, GetImport().GetTextImport()-> - GetChapterNumbering()->getCount())) - { - bUseOutline = sal_True; - nOutlineLevel = nTmp; - } - } - break; - - case XML_TOK_TOCSOURCE_USE_INDEX_MARKS: + case XML_TOK_INDEXSOURCE_OUTLINE_LEVEL: + if (rValue.equalsAsciiL(sXML_none, sizeof(sXML_none)-1)) { - sal_Bool bTmp; - if (SvXMLUnitConverter::convertBool(bTmp, sAttr)) - { - bUseMarks = bTmp; - } - break; + bUseOutline = sal_False; } - - case XML_TOK_TOCSOURCE_INDEX_SCOPE: - if (sAttr.equalsAsciiL(sXML_chapter, sizeof(sXML_chapter)-1)) - { - bChapterIndex = sal_True; - } - break; - - case XML_TOK_TOCSOURCE_RELATIVE_TABS: + else { - sal_Bool bTmp; - if (SvXMLUnitConverter::convertBool(bTmp, sAttr)) + sal_Int32 nTmp; + if (SvXMLUnitConverter::convertNumber( + nTmp, rValue, 1, GetImport().GetTextImport()-> + GetChapterNumbering()->getCount())) { - bRelativeTabs = bTmp; + bUseOutline = sal_True; + nOutlineLevel = nTmp; } - break; } + break; - default: - // unknown attribute -> ignore - break; + case XML_TOK_INDEXSOURCE_USE_INDEX_MARKS: + { + sal_Bool bTmp; + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseMarks = bTmp; + } + break; } + + default: + // default: ask superclass + XMLIndexSourceBaseContext::ProcessAttribute(eParam, rValue); + break; } } @@ -254,62 +203,37 @@ void XMLIndexTOCSourceContext::EndElement() { Any aAny; - aAny.setValue(&bRelativeTabs, ::getBooleanCppuType()); -// rTOCPropertySet->setPropertyValue(s..., aAny); - - aAny.setValue(&bChapterIndex, ::getBooleanCppuType()); - rTOCPropertySet->setPropertyValue(sCreateFromChapter, aAny); - aAny.setValue(&bUseMarks, ::getBooleanCppuType()); - rTOCPropertySet->setPropertyValue(sCreateFromMarks, aAny); + rIndexPropertySet->setPropertyValue(sCreateFromMarks, aAny); aAny.setValue(&bUseOutline, ::getBooleanCppuType()); - rTOCPropertySet->setPropertyValue(sCreateFromOutline, aAny); + rIndexPropertySet->setPropertyValue(sCreateFromOutline, aAny); aAny <<= (sal_Int16)nOutlineLevel; - rTOCPropertySet->setPropertyValue(sLevel, aAny); + rIndexPropertySet->setPropertyValue(sLevel, aAny); } + SvXMLImportContext* XMLIndexTOCSourceContext::CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName, const Reference<XAttributeList> & xAttrList ) { - SvXMLImportContext* pContext = NULL; - - if (XML_NAMESPACE_TEXT == nPrefix) + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_table_of_content_entry_template, + sizeof(sXML_table_of_content_entry_template)-1))) { - if (rLocalName.equalsAsciiL(sXML_index_entry_template, - sizeof(sXML_index_entry_template)-1)) - { - pContext = new XMLIndexTemplateContext(GetImport(), - rTOCPropertySet, - nPrefix, rLocalName); - } - else if (rLocalName.equalsAsciiL(sXML_index_title_template, - sizeof(sXML_index_title_template)-1)) - { - pContext = new XMLIndexTitleTemplateContext(GetImport(), - rTOCPropertySet, - nPrefix, rLocalName); - } - else if (rLocalName.equalsAsciiL(sXML_index_source_styles, - sizeof(sXML_index_source_styles)-1)) - { - pContext = new XMLIndexTOCStylesContext(GetImport(), - rTOCPropertySet, - nPrefix, rLocalName); - } - // else: unknown element in text namespace -> ignore + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameTOCMap, + sXML_outline_level, + aLevelStylePropNameTOCMap, + aAllowedTokenTypesTOC); } - // else: unknown namespace -> ignore - - // use default namespace - if (pContext == NULL) + else { - pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, - xAttrList); + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); } - - return pContext; } diff --git a/xmloff/source/text/XMLIndexTOCSourceContext.hxx b/xmloff/source/text/XMLIndexTOCSourceContext.hxx index 3e1db09ef1df..bf08fa6025e5 100644 --- a/xmloff/source/text/XMLIndexTOCSourceContext.hxx +++ b/xmloff/source/text/XMLIndexTOCSourceContext.hxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexTOCSourceContext.hxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -62,8 +62,8 @@ #ifndef _XMLOFF_XMLINDEXTOCSOURCECONTEXT_HXX_ #define _XMLOFF_XMLINDEXTOCSOURCECONTEXT_HXX_ -#ifndef _XMLOFF_XMLICTXT_HXX -#include "xmlictxt.hxx" +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" #endif #ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ @@ -81,21 +81,16 @@ namespace rtl { class OUString; } /** * Import table of context source element */ -class XMLIndexTOCSourceContext : public SvXMLImportContext +class XMLIndexTOCSourceContext : public XMLIndexSourceBaseContext { const ::rtl::OUString sCreateFromMarks; const ::rtl::OUString sLevel; const ::rtl::OUString sCreateFromChapter; const ::rtl::OUString sCreateFromOutline; - ::com::sun::star::uno::Reference< - ::com::sun::star::beans::XPropertySet> & rTOCPropertySet; - sal_Int32 nOutlineLevel; sal_Bool bUseOutline; sal_Bool bUseMarks; - sal_Bool bChapterIndex; - sal_Bool bRelativeTabs; public: @@ -112,9 +107,9 @@ public: protected: - virtual void StartElement( - const ::com::sun::star::uno::Reference< - ::com::sun::star::xml::sax::XAttributeList> & xAttrList); + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); virtual void EndElement(); diff --git a/xmloff/source/text/XMLIndexTableSourceContext.cxx b/xmloff/source/text/XMLIndexTableSourceContext.cxx new file mode 100644 index 000000000000..a933e3576e9c --- /dev/null +++ b/xmloff/source/text/XMLIndexTableSourceContext.cxx @@ -0,0 +1,258 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexTableSourceContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXTABLESOURCECONTEXT_HXX_ +#include "XMLIndexTableSourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _COM_SUN_STAR_TEXT_REFERENCEFIELD_PART_HPP +#include <com/sun/star/text/ReferenceFieldpart.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTITLETEMPLATECONTEXT_HXX_ +#include "XMLIndexTitleTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTOCSTYLESCONTEXT_HXX_ +#include "XMLIndexTOCStylesContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +using namespace ::com::sun::star::text; + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + +const sal_Char sAPI_CreateFromLabels[] = "CreateFromLabels"; +const sal_Char sAPI_LabelCategory[] = "LabelCategory"; +const sal_Char sAPI_LabelDisplayType[] = "LabelDisplayType"; + + +TYPEINIT1(XMLIndexTableSourceContext, XMLIndexSourceBaseContext); + + +XMLIndexTableSourceContext::XMLIndexTableSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet) : + XMLIndexSourceBaseContext(rImport, nPrfx, rLocalName, + rPropSet, sal_False), + sCreateFromLabels(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromLabels)), + sLabelCategory(RTL_CONSTASCII_USTRINGPARAM(sAPI_LabelCategory)), + sLabelDisplayType(RTL_CONSTASCII_USTRINGPARAM(sAPI_LabelDisplayType)), + bSequenceOK(sal_False), + bDisplayFormatOK(sal_False), + bUseCaption(sal_False) +{ +} + +XMLIndexTableSourceContext::~XMLIndexTableSourceContext() +{ +} + +static SvXMLEnumMapEntry __READONLY_DATA lcl_aReferenceTypeTokenMap[] = +{ + { sXML_text, ReferenceFieldPart::TEXT }, + { sXML_category_and_value, ReferenceFieldPart::CATEGORY_AND_NUMBER }, + { sXML_caption, ReferenceFieldPart::ONLY_CAPTION }, + { 0, 0 } +}; + +void XMLIndexTableSourceContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) +{ + sal_Bool bTmp; + + switch (eParam) + { + case XML_TOK_INDEXSOURCE_USE_CAPTION: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseCaption = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_SEQUENCE_NAME: + sSequence = rValue; + bSequenceOK = sal_True; + break; + + case XML_TOK_INDEXSOURCE_SEQUENCE_FORMAT: + { + // TODO: API problem + +// sal_uInt16 nTmp; +// if (SvXMLUnitConverter::convertEnum(nTmp, rValue, +// lcl_aReferenceTypeTokenMap)) +// { +// nDisplayFormat = nTmp; +// bDisplayFormatOK = sal_True; +// } + break; + } + + default: + XMLIndexSourceBaseContext::ProcessAttribute(eParam, rValue); + break; + } +} + + +void XMLIndexTableSourceContext::EndElement() +{ + Any aAny; + + aAny.setValue(&bUseCaption, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromLabels, aAny); + + if (bSequenceOK) + { + aAny <<= sSequence; + rIndexPropertySet->setPropertyValue(sLabelCategory, aAny); + } + + if (bDisplayFormatOK) + { + aAny <<= nDisplayFormat; + rIndexPropertySet->setPropertyValue(sLabelDisplayType, aAny); + } + + XMLIndexSourceBaseContext::EndElement(); +} + + +SvXMLImportContext* XMLIndexTableSourceContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_table_index_entry_template, + sizeof(sXML_table_index_entry_template)-1))) + { + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameTableMap, + NULL, // no outline-level attr + aLevelStylePropNameTableMap, + aAllowedTokenTypesTable); + } + else + { + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); + } + +} diff --git a/xmloff/source/text/XMLIndexTableSourceContext.hxx b/xmloff/source/text/XMLIndexTableSourceContext.hxx new file mode 100644 index 000000000000..7029119c479d --- /dev/null +++ b/xmloff/source/text/XMLIndexTableSourceContext.hxx @@ -0,0 +1,125 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexTableSourceContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXTABLESOURCECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXTABLESOURCECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } +namespace rtl { class OUString; } + + +/** + * Import table index source element + */ +class XMLIndexTableSourceContext : public XMLIndexSourceBaseContext +{ + const ::rtl::OUString sCreateFromLabels; + const ::rtl::OUString sLabelCategory; + const ::rtl::OUString sLabelDisplayType; + + ::rtl::OUString sSequence; + sal_Int16 nDisplayFormat; + + sal_Bool bSequenceOK; + sal_Bool bDisplayFormatOK; + sal_Bool bUseCaption; + +public: + + TYPEINFO(); + + XMLIndexTableSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet); + + ~XMLIndexTableSourceContext(); + +protected: + + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); + + virtual void EndElement(); + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLIndexTemplateContext.cxx b/xmloff/source/text/XMLIndexTemplateContext.cxx index 072a1312972a..e391bd822c75 100644 --- a/xmloff/source/text/XMLIndexTemplateContext.cxx +++ b/xmloff/source/text/XMLIndexTemplateContext.cxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexTemplateContext.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -76,6 +76,14 @@ #include "XMLIndexTabStopEntryContext.hxx" #endif +#ifndef _XMLOFF_XMLINDEXBIBLIOGRAPHYENTRYCONTEXT_HXX_ +#include "XMLIndexBibliographyEntryContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXCHAPTERINFOENTRYCONTEXT_HXX_ +#include "XMLIndexChapterInfoEntryContext.hxx" +#endif + #ifndef _XMLOFF_XMLICTXT_HXX #include "xmlictxt.hxx" #endif @@ -153,9 +161,21 @@ XMLIndexTemplateContext::XMLIndexTemplateContext( SvXMLImport& rImport, Reference<XPropertySet> & rPropSet, sal_uInt16 nPrfx, - const OUString& rLocalName ) : + const OUString& rLocalName, + const SvXMLEnumMapEntry* pLevelNameMap, + const sal_Char* pLevelAttrName, + const sal_Char** pLevelStylePropMap, + const sal_Bool* pAllowedTokenTypes) : SvXMLImportContext(rImport, nPrfx, rLocalName), rPropertySet(rPropSet), + sStyleName(), + nOutlineLevel(1), // all indices have level 1 (0 is for header) + bStyleNameOK(sal_False), + bOutlineLevelOK(sal_False), + pOutlineLevelAttrName(pLevelAttrName), + pOutlineLevelNameMap(pLevelNameMap), + pOutlineLevelStylePropMap(pLevelStylePropMap), + pAllowedTokenTypesMap(pAllowedTokenTypes), sTokenEntryNumber(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenEntryNumber)), sTokenEntryText(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenEntryText)), sTokenTabStop(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenTabStop)), @@ -177,8 +197,23 @@ XMLIndexTemplateContext::XMLIndexTemplateContext( "TabStopFillCharacter")), sCharacterStyleName(RTL_CONSTASCII_USTRINGPARAM("CharacterStyleName")), sTokenType(RTL_CONSTASCII_USTRINGPARAM("TokenType")), - sText(RTL_CONSTASCII_USTRINGPARAM("Text")) + sText(RTL_CONSTASCII_USTRINGPARAM("Text")), + sBibliographyDataField(RTL_CONSTASCII_USTRINGPARAM( + "BibliographyDataField")), + sChapterFormat(RTL_CONSTASCII_USTRINGPARAM("ChapterFormat")) { + DBG_ASSERT( ((NULL != pLevelAttrName) && (NULL != pLevelNameMap)) + || ((NULL == pLevelAttrName) && (NULL == pLevelNameMap)), + "need both, attribute name and value map, or neither" ); + DBG_ASSERT( NULL != pOutlineLevelStylePropMap, "need property name map" ); + DBG_ASSERT( NULL != pAllowedTokenTypes, "need allowed tokens map" ); + + // no map for outline-level? then use 1 + if (NULL == pLevelNameMap) + { + nOutlineLevel = 1; + bOutlineLevelOK = sal_True; + } } XMLIndexTemplateContext::~XMLIndexTemplateContext() @@ -192,6 +227,7 @@ void XMLIndexTemplateContext::addTemplateEntry( aValueVector.push_back(aValues); } + void XMLIndexTemplateContext::StartElement( const Reference<XAttributeList> & xAttrList) { @@ -212,23 +248,27 @@ void XMLIndexTemplateContext::StartElement( sStyleName = xAttrList->getValueByIndex(nAttr); bStyleNameOK = sal_True; } - else if (sLocalName.equalsAsciiL(sXML_outline_level, - sizeof(sXML_outline_level)-1)) + else if (NULL != pOutlineLevelAttrName) { - // outline level - sal_Int32 nTmp; - if (SvXMLUnitConverter::convertNumber( - nTmp, xAttrList->getValueByIndex(nAttr), 1, - GetImport().GetTextImport()-> - GetChapterNumbering()->getCount() )) + // we have an attr name! Then see if we have the attr, too. + if (0 == sLocalName.compareToAscii(pOutlineLevelAttrName)) { - nOutlineLevel = nTmp; - bOutlineLevelOK = sal_True; + // outline level + sal_uInt16 nTmp; + if (SvXMLUnitConverter::convertEnum( + nTmp, xAttrList->getValueByIndex(nAttr), + pOutlineLevelNameMap)) + { + nOutlineLevel = nTmp; + bOutlineLevelOK = sal_True; + } + // else: illegal value -> ignore } + // else: unknown attribute -> ignore } - // else: unknown attribute + // else: we don't care about outline-level -> ignore } - // else: attribute not in text namespace + // else: attribute not in text namespace -> ignore } } @@ -254,29 +294,37 @@ void XMLIndexTemplateContext::EndElement() if (bStyleNameOK) { - // create property name and set - OUStringBuffer sBuf; - sBuf.append(sParaStyleLevel); - sBuf.append(nOutlineLevel); + const sal_Char* pStyleProperty = + pOutlineLevelStylePropMap[nOutlineLevel]; - aAny <<= sStyleName; - rPropertySet->setPropertyValue(sBuf.makeStringAndClear(), aAny); + DBG_ASSERT(NULL != pStyleProperty, "need property name"); + if (NULL != pStyleProperty) + { + aAny <<= sStyleName; + rPropertySet->setPropertyValue( + OUString::createFromAscii(pStyleProperty), aAny); + } } } } + + +/// template token types; used for aTokenTypeMap parameter enum TemplateTokenType { - XML_TOK_INDEX_TYPE_ENTRY_TEXT, + XML_TOK_INDEX_TYPE_ENTRY_TEXT = 0, XML_TOK_INDEX_TYPE_TAB_STOP, XML_TOK_INDEX_TYPE_TEXT, XML_TOK_INDEX_TYPE_PAGE_NUMBER, XML_TOK_INDEX_TYPE_CHAPTER, + XML_TOK_INDEX_TYPE_CHAPTER_NUMBER, XML_TOK_INDEX_TYPE_LINK_START, XML_TOK_INDEX_TYPE_LINK_END, XML_TOK_INDEX_TYPE_BIBLIOGRAPHY }; + SvXMLEnumMapEntry aTemplateTokenTypeMap[] = { { sXML_index_entry_chapter, XML_TOK_INDEX_TYPE_CHAPTER }, @@ -284,6 +332,7 @@ SvXMLEnumMapEntry aTemplateTokenTypeMap[] = { sXML_index_entry_tab_stop, XML_TOK_INDEX_TYPE_TAB_STOP }, { sXML_index_entry_span, XML_TOK_INDEX_TYPE_TEXT }, { sXML_index_entry_page_number, XML_TOK_INDEX_TYPE_PAGE_NUMBER }, + { sXML_index_entry_chapter_number, XML_TOK_INDEX_TYPE_CHAPTER_NUMBER }, { sXML_index_entry_chapter, XML_TOK_INDEX_TYPE_CHAPTER }, { sXML_index_entry_link_start, XML_TOK_INDEX_TYPE_LINK_START }, { sXML_index_entry_link_end, XML_TOK_INDEX_TYPE_LINK_END }, @@ -304,55 +353,65 @@ SvXMLImportContext *XMLIndexTemplateContext::CreateChildContext( if (SvXMLUnitConverter::convertEnum(nToken, rLocalName, aTemplateTokenTypeMap)) { - switch ((TemplateTokenType)nToken) + // can this index accept this kind of token? + if (pAllowedTokenTypesMap[nToken]) { -// TODO: only allow entries for the appropriate index types! - case XML_TOK_INDEX_TYPE_ENTRY_TEXT: - pContext = new XMLIndexSimpleEntryContext( - GetImport(), sTokenEntryText, *this, - nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_PAGE_NUMBER: - pContext = new XMLIndexSimpleEntryContext( - GetImport(), sTokenPageNumber, *this, - nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_LINK_START: - pContext = new XMLIndexSimpleEntryContext( - GetImport(), sTokenHyperlinkStart, *this, - nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_LINK_END: - pContext = new XMLIndexSimpleEntryContext( - GetImport(), sTokenHyperlinkEnd, *this, - nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_TEXT: - pContext = new XMLIndexSpanEntryContext( - GetImport(), *this, nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_TAB_STOP: - pContext = new XMLIndexTabStopEntryContext( - GetImport(), *this, nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_CHAPTER: - // TODO: implement "real" chapter context that - // parses chapter attributes - pContext = new XMLIndexSimpleEntryContext( - GetImport(), sTokenEntryNumber, *this, - nPrefix, rLocalName); - break; - - case XML_TOK_INDEX_TYPE_BIBLIOGRAPHY: - // TODO: bibliography context - default: - break; + switch ((TemplateTokenType)nToken) + { + case XML_TOK_INDEX_TYPE_ENTRY_TEXT: + pContext = new XMLIndexSimpleEntryContext( + GetImport(), sTokenEntryText, *this, + nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_PAGE_NUMBER: + pContext = new XMLIndexSimpleEntryContext( + GetImport(), sTokenPageNumber, *this, + nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_LINK_START: + pContext = new XMLIndexSimpleEntryContext( + GetImport(), sTokenHyperlinkStart, *this, + nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_LINK_END: + pContext = new XMLIndexSimpleEntryContext( + GetImport(), sTokenHyperlinkEnd, *this, + nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_TEXT: + pContext = new XMLIndexSpanEntryContext( + GetImport(), *this, nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_TAB_STOP: + pContext = new XMLIndexTabStopEntryContext( + GetImport(), *this, nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_CHAPTER_NUMBER: + pContext = new XMLIndexSimpleEntryContext( + GetImport(), sTokenEntryNumber, *this, + nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_BIBLIOGRAPHY: + pContext = new XMLIndexBibliographyEntryContext( + GetImport(), *this, nPrefix, rLocalName); + break; + + case XML_TOK_INDEX_TYPE_CHAPTER: + pContext = new XMLIndexChapterInfoEntryContext( + GetImport(), *this, nPrefix, rLocalName); + break; + + default: + // ignore! + break; + } } } } @@ -366,3 +425,166 @@ SvXMLImportContext *XMLIndexTemplateContext::CreateChildContext( return pContext; } + + + +// +// maps for the XMLIndexTemplateContext constructor +// + + +// table of content and user defined index: + +const SvXMLEnumMapEntry aLevelNameTOCMap[] = +{ + { sXML_1, 1 }, + { sXML_2, 2 }, + { sXML_3, 3 }, + { sXML_4, 4 }, + { sXML_5, 5 }, + { sXML_6, 6 }, + { sXML_7, 7 }, + { sXML_8, 8 }, + { sXML_9, 9 }, + { sXML_10, 10 }, + { NULL, NULL } +}; + +const sal_Char* aLevelStylePropNameTOCMap[] = + { NULL, "ParaStyleLevel1", "ParaStyleLevel2", "ParaStyleLevel3", + "ParaStyleLevel4", "ParaStyleLevel5", "ParaStyleLevel6", + "ParaStyleLevel7", "ParaStyleLevel8", "ParaStyleLevel9", + "ParaStyleLevel10", NULL }; + +const sal_Bool aAllowedTokenTypesTOC[] = +{ + sal_True, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = + sal_True, // XML_TOK_INDEX_TYPE_TAB_STOP, + sal_True, // XML_TOK_INDEX_TYPE_TEXT, + sal_True, // XML_TOK_INDEX_TYPE_PAGE_NUMBER, + sal_False, // XML_TOK_INDEX_TYPE_CHAPTER, + sal_True, // XML_TOK_INDEX_TYPE_CHAPTER_NUMBER + sal_True, // XML_TOK_INDEX_TYPE_LINK_START, + sal_True, // XML_TOK_INDEX_TYPE_LINK_END, + sal_False // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY +}; + +const sal_Bool aAllowedTokenTypesUser[] = +{ + sal_True, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = + sal_True, // XML_TOK_INDEX_TYPE_TAB_STOP, + sal_True, // XML_TOK_INDEX_TYPE_TEXT, + sal_True, // XML_TOK_INDEX_TYPE_PAGE_NUMBER, + sal_False, // XML_TOK_INDEX_TYPE_CHAPTER, + sal_True, // XML_TOK_INDEX_TYPE_CHAPTER_NUMBER + sal_False, // XML_TOK_INDEX_TYPE_LINK_START, + sal_False, // XML_TOK_INDEX_TYPE_LINK_END, + sal_False // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY +}; + + +// alphabetical index + +const SvXMLEnumMapEntry aLevelNameAlphaMap[] = +{ + { sXML_separator, 1 }, + { sXML_1, 2 }, + { sXML_2, 3 }, + { sXML_3, 4 }, + { NULL, NULL } +}; + +const sal_Char* aLevelStylePropNameAlphaMap[] = + { NULL, "ParaStyleSeparator", "ParaStyleLevel1", "ParaStyleLevel2", + "ParaStyleLevel3", NULL }; + +const sal_Bool aAllowedTokenTypesAlpha[] = +{ + sal_True, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = + sal_True, // XML_TOK_INDEX_TYPE_TAB_STOP, + sal_True, // XML_TOK_INDEX_TYPE_TEXT, + sal_True, // XML_TOK_INDEX_TYPE_PAGE_NUMBER, + sal_True, // XML_TOK_INDEX_TYPE_CHAPTER, + sal_False, // XML_TOK_INDEX_TYPE_CHAPTER_NUMBER + sal_False, // XML_TOK_INDEX_TYPE_LINK_START, + sal_False, // XML_TOK_INDEX_TYPE_LINK_END, + sal_False // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY +}; + + +// bibliography index: + +const SvXMLEnumMapEntry aLevelNameBibliographyMap[] = +{ + { sXML_article, 1 }, + { sXML_book, 2 }, + { sXML_booklet, 3 }, + { sXML_conference, 4 }, + { sXML_custom1, 5 }, + { sXML_custom2, 6 }, + { sXML_custom3, 7 }, + { sXML_custom4, 8 }, + { sXML_custom5, 9 }, + { sXML_email, 10 }, + { sXML_inbook, 11 }, + { sXML_incollection, 12 }, + { sXML_inproceedings, 13 }, + { sXML_journal, 14 }, + { sXML_manual, 15 }, + { sXML_mastersthesis, 16 }, + { sXML_misc, 17 }, + { sXML_phdthesis, 18 }, + { sXML_proceedings, 19 }, + { sXML_techreport, 20 }, + { sXML_unpublished, 21 }, + { sXML_www, 22 }, + { NULL, NULL } +}; + +// TODO: replace with real property names, when available +const sal_Char* aLevelStylePropNameBibliographyMap[] = +{ + NULL, "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", NULL }; + +const sal_Bool aAllowedTokenTypesBibliography[] = +{ + sal_True, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = + sal_True, // XML_TOK_INDEX_TYPE_TAB_STOP, + sal_True, // XML_TOK_INDEX_TYPE_TEXT, + sal_True, // XML_TOK_INDEX_TYPE_PAGE_NUMBER, + sal_False, // XML_TOK_INDEX_TYPE_CHAPTER, + sal_False, // XML_TOK_INDEX_TYPE_CHAPTER_NUMBER + sal_False, // XML_TOK_INDEX_TYPE_LINK_START, + sal_False, // XML_TOK_INDEX_TYPE_LINK_END, + sal_True // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY +}; + + +// table, illustration and object index + +// no name map +const SvXMLEnumMapEntry* aLevelNameTableMap = NULL; + +const sal_Char* aLevelStylePropNameTableMap[] = + { NULL, "ParaStyleLevel1", NULL }; + +const sal_Bool aAllowedTokenTypesTable[] = +{ + sal_True, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = + sal_True, // XML_TOK_INDEX_TYPE_TAB_STOP, + sal_True, // XML_TOK_INDEX_TYPE_TEXT, + sal_True, // XML_TOK_INDEX_TYPE_PAGE_NUMBER, + sal_True, // XML_TOK_INDEX_TYPE_CHAPTER, + sal_False, // XML_TOK_INDEX_TYPE_CHAPTER_NUMBER + sal_False, // XML_TOK_INDEX_TYPE_LINK_START, + sal_False, // XML_TOK_INDEX_TYPE_LINK_END, + sal_False // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY +}; + diff --git a/xmloff/source/text/XMLIndexTemplateContext.hxx b/xmloff/source/text/XMLIndexTemplateContext.hxx index c1ebea269291..958f216f951e 100644 --- a/xmloff/source/text/XMLIndexTemplateContext.hxx +++ b/xmloff/source/text/XMLIndexTemplateContext.hxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLIndexTemplateContext.hxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -88,6 +88,31 @@ namespace com { namespace sun { namespace star { namespace beans { class XPropertySet; } } } } namespace rtl { class OUString; } +struct SvXMLEnumMapEntry; + + +// constants for the XMLIndexTemplateContext constructor + +// TOC and user defined index: +extern const SvXMLEnumMapEntry aLevelNameTOCMap[]; +extern const sal_Char* aLevelStylePropNameTOCMap[]; +extern const sal_Bool aAllowedTokenTypesTOC[]; +extern const sal_Bool aAllowedTokenTypesUser[]; + +// alphabetical index: +extern const SvXMLEnumMapEntry aLevelNameAlphaMap[]; +extern const sal_Char* aLevelStylePropNameAlphaMap[]; +extern const sal_Bool aAllowedTokenTypesAlpha[]; + +// bibliography: +extern const SvXMLEnumMapEntry aLevelNameBibliographyMap[]; +extern const sal_Char* aLevelStylePropNameBibliographyMap[]; +extern const sal_Bool aAllowedTokenTypesBibliography[]; + +// table, illustration and object tables: +extern const SvXMLEnumMapEntry* aLevelNameTableMap; // NULL: no outline-level +extern const sal_Char* aLevelStylePropNameTableMap[]; +extern const sal_Bool aAllowedTokenTypesTable[]; /** @@ -99,6 +124,12 @@ class XMLIndexTemplateContext : public SvXMLImportContext ::std::vector< ::com::sun::star::beans::PropertyValues > aValueVector; ::rtl::OUString sStyleName; + + const SvXMLEnumMapEntry* pOutlineLevelNameMap; + const sal_Char* pOutlineLevelAttrName; + const sal_Char** pOutlineLevelStylePropMap; + const sal_Bool* pAllowedTokenTypesMap; + sal_Int32 nOutlineLevel; sal_Bool bStyleNameOK; sal_Bool bOutlineLevelOK; @@ -127,6 +158,8 @@ public: const ::rtl::OUString sTabStopRightAligned; const ::rtl::OUString sTabStopPosition; const ::rtl::OUString sTabStopFillCharacter; + const ::rtl::OUString sBibliographyDataField; + const ::rtl::OUString sChapterFormat; const ::rtl::OUString sLevelFormat; const ::rtl::OUString sParaStyleLevel; @@ -139,7 +172,11 @@ public: ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> & rPropSet, sal_uInt16 nPrfx, - const ::rtl::OUString& rLocalName ); + const ::rtl::OUString& rLocalName, + const SvXMLEnumMapEntry* aLevelNameMap, + const sal_Char* pLevelAttrName, + const sal_Char** aLevelStylePropNameMap, + const sal_Bool* aAllowedTokenTypes); ~XMLIndexTemplateContext(); diff --git a/xmloff/source/text/XMLIndexUserSourceContext.cxx b/xmloff/source/text/XMLIndexUserSourceContext.cxx new file mode 100644 index 000000000000..dba3eee5c0a2 --- /dev/null +++ b/xmloff/source/text/XMLIndexUserSourceContext.cxx @@ -0,0 +1,276 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexUserSourceContext.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#ifndef _XMLOFF_XMLINDEXUSERSOURCECONTEXT_HXX_ +#include "XMLIndexUserSourceContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _XMLOFF_XMLINDEXTEMPLATECONTEXT_HXX_ +#include "XMLIndexTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTITLETEMPLATECONTEXT_HXX_ +#include "XMLIndexTitleTemplateContext.hxx" +#endif + +#ifndef _XMLOFF_XMLINDEXTOCSTYLESCONTEXT_HXX_ +#include "XMLIndexTOCStylesContext.hxx" +#endif + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _XMLOFF_XMLIMP_HXX +#include "xmlimp.hxx" +#endif + +#ifndef _XMLOFF_TEXTIMP_HXX_ +#include "txtimp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +using ::rtl::OUString; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Any; +using ::com::sun::star::xml::sax::XAttributeList; + + +const sal_Char sAPI_CreateFromEmbeddedObjects[] = "CreateFromEmbeddedObjects"; +const sal_Char sAPI_CreateFromGraphicObjects[] = "CreateFromGraphicObjects"; +const sal_Char sAPI_CreateFromMarks[] = "CreateFromMarks"; +const sal_Char sAPI_CreateFromTables[] = "CreateFromTables"; +const sal_Char sAPI_CreateFromTextFrames[] = "CreateFromTextFrames"; +const sal_Char sAPI_UseLevelFromSource[] = "UseLevelFromSource"; + +TYPEINIT1(XMLIndexUserSourceContext, XMLIndexSourceBaseContext); + + +XMLIndexUserSourceContext::XMLIndexUserSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + Reference<XPropertySet> & rPropSet) : + XMLIndexSourceBaseContext(rImport, nPrfx, rLocalName, + rPropSet, sal_True), + sCreateFromEmbeddedObjects(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromEmbeddedObjects)), + sCreateFromGraphicObjects(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromGraphicObjects)), + sCreateFromMarks(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromMarks)), + sCreateFromTables(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromTables)), + sCreateFromTextFrames(RTL_CONSTASCII_USTRINGPARAM( + sAPI_CreateFromTextFrames)), + sUseLevelFromSource(RTL_CONSTASCII_USTRINGPARAM( + sAPI_UseLevelFromSource)), + bUseObjects(sal_False), + bUseGraphic(sal_False), + bUseMarks(sal_False), + bUseTables(sal_False), + bUseFrames(sal_False), + bUseLevelFromSource(sal_False) +{ +} + +XMLIndexUserSourceContext::~XMLIndexUserSourceContext() +{ +} + +void XMLIndexUserSourceContext::ProcessAttribute( + enum IndexSourceParamEnum eParam, + const OUString& rValue) +{ + sal_Bool bTmp; + + switch (eParam) + { + case XML_TOK_INDEXSOURCE_USE_INDEX_MARKS: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseMarks = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_OBJECTS: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseObjects = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_GRAPHICS: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseGraphic = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_TABLES: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseTables = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_USE_FRAMES: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseFrames = bTmp; + } + break; + + case XML_TOK_INDEXSOURCE_COPY_OUTLINE_LEVELS: + if (SvXMLUnitConverter::convertBool(bTmp, rValue)) + { + bUseLevelFromSource = bTmp; + } + break; + + default: + XMLIndexSourceBaseContext::ProcessAttribute(eParam, rValue); + break; + } +} + + +void XMLIndexUserSourceContext::EndElement() +{ + Any aAny; + + aAny.setValue(&bUseObjects, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromEmbeddedObjects, aAny); + + aAny.setValue(&bUseGraphic, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromGraphicObjects, aAny); + + aAny.setValue(&bUseLevelFromSource, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sUseLevelFromSource, aAny); + + aAny.setValue(&bUseMarks, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromMarks, aAny); + + aAny.setValue(&bUseTables, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromTables, aAny); + + aAny.setValue(&bUseFrames, ::getBooleanCppuType()); + rIndexPropertySet->setPropertyValue(sCreateFromTextFrames, aAny); + + XMLIndexSourceBaseContext::EndElement(); +} + + +SvXMLImportContext* XMLIndexUserSourceContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const Reference<XAttributeList> & xAttrList ) +{ + if ( (XML_NAMESPACE_TEXT == nPrefix) && + (rLocalName.equalsAsciiL(sXML_user_index_entry_template, + sizeof(sXML_user_index_entry_template)-1))) + { + return new XMLIndexTemplateContext(GetImport(), rIndexPropertySet, + nPrefix, rLocalName, + aLevelNameTOCMap, + sXML_outline_level, + aLevelStylePropNameTOCMap, + aAllowedTokenTypesUser); + } + else + { + return XMLIndexSourceBaseContext::CreateChildContext(nPrefix, + rLocalName, + xAttrList); + } + +} diff --git a/xmloff/source/text/XMLIndexUserSourceContext.hxx b/xmloff/source/text/XMLIndexUserSourceContext.hxx new file mode 100644 index 000000000000..ab3659410725 --- /dev/null +++ b/xmloff/source/text/XMLIndexUserSourceContext.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * $RCSfile: XMLIndexUserSourceContext.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLINDEXUSERSOURCECONTEXT_HXX_ +#define _XMLOFF_XMLINDEXUSERSOURCECONTEXT_HXX_ + +#ifndef _XMLOFF_XMLINDEXSOURCEBASECONTEXT_HXX_ +#include "XMLIndexSourceBaseContext.hxx" +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + + +namespace com { namespace sun { namespace star { + namespace xml { namespace sax { class XAttributeList; } } + namespace beans { class XPropertySet; } +} } } +namespace rtl { class OUString; } + + +/** + * Import user defined index source element + */ +class XMLIndexUserSourceContext : public XMLIndexSourceBaseContext +{ + const ::rtl::OUString sCreateFromEmbeddedObjects; + const ::rtl::OUString sCreateFromGraphicObjects; + const ::rtl::OUString sCreateFromMarks; + const ::rtl::OUString sCreateFromTables; + const ::rtl::OUString sCreateFromTextFrames; + const ::rtl::OUString sUseLevelFromSource; + + sal_Bool bUseObjects; + sal_Bool bUseGraphic; + sal_Bool bUseMarks; + sal_Bool bUseTables; + sal_Bool bUseFrames; + sal_Bool bUseLevelFromSource; + +public: + + TYPEINFO(); + + XMLIndexUserSourceContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const ::rtl::OUString& rLocalName, + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropSet); + + ~XMLIndexUserSourceContext(); + +protected: + + virtual void ProcessAttribute( + enum IndexSourceParamEnum eParam, + const ::rtl::OUString& rValue); + + virtual void EndElement(); + + virtual SvXMLImportContext* CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); +}; + +#endif diff --git a/xmloff/source/text/XMLSectionExport.cxx b/xmloff/source/text/XMLSectionExport.cxx new file mode 100644 index 000000000000..0230a13f4f5c --- /dev/null +++ b/xmloff/source/text/XMLSectionExport.cxx @@ -0,0 +1,1445 @@ +/************************************************************************* + * + * $RCSfile: XMLSectionExport.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLSECTIONEXPORT_HXX_ +#include "XMLSectionExport.hxx" +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +#ifndef _RTL_USTRBUF_HXX_ +#include <rtl/ustrbuf.hxx> +#endif + +#ifndef __SGI_STL_VECTOR +#include <stl/vector> +#endif + + +#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ +#include <com/sun/star/lang/XServiceInfo.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXREPLACE_HPP_ +#include <com/sun/star/container/XIndexReplace.hpp> +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ +#include <com/sun/star/beans/PropertyValue.hpp> +#endif + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUES_HPP_ +#include <com/sun/star/beans/PropertyValues.hpp> +#endif + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYSTATE_HPP_ +#include <com/sun/star/beans/PropertyState.hpp> +#endif + +#ifndef _COM_SUN_STAR_TEXT_XTEXT_HPP_ +#include <com/sun/star/text/XText.hpp> +#endif + +#ifndef _COM_SUN_STAR_TEXT_XTEXTSECTION_HPP_ +#include <com/sun/star/text/XTextSection.hpp> +#endif + +#ifndef _COM_SUN_STAR_TEXT_SECTIONFILELINK_HPP_ +#include <com/sun/star/text/SectionFileLink.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_ +#include <com/sun/star/container/XNamed.hpp> +#endif + +#ifndef _COM_SUN_STAR_TEXT_XDOCUMENTINDEX_HPP_ +#include <com/sun/star/text/XDocumentIndex.hpp> +#endif + +#ifndef _COM_SUN_STAR_TEXT_BIBLIOGRAPHYDATAFIELD_HPP_ +#include <com/sun/star/text/BibliographyDataField.hpp> +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_FAMILIES_HXX_ +#include "families.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _XMLOFF_XMLEXP_HXX +#include "xmlexp.hxx" +#endif + +#ifndef _XMLOFF_XMLTKMAP_HXX +#include "xmltkmap.hxx" +#endif + +#ifndef _XMLOFF_TXTFLDE_HXX +#include "txtflde.hxx" +#endif + +#ifndef _XMLOFF_XMLTEXTNUMRULEINFO_HXX +#include "XMLTextNumRuleInfo.hxx" +#endif + +using namespace ::com::sun::star; +using namespace ::com::sun::star::text; +using namespace ::com::sun::star::uno; +using namespace ::std; + +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::beans::PropertyValue; +using ::com::sun::star::beans::PropertyValues; +using ::com::sun::star::beans::PropertyState; +using ::com::sun::star::container::XIndexReplace; +using ::com::sun::star::container::XNamed; +using ::com::sun::star::lang::XServiceInfo; + + + + +XMLSectionExport::XMLSectionExport( + SvXMLExport& rExp, + XMLTextParagraphExport& rParaExp) : + rExport(rExp), + rParaExport(rParaExp), + sCondition(RTL_CONSTASCII_USTRINGPARAM("Condition")), + sCreateFromChapter(RTL_CONSTASCII_USTRINGPARAM("CreateFromChapter")), + sCreateFromLabels(RTL_CONSTASCII_USTRINGPARAM("CreateFromLabels")), + sCreateFromMarks(RTL_CONSTASCII_USTRINGPARAM("CreateFromMarks")), + sCreateFromOutline(RTL_CONSTASCII_USTRINGPARAM("CreateFromOutline")), + sDdeCommandElement(RTL_CONSTASCII_USTRINGPARAM("DDECommandElement")), + sDdeCommandFile(RTL_CONSTASCII_USTRINGPARAM("DDECommandFile")), + sDdeCommandType(RTL_CONSTASCII_USTRINGPARAM("DDECommandType")), + sFileLink(RTL_CONSTASCII_USTRINGPARAM("FileLink")), + sIsCaseSensitive(RTL_CONSTASCII_USTRINGPARAM("IsCaseSensitive")), + sIsProtected(RTL_CONSTASCII_USTRINGPARAM("IsProtected")), + sIsVisible(RTL_CONSTASCII_USTRINGPARAM("IsVisible")), + sLabelCategory(RTL_CONSTASCII_USTRINGPARAM("LabelCategory")), + sLabelDisplayType(RTL_CONSTASCII_USTRINGPARAM("LabelDisplayType")), + sLevel(RTL_CONSTASCII_USTRINGPARAM("Level")), + sLevelFormat(RTL_CONSTASCII_USTRINGPARAM("LevelFormat")), + sLevelParagraphStyles( + RTL_CONSTASCII_USTRINGPARAM("LevelParagraphStyles")), + sLinkRegion(RTL_CONSTASCII_USTRINGPARAM("LinkRegion")), + sMainEntryCharacterStyleName( + RTL_CONSTASCII_USTRINGPARAM("MainEntryCharacterStyleName")), + sParaStyleHeading(RTL_CONSTASCII_USTRINGPARAM("ParaStyleHeading")), + sParaStyleLevel(RTL_CONSTASCII_USTRINGPARAM("ParaStyleLevel")), + sSection(RTL_CONSTASCII_USTRINGPARAM(sXML_section)), + sTitle(RTL_CONSTASCII_USTRINGPARAM("Title")), + sUseAlphabeticalSeparators( + RTL_CONSTASCII_USTRINGPARAM("UseAlphabeticalSeparators")), + sUseCombinedEntries(RTL_CONSTASCII_USTRINGPARAM("UseCombinedEntries")), + sUseDash(RTL_CONSTASCII_USTRINGPARAM("UseDash")), + sUseKeyAsEntry(RTL_CONSTASCII_USTRINGPARAM("UseKeyAsEntry")), + sUsePP(RTL_CONSTASCII_USTRINGPARAM("UsePP")), + sUseUpperCase(RTL_CONSTASCII_USTRINGPARAM("UseUpperCase")), + sCreateFromOtherEmbeddedObjects(RTL_CONSTASCII_USTRINGPARAM("CreateFromOtherEmbeddedObjects")), + sCreateFromStarCalc(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarCalc")), + sCreateFromStarChart(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarChart")), + sCreateFromStarDraw(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarDraw")), + sCreateFromStarImage(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarImage")), + sCreateFromStarMath(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarMath")), + sCreateFromEmbeddedObjects(RTL_CONSTASCII_USTRINGPARAM("CreateFromEmbeddedObjects")), + sCreateFromGraphicObjects(RTL_CONSTASCII_USTRINGPARAM("CreateFromGraphicObjects")), + sCreateFromTables(RTL_CONSTASCII_USTRINGPARAM("CreateFromTables")), + sCreateFromTextFrames(RTL_CONSTASCII_USTRINGPARAM("CreateFromTextFrames")), + sUseLevelFromSource(RTL_CONSTASCII_USTRINGPARAM("UseLevelFromSource")), + sTableOfContent(RTL_CONSTASCII_USTRINGPARAM(sXML_table_of_content)), + sIllustrationIndex(RTL_CONSTASCII_USTRINGPARAM(sXML_illustration_index)), + sAlphabeticalIndex(RTL_CONSTASCII_USTRINGPARAM(sXML_alphabetical_index)), + sTableIndex(RTL_CONSTASCII_USTRINGPARAM(sXML_table_index)), + sObjectIndex(RTL_CONSTASCII_USTRINGPARAM(sXML_object_index)), + sBibliography(RTL_CONSTASCII_USTRINGPARAM(sXML_bibliography)), + sUserIndex(RTL_CONSTASCII_USTRINGPARAM(sXML_user_index)), + sEmpty() +{ +} + +void XMLSectionExport::ExportSectionStart( + const Reference<XTextSection> & rSection, + sal_Bool bAutoStyles) +{ + if (bAutoStyles) + { + // get PropertySet and add section style + Reference<XPropertySet> xPropertySet(rSection, UNO_QUERY); + GetParaExport().Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropertySet ); + } + else + { + ExportRegularSectionStart(rSection); + } +} + +void XMLSectionExport::ExportSectionEnd( + const Reference<XTextSection> & rSection, + sal_Bool bAutoStyles) +{ + // any old attributes? + GetExport().CheckAttrList(); + + // TODO: end element section dependent + + // export end of element + GetExport().GetDocHandler()->endElement( + GetExport().GetNamespaceMap().GetQNameByKey(XML_NAMESPACE_TEXT, + sSection) ); + GetExport().GetDocHandler()->ignorableWhitespace( GetExport().sWS ); +} + +void XMLSectionExport::ExportIndexStart( + const Reference<XDocumentIndex> & rIndex, + sal_Bool bAutoStyles) +{ + // HACK: disable index export until all problems have been resolved: + return; + + // get PropertySet + Reference<XPropertySet> xPropertySet(rIndex, UNO_QUERY); + + if (bAutoStyles) + { + // treat index as section style + GetParaExport().Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropertySet ); + } + else + { + switch (MapSectionType(rIndex->getServiceName())) + { + case TEXT_SECTION_TYPE_TOC: + ExportTableOfContentStart(xPropertySet); + break; + + case TEXT_SECTION_TYPE_ILLUSTRATION: + ExportIllustrationIndexStart(xPropertySet); + break; + + case TEXT_SECTION_TYPE_ALPHABETICAL: + ExportAlphabeticalIndexStart(xPropertySet); + break; + + case TEXT_SECTION_TYPE_TABLE: + ExportTableIndexStart(xPropertySet); + break; + + case TEXT_SECTION_TYPE_OBJECT: + ExportObjectIndexStart(xPropertySet); + break; + + case TEXT_SECTION_TYPE_USER: + ExportUserIndexStart(xPropertySet); + break; + + case TEXT_SECTION_TYPE_BIBLIOGRAPHY: + ExportBibliographyStart(xPropertySet); + break; + + default: + // skip index + DBG_ERROR("unknown index type"); + break; + } + } + + // TODO: remove when proper solution found + ExportIndexEnd(rIndex, bAutoStyles); +} + + +SvXMLEnumMapEntry __READONLY_DATA aIndexTypeMap[] = +{ + { "com.sun.star.text.ContentIndex", TEXT_SECTION_TYPE_TOC }, + { "com.sun.star.text.DocumentIndex", TEXT_SECTION_TYPE_ALPHABETICAL }, + { "com.sun.star.text.TableIndex", TEXT_SECTION_TYPE_TABLE }, + { "com.sun.star.text.ObjectIndex", TEXT_SECTION_TYPE_OBJECT }, + { "com.sun.star.text.Bibliography", TEXT_SECTION_TYPE_BIBLIOGRAPHY }, + { "com.sun.star.text.UserIndex", TEXT_SECTION_TYPE_USER }, + { "com.sun.star.text.IllustrationsIndex", TEXT_SECTION_TYPE_ILLUSTRATION }, + { NULL, NULL } +}; + +enum SectionTypeEnum XMLSectionExport::MapSectionType( + const OUString& rServiceName) +{ + enum SectionTypeEnum eType = TEXT_SECTION_TYPE_UNKNOWN; + + sal_uInt16 nTmp; + if (SvXMLUnitConverter::convertEnum(nTmp, rServiceName, aIndexTypeMap)) + { + eType = (enum SectionTypeEnum)nTmp; + } + + // TODO: index header section types, etc. + + return eType; +} + +void XMLSectionExport::ExportIndexEnd( + const Reference<XDocumentIndex> & rIndex, + sal_Bool bAutoStyles) +{ + // HACK: disable index export until all problems have been resolved: + return; + + if (! bAutoStyles) + { + sal_Char* pElementName = NULL; + + switch (MapSectionType(rIndex->getServiceName())) + { + case TEXT_SECTION_TYPE_TOC: + pElementName = sXML_table_of_content; + break; + + case TEXT_SECTION_TYPE_ILLUSTRATION: + pElementName = sXML_illustration_index; + break; + + case TEXT_SECTION_TYPE_ALPHABETICAL: + pElementName = sXML_alphabetical_index; + break; + + case TEXT_SECTION_TYPE_TABLE: + pElementName = sXML_table_index; + break; + + case TEXT_SECTION_TYPE_OBJECT: + pElementName = sXML_object_index; + break; + + case TEXT_SECTION_TYPE_USER: + pElementName = sXML_user_index; + break; + + case TEXT_SECTION_TYPE_BIBLIOGRAPHY: + pElementName = sXML_bibliography; + break; + + default: + DBG_ERROR("unknown index type"); + // default: skip index! + break; + } + + if (NULL != pElementName) + { + // TODO: remove, if end handling is made proper + GetExport().GetDocHandler()->endElement( + GetExport().GetNamespaceMap().GetQNameByKey( + XML_NAMESPACE_TEXT, + OUString::createFromAscii(pElementName))); + GetExport().GetDocHandler()->ignorableWhitespace(GetExport().sWS); + } + } +} + +void XMLSectionExport::ExportRegularSectionStart( + const Reference<XTextSection> & rSection) +{ + // any old attributes? + GetExport().CheckAttrList(); + + Reference<XNamed> xName(rSection, UNO_QUERY); + GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_name, + xName->getName()); + + // get XPropertySet for other values + Reference<XPropertySet> xPropSet(rSection, UNO_QUERY); + Any aAny; + + // style name + GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_style_name, + GetParaExport().Find( + XML_STYLE_FAMILY_TEXT_SECTION, + xPropSet, sEmpty )); + + // condition and display + aAny = xPropSet->getPropertyValue(sCondition); + OUString sCond; + aAny >>= sCond; + sal_Char* pDisplay; + if (sCond.getLength() > 0) + { + GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_condition, + sCond); + pDisplay = sXML_condition; + } + else + { + pDisplay = sXML_none; + } + aAny = xPropSet->getPropertyValue(sIsVisible); + if (! *(sal_Bool*)aAny.getValue()) + { + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, sXML_display, + pDisplay); + } + + // export element + GetExport().GetDocHandler()->ignorableWhitespace( GetExport().sWS ); + GetExport().GetDocHandler()->startElement( + GetExport().GetNamespaceMap().GetQNameByKey(XML_NAMESPACE_TEXT, + sSection), + GetExport().GetXAttrList() ); + GetExport().ClearAttrList(); + + // data source + // unfortunately, we have to test all relevant strings for non-zero length + aAny = xPropSet->getPropertyValue(sFileLink); + SectionFileLink aFileLink; + aAny >>= aFileLink; + + aAny = xPropSet->getPropertyValue(sLinkRegion); + OUString sRegionName; + aAny >>= sRegionName; + + if ( (aFileLink.FileURL.getLength() > 0) || + (aFileLink.FilterName.getLength() > 0) || + (sRegionName.getLength() > 0) ) + { + if (aFileLink.FileURL.getLength() > 0) + { + GetExport().AddAttribute(XML_NAMESPACE_XLINK, sXML_href, + aFileLink.FileURL); + } + + if (aFileLink.FilterName.getLength() > 0) + { + GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_filter_name, + aFileLink.FilterName); + } + + if (sRegionName.getLength() > 0) + { + GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_section_name, + sRegionName); + } + + SvXMLElementExport aElem(GetExport(), + XML_NAMESPACE_TEXT, sXML_section_source, + sal_True, sal_True); + } + else + { + // data source DDE + // unfortunately, we have to test all relevant strings for + // non-zero length + aAny = xPropSet->getPropertyValue(sDdeCommandFile); + OUString sApplication; + aAny >>= sApplication; + aAny = xPropSet->getPropertyValue(sDdeCommandType); + OUString sTopic; + aAny >>= sTopic; + aAny = xPropSet->getPropertyValue(sDdeCommandElement); + OUString sItem; + aAny >>= sItem; + + if ( (sApplication.getLength() > 0) || + (sTopic.getLength() > 0) || + (sItem.getLength() > 0 ) ) + { + GetExport().AddAttribute(XML_NAMESPACE_OFFICE, + sXML_dde_application, sApplication); + GetExport().AddAttribute(XML_NAMESPACE_OFFICE, sXML_dde_topic, + sTopic); + GetExport().AddAttribute(XML_NAMESPACE_OFFICE, sXML_dde_item, + sItem); + + SvXMLElementExport aElem(GetExport(), + XML_NAMESPACE_OFFICE, + sXML_dde_source, + sal_True, sal_True); + } + // else: no data source + } +} + +void XMLSectionExport::ExportTableOfContentStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export TOC element start + ExportBaseIndexStart(sTableOfContent, rPropertySet); + + // scope for table-of-content-source element + { + + Any aAny; + + // TOC specific index source attributes: + + // outline-level (none|1..10) + aAny = rPropertySet->getPropertyValue(sCreateFromOutline); + if (*(sal_Bool*)aAny.getValue()) + { + // outline-level: 1..10 + aAny = rPropertySet->getPropertyValue(sLevel); + sal_Int16 nLevel; + aAny >>= nLevel; + + OUStringBuffer sBuffer; + SvXMLUnitConverter::convertNumber(sBuffer, + (sal_Int32)nLevel); + + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_outline_level, + sBuffer.makeStringAndClear()); + } + else + { + // outline-level: none + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + sXML_outline_level, + sXML_none); + } + + // use index marks + aAny = rPropertySet->getPropertyValue(sCreateFromMarks); + if (! (*(sal_Bool*)aAny.getValue())) + { + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + sXML_use_index_marks, + sXML_true); + } + + ExportBaseIndexSource(TEXT_SECTION_TYPE_TOC, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_TOC, rPropertySet); +} + +void XMLSectionExport::ExportObjectIndexStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export index start + ExportBaseIndexStart(sObjectIndex, rPropertySet); + + // scope for index source element + { + ExportBoolean(rPropertySet, sCreateFromOtherEmbeddedObjects, + sXML_use_other_objects, sal_False); + ExportBoolean(rPropertySet, sCreateFromStarCalc, + sXML_use_spreadsheet_objects, sal_False); + ExportBoolean(rPropertySet, sCreateFromStarChart, + sXML_use_chart_objects, sal_False); + ExportBoolean(rPropertySet, sCreateFromStarDraw, + sXML_use_draw_objects,sal_False); +// TODO: wait for API +// ExportBoolean(rPropertySet, sCreateFromStarImage, +// sXML_use_image_objects, sal_False); + ExportBoolean(rPropertySet, sCreateFromStarMath, + sXML_use_math_objects, sal_False); + + ExportBaseIndexSource(TEXT_SECTION_TYPE_OBJECT, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_OBJECT, rPropertySet); +} + +void XMLSectionExport::ExportIllustrationIndexStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export index start + ExportBaseIndexStart(sIllustrationIndex, rPropertySet); + + // scope for index source element + { + // export common attributes for illustration and table indices + ExportTableAndIllustrationIndexSourceAttributes(rPropertySet); + + ExportBaseIndexSource(TEXT_SECTION_TYPE_ILLUSTRATION, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_ILLUSTRATION, rPropertySet); +} + +void XMLSectionExport::ExportTableIndexStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export index start + ExportBaseIndexStart(sTableIndex, rPropertySet); + + // scope for index source element + { + // export common attributes for illustration and table indices + ExportTableAndIllustrationIndexSourceAttributes(rPropertySet); + + ExportBaseIndexSource(TEXT_SECTION_TYPE_TABLE, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_TABLE, rPropertySet); +} + +void XMLSectionExport::ExportAlphabeticalIndexStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export TOC element start + ExportBaseIndexStart(sAlphabeticalIndex, rPropertySet); + + // scope for table-of-content-source element + { + + // style name (if present) + Any aAny; + aAny = rPropertySet->getPropertyValue(sMainEntryCharacterStyleName); + OUString sStyleName; + aAny >>= sStyleName; + if (sStyleName.getLength()) + { + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_main_entry_style_name, + sStyleName); + } + + // other (boolean) attributes + ExportBoolean(rPropertySet, sIsCaseSensitive, sXML_ignore_case, + sal_False, sal_True); + ExportBoolean(rPropertySet, sUseAlphabeticalSeparators, + sXML_alphabetical_separators, sal_False); + ExportBoolean(rPropertySet, sUseCombinedEntries, sXML_combine_entries, + sal_True); + ExportBoolean(rPropertySet, sUseDash, sXML_combine_entries_with_dash, + sal_False); + ExportBoolean(rPropertySet, sUseKeyAsEntry, sXML_use_keys_as_entries, + sal_False); + ExportBoolean(rPropertySet, sUsePP, sXML_combine_entries_with_pp, + sal_True); + ExportBoolean(rPropertySet, sUseUpperCase, sXML_capitalize_entries, + sal_False); + + ExportBaseIndexSource(TEXT_SECTION_TYPE_ALPHABETICAL, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_ALPHABETICAL, rPropertySet); +} + +void XMLSectionExport::ExportUserIndexStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export TOC element start + ExportBaseIndexStart(sUserIndex, rPropertySet); + + // scope for table-of-content-source element + { + // bool attributes + ExportBoolean(rPropertySet, sCreateFromEmbeddedObjects, + sXML_use_objects, sal_False); + ExportBoolean(rPropertySet, sCreateFromGraphicObjects, + sXML_use_graphics, sal_False); + ExportBoolean(rPropertySet, sCreateFromMarks, + sXML_use_index_marks, sal_False); + ExportBoolean(rPropertySet, sCreateFromTables, + sXML_use_tables, sal_False); + ExportBoolean(rPropertySet, sCreateFromTextFrames, + sXML_use_floating_frames, sal_False); + ExportBoolean(rPropertySet, sUseLevelFromSource, + sXML_copy_outline_levels, sal_False); + + ExportBaseIndexSource(TEXT_SECTION_TYPE_USER, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_USER, rPropertySet); +} + +void XMLSectionExport::ExportBibliographyStart( + const Reference<XPropertySet> & rPropertySet) +{ + // export TOC element start + ExportBaseIndexStart(sBibliography, rPropertySet); + + // scope for table-of-content-source element + { + // No attributes. Fine. + + ExportBaseIndexSource(TEXT_SECTION_TYPE_BIBLIOGRAPHY, rPropertySet); + } + + ExportBaseIndexBody(TEXT_SECTION_TYPE_BIBLIOGRAPHY, rPropertySet); +} + + +void XMLSectionExport::ExportBaseIndexStart( + const OUString sElementName, + const Reference<XPropertySet> & rPropertySet) +{ + // section style name + GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_style_name, + GetParaExport().Find( + XML_STYLE_FAMILY_TEXT_SECTION, + rPropertySet, sEmpty )); + + // index Element start + GetExport().GetDocHandler()->ignorableWhitespace( GetExport().sWS ); + GetExport().GetDocHandler()->startElement( + GetExport().GetNamespaceMap().GetQNameByKey(XML_NAMESPACE_TEXT, + sElementName), + GetExport().GetXAttrList() ); + GetExport().ClearAttrList(); +} + +static const sal_Char* aTypeSourceElementNameMap[] = +{ + sXML_table_of_content_source, // TOC + sXML_table_index_source, // table index + sXML_illustration_index_source, // illustration index + sXML_object_index_source, // object index + sXML_user_index_source, // user index + sXML_alphabetical_index_source, // alphabetical index + sXML_bibliography_source // bibliography +}; + +void XMLSectionExport::ExportBaseIndexSource( + SectionTypeEnum eType, + const Reference<XPropertySet> & rPropertySet) +{ + // check type + DBG_ASSERT(eType >= TEXT_SECTION_TYPE_TOC, "illegal index type"); + DBG_ASSERT(eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY, "illegal index type"); + + Any aAny; + + // common attributes; not supported by bibliography + if (eType != TEXT_SECTION_TYPE_BIBLIOGRAPHY) + { + // document or chapter index? + aAny = rPropertySet->getPropertyValue(sCreateFromChapter); + if (*(sal_Bool*)aAny.getValue()) + { + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + sXML_index_scope, + sXML_chapter); + } + + // tab-stops relative to margin? + // TODO: property fehlt?! + } + + // the index source element (all indices) + SvXMLElementExport aElem(GetExport(), + XML_NAMESPACE_TEXT, + aTypeSourceElementNameMap[ + eType - TEXT_SECTION_TYPE_TOC], + sal_True, sal_True); + + // scope for title template (all indices) + { + // header style name + aAny = rPropertySet->getPropertyValue(sParaStyleHeading); + OUString sStyleName; + aAny >>= sStyleName; + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_style_name, + sStyleName); + + // title template + SvXMLElementExport aHeaderTemplate(GetExport(), + XML_NAMESPACE_TEXT, + sXML_index_title_template, + sal_True, sal_False); + + // title as element content + aAny = rPropertySet->getPropertyValue(sTitle); + OUString sTitleString; + aAny >>= sTitleString; + GetExport().GetDocHandler()->characters(sTitleString); + } + + // export level templates (all indices) + aAny = rPropertySet->getPropertyValue(sLevelFormat); + Reference<XIndexReplace> xLevelTemplates; + aAny >>= xLevelTemplates; + + // iterate over level formats; + // skip element 0 (empty template for title) + sal_Int32 nLevelCount = xLevelTemplates->getCount(); + for(sal_Int32 i = 1; i<nLevelCount; i++) + { + // get sequence + Sequence<PropertyValues> aTemplateSequence; + aAny = xLevelTemplates->getByIndex(i); + aAny >>= aTemplateSequence; + + // export the sequence + ExportIndexTemplate(eType, i, rPropertySet, aTemplateSequence); + } + + // only TOC and user index: + // styles from which to build the index (LevelParagraphStyles) + if ( (TEXT_SECTION_TYPE_TOC == eType) || + (TEXT_SECTION_TYPE_USER == eType) ) + { + aAny = rPropertySet->getPropertyValue(sLevelParagraphStyles); + Reference<XIndexReplace> xLevelParagraphStyles; + aAny >>= xLevelParagraphStyles; + ExportLevelParagraphStyles(xLevelParagraphStyles); + } +} + + +void XMLSectionExport::ExportBaseIndexBody( + SectionTypeEnum eType, + const Reference<XPropertySet> & rSection) +{ + // type not used; checked anyway. + DBG_ASSERT(eType >= TEXT_SECTION_TYPE_TOC, "illegal index type"); + DBG_ASSERT(eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY, "illegal index type"); + + SvXMLElementExport aIndexBody(GetExport(), + XML_NAMESPACE_TEXT, + sXML_index_body, + sal_True, sal_True); +} + +void XMLSectionExport::ExportTableAndIllustrationIndexSourceAttributes( + const Reference<XPropertySet> & rPropertySet) +{ + // use caption + Any aAny = rPropertySet->getPropertyValue(sCreateFromLabels); + if (! *(sal_Bool*)aAny.getValue()) + { + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + sXML_use_caption, + sXML_false); + } + + // sequence name + aAny = rPropertySet->getPropertyValue(sLabelCategory); + OUString sSequenceName; + aAny >>= sSequenceName; + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_caption_sequence_name, + sSequenceName); + + // caption format + aAny = rPropertySet->getPropertyValue(sLabelDisplayType); + sal_Int16 nType; + aAny >>= nType; + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + sXML_caption_sequence_format, + XMLTextFieldExport::MapReferenceType(nType)); +} + + +// map index of LevelFormats to attribute value; +// level 0 is always the header +static const sal_Char* aLevelNameTOCMap[] = + { NULL, sXML_1, sXML_2, sXML_3, sXML_4, sXML_5, sXML_6, sXML_7, + sXML_8, sXML_9, sXML_10, NULL }; +static const sal_Char* aLevelNameTableMap[] = + { NULL, "", NULL }; +static const sal_Char* aLevelNameAlphaMap[] = + { NULL, sXML_separator, sXML_1, sXML_2, sXML_3, NULL }; +static const sal_Char* aLevelNameBibliographyMap[] = + { NULL, sXML_article, sXML_book, sXML_booklet, sXML_conference, + sXML_custom1, sXML_custom2, sXML_custom3, sXML_custom4, + sXML_custom5, sXML_email, sXML_inbook, sXML_incollection, + sXML_inproceedings, sXML_journal, + sXML_manual, sXML_mastersthesis, sXML_misc, sXML_phdthesis, + sXML_proceedings, sXML_techreport, sXML_unpublished, sXML_www, + NULL }; + +static const sal_Char** aTypeLevelNameMap[] = +{ + aLevelNameTOCMap, // TOC + aLevelNameTableMap, // table index + aLevelNameTableMap, // illustration index + aLevelNameTableMap, // object index + aLevelNameTOCMap, // user index + aLevelNameAlphaMap, // alphabetical index + aLevelNameBibliographyMap // bibliography +}; + +static const sal_Char* aLevelStylePropNameTOCMap[] = + { NULL, "ParaStyleLevel1", "ParaStyleLevel2", "ParaStyleLevel3", + "ParaStyleLevel4", "ParaStyleLevel5", "ParaStyleLevel6", + "ParaStyleLevel7", "ParaStyleLevel8", "ParaStyleLevel9", + "ParaStyleLevel10", NULL }; +static const sal_Char* aLevelStylePropNameTableMap[] = + { NULL, "ParaStyleLevel1", NULL }; +static const sal_Char* aLevelStylePropNameAlphaMap[] = + { NULL, "ParaStyleSeparator", "ParaStyleLevel1", "ParaStyleLevel2", + "ParaStyleLevel3", NULL }; +static const sal_Char* aLevelStylePropNameBibliographyMap[] = + // TODO: replace with real property names, when available + { NULL, "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1", + "ParaStyleLevel1", + NULL }; + +static const sal_Char** aTypeLevelStylePropNameMap[] = +{ + aLevelStylePropNameTOCMap, // TOC + aLevelStylePropNameTableMap, // table index + aLevelStylePropNameTableMap, // illustration index + aLevelStylePropNameTableMap, // object index + aLevelStylePropNameTOCMap, // user index + aLevelStylePropNameAlphaMap, // alphabetical index + aLevelStylePropNameBibliographyMap // bibliography +}; + +static const sal_Char* aTypeLevelAttrMap[] = +{ + sXML_outline_level, // TOC + NULL, // table index + NULL, // illustration index + NULL, // object index + sXML_outline_level, // user index + sXML_outline_level, // alphabetical index + sXML_bibliography_type // bibliography +}; + +static const sal_Char* aTypeElementNameMap[] = +{ + sXML_table_of_content_entry_template, // TOC + sXML_table_index_entry_template, // table index + sXML_illustration_index_entry_template, // illustration index + sXML_object_index_entry_template, // object index + sXML_user_index_entry_template, // user index + sXML_alphabetical_index_entry_template, // alphabetical index + sXML_bibliography_entry_template // bibliography +}; + + +void XMLSectionExport::ExportIndexTemplate( + SectionTypeEnum eType, + sal_Int32 nOutlineLevel, + const Reference<XPropertySet> & rPropertySet, + Sequence<Sequence<PropertyValue> > & rValues) +{ + DBG_ASSERT(eType >= TEXT_SECTION_TYPE_TOC, "illegal index type"); + DBG_ASSERT(eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY, "illegal index type"); + DBG_ASSERT(nOutlineLevel >= 0, "illegal outline level"); + + if ( (eType >= TEXT_SECTION_TYPE_TOC) && + (eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY) && + (nOutlineLevel >= 0) ) + { + // get level name and level attribute name from aLevelNameMap; + const sal_Char* pLevelAttrName = + aTypeLevelAttrMap[eType-TEXT_SECTION_TYPE_TOC]; + const sal_Char* pLevelName = + aTypeLevelNameMap[eType-TEXT_SECTION_TYPE_TOC][nOutlineLevel]; + + // output level name + DBG_ASSERT(NULL != pLevelName, "can't find level name"); + if ((NULL != pLevelName) && (NULL != pLevelAttrName)) + { + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + pLevelAttrName, + pLevelName); + } + + // paragraph level style name + const sal_Char* pPropName = + aTypeLevelStylePropNameMap[eType-TEXT_SECTION_TYPE_TOC][nOutlineLevel]; + DBG_ASSERT(NULL != pPropName, "can't find property name"); + if (NULL != pPropName) + { + Any aAny = rPropertySet->getPropertyValue( + OUString::createFromAscii(pPropName)); + OUString sParaStyleName; + aAny >>= sParaStyleName; + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_style_name, + sParaStyleName); + } + + // template element + const sal_Char* pElementName = + aTypeElementNameMap[eType - TEXT_SECTION_TYPE_TOC]; + SvXMLElementExport aLevelTemplate(GetExport(), + XML_NAMESPACE_TEXT, + pElementName, + sal_True, sal_True); + + // export sequence + sal_Int32 nTemplateCount = rValues.getLength(); + for(sal_Int32 nTemplateNo = 0; + nTemplateNo < nTemplateCount; + nTemplateNo++) + { + ExportIndexTemplateElement( + rValues[nTemplateNo]); + } + } +} + + +enum TemplateTypeEnum +{ + TOK_TTYPE_ENTRY_NUMBER, + TOK_TTYPE_ENTRY_TEXT, + TOK_TTYPE_TAB_STOP, + TOK_TTYPE_TEXT, + TOK_TTYPE_PAGE_NUMBER, + TOK_TTYPE_CHAPTER_INFO, + TOK_TTYPE_HYPERLINK_START, + TOK_TTYPE_HYPERLINK_END, + TOK_TTYPE_BIBLIOGRAPHY, + TOK_TTYPE_INVALID +}; + +enum TemplateParamEnum +{ + TOK_TPARAM_TOKEN_TYPE, + TOK_TPARAM_CHAR_STYLE, + TOK_TPARAM_TAB_RIGHT_ALIGNED, + TOK_TPARAM_TAB_POSITION, + TOK_TPARAM_TAB_FILL_CHAR, + TOK_TPARAM_TEXT, + TOK_TPARAM_CHAPTER_FORMAT, + TOK_TPARAM_BIBLIOGRAPHY_DATA +}; + +SvXMLEnumMapEntry __READONLY_DATA aTemplateTypeMap[] = +{ + { "TokenEntryNumber", TOK_TTYPE_ENTRY_NUMBER }, + { "TokenEntryText", TOK_TTYPE_ENTRY_TEXT }, + { "TokenTabStop", TOK_TTYPE_TAB_STOP }, + { "TokenText", TOK_TTYPE_TEXT }, + { "TokenPageNumber", TOK_TTYPE_PAGE_NUMBER }, + { "TokenChapterInfo", TOK_TTYPE_CHAPTER_INFO }, + { "TokenHyperlinkStart", TOK_TTYPE_HYPERLINK_START }, + { "TokenHyperlinkEnd", TOK_TTYPE_HYPERLINK_END }, + { "TokenBibliographyDataField", TOK_TTYPE_BIBLIOGRAPHY }, + { NULL, NULL } +}; + +SvXMLEnumMapEntry __READONLY_DATA aTemplateParamMap[] = +{ + { "TokenType", TOK_TPARAM_TOKEN_TYPE }, + { "CharacterStyleName", TOK_TPARAM_CHAR_STYLE }, + { "TabStopRightAligned", TOK_TPARAM_TAB_RIGHT_ALIGNED }, + { "TabStopPosition", TOK_TPARAM_TAB_POSITION }, + { "TabStopFillCharacter", TOK_TPARAM_TAB_FILL_CHAR }, + { "Text", TOK_TPARAM_TEXT }, + { "ChapterFormat", TOK_TPARAM_CHAPTER_FORMAT }, + { "BibliographyDataField", TOK_TPARAM_BIBLIOGRAPHY_DATA }, + { NULL, NULL } +}; + +SvXMLEnumMapEntry __READONLY_DATA aBibliographyDataFieldMap[] = +{ + { sXML_address, BibliographyDataField::ADDRESS }, + { sXML_annote, BibliographyDataField::ANNOTE }, + { sXML_author, BibliographyDataField::AUTHOR }, + { sXML_bibiliographic_type, BibliographyDataField::BIBILIOGRAPHIC_TYPE }, + { sXML_booktitle, BibliographyDataField::BOOKTITLE }, + { sXML_chapter, BibliographyDataField::CHAPTER }, + { sXML_custom1, BibliographyDataField::CUSTOM1 }, + { sXML_custom2, BibliographyDataField::CUSTOM2 }, + { sXML_custom3, BibliographyDataField::CUSTOM3 }, + { sXML_custom4, BibliographyDataField::CUSTOM4 }, + { sXML_custom5, BibliographyDataField::CUSTOM5 }, + { sXML_edition, BibliographyDataField::EDITION }, + { sXML_editor, BibliographyDataField::EDITOR }, + { sXML_howpublished, BibliographyDataField::HOWPUBLISHED }, + { sXML_identifier, BibliographyDataField::IDENTIFIER }, + { sXML_institution, BibliographyDataField::INSTITUTION }, + { sXML_isbn, BibliographyDataField::ISBN }, + { sXML_journal, BibliographyDataField::JOURNAL }, + { sXML_month, BibliographyDataField::MONTH }, + { sXML_note, BibliographyDataField::NOTE }, + { sXML_number, BibliographyDataField::NUMBER }, + { sXML_organizations, BibliographyDataField::ORGANIZATIONS }, + { sXML_pages, BibliographyDataField::PAGES }, + { sXML_publisher, BibliographyDataField::PUBLISHER }, + { sXML_report_type, BibliographyDataField::REPORT_TYPE }, + { sXML_school, BibliographyDataField::SCHOOL }, + { sXML_series, BibliographyDataField::SERIES }, + { sXML_title, BibliographyDataField::TITLE }, + { sXML_url, BibliographyDataField::URL }, + { sXML_volume, BibliographyDataField::VOLUME }, + { sXML_year, BibliographyDataField::YEAR }, + { NULL, NULL } +}; + +void XMLSectionExport::ExportIndexTemplateElement( + Sequence<PropertyValue> & rValues) +{ + // variables for template values + + // char style + OUString sCharStyle; + sal_Bool bCharStyleOK = sal_False; + + // text + OUString sText; + sal_Bool bTextOK = sal_False; + + // tab position + sal_Bool bRightAligned = sal_False; + sal_Bool bRightAlignedOK = sal_False; + + // tab position + sal_Int32 nTabPosition = 0; + sal_Bool bTabPositionOK = sal_False; + + // fill character + OUString sFillChar; + sal_Bool bFillCharOK = sal_False; + + // chapter format + sal_Int16 nChapterFormat; + sal_Bool bChapterFormatOK = sal_False; + + // Bibliography Data + sal_Int16 nBibliographyData; + sal_Bool bBibliographyDataOK = sal_False; + + + // token type + enum TemplateTypeEnum nTokenType = TOK_TTYPE_INVALID; + + sal_Int32 nCount = rValues.getLength(); + for(sal_Int32 i = 0; i<nCount; i++) + { + sal_uInt16 nToken; + if ( SvXMLUnitConverter::convertEnum( nToken, rValues[i].Name, + aTemplateParamMap ) ) + { + // Only use direct and default values. + // Wrong. no property states, so ignore. + // if ( (beans::PropertyState_DIRECT_VALUE == rValues[i].State) || + // (beans::PropertyState_DEFAULT_VALUE == rValues[i].State) ) + + switch (nToken) + { + case TOK_TPARAM_TOKEN_TYPE: + { + sal_uInt16 nTmp; + OUString sVal; + rValues[i].Value >>= sVal; + if (SvXMLUnitConverter::convertEnum( nTmp, sVal, + aTemplateTypeMap)) + { + nTokenType = (enum TemplateTypeEnum)nTmp; + } + break; + } + + case TOK_TPARAM_CHAR_STYLE: + // only valid, if not empty + rValues[i].Value >>= sCharStyle; + bCharStyleOK = sCharStyle.getLength() > 0; + break; + + case TOK_TPARAM_TEXT: + rValues[i].Value >>= sText; + bTextOK = sal_True; + break; + + case TOK_TPARAM_TAB_RIGHT_ALIGNED: + bRightAligned = + *(sal_Bool *)rValues[i].Value.getValue(); + bRightAlignedOK = sal_True; + break; + + case TOK_TPARAM_TAB_POSITION: + rValues[i].Value >>= nTabPosition; + bTabPositionOK = sal_True; + break; + + case TOK_TPARAM_TAB_FILL_CHAR: + rValues[i].Value >>= sFillChar; + bFillCharOK = sal_True; + break; + + case TOK_TPARAM_CHAPTER_FORMAT: + rValues[i].Value >>= nChapterFormat; + bChapterFormatOK = sal_True; + break; + case TOK_TPARAM_BIBLIOGRAPHY_DATA: + rValues[i].Value >>= nBibliographyData; + bBibliographyDataOK = sal_True; + break; + } + } + } + + // convert type to token (and check validity) ... + sal_Char* pElement = NULL; + switch(nTokenType) + { + case TOK_TTYPE_ENTRY_TEXT: + pElement = sXML_index_entry_text; + break; + case TOK_TTYPE_TAB_STOP: + // test validity + pElement = ( bRightAligned || bTabPositionOK || bFillCharOK ) + ? sXML_index_entry_tab_stop : NULL; + break; + case TOK_TTYPE_TEXT: + // test validity + pElement = bTextOK ? sXML_index_entry_span : NULL; + break; + case TOK_TTYPE_PAGE_NUMBER: + pElement = sXML_index_entry_page_number; + break; + case TOK_TTYPE_CHAPTER_INFO: // keyword index + pElement = sXML_index_entry_chapter; + break; + case TOK_TTYPE_ENTRY_NUMBER: // table of content + pElement = sXML_index_entry_chapter_number; + break; + case TOK_TTYPE_HYPERLINK_START: + pElement = sXML_index_entry_link_start; + break; + case TOK_TTYPE_HYPERLINK_END: + pElement = sXML_index_entry_link_end; + break; + case TOK_TTYPE_BIBLIOGRAPHY: + pElement = bBibliographyDataOK + ? sXML_index_entry_bibliography : NULL; + break; + default: + ; // unknown/unimplemented template + break; + } + + // ... and write Element + if (pElement != NULL) + { + // character style (for most templates) + if (bCharStyleOK) + { + switch (nTokenType) + { + case TOK_TTYPE_ENTRY_TEXT: + case TOK_TTYPE_TEXT: + case TOK_TTYPE_PAGE_NUMBER: + case TOK_TTYPE_ENTRY_NUMBER: + case TOK_TTYPE_HYPERLINK_START: + case TOK_TTYPE_HYPERLINK_END: + case TOK_TTYPE_BIBLIOGRAPHY: + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_style_name, sCharStyle); + break; + default: + ; // nothing: no character style + break; + } + } + + // tab properties + if (TOK_TTYPE_TAB_STOP == nTokenType) + { + // tab type + GetExport().AddAttributeASCII(XML_NAMESPACE_STYLE, + sXML_type, + bRightAligned ? sXML_right : sXML_left); + + if (bTabPositionOK && (! bRightAligned)) + { + // position for left tabs (convert to measure) + OUStringBuffer sBuf; + GetExport().GetMM100UnitConverter().convertMeasure(sBuf, + nTabPosition); + GetExport().AddAttribute(XML_NAMESPACE_STYLE, + sXML_position, + sBuf.makeStringAndClear()); + } + + // fill char ("leader char") + if (bFillCharOK && (sFillChar.getLength() > 0)) + { + GetExport().AddAttribute(XML_NAMESPACE_STYLE, + sXML_leader_char, sFillChar); + } + } + + // bibliography data + if (TOK_TTYPE_BIBLIOGRAPHY == nTokenType) + { + DBG_ASSERT(bBibliographyDataOK, "need bibl data"); + OUStringBuffer sBuf; + if (SvXMLUnitConverter::convertEnum( sBuf, nBibliographyData, + aBibliographyDataFieldMap ) ) + { + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_bibliography_data_field, + sBuf.makeStringAndClear()); + } + } + + // chapter info + if (TOK_TTYPE_CHAPTER_INFO == nTokenType) + { + DBG_ASSERT(bChapterFormatOK, "need chapter info"); + GetExport().AddAttributeASCII( + XML_NAMESPACE_TEXT, sXML_display, + XMLTextFieldExport::MapChapterDisplayFormat(nChapterFormat)); + } + + // export template + SvXMLElementExport aTemplateElement(GetExport(), XML_NAMESPACE_TEXT, + pElement, sal_True, sal_False); + + // entry text or span element: write text + if (TOK_TTYPE_TEXT == nTokenType) + { + GetExport().GetDocHandler()->characters(sText); + } + } +} + +void XMLSectionExport::ExportLevelParagraphStyles( + Reference<XIndexReplace> & xLevelParagraphStyles) +{ + // iterate over levels + sal_Int32 nPLevelCount = xLevelParagraphStyles->getCount(); + for(sal_Int32 nLevel = 0; nLevel < nPLevelCount; nLevel++) + { + Any aAny = xLevelParagraphStyles->getByIndex(nLevel); + Sequence<OUString> aStyleNames; + aAny >>= aStyleNames; + + // export only if at least one style is contained + sal_Int32 nNamesCount = aStyleNames.getLength(); + if (nNamesCount > 0) + { + // level attribute; we count 1..10; API 0..9 + OUStringBuffer sBuf; + sal_Int32 nLevelPlusOne = nLevel + 1; + SvXMLUnitConverter::convertNumber(sBuf, nLevelPlusOne); + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_outline_level, + sBuf.makeStringAndClear()); + + // source styles element + SvXMLElementExport aParaStyles(GetExport(), + XML_NAMESPACE_TEXT, + sXML_index_source_styles, + sal_True, sal_True); + + // iterate over styles in this level + for(sal_Int32 nName = 0; nName < nNamesCount; nName++) + { + // stylename attribute + GetExport().AddAttribute(XML_NAMESPACE_TEXT, + sXML_style_name, + aStyleNames[nName]); + + // element + SvXMLElementExport aParaStyle(GetExport(), + XML_NAMESPACE_TEXT, + sXML_index_source_style, + sal_True, sal_False); + } + } + } +} + +void XMLSectionExport::ExportBoolean( + const Reference<XPropertySet> & rPropSet, + const OUString& sPropertyName, + const sal_Char* pAttributeName, + sal_Bool bDefault, + sal_Bool bInvert) +{ + DBG_ASSERT(NULL != pAttributeName, "Need attribute name"); + + Any aAny = rPropSet->getPropertyValue(sPropertyName); + sal_Bool bTmp = *(sal_Bool*)aAny.getValue(); + + // value = value ^ bInvert + // omit if value == default + // negate forces sal_Bool to 0/1, making them comparable + if ((!(bTmp ^ bInvert)) != (!bDefault)) + { + // export non-default value (since default is omitted) + GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, + pAttributeName, + bDefault ? sXML_false : sXML_true); + } +} diff --git a/xmloff/source/text/XMLSectionExport.hxx b/xmloff/source/text/XMLSectionExport.hxx new file mode 100644 index 000000000000..e40297bc2f88 --- /dev/null +++ b/xmloff/source/text/XMLSectionExport.hxx @@ -0,0 +1,342 @@ +/************************************************************************* + * + * $RCSfile: XMLSectionExport.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLSECTIONEXPORT_HXX_ +#define _XMLOFF_XMLSECTIONEXPORT_HXX_ + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_H_ +#include <com/sun/star/uno/Sequence.h> +#endif +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ +#include <com/sun/star/beans/PropertyValue.hpp> +#endif + +class SvXMLExport; +class XMLTextParagraphExport; +namespace com { namespace sun { namespace star { + namespace text + { + class XTextSection; + class XDocumentIndex; + } + 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: + // todo + + 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 sSection; + const ::rtl::OUString sTitle; + 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 sTableOfContent; + const ::rtl::OUString sIllustrationIndex; + const ::rtl::OUString sTableIndex; + const ::rtl::OUString sAlphabeticalIndex; + const ::rtl::OUString sObjectIndex; + const ::rtl::OUString sBibliography; + const ::rtl::OUString sUserIndex; + + const ::rtl::OUString sEmpty; + + SvXMLExport& rExport; + XMLTextParagraphExport& rParaExport; + +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); + + /** + * export an index start element. This method should eventually be replaced + * by calls to ExportSectionStart. Also handle section styles. + * + * @deprecated Once the API allows to recognize an index section + * as index, this method should be removed. + */ + void ExportIndexStart( + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XDocumentIndex > & rSection, + sal_Bool bAutoStyles); + + /** @deprecated see ExportIndexStart */ + void ExportIndexEnd( + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XDocumentIndex > & rSection, + sal_Bool bAutoStyles); + +protected: + + inline SvXMLExport& GetExport() { return rExport; } + inline XMLTextParagraphExport& GetParaExport() { return rParaExport; } + + // export methods for section and index start: + + /// 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: + + /// 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( + const ::rtl::OUString sElementName, + 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 + void 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( + ::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, + const sal_Char* pAttributeName, + sal_Bool bDefault, + sal_Bool bInvert = sal_False); +}; + +#endif diff --git a/xmloff/source/text/XMLSectionImportContext.cxx b/xmloff/source/text/XMLSectionImportContext.cxx index 533667ed4768..b6ac5c39efa6 100644 --- a/xmloff/source/text/XMLSectionImportContext.cxx +++ b/xmloff/source/text/XMLSectionImportContext.cxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLSectionImportContext.cxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -344,27 +344,25 @@ SvXMLImportContext* XMLSectionImportContext::CreateChildContext( SvXMLImportContext* pContext = NULL; // section-source (-dde) elements - if (XML_NAMESPACE_TEXT == nPrefix) + if ((XML_NAMESPACE_TEXT == nPrefix) && + rLocalName.equalsAsciiL(sXML_section_source, + sizeof(sXML_section_source)-1)) { - if (rLocalName.equalsAsciiL(sXML_section_source, - sizeof(sXML_section_source)-1)) - { - pContext = new XMLSectionSourceImportContext(GetImport(), - nPrefix, rLocalName, - xSectionPropertySet); - } - else if (rLocalName.equalsAsciiL(sXML_section_source_dde, - sizeof(sXML_section_source_dde)-1)) - { - pContext = new XMLSectionSourceDDEImportContext(GetImport(), - nPrefix, rLocalName, - xSectionPropertySet); - } + pContext = new XMLSectionSourceImportContext(GetImport(), + nPrefix, rLocalName, + xSectionPropertySet); } - - // otherwise: text context - if (NULL == pContext) + else if ((XML_NAMESPACE_OFFICE == nPrefix) && + rLocalName.equalsAsciiL(sXML_dde_source, + sizeof(sXML_dde_source)-1)) + { + pContext = new XMLSectionSourceDDEImportContext(GetImport(), + nPrefix, rLocalName, + xSectionPropertySet); + } + else { + // otherwise: text context pContext = GetImport().GetTextImport()->CreateTextChildContext( GetImport(), nPrefix, rLocalName, xAttrList); diff --git a/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx b/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx index 15f188a1e2c4..bfd1be11eb28 100644 --- a/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx +++ b/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx @@ -2,9 +2,9 @@ * * $RCSfile: XMLSectionSourceDDEImportContext.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-10-16 13:01:58 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -144,10 +144,10 @@ enum XMLSectionSourceDDEToken static __FAR_DATA SvXMLTokenMapEntry aSectionSourceDDETokenMap[] = { - { XML_NAMESPACE_TEXT, sXML_dde_application, + { XML_NAMESPACE_OFFICE, sXML_dde_application, XML_TOK_SECTION_DDE_APPLICATION }, - { XML_NAMESPACE_TEXT, sXML_dde_topic, XML_TOK_SECTION_DDE_TOPIC }, - { XML_NAMESPACE_TEXT, sXML_dde_item, XML_TOK_SECTION_DDE_ITEM }, + { XML_NAMESPACE_OFFICE, sXML_dde_topic, XML_TOK_SECTION_DDE_TOPIC }, + { XML_NAMESPACE_OFFICE, sXML_dde_item, XML_TOK_SECTION_DDE_ITEM }, XML_TOKEN_MAP_END }; diff --git a/xmloff/source/text/makefile.mk b/xmloff/source/text/makefile.mk index fc8b69a86be6..acf8525a57f8 100644 --- a/xmloff/source/text/makefile.mk +++ b/xmloff/source/text/makefile.mk @@ -2,9 +2,9 @@ # # $RCSfile: makefile.mk,v $ # -# $Revision: 1.10 $ +# $Revision: 1.11 $ # -# last change: $Author: mib $ $Date: 2000-11-07 13:33:08 $ +# last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ # # The Contents of this file are made available subject to the terms of # either of the following licenses @@ -96,15 +96,25 @@ CXXFILES = \ XMLFootnoteBodyImportContext.cxx \ XMLFootnoteConfigurationImportContext.cxx \ XMLFootnoteImportContext.cxx \ + XMLIndexAlphabeticalSourceContext.cxx \ + XMLIndexBibliographyEntryContext.cxx \ + XMLIndexBibliographySourceContext.cxx \ + XMLIndexChapterInfoEntryContext.cxx \ + XMLIndexIllustrationSourceContext.cxx \ + XMLIndexObjectSourceContext.cxx \ XMLIndexSimpleEntryContext.cxx \ XMLIndexSpanEntryContext.cxx \ XMLIndexTabStopEntryContext.cxx \ + XMLIndexSourceBaseContext.cxx \ + XMLIndexTableSourceContext.cxx \ XMLIndexTOCContext.cxx \ XMLIndexTOCSourceContext.cxx \ XMLIndexTOCStylesContext.cxx \ XMLIndexTemplateContext.cxx \ XMLIndexTitleTemplateContext.cxx \ + XMLIndexUserSourceContext.cxx \ XMLPropertyBackpatcher.cxx \ + XMLSectionExport.cxx \ XMLSectionImportContext.cxx \ XMLSectionSourceDDEImportContext.cxx \ XMLSectionSourceImportContext.cxx \ @@ -145,15 +155,25 @@ SLOFILES = \ $(SLO)$/XMLFootnoteBodyImportContext.obj \ $(SLO)$/XMLFootnoteConfigurationImportContext.obj \ $(SLO)$/XMLFootnoteImportContext.obj \ + $(SLO)$/XMLIndexAlphabeticalSourceContext.obj \ + $(SLO)$/XMLIndexBibliographyEntryContext.obj \ + $(SLO)$/XMLIndexBibliographySourceContext.obj \ + $(SLO)$/XMLIndexChapterInfoEntryContext.obj \ + $(SLO)$/XMLIndexIllustrationSourceContext.obj \ + $(SLO)$/XMLIndexObjectSourceContext.obj \ $(SLO)$/XMLIndexSimpleEntryContext.obj \ $(SLO)$/XMLIndexSpanEntryContext.obj \ + $(SLO)$/XMLIndexSourceBaseContext.obj \ $(SLO)$/XMLIndexTOCContext.obj \ $(SLO)$/XMLIndexTOCSourceContext.obj \ $(SLO)$/XMLIndexTOCStylesContext.obj \ + $(SLO)$/XMLIndexTableSourceContext.obj \ $(SLO)$/XMLIndexTabStopEntryContext.obj \ $(SLO)$/XMLIndexTemplateContext.obj \ $(SLO)$/XMLIndexTitleTemplateContext.obj \ + $(SLO)$/XMLIndexUserSourceContext.obj \ $(SLO)$/XMLPropertyBackpatcher.obj \ + $(SLO)$/XMLSectionExport.obj \ $(SLO)$/XMLSectionImportContext.obj \ $(SLO)$/XMLSectionSourceDDEImportContext.obj \ $(SLO)$/XMLSectionSourceImportContext.obj \ diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx index 1e03ab549ab6..429b8e26fce7 100644 --- a/xmloff/source/text/txtimp.cxx +++ b/xmloff/source/text/txtimp.cxx @@ -2,9 +2,9 @@ * * $RCSfile: txtimp.cxx,v $ * - * $Revision: 1.21 $ + * $Revision: 1.22 $ * - * last change: $Author: mib $ $Date: 2000-11-13 08:42:14 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -204,6 +204,12 @@ static __FAR_DATA SvXMLTokenMapEntry aTextElemTokenMap[] = { XML_NAMESPACE_TEXT, sXML_dde_connection_decls, XML_TOK_TEXT_DDE_DECLS }, { XML_NAMESPACE_TEXT, sXML_section, XML_TOK_TEXT_SECTION }, { XML_NAMESPACE_TEXT, sXML_table_of_content, XML_TOK_TEXT_TOC }, + { XML_NAMESPACE_TEXT, sXML_object_index, XML_TOK_TEXT_OBJECT_INDEX }, + { XML_NAMESPACE_TEXT, sXML_table_index, XML_TOK_TEXT_TABLE_INDEX }, + { XML_NAMESPACE_TEXT, sXML_illustration_index, XML_TOK_TEXT_ILLUSTRATION_INDEX }, + { XML_NAMESPACE_TEXT, sXML_user_index, XML_TOK_TEXT_USER_INDEX }, + { XML_NAMESPACE_TEXT, sXML_alphabetical_index, XML_TOK_TEXT_ALPHABETICAL_INDEX }, + { XML_NAMESPACE_TEXT, sXML_bibliography, XML_TOK_TEXT_BIBLIOGRAPHY_INDEX }, XML_TOKEN_MAP_END }; @@ -996,6 +1002,12 @@ SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext( break; case XML_TOK_TEXT_TOC: + case XML_TOK_TEXT_OBJECT_INDEX: + case XML_TOK_TEXT_TABLE_INDEX: + case XML_TOK_TEXT_ILLUSTRATION_INDEX: + case XML_TOK_TEXT_USER_INDEX: + case XML_TOK_TEXT_ALPHABETICAL_INDEX: + case XML_TOK_TEXT_BIBLIOGRAPHY_INDEX: pContext = new XMLIndexTOCContext( rImport, nPrefix, rLocalName ); break; diff --git a/xmloff/source/text/txtparae.cxx b/xmloff/source/text/txtparae.cxx index f1ea0e8263d0..dec67315342a 100644 --- a/xmloff/source/text/txtparae.cxx +++ b/xmloff/source/text/txtparae.cxx @@ -2,9 +2,9 @@ * * $RCSfile: txtparae.cxx,v $ * - * $Revision: 1.18 $ + * $Revision: 1.19 $ * - * last change: $Author: mib $ $Date: 2000-11-07 13:33:09 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -209,6 +209,10 @@ #ifndef _XMLOFF_TXTPARAE_HXX #include "txtparae.hxx" #endif +#ifndef _XMLOFF_XMLSECTIONEXPORT_HXX_ +#include "XMLSectionExport.hxx" +#endif + using namespace ::rtl; using namespace ::std; @@ -549,6 +553,7 @@ XMLTextParagraphExport::XMLTextParagraphExport( pPageShapeIdxs( 0 ), pFrameTextFrameIdxs( 0 ), pFrameGraphicIdxs( 0 ), + pSectionExport( NULL ), pFrameShapeIdxs( 0 ), sParagraphService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Paragraph")), sTableService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextTable")), @@ -612,30 +617,9 @@ XMLTextParagraphExport::XMLTextParagraphExport( sUnvisitedCharStyleName(RTL_CONSTASCII_USTRINGPARAM("UnvisitedCharStyleName")), sVisitedCharStyleName(RTL_CONSTASCII_USTRINGPARAM("VisitedCharStyleName")), sTextSection(RTL_CONSTASCII_USTRINGPARAM("TextSection")), - sSection(RTL_CONSTASCII_USTRINGPARAM(sXML_section)), - sIsProtected(RTL_CONSTASCII_USTRINGPARAM("IsProtected")), - sIsVisible(RTL_CONSTASCII_USTRINGPARAM("IsVisible")), - sCondition(RTL_CONSTASCII_USTRINGPARAM("Condition")), - sFileLink(RTL_CONSTASCII_USTRINGPARAM("FileLink")), - sLinkRegion(RTL_CONSTASCII_USTRINGPARAM("LinkRegion")), - sDdeCommandFile(RTL_CONSTASCII_USTRINGPARAM("DDECommandFile")), - sDdeCommandType(RTL_CONSTASCII_USTRINGPARAM("DDECommandType")), - sDdeCommandElement(RTL_CONSTASCII_USTRINGPARAM("DDECommandElement")), sDocumentIndex(RTL_CONSTASCII_USTRINGPARAM("DocumentIndex")), - sCreateFromOutline(RTL_CONSTASCII_USTRINGPARAM("CreateFromOutline")), - sLevel(RTL_CONSTASCII_USTRINGPARAM("Level")), - sCreateFromMarks(RTL_CONSTASCII_USTRINGPARAM("CreateFromMarks")), - sCreateFromChapter(RTL_CONSTASCII_USTRINGPARAM("CreateFromChapter")), - sLevelFormat(RTL_CONSTASCII_USTRINGPARAM("LevelFormat")), - sTitle(RTL_CONSTASCII_USTRINGPARAM("Title")), - sParaStyleHeading(RTL_CONSTASCII_USTRINGPARAM("ParaStyleHeading")), - sParaStyleLevel(RTL_CONSTASCII_USTRINGPARAM("ParaStyleLevel")), - sLevelParagraphStyles(RTL_CONSTASCII_USTRINGPARAM("LevelParagraphStyles")), - sEmpty() + sDocumentIndexMark(RTL_CONSTASCII_USTRINGPARAM("DocumentIndexMark")) { - sText_Section = GetExport().GetNamespaceMap().GetQNameByKey( - XML_NAMESPACE_TEXT, sSection); - UniReference < XMLPropertySetMapper > xPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_PARA ); xParaPropMapper = new XMLTextExportPropertySetMapper( xPropMapper, @@ -675,10 +659,12 @@ XMLTextParagraphExport::XMLTextParagraphExport( GetExport() ); pFieldExport = new XMLTextFieldExport( rExp ); + pSectionExport = new XMLSectionExport( rExp, *this ); } XMLTextParagraphExport::~XMLTextParagraphExport() { + delete pSectionExport; delete pFieldExport; delete pListElements; delete pExportedLists; @@ -1095,6 +1081,12 @@ void XMLTextParagraphExport::exportTextRangeEnumeration( bAutoStyles); bPrevCharIsSpace = sal_False; } + else if (sType.equals(sDocumentIndexMark)) + { + exportIndexMark(xPropSet, + bAutoStyles); + bPrevCharIsSpace = sal_False; + } else DBG_ERROR("unknown text portion type"); } @@ -1213,6 +1205,13 @@ void XMLTextParagraphExport::exportTextMark( // else: no styles. (see above) } +void XMLTextParagraphExport::exportIndexMark( + const Reference < XPropertySet > & rPropSet, + sal_Bool bAutoStyles) +{ + // TODO: export index mark +} + sal_Int32 XMLTextParagraphExport::addTextFrameAttributes( const Reference < XPropertySet >& rPropSet, sal_Bool bShape ) diff --git a/xmloff/source/text/txtprmap.cxx b/xmloff/source/text/txtprmap.cxx index 20aa9fc0e661..9676824c3add 100644 --- a/xmloff/source/text/txtprmap.cxx +++ b/xmloff/source/text/txtprmap.cxx @@ -2,9 +2,9 @@ * * $RCSfile: txtprmap.cxx,v $ * - * $Revision: 1.14 $ + * $Revision: 1.15 $ * - * last change: $Author: mib $ $Date: 2000-11-13 08:42:14 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -553,7 +553,16 @@ XMLPropertyMapEntry aXMLShapePropMap[] = XMLPropertyMapEntry aXMLSectionPropMap[] = { + // RES_COL M_E( "TextColumns", STYLE, columns, MID_FLAG_ELEMENT_ITEM|XML_TYPE_TEXT_COLUMNS, CTF_TEXTCOLUMNS ), + + // RES_BACKGROUND + M_E( "BackColor", FO, background_color, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ), + M_E( "BackTransparent", FO, background_color, XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ), + M_E( "BackGraphicLocation", STYLE, position, MID_FLAG_SPECIAL_ITEM|XML_TYPE_BUILDIN_CMP_ONLY, CTF_BACKGROUND_POS ), + M_E( "BackGraphicFilter",STYLE, filter_name, MID_FLAG_SPECIAL_ITEM|XML_TYPE_STRING, CTF_BACKGROUND_FILTER ), + M_E( "BackGraphicURL", STYLE, background_image, MID_FLAG_ELEMENT_ITEM|XML_TYPE_STRING, CTF_BACKGROUND_URL ), + M_E( "IsProtected", STYLE, protect, XML_TYPE_BOOL, 0 ), { 0, 0, 0, 0 } }; diff --git a/xmloff/source/text/txtsecte.cxx b/xmloff/source/text/txtsecte.cxx index 2f8e38c1dca0..0cda39075a4f 100644 --- a/xmloff/source/text/txtsecte.cxx +++ b/xmloff/source/text/txtsecte.cxx @@ -2,9 +2,9 @@ * * $RCSfile: txtsecte.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $ + * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -156,6 +156,10 @@ #include "XMLTextNumRuleInfo.hxx" #endif +#ifndef _XMLOFF_XMLSECTIONEXPORT_HXX_ +#include "XMLSectionExport.hxx" +#endif + using namespace ::com::sun::star; using namespace ::com::sun::star::text; using namespace ::com::sun::star::uno; @@ -200,7 +204,7 @@ void XMLTextParagraphExport::exportListAndSectionChange( if (xDocumentIndex.is() && !rPrevSection.is()) { - exportDocumentIndex(xDocumentIndex, bAutoStyles); + pSectionExport->ExportIndexStart(xDocumentIndex, bAutoStyles); } } } @@ -212,8 +216,7 @@ void XMLTextParagraphExport::exportListAndSectionChange( { if ( xNextSection.is() ) { - Reference<XPropertySet> xPropSet( xNextSection, UNO_QUERY); - Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropSet ); + pSectionExport->ExportSectionStart( xNextSection, bAutoStyles ); } } else @@ -260,18 +263,13 @@ void XMLTextParagraphExport::exportListAndSectionChange( // close all elements of aOld, open all of aNew while (aOld != aOldStack.rend()) { - Reference<XNamed> xName(*aOld, UNO_QUERY); - GetExport().GetDocHandler()->ignorableWhitespace( - GetExport().sWS ); - GetExport().GetDocHandler()->endElement(sText_Section); - GetExport().GetDocHandler()->ignorableWhitespace( - GetExport().sWS ); + pSectionExport->ExportSectionEnd(*aOld, bAutoStyles); aOld++; } while (aNew != aNewStack.rend()) { - exportSectionStart(*aNew); + pSectionExport->ExportSectionStart(*aNew, bAutoStyles); aNew++; } @@ -288,585 +286,3 @@ void XMLTextParagraphExport::exportListAndSectionChange( // save old section (old numRule gets saved in calling method rPrevSection = xNextSection; } - -void XMLTextParagraphExport::exportSectionStart( - const ::com::sun::star::uno::Reference < - ::com::sun::star::text::XTextSection > & rSection) -{ - // any old attributes? - GetExport().CheckAttrList(); - - Reference<XNamed> xName(rSection, UNO_QUERY); - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_name, - xName->getName()); - - // get XPropertySet for other values - Reference<XPropertySet> xPropSet(rSection, UNO_QUERY); - Any aAny; - - // style name - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_style_name, - Find( XML_STYLE_FAMILY_TEXT_SECTION, - xPropSet, sEmpty )); - - // condition and display - aAny = xPropSet->getPropertyValue(sCondition); - OUString sCond; - aAny >>= sCond; - sal_Char* pDisplay; - if (sCond.getLength() > 0) - { - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_condition, - sCond); - pDisplay = sXML_condition; - } - else - { - pDisplay = sXML_none; - } - aAny = xPropSet->getPropertyValue(sIsVisible); - if (! *(sal_Bool*)aAny.getValue()) - { - GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, sXML_display, - pDisplay); - } - - // export element - GetExport().GetDocHandler()->ignorableWhitespace( GetExport().sWS ); - GetExport().GetDocHandler()->startElement( sText_Section, - GetExport().GetXAttrList() ); - GetExport().ClearAttrList(); - - // data source - // unfortunately, we have to test all relevant strings for non-zero length - aAny = xPropSet->getPropertyValue(sFileLink); - SectionFileLink aFileLink; - aAny >>= aFileLink; - - aAny = xPropSet->getPropertyValue(sLinkRegion); - OUString sRegionName; - aAny >>= sRegionName; - - if ( (aFileLink.FileURL.getLength() > 0) || - (aFileLink.FilterName.getLength() > 0) || - (sRegionName.getLength() > 0) ) - { - if (aFileLink.FileURL.getLength() > 0) - { - GetExport().AddAttribute(XML_NAMESPACE_XLINK, sXML_href, - aFileLink.FileURL); - } - - if (aFileLink.FilterName.getLength() > 0) - { - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_filter_name, - aFileLink.FilterName); - } - - if (sRegionName.getLength() > 0) - { - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_section_name, - sRegionName); - } - - SvXMLElementExport aElem(GetExport(), - XML_NAMESPACE_TEXT, sXML_section_source, - sal_True, sal_True); - } - else - { - // data source DDE - // unfortunately, we have to test all relevant strings for - // non-zero length - aAny = xPropSet->getPropertyValue(sDdeCommandFile); - OUString sApplication; - aAny >>= sApplication; - aAny = xPropSet->getPropertyValue(sDdeCommandType); - OUString sTopic; - aAny >>= sTopic; - aAny = xPropSet->getPropertyValue(sDdeCommandElement); - OUString sItem; - aAny >>= sItem; - - if ( (sApplication.getLength() > 0) || - (sTopic.getLength() > 0) || - (sItem.getLength() > 0 ) ) - { - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_dde_application, - sApplication); - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_dde_topic, - sTopic); - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_dde_item, - sItem); - - SvXMLElementExport aElem(GetExport(), - XML_NAMESPACE_TEXT, - sXML_section_source_dde, - sal_True, sal_True); - } - // else: no data source - } -} - -void XMLTextParagraphExport::exportDocumentIndex( - Reference<XDocumentIndex> & rIndex, - sal_Bool bAutoStyles) -{ - OUString sServiceName = rIndex->getServiceName(); - - const sal_Char sAPI_ContentIndex[] = "com.sun.star.text.ContentIndex"; - - if (sServiceName.equalsAsciiL(sAPI_ContentIndex, - sizeof(sAPI_ContentIndex)-1)) - { - Reference<XPropertySet> xPropertySet(rIndex, UNO_QUERY); - - if (bAutoStyles) - { - // treat index as section style - Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropertySet ); - } - else - { - Any aAny; - - // style name - GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_style_name, - Find( XML_STYLE_FAMILY_TEXT_SECTION, - xPropertySet, sEmpty )); - - // table of content Element - SvXMLElementExport aElem(GetExport(), - XML_NAMESPACE_TEXT, - sXML_table_of_content, - sal_True, sal_True); - - { - // scope for table-of-content-source element - - // outline-level (none|1..10) - aAny = xPropertySet->getPropertyValue(sCreateFromOutline); - if (*(sal_Bool*)aAny.getValue()) - { - // outline-level: 1..10 - aAny = xPropertySet->getPropertyValue(sLevel); - sal_Int16 nLevel; - aAny >>= nLevel; - - OUStringBuffer sBuffer; - SvXMLUnitConverter::convertNumber(sBuffer, - (sal_Int32)nLevel); - - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_outline_level, - sBuffer.makeStringAndClear()); - } - else - { - // outline-level: none - GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, - sXML_outline_level, - sXML_none); - } - - // use index marks - aAny = xPropertySet->getPropertyValue(sCreateFromMarks); - if (! (*(sal_Bool*)aAny.getValue())) - { - GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, - sXML_use_index_marks, - sXML_true); - } - - // document or chapter index? - aAny = xPropertySet->getPropertyValue(sCreateFromChapter); - if (*(sal_Bool*)aAny.getValue()) - { - GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, - sXML_index_scope, - sXML_chapter); - } - - // the TOC source element - SvXMLElementExport aElem(GetExport(), - XML_NAMESPACE_TEXT, - sXML_table_of_content_source, - sal_True, sal_True); - - // styles from which to build the index (LevelParagraphStyles) - aAny = xPropertySet->getPropertyValue(sLevelParagraphStyles); - Reference<XIndexReplace> xLevelParagraphStyles; - aAny >>= xLevelParagraphStyles; - - // iterate over levels - sal_Int32 nPLevelCount = xLevelParagraphStyles->getCount(); - for(sal_Int32 nLevel = 0; nLevel < nPLevelCount; nLevel++) - { - aAny = xLevelParagraphStyles->getByIndex(nLevel); - Sequence<OUString> aStyleNames; - aAny >>= aStyleNames; - - // export only if at least one style is contained - sal_Int32 nNamesCount = aStyleNames.getLength(); - if (nNamesCount > 0) - { - - // level attribute; we count 1..10; API 0..9 - OUStringBuffer sBuf; - sal_Int32 nLevelPlusOne = nLevel + 1; - SvXMLUnitConverter::convertNumber(sBuf, nLevelPlusOne); - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_outline_level, - sBuf.makeStringAndClear()); - - // source styles element - SvXMLElementExport aParaStyles(GetExport(), - XML_NAMESPACE_TEXT, - sXML_index_source_styles, - sal_True, sal_True); - - // iterate over styles in this level - for(sal_Int32 nName = 0; nName < nNamesCount; nName++) - { - // stylename attribute - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_style_name, - aStyleNames[nName]); - - // element - SvXMLElementExport aParaStyle(GetExport(), - XML_NAMESPACE_TEXT, - sXML_index_source_style, - sal_True, sal_False); - } - } - } - - // scope for title template - { - // header style name - aAny = xPropertySet->getPropertyValue(sParaStyleHeading); - OUString sStyleName; - aAny >>= sStyleName; - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_style_name, - sStyleName); - - // title template - SvXMLElementExport aHeaderTemplate(GetExport(), - XML_NAMESPACE_TEXT, - sXML_index_title_template, - sal_True, sal_False); - - // title as element content - aAny = xPropertySet->getPropertyValue(sTitle); - OUString sTitleString; - aAny >>= sTitleString; - GetExport().GetDocHandler()->characters(sTitleString); - } - - // export level templates - aAny = xPropertySet->getPropertyValue(sLevelFormat); - Reference<XIndexReplace> xLevelTemplates; - aAny >>= xLevelTemplates; - - // iterate over level formats; - // skip element 0 (empty template for title) - sal_Int32 nLevelCount = xLevelTemplates->getCount(); - for(sal_Int32 i = 1; i<nLevelCount; i++) - { - // level number - OUStringBuffer sBuffer; - SvXMLUnitConverter::convertNumber(sBuffer, i); - OUString sNumber = sBuffer.makeStringAndClear(); - - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_outline_level, - sNumber); - - // style name - sBuffer.append(sParaStyleLevel); - sBuffer.append(i); - aAny = xPropertySet->getPropertyValue( - sBuffer.makeStringAndClear()); - OUString sLevelStyle; - aAny >>= sLevelStyle; - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_style_name, - sLevelStyle); - - // template element - SvXMLElementExport aLevelTemplate(GetExport(), - XML_NAMESPACE_TEXT, - sXML_index_entry_template, - sal_True, sal_True); - - // get sequence - Sequence<PropertyValues> aTemplateSequence; - aAny = xLevelTemplates->getByIndex(i); - aAny >>= aTemplateSequence; - - // export sequence - sal_Int32 nTemplateCount = aTemplateSequence.getLength(); - for(sal_Int32 nTemplateNo = 0; - nTemplateNo < nTemplateCount; - nTemplateNo++) - { - exportIndexTemplateElement( - aTemplateSequence[nTemplateNo]); - } - } - } - - { - SvXMLElementExport aIndexBody(GetExport(), - XML_NAMESPACE_TEXT, - sXML_table_of_content_body, - sal_True, sal_True); - } - } - } -} - - -enum TemplateTypeEnum -{ - TOK_TTYPE_ENTRY_NUMBER, - TOK_TTYPE_ENTRY_TEXT, - TOK_TTYPE_TAB_STOP, - TOK_TTYPE_TEXT, - TOK_TTYPE_PAGE_NUMBER, - TOK_TTYPE_CHAPTER_INFO, - TOK_TTYPE_HYPERLINK_START, - TOK_TTYPE_HYPERLINK_END, - TOK_TTYPE_BIBLIOGRAPHY, - TOK_TTYPE_INVALID -}; - -enum TemplateParamEnum -{ - TOK_TPARAM_TOKEN_TYPE, - TOK_TPARAM_CHAR_STYLE, - TOK_TPARAM_TAB_RIGHT_ALIGNED, - TOK_TPARAM_TAB_POSITION, - TOK_TPARAM_TAB_FILL_CHAR, - TOK_TPARAM_TEXT, - TOK_TPARAM_CHAPTER_FORMAT -}; - -SvXMLEnumMapEntry __READONLY_DATA aTemplateTypeMap[] = -{ - { "TokenEntryNumber", TOK_TTYPE_ENTRY_NUMBER }, - { "TokenEntryText", TOK_TTYPE_ENTRY_TEXT }, - { "TokenTabStop", TOK_TTYPE_TAB_STOP }, - { "TokenText", TOK_TTYPE_TEXT }, - { "TokenPageNumber", TOK_TTYPE_PAGE_NUMBER }, - { "TokenChapterInfo", TOK_TTYPE_CHAPTER_INFO }, - { "TokenHyperlinkStart", TOK_TTYPE_HYPERLINK_START }, - { "TokenHyperlinkEnd", TOK_TTYPE_HYPERLINK_END }, - { "TokenBibliogaphyDataField", TOK_TTYPE_BIBLIOGRAPHY }, - { NULL, NULL } -}; - -SvXMLEnumMapEntry __READONLY_DATA aTemplateParamMap[] = -{ - { "TokenType", TOK_TPARAM_TOKEN_TYPE }, - { "CharacterStyleName", TOK_TPARAM_CHAR_STYLE }, - { "TabStopRightAligned", TOK_TPARAM_TAB_RIGHT_ALIGNED }, - { "TabStopPosition", TOK_TPARAM_TAB_POSITION }, - { "TabStopFillCharacter", TOK_TPARAM_TAB_FILL_CHAR }, - { "Text", TOK_TPARAM_TEXT }, - { "ChapterFormat", TOK_TPARAM_CHAPTER_FORMAT }, - { NULL, NULL } -}; - -void XMLTextParagraphExport::exportIndexTemplateElement( - Sequence<PropertyValue> & rValues) -{ - - // variables for template values - - // char style - OUString sCharStyle; - sal_Bool bCharStyleOK = sal_False; - - // text - OUString sText; - sal_Bool bTextOK = sal_False; - - // tab position - sal_Bool bRightAligned = sal_False; - sal_Bool bRightAlignedOK = sal_False; - - // tab position - sal_Int32 nTabPosition = 0; - sal_Bool bTabPositionOK = sal_False; - - // fill character - OUString sFillChar; - sal_Bool bFillCharOK = sal_False; - - // chapter format - sal_Int16 nChapterFormat; - sal_Bool bChapterFormatOK = sal_False; - - - // token type - enum TemplateTypeEnum nTokenType = TOK_TTYPE_INVALID; - - sal_Int32 nCount = rValues.getLength(); - for(sal_Int32 i = 0; i<nCount; i++) - { - sal_uInt16 nToken; - if ( SvXMLUnitConverter::convertEnum( nToken, rValues[i].Name, - aTemplateParamMap ) ) - { - // Only use direct and default values. - // Wrong. no property states, so ignore. - // if ( (beans::PropertyState_DIRECT_VALUE == rValues[i].State) || - // (beans::PropertyState_DEFAULT_VALUE == rValues[i].State) ) - - switch (nToken) - { - case TOK_TPARAM_TOKEN_TYPE: - { - sal_uInt16 nTmp; - OUString sVal; - rValues[i].Value >>= sVal; - if (SvXMLUnitConverter::convertEnum( nTmp, sVal, - aTemplateTypeMap)) - { - nTokenType = (enum TemplateTypeEnum)nTmp; - } - break; - } - - case TOK_TPARAM_CHAR_STYLE: - // only valid, if not empty - rValues[i].Value >>= sCharStyle; - bCharStyleOK = sCharStyle.getLength() > 0; - break; - - case TOK_TPARAM_TEXT: - rValues[i].Value >>= sText; - bTextOK = sal_True; - break; - - case TOK_TPARAM_TAB_RIGHT_ALIGNED: - bRightAligned = - *(sal_Bool *)rValues[i].Value.getValue(); - bRightAlignedOK = sal_True; - break; - - case TOK_TPARAM_TAB_POSITION: - rValues[i].Value >>= nTabPosition; - bTabPositionOK = sal_True; - break; - - case TOK_TPARAM_TAB_FILL_CHAR: - rValues[i].Value >>= sFillChar; - bFillCharOK = sal_True; - break; - - case TOK_TPARAM_CHAPTER_FORMAT: - rValues[i].Value >>= nChapterFormat; - bChapterFormatOK = sal_True; - break; - } - } - } - - // convert type to token (and check validity) ... - sal_Char* pElement = NULL; - switch(nTokenType) - { - case TOK_TTYPE_ENTRY_TEXT: - pElement = sXML_index_entry_text; - break; - case TOK_TTYPE_TAB_STOP: - // test validity - pElement = ( bRightAligned || bTabPositionOK || bFillCharOK ) - ? sXML_index_entry_tab_stop : NULL; - break; - case TOK_TTYPE_TEXT: - // test validity - pElement = bTextOK ? sXML_index_entry_span : NULL; - break; - case TOK_TTYPE_PAGE_NUMBER: - pElement = sXML_index_entry_page_number; - break; - case TOK_TTYPE_CHAPTER_INFO: // keyword index - case TOK_TTYPE_ENTRY_NUMBER: // table of content - // sanitize format: both as chapter fields - pElement = sXML_index_entry_chapter; - break; - case TOK_TTYPE_HYPERLINK_START: - pElement = sXML_index_entry_link_start; - break; - case TOK_TTYPE_HYPERLINK_END: - pElement = sXML_index_entry_link_end; - break; - case TOK_TTYPE_BIBLIOGRAPHY: - pElement = sXML_index_entry_bibliography; - default: - ; // unknown/unimplemented template - break; - } - - // ... and write Element - if (pElement != NULL) - { - // character style (for most templates) - if (bCharStyleOK) - { - switch (nTokenType) - { - case TOK_TTYPE_ENTRY_TEXT: - case TOK_TTYPE_TEXT: - case TOK_TTYPE_PAGE_NUMBER: - case TOK_TTYPE_ENTRY_NUMBER: - case TOK_TTYPE_HYPERLINK_START: - case TOK_TTYPE_HYPERLINK_END: - GetExport().AddAttribute(XML_NAMESPACE_TEXT, - sXML_style_name, sCharStyle); - break; - default: - ; // nothing: no character style - break; - } - } - - if (TOK_TTYPE_TAB_STOP == nTokenType) - { - // tab type - GetExport().AddAttributeASCII(XML_NAMESPACE_STYLE, - sXML_type, - bRightAligned ? sXML_right : sXML_left); - - if (! bRightAligned) - { - // position for left tabs (convert to measure) - OUStringBuffer sBuf; - GetExport().GetMM100UnitConverter().convertMeasure(sBuf, - nTabPosition); - GetExport().AddAttribute(XML_NAMESPACE_STYLE, - sXML_position, - sBuf.makeStringAndClear()); - } - - // fill char ("leader char") - GetExport().AddAttribute(XML_NAMESPACE_STYLE, sXML_leader_char, - sFillChar); - } - - // export template - SvXMLElementExport aTemplateElement(GetExport(), XML_NAMESPACE_TEXT, - pElement, sal_True, sal_False); - - // entry text or span element: write text - if (TOK_TTYPE_TEXT == nTokenType) - { - GetExport().GetDocHandler()->characters(sText); - } - } -} |