diff options
Diffstat (limited to 'sw/source/core/swg/SwXMLBlockListContext.cxx')
-rw-r--r-- | sw/source/core/swg/SwXMLBlockListContext.cxx | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/sw/source/core/swg/SwXMLBlockListContext.cxx b/sw/source/core/swg/SwXMLBlockListContext.cxx new file mode 100644 index 000000000000..1fb2659c9a2d --- /dev/null +++ b/sw/source/core/swg/SwXMLBlockListContext.cxx @@ -0,0 +1,250 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" +#include <SwXMLBlockListContext.hxx> +#include <SwXMLBlockImport.hxx> +#include <SwXMLTextBlocks.hxx> +#include <xmloff/nmspmap.hxx> +#include <xmloff/xmlnmspe.hxx> +#include <unotools/charclass.hxx> +#include <swtypes.hxx> + +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star; +using namespace ::xmloff::token; +using ::rtl::OUString; + +SwXMLBlockListContext::SwXMLBlockListContext( + SwXMLBlockListImport& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< + xml::sax::XAttributeList > & xAttrList ) : + SvXMLImportContext ( rImport, nPrefix, rLocalName ), + rLocalRef (rImport) +{ + sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; + for (sal_Int16 i=0; i < nAttrCount; i++) + { + const OUString& rAttrName = xAttrList->getNameByIndex( i ); + OUString aLocalName; + sal_uInt16 nPrefx = rImport.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName); + const OUString& rAttrValue = xAttrList->getValueByIndex( i ); + if ( XML_NAMESPACE_BLOCKLIST == nPrefx ) + { + if ( IsXMLToken ( aLocalName, XML_LIST_NAME ) ) + { + rImport.getBlockList().SetName(rAttrValue); + break; + } + } + } +} + +SwXMLBlockListContext::~SwXMLBlockListContext ( void ) +{ +} + +SvXMLImportContext *SwXMLBlockListContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList > & xAttrList ) +{ + SvXMLImportContext *pContext = 0; + if (nPrefix == XML_NAMESPACE_BLOCKLIST && + IsXMLToken ( rLocalName, XML_BLOCK ) ) + pContext = new SwXMLBlockContext (rLocalRef, nPrefix, rLocalName, xAttrList); + else + pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName); + return pContext; +} + +SwXMLBlockContext::SwXMLBlockContext( + SwXMLBlockListImport& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< + xml::sax::XAttributeList > & xAttrList ) : + SvXMLImportContext ( rImport, nPrefix, rLocalName ), + rLocalRef(rImport) +{ + static const CharClass & rCC = GetAppCharClass(); + String aShort, aLong, aPackageName; + BOOL bTextOnly = FALSE; + + sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; + for (sal_Int16 i=0; i < nAttrCount; i++) + { + const OUString& rAttrName = xAttrList->getNameByIndex( i ); + OUString aLocalName; + sal_uInt16 nPrefx = rImport.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName); + const OUString& rAttrValue = xAttrList->getValueByIndex( i ); + if (XML_NAMESPACE_BLOCKLIST == nPrefx) + { + if ( IsXMLToken ( aLocalName, XML_ABBREVIATED_NAME ) ) + { + aShort = rCC.upper(rAttrValue); + } + else if ( IsXMLToken ( aLocalName, XML_NAME ) ) + { + aLong = rAttrValue; + } + else if ( IsXMLToken ( aLocalName, XML_PACKAGE_NAME ) ) + { + aPackageName = rAttrValue; + } + else if ( IsXMLToken ( aLocalName, XML_UNFORMATTED_TEXT ) ) + { + if ( IsXMLToken ( rAttrValue, XML_TRUE ) ) + bTextOnly = TRUE; + } + } + } + if (!aShort.Len() || !aLong.Len() || !aPackageName.Len()) + return; + rImport.getBlockList().AddName( aShort, aLong, aPackageName, bTextOnly); +} + +SwXMLBlockContext::~SwXMLBlockContext ( void ) +{ +} + +SwXMLTextBlockDocumentContext::SwXMLTextBlockDocumentContext( + SwXMLTextBlockImport& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< + xml::sax::XAttributeList > & ) : + SvXMLImportContext ( rImport, nPrefix, rLocalName ), + rLocalRef(rImport) +{ +} + +SvXMLImportContext *SwXMLTextBlockDocumentContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList > & xAttrList ) +{ + SvXMLImportContext *pContext = 0; + if (nPrefix == XML_NAMESPACE_OFFICE && + IsXMLToken ( rLocalName, XML_BODY ) ) + pContext = new SwXMLTextBlockBodyContext (rLocalRef, nPrefix, rLocalName, xAttrList); + else + pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName); + return pContext; +} +SwXMLTextBlockDocumentContext::~SwXMLTextBlockDocumentContext ( void ) +{ +} + + +SwXMLTextBlockTextContext::SwXMLTextBlockTextContext( + SwXMLTextBlockImport& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< + xml::sax::XAttributeList > & ) : + SvXMLImportContext ( rImport, nPrefix, rLocalName ), + rLocalRef(rImport) +{ +} + +SvXMLImportContext *SwXMLTextBlockTextContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList > & xAttrList ) +{ + SvXMLImportContext *pContext = 0; + if (nPrefix == XML_NAMESPACE_TEXT && + IsXMLToken ( rLocalName, XML_P ) ) + pContext = new SwXMLTextBlockParContext (rLocalRef, nPrefix, rLocalName, xAttrList); + else + pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName); + return pContext; +} +SwXMLTextBlockTextContext::~SwXMLTextBlockTextContext ( void ) +{ +} + + +SwXMLTextBlockBodyContext::SwXMLTextBlockBodyContext( + SwXMLTextBlockImport& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< + xml::sax::XAttributeList > & ) : + SvXMLImportContext ( rImport, nPrefix, rLocalName ), + rLocalRef(rImport) +{ +} + +SvXMLImportContext *SwXMLTextBlockBodyContext::CreateChildContext( + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList > & xAttrList ) +{ + SvXMLImportContext *pContext = 0; + if (nPrefix == XML_NAMESPACE_OFFICE && + IsXMLToken ( rLocalName, XML_TEXT ) ) + pContext = new SwXMLTextBlockTextContext (rLocalRef, nPrefix, rLocalName, xAttrList); + else if (nPrefix == XML_NAMESPACE_TEXT && + IsXMLToken ( rLocalName, XML_P ) ) + pContext = new SwXMLTextBlockParContext (rLocalRef, nPrefix, rLocalName, xAttrList); + else + pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName); + return pContext; +} +SwXMLTextBlockBodyContext::~SwXMLTextBlockBodyContext ( void ) +{ +} +SwXMLTextBlockParContext::SwXMLTextBlockParContext( + SwXMLTextBlockImport& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference< + xml::sax::XAttributeList > & ) : + SvXMLImportContext ( rImport, nPrefix, rLocalName ), + rLocalRef(rImport) +{ +} + +void SwXMLTextBlockParContext::Characters( const ::rtl::OUString& rChars ) +{ + rLocalRef.m_rText.Append ( rChars.getStr()); +} +SwXMLTextBlockParContext::~SwXMLTextBlockParContext ( void ) +{ + if (rLocalRef.bTextOnly) + rLocalRef.m_rText.AppendAscii( "\015" ); + else + { + if (rLocalRef.m_rText.GetChar ( rLocalRef.m_rText.Len()) != ' ' ) + rLocalRef.m_rText.AppendAscii( " " ); + } +} |