1*63bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*63bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*63bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*63bba73cSAndrew Rist  * distributed with this work for additional information
6*63bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*63bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*63bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
9*63bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*63bba73cSAndrew Rist  *
11*63bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*63bba73cSAndrew Rist  *
13*63bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*63bba73cSAndrew Rist  * software distributed under the License is distributed on an
15*63bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*63bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*63bba73cSAndrew Rist  * specific language governing permissions and limitations
18*63bba73cSAndrew Rist  * under the License.
19*63bba73cSAndrew Rist  *
20*63bba73cSAndrew Rist  *************************************************************/
21*63bba73cSAndrew Rist 
22*63bba73cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include "XMLIndexTemplateContext.hxx"
29cdf0e10cSrcweir #include "XMLIndexSimpleEntryContext.hxx"
30cdf0e10cSrcweir #include "XMLIndexSpanEntryContext.hxx"
31cdf0e10cSrcweir #include "XMLIndexTabStopEntryContext.hxx"
32cdf0e10cSrcweir #include "XMLIndexBibliographyEntryContext.hxx"
33cdf0e10cSrcweir #include "XMLIndexChapterInfoEntryContext.hxx"
34cdf0e10cSrcweir #include <xmloff/xmlictxt.hxx>
35cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
36cdf0e10cSrcweir #include <xmloff/txtimp.hxx>
37cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
38cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
39cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
40cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
41cdf0e10cSrcweir #include <tools/debug.hxx>
42cdf0e10cSrcweir #include <rtl/ustring.hxx>
43cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
44cdf0e10cSrcweir #include <com/sun/star/container/XIndexReplace.hpp>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir 
47cdf0e10cSrcweir using namespace ::std;
48cdf0e10cSrcweir //using namespace ::com::sun::star::text;
49cdf0e10cSrcweir using namespace ::xmloff::token;
50cdf0e10cSrcweir 
51cdf0e10cSrcweir using ::rtl::OUString;
52cdf0e10cSrcweir using ::rtl::OUStringBuffer;
53cdf0e10cSrcweir using ::com::sun::star::beans::XPropertySet;
54cdf0e10cSrcweir using ::com::sun::star::beans::PropertyValue;
55cdf0e10cSrcweir using ::com::sun::star::beans::PropertyValues;
56cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
57cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
58cdf0e10cSrcweir using ::com::sun::star::uno::Any;
59cdf0e10cSrcweir using ::com::sun::star::xml::sax::XAttributeList;
60cdf0e10cSrcweir using ::com::sun::star::container::XIndexReplace;
61cdf0e10cSrcweir 
62cdf0e10cSrcweir const sal_Char sAPI_TokenEntryNumber[] = 	"TokenEntryNumber";
63cdf0e10cSrcweir const sal_Char sAPI_TokenEntryText[] = 		"TokenEntryText";
64cdf0e10cSrcweir const sal_Char sAPI_TokenTabStop[] = 		"TokenTabStop";
65cdf0e10cSrcweir const sal_Char sAPI_TokenText[] = 			"TokenText";
66cdf0e10cSrcweir const sal_Char sAPI_TokenPageNumber[] = 	"TokenPageNumber";
67cdf0e10cSrcweir const sal_Char sAPI_TokenChapterInfo[] = 	"TokenChapterInfo";
68cdf0e10cSrcweir const sal_Char sAPI_TokenHyperlinkStart[] =	"TokenHyperlinkStart";
69cdf0e10cSrcweir const sal_Char sAPI_TokenHyperlinkEnd[] =	"TokenHyperlinkEnd";
70cdf0e10cSrcweir const sal_Char sAPI_TokenBibliographyDataField[] =
71cdf0e10cSrcweir 											"TokenBibliographyDataField";
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 
74cdf0e10cSrcweir TYPEINIT1( XMLIndexTemplateContext, SvXMLImportContext);
75cdf0e10cSrcweir 
XMLIndexTemplateContext(SvXMLImport & rImport,Reference<XPropertySet> & rPropSet,sal_uInt16 nPrfx,const OUString & rLocalName,const SvXMLEnumMapEntry * pLevelNameMap,enum XMLTokenEnum eLevelAttrName,const sal_Char ** pLevelStylePropMap,const sal_Bool * pAllowedTokenTypes,sal_Bool bT)76cdf0e10cSrcweir XMLIndexTemplateContext::XMLIndexTemplateContext(
77cdf0e10cSrcweir 	SvXMLImport& rImport,
78cdf0e10cSrcweir 	Reference<XPropertySet> & rPropSet,
79cdf0e10cSrcweir 	sal_uInt16 nPrfx,
80cdf0e10cSrcweir 	const OUString& rLocalName,
81cdf0e10cSrcweir 	const SvXMLEnumMapEntry* pLevelNameMap,
82cdf0e10cSrcweir     enum XMLTokenEnum eLevelAttrName,
83cdf0e10cSrcweir 	const sal_Char** pLevelStylePropMap,
84cdf0e10cSrcweir 	const sal_Bool* pAllowedTokenTypes,
85cdf0e10cSrcweir 	sal_Bool bT )
86cdf0e10cSrcweir :	SvXMLImportContext(rImport, nPrfx, rLocalName)
87cdf0e10cSrcweir ,	pOutlineLevelNameMap(pLevelNameMap)
88cdf0e10cSrcweir ,	eOutlineLevelAttrName(eLevelAttrName)
89cdf0e10cSrcweir ,	pOutlineLevelStylePropMap(pLevelStylePropMap)
90cdf0e10cSrcweir ,	pAllowedTokenTypesMap(pAllowedTokenTypes)
91cdf0e10cSrcweir ,	nOutlineLevel(1)	// all indices have level 1 (0 is for header)
92cdf0e10cSrcweir ,	bStyleNameOK(sal_False)
93cdf0e10cSrcweir ,	bOutlineLevelOK(sal_False)
94cdf0e10cSrcweir ,	bTOC( bT )
95cdf0e10cSrcweir ,	rPropertySet(rPropSet)
96cdf0e10cSrcweir ,	sTokenEntryNumber(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenEntryNumber))
97cdf0e10cSrcweir ,	sTokenEntryText(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenEntryText))
98cdf0e10cSrcweir ,	sTokenTabStop(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenTabStop))
99cdf0e10cSrcweir ,	sTokenText(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenText))
100cdf0e10cSrcweir ,	sTokenPageNumber(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenPageNumber))
101cdf0e10cSrcweir ,	sTokenChapterInfo(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenChapterInfo))
102cdf0e10cSrcweir ,	sTokenHyperlinkStart(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenHyperlinkStart))
103cdf0e10cSrcweir ,	sTokenHyperlinkEnd(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenHyperlinkEnd))
104cdf0e10cSrcweir ,	sTokenBibliographyDataField(RTL_CONSTASCII_USTRINGPARAM(sAPI_TokenBibliographyDataField))
105cdf0e10cSrcweir 
106cdf0e10cSrcweir ,	sCharacterStyleName(RTL_CONSTASCII_USTRINGPARAM("CharacterStyleName"))
107cdf0e10cSrcweir ,	sTokenType(RTL_CONSTASCII_USTRINGPARAM("TokenType"))
108cdf0e10cSrcweir ,	sText(RTL_CONSTASCII_USTRINGPARAM("Text"))
109cdf0e10cSrcweir ,	sTabStopRightAligned(RTL_CONSTASCII_USTRINGPARAM("TabStopRightAligned"))
110cdf0e10cSrcweir ,	sTabStopPosition(RTL_CONSTASCII_USTRINGPARAM("TabStopPosition"))
111cdf0e10cSrcweir ,	sTabStopFillCharacter(RTL_CONSTASCII_USTRINGPARAM("TabStopFillCharacter"))
112cdf0e10cSrcweir ,	sBibliographyDataField(RTL_CONSTASCII_USTRINGPARAM("BibliographyDataField"))
113cdf0e10cSrcweir ,	sChapterFormat(RTL_CONSTASCII_USTRINGPARAM("ChapterFormat"))
114cdf0e10cSrcweir ,   sChapterLevel(RTL_CONSTASCII_USTRINGPARAM("ChapterLevel")) //#i53420
115cdf0e10cSrcweir 
116cdf0e10cSrcweir ,	sLevelFormat(RTL_CONSTASCII_USTRINGPARAM("LevelFormat"))
117cdf0e10cSrcweir ,	sParaStyleLevel(RTL_CONSTASCII_USTRINGPARAM("ParaStyleLevel"))
118cdf0e10cSrcweir {
119cdf0e10cSrcweir 	DBG_ASSERT( ((XML_TOKEN_INVALID != eLevelAttrName) &&  (NULL != pLevelNameMap))
120cdf0e10cSrcweir 				|| ((XML_TOKEN_INVALID == eLevelAttrName) &&  (NULL == pLevelNameMap)),
121cdf0e10cSrcweir 				"need both, attribute name and value map, or neither" );
122cdf0e10cSrcweir 	DBG_ASSERT( NULL != pOutlineLevelStylePropMap, "need property name map" );
123cdf0e10cSrcweir 	DBG_ASSERT( NULL != pAllowedTokenTypes, "need allowed tokens map" );
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 	// no map for outline-level? then use 1
126cdf0e10cSrcweir 	if (NULL == pLevelNameMap)
127cdf0e10cSrcweir 	{
128cdf0e10cSrcweir 		nOutlineLevel = 1;
129cdf0e10cSrcweir 		bOutlineLevelOK = sal_True;
130cdf0e10cSrcweir 	}
131cdf0e10cSrcweir }
132cdf0e10cSrcweir 
~XMLIndexTemplateContext()133cdf0e10cSrcweir XMLIndexTemplateContext::~XMLIndexTemplateContext()
134cdf0e10cSrcweir {
135cdf0e10cSrcweir }
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 
addTemplateEntry(const PropertyValues & aValues)138cdf0e10cSrcweir void XMLIndexTemplateContext::addTemplateEntry(
139cdf0e10cSrcweir 	const PropertyValues& aValues)
140cdf0e10cSrcweir {
141cdf0e10cSrcweir 	aValueVector.push_back(aValues);
142cdf0e10cSrcweir }
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 
StartElement(const Reference<XAttributeList> & xAttrList)145cdf0e10cSrcweir void XMLIndexTemplateContext::StartElement(
146cdf0e10cSrcweir 		const Reference<XAttributeList> & xAttrList)
147cdf0e10cSrcweir {
148cdf0e10cSrcweir 	// process two attributes: style-name, outline-level
149cdf0e10cSrcweir 	sal_Int16 nLength = xAttrList->getLength();
150cdf0e10cSrcweir 	for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
151cdf0e10cSrcweir 	{
152cdf0e10cSrcweir 		OUString sLocalName;
153cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
154cdf0e10cSrcweir 			GetKeyByAttrName( xAttrList->getNameByIndex(nAttr),
155cdf0e10cSrcweir 							  &sLocalName );
156cdf0e10cSrcweir 		if (XML_NAMESPACE_TEXT == nPrefix)
157cdf0e10cSrcweir 		{
158cdf0e10cSrcweir 			if ( IsXMLToken( sLocalName, XML_STYLE_NAME ) )
159cdf0e10cSrcweir 			{
160cdf0e10cSrcweir 				// style name
161cdf0e10cSrcweir 				sStyleName = xAttrList->getValueByIndex(nAttr);
162cdf0e10cSrcweir 				bStyleNameOK = sal_True;
163cdf0e10cSrcweir 			}
164cdf0e10cSrcweir 			else if (eOutlineLevelAttrName != XML_TOKEN_INVALID)
165cdf0e10cSrcweir 			{
166cdf0e10cSrcweir 				// we have an attr name! Then see if we have the attr, too.
167cdf0e10cSrcweir 				if (IsXMLToken(sLocalName, eOutlineLevelAttrName))
168cdf0e10cSrcweir 				{
169cdf0e10cSrcweir 					// outline level
170cdf0e10cSrcweir 					sal_uInt16 nTmp;
171cdf0e10cSrcweir 					if (SvXMLUnitConverter::convertEnum(
172cdf0e10cSrcweir 						nTmp, xAttrList->getValueByIndex(nAttr),
173cdf0e10cSrcweir 						pOutlineLevelNameMap))
174cdf0e10cSrcweir 					{
175cdf0e10cSrcweir 						nOutlineLevel = nTmp;
176cdf0e10cSrcweir 						bOutlineLevelOK = sal_True;
177cdf0e10cSrcweir 					}
178cdf0e10cSrcweir 					// else: illegal value -> ignore
179cdf0e10cSrcweir 				}
180cdf0e10cSrcweir 				// else: unknown attribute -> ignore
181cdf0e10cSrcweir 			}
182cdf0e10cSrcweir 			// else: we don't care about outline-level -> ignore
183cdf0e10cSrcweir 		}
184cdf0e10cSrcweir 		// else: attribute not in text namespace -> ignore
185cdf0e10cSrcweir 	}
186cdf0e10cSrcweir }
187cdf0e10cSrcweir 
EndElement()188cdf0e10cSrcweir void XMLIndexTemplateContext::EndElement()
189cdf0e10cSrcweir {
190cdf0e10cSrcweir 	if (bOutlineLevelOK)
191cdf0e10cSrcweir 	{
192cdf0e10cSrcweir 		const sal_Int32 nCount = aValueVector.size();
193cdf0e10cSrcweir 		Sequence<PropertyValues> aValueSequence(nCount);
194cdf0e10cSrcweir 		for(sal_Int32 i = 0; i<nCount; i++)
195cdf0e10cSrcweir 		{
196cdf0e10cSrcweir 			aValueSequence[i] = aValueVector[i];
197cdf0e10cSrcweir 		}
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 		// get LevelFormat IndexReplace ...
200cdf0e10cSrcweir 		Any aAny = rPropertySet->getPropertyValue(sLevelFormat);
201cdf0e10cSrcweir 		Reference<XIndexReplace> xIndexReplace;
202cdf0e10cSrcweir 		aAny >>= xIndexReplace;
203cdf0e10cSrcweir 
204cdf0e10cSrcweir 		// ... and insert
205cdf0e10cSrcweir 		aAny <<= aValueSequence;
206cdf0e10cSrcweir 		xIndexReplace->replaceByIndex(nOutlineLevel, aAny);
207cdf0e10cSrcweir 
208cdf0e10cSrcweir 		if (bStyleNameOK)
209cdf0e10cSrcweir 		{
210cdf0e10cSrcweir 			const sal_Char* pStyleProperty =
211cdf0e10cSrcweir 				pOutlineLevelStylePropMap[nOutlineLevel];
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 			DBG_ASSERT(NULL != pStyleProperty, "need property name");
214cdf0e10cSrcweir 			if (NULL != pStyleProperty)
215cdf0e10cSrcweir 			{
216cdf0e10cSrcweir 				OUString sDisplayStyleName =
217cdf0e10cSrcweir 						GetImport().GetStyleDisplayName(
218cdf0e10cSrcweir 						XML_STYLE_FAMILY_TEXT_PARAGRAPH,
219cdf0e10cSrcweir 						sStyleName );
220cdf0e10cSrcweir 				// #i50288#: Check if style exists
221cdf0e10cSrcweir 				const Reference < ::com::sun::star::container::XNameContainer > & rStyles =
222cdf0e10cSrcweir 					GetImport().GetTextImport()->GetParaStyles();
223cdf0e10cSrcweir 				if( rStyles.is() &&
224cdf0e10cSrcweir 					rStyles->hasByName( sDisplayStyleName ) )
225cdf0e10cSrcweir 				{
226cdf0e10cSrcweir 					aAny <<= sDisplayStyleName;
227cdf0e10cSrcweir 					rPropertySet->setPropertyValue(
228cdf0e10cSrcweir 						OUString::createFromAscii(pStyleProperty), aAny);
229cdf0e10cSrcweir 				}
230cdf0e10cSrcweir 			}
231cdf0e10cSrcweir 		}
232cdf0e10cSrcweir 	}
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir 
236cdf0e10cSrcweir 
237cdf0e10cSrcweir /// template token types; used for aTokenTypeMap parameter
238cdf0e10cSrcweir enum TemplateTokenType
239cdf0e10cSrcweir {
240cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_ENTRY_TEXT = 0,
241cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_TAB_STOP,
242cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_TEXT,
243cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_PAGE_NUMBER,
244cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_CHAPTER,
245cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_LINK_START,
246cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_LINK_END,
247cdf0e10cSrcweir 	XML_TOK_INDEX_TYPE_BIBLIOGRAPHY
248cdf0e10cSrcweir };
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 
251cdf0e10cSrcweir SvXMLEnumMapEntry aTemplateTokenTypeMap[] =
252cdf0e10cSrcweir {
253cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_TEXT,         XML_TOK_INDEX_TYPE_ENTRY_TEXT },
254cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_TAB_STOP,     XML_TOK_INDEX_TYPE_TAB_STOP },
255cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_SPAN,         XML_TOK_INDEX_TYPE_TEXT },
256cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_PAGE_NUMBER,  XML_TOK_INDEX_TYPE_PAGE_NUMBER },
257cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_CHAPTER,      XML_TOK_INDEX_TYPE_CHAPTER },
258cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_LINK_START,   XML_TOK_INDEX_TYPE_LINK_START },
259cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_LINK_END,     XML_TOK_INDEX_TYPE_LINK_END },
260cdf0e10cSrcweir 	{ XML_INDEX_ENTRY_BIBLIOGRAPHY, XML_TOK_INDEX_TYPE_BIBLIOGRAPHY },
261cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
262cdf0e10cSrcweir };
263cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)264cdf0e10cSrcweir SvXMLImportContext *XMLIndexTemplateContext::CreateChildContext(
265cdf0e10cSrcweir 	sal_uInt16 nPrefix,
266cdf0e10cSrcweir 	const OUString& rLocalName,
267cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList )
268cdf0e10cSrcweir {
269cdf0e10cSrcweir 	SvXMLImportContext* pContext = NULL;
270cdf0e10cSrcweir 
271cdf0e10cSrcweir 	if (XML_NAMESPACE_TEXT == nPrefix)
272cdf0e10cSrcweir 	{
273cdf0e10cSrcweir 		sal_uInt16 nToken;
274cdf0e10cSrcweir 		if (SvXMLUnitConverter::convertEnum(nToken, rLocalName,
275cdf0e10cSrcweir 											aTemplateTokenTypeMap))
276cdf0e10cSrcweir 		{
277cdf0e10cSrcweir 			// can this index accept this kind of token?
278cdf0e10cSrcweir 			if (pAllowedTokenTypesMap[nToken])
279cdf0e10cSrcweir 			{
280cdf0e10cSrcweir 				switch ((TemplateTokenType)nToken)
281cdf0e10cSrcweir 				{
282cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_ENTRY_TEXT:
283cdf0e10cSrcweir 						pContext = new XMLIndexSimpleEntryContext(
284cdf0e10cSrcweir 							GetImport(), sTokenEntryText, *this,
285cdf0e10cSrcweir 							nPrefix, rLocalName);
286cdf0e10cSrcweir 						break;
287cdf0e10cSrcweir 
288cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_PAGE_NUMBER:
289cdf0e10cSrcweir 						pContext = new XMLIndexSimpleEntryContext(
290cdf0e10cSrcweir 							GetImport(), sTokenPageNumber, *this,
291cdf0e10cSrcweir 							nPrefix, rLocalName);
292cdf0e10cSrcweir 						break;
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_LINK_START:
295cdf0e10cSrcweir 						pContext = new XMLIndexSimpleEntryContext(
296cdf0e10cSrcweir 							GetImport(), sTokenHyperlinkStart, *this,
297cdf0e10cSrcweir 							nPrefix, rLocalName);
298cdf0e10cSrcweir 						break;
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_LINK_END:
301cdf0e10cSrcweir 						pContext = new XMLIndexSimpleEntryContext(
302cdf0e10cSrcweir 							GetImport(), sTokenHyperlinkEnd, *this,
303cdf0e10cSrcweir 							nPrefix, rLocalName);
304cdf0e10cSrcweir 						break;
305cdf0e10cSrcweir 
306cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_TEXT:
307cdf0e10cSrcweir 						pContext = new XMLIndexSpanEntryContext(
308cdf0e10cSrcweir 							GetImport(), *this, nPrefix, rLocalName);
309cdf0e10cSrcweir 						break;
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_TAB_STOP:
312cdf0e10cSrcweir 						pContext = new XMLIndexTabStopEntryContext(
313cdf0e10cSrcweir 							GetImport(), *this, nPrefix, rLocalName);
314cdf0e10cSrcweir 						break;
315cdf0e10cSrcweir 
316cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_BIBLIOGRAPHY:
317cdf0e10cSrcweir 						pContext = new XMLIndexBibliographyEntryContext(
318cdf0e10cSrcweir 							GetImport(), *this, nPrefix, rLocalName);
319cdf0e10cSrcweir 						break;
320cdf0e10cSrcweir 
321cdf0e10cSrcweir 					case XML_TOK_INDEX_TYPE_CHAPTER:
322cdf0e10cSrcweir 						pContext = new XMLIndexChapterInfoEntryContext(
323cdf0e10cSrcweir 							GetImport(), *this, nPrefix, rLocalName, bTOC );
324cdf0e10cSrcweir 						break;
325cdf0e10cSrcweir 
326cdf0e10cSrcweir 					default:
327cdf0e10cSrcweir 						// ignore!
328cdf0e10cSrcweir 						break;
329cdf0e10cSrcweir 				}
330cdf0e10cSrcweir 			}
331cdf0e10cSrcweir 		}
332cdf0e10cSrcweir 	}
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 	// ignore unknown
335cdf0e10cSrcweir 	if (NULL == pContext)
336cdf0e10cSrcweir 	{
337cdf0e10cSrcweir 		return SvXMLImportContext::CreateChildContext(nPrefix, rLocalName,
338cdf0e10cSrcweir 													  xAttrList);
339cdf0e10cSrcweir 	}
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 	return pContext;
342cdf0e10cSrcweir }
343cdf0e10cSrcweir 
344cdf0e10cSrcweir 
345cdf0e10cSrcweir 
346cdf0e10cSrcweir //
347cdf0e10cSrcweir // maps for the XMLIndexTemplateContext constructor
348cdf0e10cSrcweir //
349cdf0e10cSrcweir 
350cdf0e10cSrcweir 
351cdf0e10cSrcweir // table of content and user defined index:
352cdf0e10cSrcweir 
353cdf0e10cSrcweir const SvXMLEnumMapEntry aLevelNameTOCMap[] =
354cdf0e10cSrcweir {
355cdf0e10cSrcweir 	{ XML_1, 1 },
356cdf0e10cSrcweir 	{ XML_2, 2 },
357cdf0e10cSrcweir 	{ XML_3, 3 },
358cdf0e10cSrcweir 	{ XML_4, 4 },
359cdf0e10cSrcweir 	{ XML_5, 5 },
360cdf0e10cSrcweir 	{ XML_6, 6 },
361cdf0e10cSrcweir 	{ XML_7, 7 },
362cdf0e10cSrcweir 	{ XML_8, 8 },
363cdf0e10cSrcweir 	{ XML_9, 9 },
364cdf0e10cSrcweir 	{ XML_10, 10 },
365cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
366cdf0e10cSrcweir };
367cdf0e10cSrcweir 
368cdf0e10cSrcweir const sal_Char* aLevelStylePropNameTOCMap[] =
369cdf0e10cSrcweir 	{ NULL, "ParaStyleLevel1", "ParaStyleLevel2", "ParaStyleLevel3",
370cdf0e10cSrcweir 		  "ParaStyleLevel4", "ParaStyleLevel5", "ParaStyleLevel6",
371cdf0e10cSrcweir 		  "ParaStyleLevel7", "ParaStyleLevel8", "ParaStyleLevel9",
372cdf0e10cSrcweir 		  "ParaStyleLevel10", NULL };
373cdf0e10cSrcweir 
374cdf0e10cSrcweir const sal_Bool aAllowedTokenTypesTOC[] =
375cdf0e10cSrcweir {
376cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_ENTRY_TEXT =
377cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TAB_STOP,
378cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TEXT,
379cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_PAGE_NUMBER,
380cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_CHAPTER,
381cdf0e10cSrcweir 	sal_True,	 	// XML_TOK_INDEX_TYPE_LINK_START,
382cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_LINK_END,
383cdf0e10cSrcweir 	sal_False		// XML_TOK_INDEX_TYPE_BIBLIOGRAPHY
384cdf0e10cSrcweir };
385cdf0e10cSrcweir 
386cdf0e10cSrcweir const sal_Bool aAllowedTokenTypesUser[] =
387cdf0e10cSrcweir {
388cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_ENTRY_TEXT =
389cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TAB_STOP,
390cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TEXT,
391cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_PAGE_NUMBER,
392cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_CHAPTER,
393cdf0e10cSrcweir 	sal_False,	 	// XML_TOK_INDEX_TYPE_LINK_START,
394cdf0e10cSrcweir 	sal_False, 		// XML_TOK_INDEX_TYPE_LINK_END,
395cdf0e10cSrcweir 	sal_False		// XML_TOK_INDEX_TYPE_BIBLIOGRAPHY
396cdf0e10cSrcweir };
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 
399cdf0e10cSrcweir // alphabetical index
400cdf0e10cSrcweir 
401cdf0e10cSrcweir const SvXMLEnumMapEntry aLevelNameAlphaMap[] =
402cdf0e10cSrcweir {
403cdf0e10cSrcweir 	{ XML_SEPARATOR, 1 },
404cdf0e10cSrcweir 	{ XML_1, 2 },
405cdf0e10cSrcweir 	{ XML_2, 3 },
406cdf0e10cSrcweir 	{ XML_3, 4 },
407cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
408cdf0e10cSrcweir };
409cdf0e10cSrcweir 
410cdf0e10cSrcweir const sal_Char* aLevelStylePropNameAlphaMap[] =
411cdf0e10cSrcweir 	{ NULL, "ParaStyleSeparator", "ParaStyleLevel1", "ParaStyleLevel2",
412cdf0e10cSrcweir 		  "ParaStyleLevel3", NULL };
413cdf0e10cSrcweir 
414cdf0e10cSrcweir const sal_Bool aAllowedTokenTypesAlpha[] =
415cdf0e10cSrcweir {
416cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_ENTRY_TEXT =
417cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TAB_STOP,
418cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TEXT,
419cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_PAGE_NUMBER,
420cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_CHAPTER,
421cdf0e10cSrcweir 	sal_False,	 	// XML_TOK_INDEX_TYPE_LINK_START,
422cdf0e10cSrcweir 	sal_False, 		// XML_TOK_INDEX_TYPE_LINK_END,
423cdf0e10cSrcweir 	sal_False		// XML_TOK_INDEX_TYPE_BIBLIOGRAPHY
424cdf0e10cSrcweir };
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 
427cdf0e10cSrcweir // bibliography index:
428cdf0e10cSrcweir 
429cdf0e10cSrcweir const SvXMLEnumMapEntry aLevelNameBibliographyMap[] =
430cdf0e10cSrcweir {
431cdf0e10cSrcweir 	{ XML_ARTICLE, 1 },
432cdf0e10cSrcweir 	{ XML_BOOK, 2 },
433cdf0e10cSrcweir 	{ XML_BOOKLET, 3 },
434cdf0e10cSrcweir 	{ XML_CONFERENCE, 4 },
435cdf0e10cSrcweir 	{ XML_CUSTOM1, 5 },
436cdf0e10cSrcweir 	{ XML_CUSTOM2, 6 },
437cdf0e10cSrcweir 	{ XML_CUSTOM3, 7 },
438cdf0e10cSrcweir 	{ XML_CUSTOM4, 8 },
439cdf0e10cSrcweir 	{ XML_CUSTOM5, 9 },
440cdf0e10cSrcweir 	{ XML_EMAIL, 10 },
441cdf0e10cSrcweir 	{ XML_INBOOK, 11 },
442cdf0e10cSrcweir 	{ XML_INCOLLECTION, 12 },
443cdf0e10cSrcweir 	{ XML_INPROCEEDINGS, 13 },
444cdf0e10cSrcweir 	{ XML_JOURNAL, 14 },
445cdf0e10cSrcweir 	{ XML_MANUAL, 15 },
446cdf0e10cSrcweir 	{ XML_MASTERSTHESIS, 16 },
447cdf0e10cSrcweir 	{ XML_MISC, 17 },
448cdf0e10cSrcweir 	{ XML_PHDTHESIS, 18 },
449cdf0e10cSrcweir 	{ XML_PROCEEDINGS, 19 },
450cdf0e10cSrcweir 	{ XML_TECHREPORT, 20 },
451cdf0e10cSrcweir 	{ XML_UNPUBLISHED, 21 },
452cdf0e10cSrcweir 	{ XML_WWW, 22 },
453cdf0e10cSrcweir     { XML_TOKEN_INVALID, 0 }
454cdf0e10cSrcweir };
455cdf0e10cSrcweir 
456cdf0e10cSrcweir // TODO: replace with real property names, when available
457cdf0e10cSrcweir const sal_Char* aLevelStylePropNameBibliographyMap[] =
458cdf0e10cSrcweir {
459cdf0e10cSrcweir 	NULL, "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
460cdf0e10cSrcweir 	"ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
461cdf0e10cSrcweir 	"ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
462cdf0e10cSrcweir 	"ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
463cdf0e10cSrcweir 	"ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
464cdf0e10cSrcweir 	"ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
465cdf0e10cSrcweir 	"ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
466cdf0e10cSrcweir 	"ParaStyleLevel1", NULL };
467cdf0e10cSrcweir 
468cdf0e10cSrcweir const sal_Bool aAllowedTokenTypesBibliography[] =
469cdf0e10cSrcweir {
470cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_ENTRY_TEXT =
471cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TAB_STOP,
472cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TEXT,
473cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_PAGE_NUMBER,
474cdf0e10cSrcweir 	sal_False, 		// XML_TOK_INDEX_TYPE_CHAPTER,
475cdf0e10cSrcweir 	sal_False,	 	// XML_TOK_INDEX_TYPE_LINK_START,
476cdf0e10cSrcweir 	sal_False, 		// XML_TOK_INDEX_TYPE_LINK_END,
477cdf0e10cSrcweir 	sal_True		// XML_TOK_INDEX_TYPE_BIBLIOGRAPHY
478cdf0e10cSrcweir };
479cdf0e10cSrcweir 
480cdf0e10cSrcweir 
481cdf0e10cSrcweir // table, illustration and object index
482cdf0e10cSrcweir 
483cdf0e10cSrcweir // no name map
484cdf0e10cSrcweir const SvXMLEnumMapEntry* aLevelNameTableMap = NULL;
485cdf0e10cSrcweir 
486cdf0e10cSrcweir const sal_Char* aLevelStylePropNameTableMap[] =
487cdf0e10cSrcweir 	{ NULL, "ParaStyleLevel1", NULL };
488cdf0e10cSrcweir 
489cdf0e10cSrcweir const sal_Bool aAllowedTokenTypesTable[] =
490cdf0e10cSrcweir {
491cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_ENTRY_TEXT =
492cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TAB_STOP,
493cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_TEXT,
494cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_PAGE_NUMBER,
495cdf0e10cSrcweir 	sal_True, 		// XML_TOK_INDEX_TYPE_CHAPTER,
496cdf0e10cSrcweir 	sal_False,	 	// XML_TOK_INDEX_TYPE_LINK_START,
497cdf0e10cSrcweir 	sal_False, 		// XML_TOK_INDEX_TYPE_LINK_END,
498cdf0e10cSrcweir 	sal_False		// XML_TOK_INDEX_TYPE_BIBLIOGRAPHY
499cdf0e10cSrcweir };
500cdf0e10cSrcweir 
501