diff options
author | Daniel Sikeler <d.sikeler94@gmail.com> | 2015-08-16 12:58:39 +0200 |
---|---|---|
committer | Daniel Sikeler <d.sikeler94@gmail.com> | 2015-08-16 13:03:46 +0200 |
commit | 2bb012d86963dfd41e99a2ada5964117514d8c9d (patch) | |
tree | 393445ce52cdb11bed8234646e19840b1a1ec8df | |
parent | 8bd9adbe429d8afcf26e6d28131a05de37214b64 (diff) |
fastparser impl. for XMLMetaImportContext
Change-Id: Ie565dcf1d66c558e8ddfd54d7ba9e16874c80c23
-rw-r--r-- | xmloff/source/text/txtparai.cxx | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx index 6dba0fe1fcb5..2bf931e97e90 100644 --- a/xmloff/source/text/txtparai.cxx +++ b/xmloff/source/text/txtparai.cxx @@ -1081,22 +1081,40 @@ public: const OUString& i_rLocalName, XMLHints_Impl& i_rHints, bool & i_rIgnoreLeadingSpace ); + XMLMetaImportContextBase( + SvXMLImport& rImport, + sal_Int32 Element, + XMLHints_Impl& rHints, + bool& rIgnoreLeadingSpace ); virtual ~XMLMetaImportContextBase(); virtual void StartElement( const Reference<xml::sax::XAttributeList> & i_xAttrList) SAL_OVERRIDE; + virtual void startFastElement( sal_Int32 Element, + const Reference< xml::sax::XFastAttributeList >& xAttrList ) + throw (RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; virtual void EndElement() SAL_OVERRIDE; + virtual void endFastElement( sal_Int32 Element ) + throw (RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; virtual SvXMLImportContext *CreateChildContext( sal_uInt16 i_nPrefix, const OUString& i_rLocalName, const Reference< xml::sax::XAttributeList > & i_xAttrList) SAL_OVERRIDE; + virtual Reference< xml::sax::XFastContextHandler > + createFastChildContext( sal_Int32 Element, + const Reference< xml::sax::XFastAttributeList >& xAttrList ) + throw (RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; virtual void Characters( const OUString& i_rChars ) SAL_OVERRIDE; + virtual void characters( const OUString& rChars ) + throw (RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; virtual void ProcessAttribute(sal_uInt16 const i_nPrefix, OUString const & i_rLocalName, OUString const & i_rValue); + virtual void ProcessAttribute( sal_Int32 Element, + const OUString& rValue ); virtual void InsertMeta(const Reference<XTextRange> & i_xInsertionRange) = 0; @@ -1117,6 +1135,18 @@ XMLMetaImportContextBase::XMLMetaImportContextBase( { } +XMLMetaImportContextBase::XMLMetaImportContextBase( + SvXMLImport& rImport, + sal_Int32 /*Element*/, + XMLHints_Impl& rHints, + bool& rIgnoreLeadingSpace ) +: SvXMLImportContext( rImport ), + m_rHints( rHints ), + m_rIgnoreLeadingSpace( rIgnoreLeadingSpace ), + m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) +{ +} + XMLMetaImportContextBase::~XMLMetaImportContextBase() { } @@ -1138,6 +1168,23 @@ void XMLMetaImportContextBase::StartElement( } } +void XMLMetaImportContextBase::startFastElement( + sal_Int32 /*Element*/, + const Reference< xml::sax::XFastAttributeList >& xAttrList ) + throw (RuntimeException, xml::sax::SAXException, std::exception) +{ + if( !xAttrList.is() ) + return; + + Sequence< xml::FastAttribute > attributes = xAttrList->getFastAttributes(); + xml::FastAttribute *attribs = attributes.getArray(); + for( sal_Int16 i = 0; i < attributes.getLength(); i++ ) + { + xml::FastAttribute attr = attribs[i]; + ProcessAttribute( attr.Token, attr.Value ); + } +} + void XMLMetaImportContextBase::EndElement() { SAL_WARN_IF(!m_xStart.is(), "xmloff.text", "no mxStart?"); @@ -1155,6 +1202,25 @@ void XMLMetaImportContextBase::EndElement() InsertMeta(xInsertionCursor); } +void XMLMetaImportContextBase::endFastElement( sal_Int32 /*Element*/ ) + throw (RuntimeException, xml::sax::SAXException, std::exception) +{ + SAL_WARN_IF(!m_xStart.is(), "xmloff.text", "no mxStart?"); + if( !m_xStart.is() ) + return; + + const Reference< XTextRange > xEndRange( + GetImport().GetTextImport()->GetCursorAsRange()->getStart() ); + + // create range for insertion + const Reference< XTextCursor > xInsertionCursor( + GetImport().GetTextImport()->GetText()->createTextCursorByRange( + xEndRange ) ); + xInsertionCursor->gotoRange( m_xStart, sal_True ); + + InsertMeta( xInsertionCursor ); +} + SvXMLImportContext * XMLMetaImportContextBase::CreateChildContext( sal_uInt16 i_nPrefix, const OUString& i_rLocalName, const Reference< xml::sax::XAttributeList > & i_xAttrList ) @@ -1167,11 +1233,30 @@ SvXMLImportContext * XMLMetaImportContextBase::CreateChildContext( i_rLocalName, i_xAttrList, nToken, m_rHints, m_rIgnoreLeadingSpace ); } +Reference< xml::sax::XFastContextHandler > XMLMetaImportContextBase::createFastChildContext( + sal_Int32 Element, + const Reference< xml::sax::XFastAttributeList >& xAttrList ) + throw (RuntimeException, xml::sax::SAXException, std::exception) +{ + const SvXMLTokenMap& rTokenMap( + GetImport().GetTextImport()->GetTextPElemTokenMap() ); + const sal_uInt16 nToken( rTokenMap.Get( Element ) ); + + return XMLImpSpanContext_Impl::createFastChildContext( GetImport(), Element, xAttrList, + nToken, m_rHints, m_rIgnoreLeadingSpace ); +} + void XMLMetaImportContextBase::Characters( const OUString& i_rChars ) { GetImport().GetTextImport()->InsertString(i_rChars, m_rIgnoreLeadingSpace); } +void XMLMetaImportContextBase::characters( const OUString& rChars ) + throw (RuntimeException, xml::sax::SAXException, std::exception) +{ + GetImport().GetTextImport()->InsertString( rChars, m_rIgnoreLeadingSpace ); +} + void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix, OUString const & i_rLocalName, OUString const & i_rValue) { @@ -1181,6 +1266,15 @@ void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix, } } +void XMLMetaImportContextBase::ProcessAttribute( sal_Int32 Element, + const OUString& rValue ) +{ + if( Element == (NAMESPACE | XML_NAMESPACE_XML | XML_id) ) + { + m_XmlId = rValue; + } +} + /** text:meta */ class XMLMetaImportContext : public XMLMetaImportContextBase { |