LibreOffice Module sw (master)  1
SwXMLBlockImport.cxx
Go to the documentation of this file.
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 <SwXMLBlockImport.hxx>
21 #include <SwXMLTextBlocks.hxx>
22 #include <xmloff/xmlictxt.hxx>
23 #include <unotools/charclass.hxx>
24 #include <swtypes.hxx>
25 
26 #if defined __clang__
27 #if __has_warning("-Wdeprecated-register")
28 #pragma GCC diagnostic push
29 #pragma GCC diagnostic ignored "-Wdeprecated-register"
30 #endif
31 #endif
32 #include <tokens.cxx>
33 #if defined __clang__
34 #if __has_warning("-Wdeprecated-register")
35 #pragma GCC diagnostic pop
36 #endif
37 #endif
38 
39 using namespace ::com::sun::star::uno;
40 using namespace ::com::sun::star;
41 using namespace css::xml::sax;
42 
45 
47 {
48 private:
50 
51 public:
53  const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList );
54 
55  virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
56  sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override;
57 };
58 
60 {
61 public:
63  const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList );
64 };
65 
67 {
68 private:
70 
71 public:
73 
74  virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
75  sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override;
76 };
77 
79 {
80 private:
82 
83 public:
85 
86  virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
87  sal_Int32, const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override;
88 };
89 
91 {
92 private:
94 
95 public:
97 
98  virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
99  sal_Int32 Element,
100  const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override;
101 };
102 
104 {
105 private:
107 
108 public:
110 
111  virtual void SAL_CALL characters( const OUString & aChars ) override;
112 
113  virtual ~SwXMLTextBlockParContext() override;
114 };
115 
117 {
118 }
119 
121 {
122 }
123 
125 {
126  return getTokenDirect( reinterpret_cast< const char* >( Identifier.getConstArray() ), Identifier.getLength() );
127 }
128 
130 {
131  return Sequence< sal_Int8 >();
132 }
133 
134 sal_Int32 SwXMLTextBlockTokenHandler::getTokenDirect( const char *pTag, sal_Int32 nLength ) const
135 {
136  if( !nLength )
137  nLength = strlen( pTag );
138  const struct xmltoken* pToken = TextBlockTokens::in_word_set( pTag, nLength );
139  return pToken ? pToken->nToken : XML_TOKEN_INVALID;
140 }
141 
143 {
144 }
145 
147 {
148 }
149 
151 {
152  return getTokenDirect( reinterpret_cast< const char* >( Identifier.getConstArray() ), Identifier.getLength() );
153 }
154 
156 {
157  return Sequence< sal_Int8 >();
158 }
159 
160 sal_Int32 SwXMLBlockListTokenHandler::getTokenDirect( const char *pTag, sal_Int32 nLength ) const
161 {
162  if( !nLength )
163  nLength = strlen( pTag );
164  const struct xmltoken* pToken = BlockListTokens::in_word_set( pTag, nLength );
165  return pToken ? pToken->nToken : XML_TOKEN_INVALID;
166 }
167 
169  SwXMLBlockListImport& rImport,
170  const uno::Reference< xml::sax::XFastAttributeList > & xAttrList ) :
171  SvXMLImportContext( rImport ),
172  rLocalRef( rImport )
173 {
174  if( xAttrList.is() && xAttrList->hasAttribute( SwXMLBlockListToken::LIST_NAME ) )
175  rImport.getBlockList().SetName( xAttrList->getValue( SwXMLBlockListToken::LIST_NAME ) );
176 }
177 
178 uno::Reference< ::xml::sax::XFastContextHandler > SAL_CALL
180  const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
181 {
182  if ( Element == SwXMLBlockListToken::BLOCK )
183  return new SwXMLBlockContext( rLocalRef, xAttrList );
184  else
185  return new SvXMLImportContext( rLocalRef );
186 }
187 
189  SwXMLBlockListImport& rImport,
190  const uno::Reference< xml::sax::XFastAttributeList > & xAttrList ) :
191  SvXMLImportContext( rImport )
192 {
193  static const CharClass & rCC = GetAppCharClass();
194  OUString aShort, aLong, aPackageName;
195  bool bTextOnly = false;
196  if( xAttrList.is() )
197  {
198  if( xAttrList->hasAttribute( SwXMLBlockListToken::ABBREVIATED_NAME ) )
199  aShort = rCC.uppercase( xAttrList->getValue( SwXMLBlockListToken::ABBREVIATED_NAME ) );
200  if( xAttrList->hasAttribute( SwXMLBlockListToken::NAME ) )
201  aLong = xAttrList->getValue( SwXMLBlockListToken::NAME );
202  if( xAttrList->hasAttribute( SwXMLBlockListToken::PACKAGE_NAME ) )
203  aPackageName = xAttrList->getValue( SwXMLBlockListToken::PACKAGE_NAME );
204  if( xAttrList->hasAttribute( SwXMLBlockListToken::UNFORMATTED_TEXT ) )
205  {
206  OUString rAttrValue( xAttrList->getValue( SwXMLBlockListToken::UNFORMATTED_TEXT ) );
207  if( IsXMLToken( rAttrValue, XML_TRUE ) )
208  bTextOnly = true;
209  }
210  }
211  if (aShort.isEmpty() || aLong.isEmpty() || aPackageName.isEmpty())
212  return;
213  rImport.getBlockList().AddName( aShort, aLong, aPackageName, bTextOnly);
214 }
215 
217  SwXMLTextBlockImport& rImport ) :
218  SvXMLImportContext( rImport ),
219  rLocalRef(rImport)
220 {
221 }
222 
223 uno::Reference< ::xml::sax::XFastContextHandler > SAL_CALL
225  const uno::Reference< xml::sax::XFastAttributeList > & /*xAttrList*/ )
226 {
227  if ( Element == SwXMLTextBlockToken::OFFICE_BODY )
228  return new SwXMLTextBlockBodyContext( rLocalRef );
229  else
230  return new SvXMLImportContext( rLocalRef );
231 }
232 
234  SwXMLTextBlockImport& rImport) :
235  SvXMLImportContext ( rImport ),
236  rLocalRef( rImport )
237 {
238 }
239 
240 uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
242  const uno::Reference< xml::sax::XFastAttributeList > & /*xAttrList*/ )
243 {
244  if ( Element == SwXMLTextBlockToken::TEXT_P )
245  return new SwXMLTextBlockParContext( rLocalRef );
246  else
247  return new SvXMLImportContext( rLocalRef );
248 }
249 
251  SwXMLTextBlockImport& rImport ) :
252  SvXMLImportContext( rImport ),
253  rLocalRef(rImport)
254 {
255 }
256 
257 uno::Reference < xml::sax::XFastContextHandler > SAL_CALL
259  const uno::Reference< xml::sax::XFastAttributeList > & /*xAttrList*/ )
260 {
261  if( Element == SwXMLTextBlockToken::OFFICE_TEXT )
262  return new SwXMLTextBlockTextContext( rLocalRef );
263  else if( Element == SwXMLTextBlockToken::TEXT_P )
264  return new SwXMLTextBlockParContext( rLocalRef );
265  else
266  return new SvXMLImportContext( rLocalRef );
267 }
268 
270  SwXMLTextBlockImport& rImport ) :
271  SvXMLImportContext( rImport ),
272  rLocalRef( rImport )
273 {
274 }
275 
276 void SAL_CALL SwXMLTextBlockParContext::characters( const OUString & aChars )
277 {
278  rLocalRef.m_rText += aChars;
279 }
280 
282 {
283  if (rLocalRef.bTextOnly)
284  rLocalRef.m_rText += "\015";
285  else
286  {
287  if (!rLocalRef.m_rText.endsWith( " " ))
288  rLocalRef.m_rText += " ";
289  }
290 }
291 
292 // SwXMLBlockListImport //////////////////////////////
294  const uno::Reference< uno::XComponentContext >& rContext,
295  SwXMLTextBlocks &rBlocks )
296 : SvXMLImport( rContext, "", SvXMLImportFlags::NONE ),
297  rBlockList (rBlocks)
298 {
299 }
300 
302  throw ()
303 {
304 }
305 
307  const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
308 {
309  if( Element == SwXMLBlockListToken::BLOCK_LIST )
310  return new SwXMLBlockListContext( *this, xAttrList );
311  else
312  return SvXMLImport::CreateFastContext( Element, xAttrList );
313 }
314 
316  const uno::Reference< uno::XComponentContext >& rContext,
317  OUString & rNewText,
318  bool bNewTextOnly )
319 : SvXMLImport(rContext, "", SvXMLImportFlags::ALL ),
320  bTextOnly ( bNewTextOnly ),
321  m_rText ( rNewText )
322 {
323 }
324 
326  throw()
327 {
328 }
329 
331  const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
332 {
333  if( Element == SwXMLTextBlockToken::OFFICE_DOCUMENT ||
335  return new SwXMLTextBlockDocumentContext( *this );
336  else
337  return SvXMLImport::CreateFastContext( Element, xAttrList );
338 }
339 
341 {
342 }
343 
344 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual ~SwXMLBlockListTokenHandler() override
bool IsXMLToken(const OUString &rString, enum XMLTokenEnum eToken)
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
SwXMLTextBlockBodyContext(SwXMLTextBlockImport &rImport)
SwXMLBlockListContext(SwXMLBlockListImport &rImport, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList)
SwXMLTextBlockImport & rLocalRef
SwXMLTextBlockParContext(SwXMLTextBlockImport &rImport)
SvXMLImportFlags
virtual void SAL_CALL characters(const OUString &aChars) override
virtual ~SwXMLBlockListImport() override
SwXMLBlockListImport & rLocalRef
virtual SvXMLImportContext * CreateFastContext(sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
sal_Int32 SAL_CALL getTokenFromUTF8(const css::uno::Sequence< sal_Int8 > &Identifier) override
virtual ~SwXMLTextBlockTokenHandler() override
sal_Int32 SAL_CALL getTokenFromUTF8(const css::uno::Sequence< sal_Int8 > &Identifier) override
SwXMLTextBlockDocumentContext(SwXMLTextBlockImport &rImport)
SwXMLTextBlockImport & rLocalRef
SwXMLTextBlockImport & rLocalRef
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
XML_TOKEN_INVALID
SwXMLTextBlockTextContext(SwXMLTextBlockImport &rImport)
virtual ~SwXMLTextBlockImport() override
SvXMLImportContext(SvXMLImport &rImport, sal_uInt16 nPrfx, const OUString &rLName)
virtual SvXMLImportContext * CreateFastContext(sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
void AddName(const OUString &, const OUString &, const OUString &, bool bOnlyText)
SwXMLTextBlocks & getBlockList()
SwXMLBlockContext(SwXMLBlockListImport &rImport, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList)
SwXMLTextBlockImport & rLocalRef
css::uno::Sequence< sal_Int8 > SAL_CALL getUTF8Identifier(sal_Int32 Token) override
virtual sal_Int32 getTokenDirect(const char *pTag, sal_Int32 nLength) const override
virtual sal_Int32 getTokenDirect(const char *pTag, sal_Int32 nLength) const override
SwXMLTextBlockImport(const css::uno::Reference< css::uno::XComponentContext > &rContext, OUString &rNewText, bool bNewTextOnly)
virtual SvXMLImportContext * CreateFastContext(sal_Int32 Element, const ::css::uno::Reference< ::css::xml::sax::XFastAttributeList > &xAttrList)
SwXMLBlockListImport(const css::uno::Reference< css::uno::XComponentContext > &rContext, SwXMLTextBlocks &rBlocks)
void SetName(const OUString &rName)
Return physical file name.
Definition: swblocks.hxx:99
XML_TRUE
css::uno::Sequence< sal_Int8 > SAL_CALL getUTF8Identifier(sal_Int32 Token) override
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
virtual ~SwXMLTextBlockParContext() override
CharClass & GetAppCharClass()
Definition: init.cxx:709
virtual void SAL_CALL endDocument() override
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override