Line data Source code
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 : #include "XMLIndexSourceBaseContext.hxx"
21 : #include <com/sun/star/beans/XPropertySet.hpp>
22 : #include <com/sun/star/container/XIndexReplace.hpp>
23 : #include "XMLIndexTemplateContext.hxx"
24 : #include "XMLIndexTitleTemplateContext.hxx"
25 : #include "XMLIndexTOCStylesContext.hxx"
26 : #include <xmloff/xmlictxt.hxx>
27 : #include <xmloff/xmlimp.hxx>
28 : #include <xmloff/txtimp.hxx>
29 : #include "xmloff/xmlnmspe.hxx"
30 : #include <xmloff/nmspmap.hxx>
31 : #include <xmloff/xmltoken.hxx>
32 : #include <sax/tools/converter.hxx>
33 : #include <rtl/ustring.hxx>
34 :
35 :
36 :
37 : using namespace ::xmloff::token;
38 :
39 : using ::com::sun::star::beans::XPropertySet;
40 : using ::com::sun::star::uno::Reference;
41 : using ::com::sun::star::uno::Any;
42 : using ::com::sun::star::xml::sax::XAttributeList;
43 :
44 : const sal_Char sAPI_CreateFromChapter[] = "CreateFromChapter";
45 : const sal_Char sAPI_IsRelativeTabstops[] = "IsRelativeTabstops";
46 :
47 : static SvXMLTokenMapEntry aIndexSourceTokenMap[] =
48 : {
49 : { XML_NAMESPACE_TEXT,
50 : XML_OUTLINE_LEVEL,
51 : XML_TOK_INDEXSOURCE_OUTLINE_LEVEL},
52 : { XML_NAMESPACE_TEXT,
53 : XML_USE_INDEX_MARKS,
54 : XML_TOK_INDEXSOURCE_USE_INDEX_MARKS },
55 : { XML_NAMESPACE_TEXT,
56 : XML_INDEX_SCOPE,
57 : XML_TOK_INDEXSOURCE_INDEX_SCOPE },
58 : { XML_NAMESPACE_TEXT,
59 : XML_RELATIVE_TAB_STOP_POSITION,
60 : XML_TOK_INDEXSOURCE_RELATIVE_TABS } ,
61 : { XML_NAMESPACE_TEXT,
62 : XML_USE_OTHER_OBJECTS,
63 : XML_TOK_INDEXSOURCE_USE_OTHER_OBJECTS },
64 : { XML_NAMESPACE_TEXT,
65 : XML_USE_SPREADSHEET_OBJECTS,
66 : XML_TOK_INDEXSOURCE_USE_SHEET },
67 : { XML_NAMESPACE_TEXT,
68 : XML_USE_CHART_OBJECTS,
69 : XML_TOK_INDEXSOURCE_USE_CHART },
70 : { XML_NAMESPACE_TEXT,
71 : XML_USE_DRAW_OBJECTS,
72 : XML_TOK_INDEXSOURCE_USE_DRAW },
73 : { XML_NAMESPACE_TEXT,
74 : XML_USE_IMAGE_OBJECTS,
75 : XML_TOK_INDEXSOURCE_USE_IMAGE },
76 : { XML_NAMESPACE_TEXT,
77 : XML_USE_MATH_OBJECTS,
78 : XML_TOK_INDEXSOURCE_USE_MATH },
79 : { XML_NAMESPACE_TEXT,
80 : XML_MAIN_ENTRY_STYLE_NAME,
81 : XML_TOK_INDEXSOURCE_MAIN_ENTRY_STYLE },
82 : { XML_NAMESPACE_TEXT,
83 : XML_IGNORE_CASE,
84 : XML_TOK_INDEXSOURCE_IGNORE_CASE },
85 : { XML_NAMESPACE_TEXT,
86 : XML_ALPHABETICAL_SEPARATORS,
87 : XML_TOK_INDEXSOURCE_SEPARATORS },
88 : { XML_NAMESPACE_TEXT,
89 : XML_COMBINE_ENTRIES,
90 : XML_TOK_INDEXSOURCE_COMBINE_ENTRIES },
91 : { XML_NAMESPACE_TEXT,
92 : XML_COMBINE_ENTRIES_WITH_DASH,
93 : XML_TOK_INDEXSOURCE_COMBINE_WITH_DASH },
94 : { XML_NAMESPACE_TEXT,
95 : XML_USE_KEYS_AS_ENTRIES,
96 : XML_TOK_INDEXSOURCE_KEYS_AS_ENTRIES },
97 : { XML_NAMESPACE_TEXT,
98 : XML_COMBINE_ENTRIES_WITH_PP,
99 : XML_TOK_INDEXSOURCE_COMBINE_WITH_PP },
100 : { XML_NAMESPACE_TEXT,
101 : XML_CAPITALIZE_ENTRIES,
102 : XML_TOK_INDEXSOURCE_CAPITALIZE },
103 : { XML_NAMESPACE_TEXT,
104 : XML_USE_OBJECTS,
105 : XML_TOK_INDEXSOURCE_USE_OBJECTS },
106 : { XML_NAMESPACE_TEXT,
107 : XML_USE_GRAPHICS,
108 : XML_TOK_INDEXSOURCE_USE_GRAPHICS },
109 : { XML_NAMESPACE_TEXT,
110 : XML_USE_TABLES,
111 : XML_TOK_INDEXSOURCE_USE_TABLES },
112 : { XML_NAMESPACE_TEXT,
113 : XML_USE_FLOATING_FRAMES,
114 : XML_TOK_INDEXSOURCE_USE_FRAMES },
115 : { XML_NAMESPACE_TEXT,
116 : XML_COPY_OUTLINE_LEVELS,
117 : XML_TOK_INDEXSOURCE_COPY_OUTLINE_LEVELS },
118 : { XML_NAMESPACE_TEXT,
119 : XML_USE_CAPTION,
120 : XML_TOK_INDEXSOURCE_USE_CAPTION },
121 : { XML_NAMESPACE_TEXT,
122 : XML_CAPTION_SEQUENCE_NAME,
123 : XML_TOK_INDEXSOURCE_SEQUENCE_NAME },
124 : { XML_NAMESPACE_TEXT,
125 : XML_CAPTION_SEQUENCE_FORMAT,
126 : XML_TOK_INDEXSOURCE_SEQUENCE_FORMAT },
127 : { XML_NAMESPACE_TEXT,
128 : XML_COMMA_SEPARATED,
129 : XML_TOK_INDEXSOURCE_COMMA_SEPARATED },
130 : { XML_NAMESPACE_TEXT,
131 : XML_USE_INDEX_SOURCE_STYLES,
132 : XML_TOK_INDEXSOURCE_USE_INDEX_SOURCE_STYLES },
133 : { XML_NAMESPACE_TEXT, XML_SORT_ALGORITHM,
134 : XML_TOK_INDEXSOURCE_SORT_ALGORITHM },
135 : { XML_NAMESPACE_FO, XML_LANGUAGE, XML_TOK_INDEXSOURCE_LANGUAGE },
136 : { XML_NAMESPACE_FO, XML_COUNTRY, XML_TOK_INDEXSOURCE_COUNTRY },
137 : { XML_NAMESPACE_TEXT, XML_INDEX_NAME, XML_TOK_INDEXSOURCE_USER_INDEX_NAME },
138 : { XML_NAMESPACE_TEXT,
139 : XML_USE_OUTLINE_LEVEL,
140 : XML_TOK_INDEXSOURCE_USE_OUTLINE_LEVEL},
141 :
142 : XML_TOKEN_MAP_END
143 : };
144 :
145 :
146 0 : TYPEINIT1( XMLIndexSourceBaseContext, SvXMLImportContext );
147 :
148 14 : XMLIndexSourceBaseContext::XMLIndexSourceBaseContext(
149 : SvXMLImport& rImport,
150 : sal_uInt16 nPrfx,
151 : const OUString& rLocalName,
152 : Reference<XPropertySet> & rPropSet,
153 : sal_Bool bLevelFormats)
154 : : SvXMLImportContext(rImport, nPrfx, rLocalName)
155 : , sCreateFromChapter(sAPI_CreateFromChapter)
156 : , sIsRelativeTabstops(sAPI_IsRelativeTabstops)
157 : , bUseLevelFormats(bLevelFormats)
158 : , bChapterIndex(sal_False)
159 : , bRelativeTabs(sal_True)
160 14 : , rIndexPropertySet(rPropSet)
161 : {
162 14 : }
163 :
164 14 : XMLIndexSourceBaseContext::~XMLIndexSourceBaseContext()
165 : {
166 14 : }
167 :
168 14 : void XMLIndexSourceBaseContext::StartElement(
169 : const Reference<XAttributeList> & xAttrList)
170 : {
171 14 : SvXMLTokenMap aTokenMap(aIndexSourceTokenMap);
172 :
173 : // process attributes
174 14 : sal_Int16 nLength = xAttrList->getLength();
175 42 : for(sal_Int16 i=0; i<nLength; i++)
176 : {
177 : // map to IndexSourceParamEnum
178 28 : OUString sLocalName;
179 28 : sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
180 56 : GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
181 28 : sal_uInt16 nToken = aTokenMap.Get(nPrefix, sLocalName);
182 :
183 : // process attribute
184 : ProcessAttribute((enum IndexSourceParamEnum)nToken,
185 28 : xAttrList->getValueByIndex(i));
186 42 : }
187 14 : }
188 :
189 0 : void XMLIndexSourceBaseContext::ProcessAttribute(
190 : enum IndexSourceParamEnum eParam,
191 : const OUString& rValue)
192 : {
193 0 : switch (eParam)
194 : {
195 : case XML_TOK_INDEXSOURCE_INDEX_SCOPE:
196 0 : if ( IsXMLToken( rValue, XML_CHAPTER ) )
197 : {
198 0 : bChapterIndex = sal_True;
199 : }
200 0 : break;
201 :
202 : case XML_TOK_INDEXSOURCE_RELATIVE_TABS:
203 : {
204 0 : bool bTmp(false);
205 0 : if (::sax::Converter::convertBool(bTmp, rValue))
206 : {
207 0 : bRelativeTabs = bTmp;
208 : }
209 0 : break;
210 : }
211 :
212 : default:
213 : // unknown attribute -> ignore
214 0 : break;
215 : }
216 0 : }
217 :
218 12 : void XMLIndexSourceBaseContext::EndElement()
219 : {
220 12 : Any aAny;
221 :
222 12 : aAny.setValue(&bRelativeTabs, ::getBooleanCppuType());
223 12 : rIndexPropertySet->setPropertyValue(sIsRelativeTabstops, aAny);
224 :
225 12 : aAny.setValue(&bChapterIndex, ::getBooleanCppuType());
226 12 : rIndexPropertySet->setPropertyValue(sCreateFromChapter, aAny);
227 12 : }
228 :
229 14 : SvXMLImportContext* XMLIndexSourceBaseContext::CreateChildContext(
230 : sal_uInt16 nPrefix,
231 : const OUString& rLocalName,
232 : const Reference<XAttributeList> & xAttrList )
233 : {
234 14 : SvXMLImportContext* pContext = NULL;
235 :
236 14 : if (XML_NAMESPACE_TEXT == nPrefix)
237 : {
238 14 : if ( IsXMLToken( rLocalName, XML_INDEX_TITLE_TEMPLATE ) )
239 : {
240 14 : pContext = new XMLIndexTitleTemplateContext(GetImport(),
241 : rIndexPropertySet,
242 14 : nPrefix, rLocalName);
243 : }
244 0 : else if ( bUseLevelFormats &&
245 0 : IsXMLToken( rLocalName, XML_INDEX_SOURCE_STYLES ) )
246 : {
247 0 : pContext = new XMLIndexTOCStylesContext(GetImport(),
248 : rIndexPropertySet,
249 0 : nPrefix, rLocalName);
250 : }
251 : // else: unknown element in text namespace -> ignore
252 : }
253 : // else: unknown namespace -> ignore
254 :
255 : // use default context
256 14 : if (pContext == NULL)
257 : {
258 : pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName,
259 0 : xAttrList);
260 : }
261 :
262 14 : return pContext;
263 : }
264 :
265 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|