1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include "XMLIndexSourceBaseContext.hxx"
21 #include <com/sun/star/beans/XPropertySet.hpp>
22 #include "XMLIndexTitleTemplateContext.hxx"
23 #include "XMLIndexTOCStylesContext.hxx"
24 #include <xmloff/xmlictxt.hxx>
25 #include <xmloff/xmlimp.hxx>
26 #include <xmloff/xmlnamespace.hxx>
27 #include <xmloff/namespacemap.hxx>
28 #include <xmloff/xmltoken.hxx>
29 #include <sax/tools/converter.hxx>
30 #include <rtl/ustring.hxx>
33 using namespace ::xmloff::token
;
35 using ::com::sun::star::beans::XPropertySet
;
36 using ::com::sun::star::uno::Reference
;
37 using ::com::sun::star::uno::Any
;
38 using ::com::sun::star::xml::sax::XAttributeList
;
40 const SvXMLTokenMapEntry aIndexSourceTokenMap
[] =
44 XML_TOK_INDEXSOURCE_OUTLINE_LEVEL
},
47 XML_TOK_INDEXSOURCE_USE_INDEX_MARKS
},
50 XML_TOK_INDEXSOURCE_INDEX_SCOPE
},
52 XML_RELATIVE_TAB_STOP_POSITION
,
53 XML_TOK_INDEXSOURCE_RELATIVE_TABS
} ,
55 XML_USE_OTHER_OBJECTS
,
56 XML_TOK_INDEXSOURCE_USE_OTHER_OBJECTS
},
58 XML_USE_SPREADSHEET_OBJECTS
,
59 XML_TOK_INDEXSOURCE_USE_SHEET
},
61 XML_USE_CHART_OBJECTS
,
62 XML_TOK_INDEXSOURCE_USE_CHART
},
65 XML_TOK_INDEXSOURCE_USE_DRAW
},
67 XML_USE_IMAGE_OBJECTS
,
68 XML_TOK_INDEXSOURCE_USE_IMAGE
},
71 XML_TOK_INDEXSOURCE_USE_MATH
},
73 XML_MAIN_ENTRY_STYLE_NAME
,
74 XML_TOK_INDEXSOURCE_MAIN_ENTRY_STYLE
},
77 XML_TOK_INDEXSOURCE_IGNORE_CASE
},
79 XML_ALPHABETICAL_SEPARATORS
,
80 XML_TOK_INDEXSOURCE_SEPARATORS
},
83 XML_TOK_INDEXSOURCE_COMBINE_ENTRIES
},
85 XML_COMBINE_ENTRIES_WITH_DASH
,
86 XML_TOK_INDEXSOURCE_COMBINE_WITH_DASH
},
88 XML_USE_KEYS_AS_ENTRIES
,
89 XML_TOK_INDEXSOURCE_KEYS_AS_ENTRIES
},
91 XML_COMBINE_ENTRIES_WITH_PP
,
92 XML_TOK_INDEXSOURCE_COMBINE_WITH_PP
},
94 XML_CAPITALIZE_ENTRIES
,
95 XML_TOK_INDEXSOURCE_CAPITALIZE
},
98 XML_TOK_INDEXSOURCE_USE_OBJECTS
},
101 XML_TOK_INDEXSOURCE_USE_GRAPHICS
},
102 { XML_NAMESPACE_TEXT
,
104 XML_TOK_INDEXSOURCE_USE_TABLES
},
105 { XML_NAMESPACE_TEXT
,
106 XML_USE_FLOATING_FRAMES
,
107 XML_TOK_INDEXSOURCE_USE_FRAMES
},
108 { XML_NAMESPACE_TEXT
,
109 XML_COPY_OUTLINE_LEVELS
,
110 XML_TOK_INDEXSOURCE_COPY_OUTLINE_LEVELS
},
111 { XML_NAMESPACE_TEXT
,
113 XML_TOK_INDEXSOURCE_USE_CAPTION
},
114 { XML_NAMESPACE_TEXT
,
115 XML_CAPTION_SEQUENCE_NAME
,
116 XML_TOK_INDEXSOURCE_SEQUENCE_NAME
},
117 { XML_NAMESPACE_TEXT
,
118 XML_CAPTION_SEQUENCE_FORMAT
,
119 XML_TOK_INDEXSOURCE_SEQUENCE_FORMAT
},
120 { XML_NAMESPACE_TEXT
,
122 XML_TOK_INDEXSOURCE_COMMA_SEPARATED
},
123 { XML_NAMESPACE_TEXT
,
124 XML_USE_INDEX_SOURCE_STYLES
,
125 XML_TOK_INDEXSOURCE_USE_INDEX_SOURCE_STYLES
},
126 { XML_NAMESPACE_TEXT
, XML_SORT_ALGORITHM
,
127 XML_TOK_INDEXSOURCE_SORT_ALGORITHM
},
128 { XML_NAMESPACE_STYLE
, XML_RFC_LANGUAGE_TAG
, XML_TOK_INDEXSOURCE_RFC_LANGUAGE_TAG
},
129 { XML_NAMESPACE_FO
, XML_LANGUAGE
, XML_TOK_INDEXSOURCE_LANGUAGE
},
130 { XML_NAMESPACE_FO
, XML_SCRIPT
, XML_TOK_INDEXSOURCE_SCRIPT
},
131 { XML_NAMESPACE_FO
, XML_COUNTRY
, XML_TOK_INDEXSOURCE_COUNTRY
},
132 { XML_NAMESPACE_TEXT
, XML_INDEX_NAME
, XML_TOK_INDEXSOURCE_USER_INDEX_NAME
},
133 { XML_NAMESPACE_TEXT
,
134 XML_USE_OUTLINE_LEVEL
,
135 XML_TOK_INDEXSOURCE_USE_OUTLINE_LEVEL
},
141 XMLIndexSourceBaseContext::XMLIndexSourceBaseContext(
142 SvXMLImport
& rImport
,
144 const OUString
& rLocalName
,
145 Reference
<XPropertySet
> & rPropSet
,
147 : SvXMLImportContext(rImport
, nPrfx
, rLocalName
)
148 , bUseLevelFormats(bLevelFormats
)
149 , bChapterIndex(false)
150 , bRelativeTabs(true)
151 , rIndexPropertySet(rPropSet
)
155 XMLIndexSourceBaseContext::~XMLIndexSourceBaseContext()
159 void XMLIndexSourceBaseContext::StartElement(
160 const Reference
<XAttributeList
> & xAttrList
)
162 static const SvXMLTokenMap
aTokenMap(aIndexSourceTokenMap
);
164 // process attributes
165 sal_Int16 nLength
= xAttrList
->getLength();
166 for(sal_Int16 i
=0; i
<nLength
; i
++)
168 // map to IndexSourceParamEnum
170 sal_uInt16 nPrefix
= GetImport().GetNamespaceMap().
171 GetKeyByAttrName( xAttrList
->getNameByIndex(i
), &sLocalName
);
172 sal_uInt16 nToken
= aTokenMap
.Get(nPrefix
, sLocalName
);
175 ProcessAttribute(static_cast<enum IndexSourceParamEnum
>(nToken
),
176 xAttrList
->getValueByIndex(i
));
180 void XMLIndexSourceBaseContext::ProcessAttribute(
181 enum IndexSourceParamEnum eParam
,
182 const OUString
& rValue
)
186 case XML_TOK_INDEXSOURCE_INDEX_SCOPE
:
187 if ( IsXMLToken( rValue
, XML_CHAPTER
) )
189 bChapterIndex
= true;
193 case XML_TOK_INDEXSOURCE_RELATIVE_TABS
:
196 if (::sax::Converter::convertBool(bTmp
, rValue
))
198 bRelativeTabs
= bTmp
;
204 // unknown attribute -> ignore
209 void XMLIndexSourceBaseContext::endFastElement(sal_Int32
)
211 rIndexPropertySet
->setPropertyValue("IsRelativeTabstops", css::uno::Any(bRelativeTabs
));
212 rIndexPropertySet
->setPropertyValue("CreateFromChapter", css::uno::Any(bChapterIndex
));
215 SvXMLImportContextRef
XMLIndexSourceBaseContext::CreateChildContext(
217 const OUString
& rLocalName
,
218 const Reference
<XAttributeList
> & /*xAttrList*/ )
220 SvXMLImportContextRef xContext
;
222 if (XML_NAMESPACE_TEXT
== nPrefix
)
224 if ( IsXMLToken( rLocalName
, XML_INDEX_TITLE_TEMPLATE
) )
226 xContext
= new XMLIndexTitleTemplateContext(GetImport(),
228 nPrefix
, rLocalName
);
230 else if ( bUseLevelFormats
&&
231 IsXMLToken( rLocalName
, XML_INDEX_SOURCE_STYLES
) )
233 xContext
= new XMLIndexTOCStylesContext(GetImport(),
235 nPrefix
, rLocalName
);
237 // else: unknown element in text namespace -> ignore
239 // else: unknown namespace -> ignore
244 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */