1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #pragma once 21 22 #include <xmloff/xmlictxt.hxx> 23 #include <xmloff/xmltoken.hxx> 24 25 #include <vector> 26 #include <com/sun/star/uno/Reference.h> 27 #include <com/sun/star/beans/PropertyValues.hpp> 28 29 30 namespace com::sun::star { 31 namespace xml::sax { class XAttributeList; } 32 namespace beans { class XPropertySet; } 33 } 34 template<typename EnumT> struct SvXMLEnumMapEntry; 35 36 37 // constants for the XMLIndexTemplateContext constructor 38 39 // TOC and user defined index: 40 extern const SvXMLEnumMapEntry<sal_uInt16> aSvLevelNameTOCMap[]; 41 extern const char* aLevelStylePropNameTOCMap[]; 42 extern const bool aAllowedTokenTypesTOC[]; 43 extern const bool aAllowedTokenTypesUser[]; 44 45 // alphabetical index: 46 extern const SvXMLEnumMapEntry<sal_uInt16> aLevelNameAlphaMap[]; 47 extern const char* aLevelStylePropNameAlphaMap[]; 48 extern const bool aAllowedTokenTypesAlpha[]; 49 50 // bibliography: 51 extern const SvXMLEnumMapEntry<sal_uInt16> aLevelNameBibliographyMap[]; 52 extern const char* aLevelStylePropNameBibliographyMap[]; 53 extern const bool aAllowedTokenTypesBibliography[]; 54 55 // table, illustration and object tables: 56 extern const SvXMLEnumMapEntry<sal_uInt16>* aLevelNameTableMap; // NULL: no outline-level 57 extern const char* aLevelStylePropNameTableMap[]; 58 extern const bool aAllowedTokenTypesTable[]; 59 60 61 /** 62 * Import index entry templates 63 */ 64 class XMLIndexTemplateContext : public SvXMLImportContext 65 { 66 // pick up PropertyValues to be turned into a sequence. 67 ::std::vector< css::beans::PropertyValues > aValueVector; 68 69 OUString sStyleName; 70 71 const SvXMLEnumMapEntry<sal_uInt16>* pOutlineLevelNameMap; 72 enum ::xmloff::token::XMLTokenEnum eOutlineLevelAttrName; 73 const char** pOutlineLevelStylePropMap; 74 const bool* pAllowedTokenTypesMap; 75 76 sal_Int32 nOutlineLevel; 77 bool bStyleNameOK; 78 bool bOutlineLevelOK; 79 bool bTOC; 80 81 // PropertySet of current index 82 css::uno::Reference<css::beans::XPropertySet> & rPropertySet; 83 84 public: 85 template<typename EnumT> XMLIndexTemplateContext(SvXMLImport & rImport,css::uno::Reference<css::beans::XPropertySet> & rPropSet,const SvXMLEnumMapEntry<EnumT> * aLevelNameMap,enum::xmloff::token::XMLTokenEnum eLevelAttrName,const char ** aLevelStylePropNameMap,const bool * aAllowedTokenTypes,bool bTOC_=false)86 XMLIndexTemplateContext( 87 SvXMLImport& rImport, 88 css::uno::Reference<css::beans::XPropertySet> & rPropSet, 89 const SvXMLEnumMapEntry<EnumT>* aLevelNameMap, 90 enum ::xmloff::token::XMLTokenEnum eLevelAttrName, 91 const char** aLevelStylePropNameMap, 92 const bool* aAllowedTokenTypes, 93 bool bTOC_=false) 94 : XMLIndexTemplateContext(rImport,rPropSet, 95 reinterpret_cast<const SvXMLEnumMapEntry<sal_uInt16>*>(aLevelNameMap), 96 eLevelAttrName, aLevelStylePropNameMap, aAllowedTokenTypes, bTOC_) {} 97 XMLIndexTemplateContext( 98 SvXMLImport& rImport, 99 css::uno::Reference<css::beans::XPropertySet> & rPropSet, 100 const SvXMLEnumMapEntry<sal_uInt16>* aLevelNameMap, 101 enum ::xmloff::token::XMLTokenEnum eLevelAttrName, 102 const char** aLevelStylePropNameMap, 103 const bool* aAllowedTokenTypes, 104 bool bTOC); 105 106 virtual ~XMLIndexTemplateContext() override; 107 108 /** add template; to be called by child template entry contexts */ 109 void addTemplateEntry( 110 const css::beans::PropertyValues& aValues); 111 112 protected: 113 114 virtual void SAL_CALL startFastElement( 115 sal_Int32 nElement, 116 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; 117 118 virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; 119 120 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( 121 sal_Int32 nElement, 122 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; 123 }; 124 125 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 126