Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "XMLIndexSourceBaseContext.hxx"
30 : : #include <com/sun/star/beans/XPropertySet.hpp>
31 : : #include <com/sun/star/container/XIndexReplace.hpp>
32 : : #include "XMLIndexTemplateContext.hxx"
33 : : #include "XMLIndexTitleTemplateContext.hxx"
34 : : #include "XMLIndexTOCStylesContext.hxx"
35 : : #include <xmloff/xmlictxt.hxx>
36 : : #include <xmloff/xmlimp.hxx>
37 : : #include <xmloff/txtimp.hxx>
38 : : #include "xmloff/xmlnmspe.hxx"
39 : : #include <xmloff/nmspmap.hxx>
40 : : #include <xmloff/xmltoken.hxx>
41 : : #include <sax/tools/converter.hxx>
42 : : #include <rtl/ustring.hxx>
43 : :
44 : :
45 : :
46 : : using namespace ::xmloff::token;
47 : :
48 : : using ::rtl::OUString;
49 : : using ::com::sun::star::beans::XPropertySet;
50 : : using ::com::sun::star::uno::Reference;
51 : : using ::com::sun::star::uno::Any;
52 : : using ::com::sun::star::xml::sax::XAttributeList;
53 : :
54 : : const sal_Char sAPI_CreateFromChapter[] = "CreateFromChapter";
55 : : const sal_Char sAPI_IsRelativeTabstops[] = "IsRelativeTabstops";
56 : :
57 : : static SvXMLTokenMapEntry aIndexSourceTokenMap[] =
58 : : {
59 : : { XML_NAMESPACE_TEXT,
60 : : XML_OUTLINE_LEVEL,
61 : : XML_TOK_INDEXSOURCE_OUTLINE_LEVEL},
62 : : { XML_NAMESPACE_TEXT,
63 : : XML_USE_INDEX_MARKS,
64 : : XML_TOK_INDEXSOURCE_USE_INDEX_MARKS },
65 : : { XML_NAMESPACE_TEXT,
66 : : XML_INDEX_SCOPE,
67 : : XML_TOK_INDEXSOURCE_INDEX_SCOPE },
68 : : { XML_NAMESPACE_TEXT,
69 : : XML_RELATIVE_TAB_STOP_POSITION,
70 : : XML_TOK_INDEXSOURCE_RELATIVE_TABS } ,
71 : : { XML_NAMESPACE_TEXT,
72 : : XML_USE_OTHER_OBJECTS,
73 : : XML_TOK_INDEXSOURCE_USE_OTHER_OBJECTS },
74 : : { XML_NAMESPACE_TEXT,
75 : : XML_USE_SPREADSHEET_OBJECTS,
76 : : XML_TOK_INDEXSOURCE_USE_SHEET },
77 : : { XML_NAMESPACE_TEXT,
78 : : XML_USE_CHART_OBJECTS,
79 : : XML_TOK_INDEXSOURCE_USE_CHART },
80 : : { XML_NAMESPACE_TEXT,
81 : : XML_USE_DRAW_OBJECTS,
82 : : XML_TOK_INDEXSOURCE_USE_DRAW },
83 : : { XML_NAMESPACE_TEXT,
84 : : XML_USE_IMAGE_OBJECTS,
85 : : XML_TOK_INDEXSOURCE_USE_IMAGE },
86 : : { XML_NAMESPACE_TEXT,
87 : : XML_USE_MATH_OBJECTS,
88 : : XML_TOK_INDEXSOURCE_USE_MATH },
89 : : { XML_NAMESPACE_TEXT,
90 : : XML_MAIN_ENTRY_STYLE_NAME,
91 : : XML_TOK_INDEXSOURCE_MAIN_ENTRY_STYLE },
92 : : { XML_NAMESPACE_TEXT,
93 : : XML_IGNORE_CASE,
94 : : XML_TOK_INDEXSOURCE_IGNORE_CASE },
95 : : { XML_NAMESPACE_TEXT,
96 : : XML_ALPHABETICAL_SEPARATORS,
97 : : XML_TOK_INDEXSOURCE_SEPARATORS },
98 : : { XML_NAMESPACE_TEXT,
99 : : XML_COMBINE_ENTRIES,
100 : : XML_TOK_INDEXSOURCE_COMBINE_ENTRIES },
101 : : { XML_NAMESPACE_TEXT,
102 : : XML_COMBINE_ENTRIES_WITH_DASH,
103 : : XML_TOK_INDEXSOURCE_COMBINE_WITH_DASH },
104 : : { XML_NAMESPACE_TEXT,
105 : : XML_USE_KEYS_AS_ENTRIES,
106 : : XML_TOK_INDEXSOURCE_KEYS_AS_ENTRIES },
107 : : { XML_NAMESPACE_TEXT,
108 : : XML_COMBINE_ENTRIES_WITH_PP,
109 : : XML_TOK_INDEXSOURCE_COMBINE_WITH_PP },
110 : : { XML_NAMESPACE_TEXT,
111 : : XML_CAPITALIZE_ENTRIES,
112 : : XML_TOK_INDEXSOURCE_CAPITALIZE },
113 : : { XML_NAMESPACE_TEXT,
114 : : XML_USE_OBJECTS,
115 : : XML_TOK_INDEXSOURCE_USE_OBJECTS },
116 : : { XML_NAMESPACE_TEXT,
117 : : XML_USE_GRAPHICS,
118 : : XML_TOK_INDEXSOURCE_USE_GRAPHICS },
119 : : { XML_NAMESPACE_TEXT,
120 : : XML_USE_TABLES,
121 : : XML_TOK_INDEXSOURCE_USE_TABLES },
122 : : { XML_NAMESPACE_TEXT,
123 : : XML_USE_FLOATING_FRAMES,
124 : : XML_TOK_INDEXSOURCE_USE_FRAMES },
125 : : { XML_NAMESPACE_TEXT,
126 : : XML_COPY_OUTLINE_LEVELS,
127 : : XML_TOK_INDEXSOURCE_COPY_OUTLINE_LEVELS },
128 : : { XML_NAMESPACE_TEXT,
129 : : XML_USE_CAPTION,
130 : : XML_TOK_INDEXSOURCE_USE_CAPTION },
131 : : { XML_NAMESPACE_TEXT,
132 : : XML_CAPTION_SEQUENCE_NAME,
133 : : XML_TOK_INDEXSOURCE_SEQUENCE_NAME },
134 : : { XML_NAMESPACE_TEXT,
135 : : XML_CAPTION_SEQUENCE_FORMAT,
136 : : XML_TOK_INDEXSOURCE_SEQUENCE_FORMAT },
137 : : { XML_NAMESPACE_TEXT,
138 : : XML_COMMA_SEPARATED,
139 : : XML_TOK_INDEXSOURCE_COMMA_SEPARATED },
140 : : { XML_NAMESPACE_TEXT,
141 : : XML_USE_INDEX_SOURCE_STYLES,
142 : : XML_TOK_INDEXSOURCE_USE_INDEX_SOURCE_STYLES },
143 : : { XML_NAMESPACE_TEXT, XML_SORT_ALGORITHM,
144 : : XML_TOK_INDEXSOURCE_SORT_ALGORITHM },
145 : : { XML_NAMESPACE_FO, XML_LANGUAGE, XML_TOK_INDEXSOURCE_LANGUAGE },
146 : : { XML_NAMESPACE_FO, XML_COUNTRY, XML_TOK_INDEXSOURCE_COUNTRY },
147 : : { XML_NAMESPACE_TEXT, XML_INDEX_NAME, XML_TOK_INDEXSOURCE_USER_INDEX_NAME },
148 : : { XML_NAMESPACE_TEXT,
149 : : XML_USE_OUTLINE_LEVEL,
150 : : XML_TOK_INDEXSOURCE_USE_OUTLINE_LEVEL},
151 : :
152 : : XML_TOKEN_MAP_END
153 : : };
154 : :
155 : :
156 [ # # ][ # # ]: 0 : TYPEINIT1( XMLIndexSourceBaseContext, SvXMLImportContext );
157 : :
158 : 28 : XMLIndexSourceBaseContext::XMLIndexSourceBaseContext(
159 : : SvXMLImport& rImport,
160 : : sal_uInt16 nPrfx,
161 : : const OUString& rLocalName,
162 : : Reference<XPropertySet> & rPropSet,
163 : : sal_Bool bLevelFormats)
164 : : : SvXMLImportContext(rImport, nPrfx, rLocalName)
165 : : , sCreateFromChapter(RTL_CONSTASCII_USTRINGPARAM(sAPI_CreateFromChapter))
166 : : , sIsRelativeTabstops(RTL_CONSTASCII_USTRINGPARAM(sAPI_IsRelativeTabstops))
167 : : , bUseLevelFormats(bLevelFormats)
168 : : , bChapterIndex(sal_False)
169 : : , bRelativeTabs(sal_True)
170 [ + - ][ + - ]: 28 : , rIndexPropertySet(rPropSet)
171 : : {
172 : 28 : }
173 : :
174 : 28 : XMLIndexSourceBaseContext::~XMLIndexSourceBaseContext()
175 : : {
176 [ - + ]: 28 : }
177 : :
178 : 28 : void XMLIndexSourceBaseContext::StartElement(
179 : : const Reference<XAttributeList> & xAttrList)
180 : : {
181 [ + - ]: 28 : SvXMLTokenMap aTokenMap(aIndexSourceTokenMap);
182 : :
183 : : // process attributes
184 [ + - ][ + - ]: 28 : sal_Int16 nLength = xAttrList->getLength();
185 [ + + ]: 84 : for(sal_Int16 i=0; i<nLength; i++)
186 : : {
187 : : // map to IndexSourceParamEnum
188 : 56 : OUString sLocalName;
189 : 56 : sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
190 [ + - + - ]: 112 : GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
[ + - ]
191 [ + - ]: 56 : sal_uInt16 nToken = aTokenMap.Get(nPrefix, sLocalName);
192 : :
193 : : // process attribute
194 : : ProcessAttribute((enum IndexSourceParamEnum)nToken,
195 [ + - ][ + - ]: 56 : xAttrList->getValueByIndex(i));
[ + - ]
196 [ + - ]: 84 : }
197 : 28 : }
198 : :
199 : 0 : void XMLIndexSourceBaseContext::ProcessAttribute(
200 : : enum IndexSourceParamEnum eParam,
201 : : const OUString& rValue)
202 : : {
203 [ # # # ]: 0 : switch (eParam)
204 : : {
205 : : case XML_TOK_INDEXSOURCE_INDEX_SCOPE:
206 [ # # ]: 0 : if ( IsXMLToken( rValue, XML_CHAPTER ) )
207 : : {
208 : 0 : bChapterIndex = sal_True;
209 : : }
210 : 0 : break;
211 : :
212 : : case XML_TOK_INDEXSOURCE_RELATIVE_TABS:
213 : : {
214 : 0 : bool bTmp(false);
215 [ # # ][ # # ]: 0 : if (::sax::Converter::convertBool(bTmp, rValue))
216 : : {
217 : 0 : bRelativeTabs = bTmp;
218 : : }
219 : : break;
220 : : }
221 : :
222 : : default:
223 : : // unknown attribute -> ignore
224 : 0 : break;
225 : : }
226 : 0 : }
227 : :
228 : 24 : void XMLIndexSourceBaseContext::EndElement()
229 : : {
230 : 24 : Any aAny;
231 : :
232 [ + - ]: 24 : aAny.setValue(&bRelativeTabs, ::getBooleanCppuType());
233 [ + - ][ + - ]: 24 : rIndexPropertySet->setPropertyValue(sIsRelativeTabstops, aAny);
234 : :
235 [ + - ]: 24 : aAny.setValue(&bChapterIndex, ::getBooleanCppuType());
236 [ + - ][ + - ]: 24 : rIndexPropertySet->setPropertyValue(sCreateFromChapter, aAny);
237 : 24 : }
238 : :
239 : 28 : SvXMLImportContext* XMLIndexSourceBaseContext::CreateChildContext(
240 : : sal_uInt16 nPrefix,
241 : : const OUString& rLocalName,
242 : : const Reference<XAttributeList> & xAttrList )
243 : : {
244 : 28 : SvXMLImportContext* pContext = NULL;
245 : :
246 [ + - ]: 28 : if (XML_NAMESPACE_TEXT == nPrefix)
247 : : {
248 [ + - ]: 28 : if ( IsXMLToken( rLocalName, XML_INDEX_TITLE_TEMPLATE ) )
249 : : {
250 : 28 : pContext = new XMLIndexTitleTemplateContext(GetImport(),
251 : : rIndexPropertySet,
252 [ + - ]: 28 : nPrefix, rLocalName);
253 : : }
254 [ # # # # ]: 0 : else if ( bUseLevelFormats &&
[ # # ]
255 : 0 : IsXMLToken( rLocalName, XML_INDEX_SOURCE_STYLES ) )
256 : : {
257 : 0 : pContext = new XMLIndexTOCStylesContext(GetImport(),
258 : : rIndexPropertySet,
259 [ # # ]: 0 : nPrefix, rLocalName);
260 : : }
261 : : // else: unknown element in text namespace -> ignore
262 : : }
263 : : // else: unknown namespace -> ignore
264 : :
265 : : // use default context
266 [ - + ]: 28 : if (pContext == NULL)
267 : : {
268 : : pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName,
269 : 0 : xAttrList);
270 : : }
271 : :
272 : 28 : return pContext;
273 : : }
274 : :
275 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|