diff options
Diffstat (limited to 'writerfilter/source/ooxml/OOXMLFastContextHandler.cxx')
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 2526 |
1 files changed, 2526 insertions, 0 deletions
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx new file mode 100644 index 000000000000..d64e95b0a61a --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -0,0 +1,2526 @@ +/************************************************************************* + * + * 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 3sen + * 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. + * + ************************************************************************/ + +#include <stdio.h> +#include <iostream> +#include <set> +#include <rtl/uuid.h> +#include <com/sun/star/drawing/XShapes.hpp> +#include <resourcemodel/QNameToString.hxx> +#include <resourcemodel/util.hxx> +#include <ooxml/resourceids.hxx> +#include <doctok/sprmids.hxx> +#include <ooxml/OOXMLnamespaceids.hxx> +#include "OOXMLFastContextHandler.hxx" +#include "OOXMLFactory.hxx" +#include "Handler.hxx" +#include "ooxmlLoggers.hxx" + +static const ::rtl::OUString aEmptyStr; + +static const sal_uInt8 s0x7[] = { 0x7, 0x0 }; +static const sal_uInt8 s0xd[] = { 0xd, 0x0 }; +static const sal_uInt8 sCR[] = { 0xd, 0x0 }; +static const sal_uInt8 sFtnEdnRef[] = { 0x2, 0x0 }; +static const sal_uInt8 sFtnEdnSep[] = { 0x3, 0x0 }; +static const sal_uInt8 sFtnEdnCont[] = { 0x4, 0x0 }; +static const sal_uInt8 sTab[] = { 0x9, 0x0 }; +static const sal_uInt8 sPgNum[] = { 0x0, 0x0 }; +static const sal_uInt8 sFieldStart[] = { 0x13 }; +static const sal_uInt8 sFieldSep[] = { 0x14 }; +static const sal_uInt8 sFieldEnd[] = { 0x15 }; +static const sal_uInt8 sNoBreakHyphen[] = { 0x1e, 0x0 }; +static const sal_uInt8 sSoftHyphen[] = { 0x1f, 0x0 }; + +namespace writerfilter { +namespace ooxml +{ +using ::com::sun::star::lang::XMultiComponentFactory; +using namespace ::com::sun::star; +using namespace ::std; + +static uno::Sequence< sal_Int8 > CreateUnoTunnelId() +{ + static osl::Mutex aCreateMutex; + osl::Guard<osl::Mutex> aGuard( aCreateMutex ); + uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + return aSeq; +} + +static string resourceToString +(OOXMLFastContextHandler::ResourceEnum_t eResource) +{ + string sResult; + + switch (eResource) + { + case OOXMLFastContextHandler::STREAM: + sResult = "Stream"; + break; + case OOXMLFastContextHandler::PROPERTIES: + sResult = "Properties"; + break; + case OOXMLFastContextHandler::TABLE: + sResult = "Table"; + break; + case OOXMLFastContextHandler::SHAPE: + sResult = "Shape"; + break; + default: + sResult = "??"; + } + + return sResult; +} + +set<OOXMLFastContextHandler *> aSetContexts; + + +class OOXMLIdToString : public IdToString +{ +public: + OOXMLIdToString() : IdToString() {} + virtual ~OOXMLIdToString() {} + + virtual string toString(const Id & rId) const + { + string s((*QNameToString::Instance())(rId)); + + if (s.size() == 0) + s = "(fasttoken)" + fastTokenToId(rId); + else + s = "(qname)" + s; + + return s; + } +}; + +/* + class OOXMLFastContextHandler + */ + +sal_uInt32 OOXMLFastContextHandler::mnInstanceCount = 0; + +OOXMLFastContextHandler::OOXMLFastContextHandler +(uno::Reference< uno::XComponentContext > const & context) +: mpParent(NULL), + mId(0), + mnDefine(0), + mnToken(OOXML_FAST_TOKENS_END), + mpStream(NULL), + mnTableDepth(0), + mnInstanceNumber(mnInstanceCount), + mnRefCount(0), + m_xContext(context), + mbFallback(false) +{ + mnInstanceCount++; + aSetContexts.insert(this); + + if (mpParserState.get() == NULL) + mpParserState.reset(new OOXMLParserState()); + + mpParserState->incContextCount(); +} + +OOXMLFastContextHandler::OOXMLFastContextHandler +(OOXMLFastContextHandler * pContext) +: cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>(), + mpParent(pContext), + mId(0), + mnToken(OOXML_FAST_TOKENS_END), + mpStream(NULL), + mnTableDepth(0), + mnInstanceNumber(mnInstanceCount), + mnRefCount(0), + mbFallback(false) +{ + if (pContext != NULL) + { + mpStream = pContext->mpStream; + mpParserState = pContext->mpParserState; + mnTableDepth = pContext->mnTableDepth; + m_xContext = pContext->m_xContext; + } + + if (mpParserState.get() == NULL) + mpParserState.reset(new OOXMLParserState()); + + mnInstanceCount++; + aSetContexts.insert(this); + mpParserState->incContextCount(); +} + +OOXMLFastContextHandler::~OOXMLFastContextHandler() +{ + aSetContexts.erase(this); +} + +void OOXMLFastContextHandler::dumpOpenContexts() +{ + debug_logger->startElement("open-contexts"); + XMLTag aTag("open-contexts"); + + set<OOXMLFastContextHandler *>::iterator aIt(aSetContexts.begin()); + while (aIt != aSetContexts.end()) + { + debug_logger->startElement("open-context"); + debug_logger->addTag((*aIt)->toTag()); + debug_logger->endElement("open-context"); + + aIt++; + } + + static char buffer[256]; + snprintf(buffer, sizeof(buffer), "%" SAL_PRI_SIZET "u", + aSetContexts.size()); + + debug_logger->attribute("count", buffer); + debug_logger->endElement("open-contexts"); +} + +#ifdef DEBUG_MEMORY +void SAL_CALL OOXMLFastContextHandler::acquire() + throw () +{ + mnRefCount++; + + static char buffer[256]; + snprintf(buffer, sizeof(buffer), "%ld: %s: aquire(%ld)", mnInstanceNumber, + getType().c_str(), mnRefCount); + logger("MEMORY", buffer); + + cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>::acquire(); +} + +void SAL_CALL OOXMLFastContextHandler::release() + throw () +{ + static char buffer[256]; + snprintf(buffer, sizeof(buffer), "%s: release(%ld)", mnInstanceNumber, + getType().c_str(), mnRefCount); + logger("MEMORY", buffer); + + cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>::release(); + mnRefCount--; +} +#endif + +sal_uInt32 OOXMLFastContextHandler::getInstanceNumber() const +{ + return mnInstanceNumber; +} + +// ::com::sun::star::xml::sax::XFastContextHandler: +void SAL_CALL OOXMLFastContextHandler::startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("element"); + debug_logger->attribute("token", fastTokenToId(Element)); + debug_logger->attribute("type",getType()); + debug_logger->startElement("at-start"); + debug_logger->addTag(toTag()); + debug_logger->endElement("at-start"); +#endif +#ifdef DEBUG_MEMORY + static char buffer[256]; + snprintf(buffer, sizeof(buffer), "%ld: startFastElement", mnInstanceNumber); + logger("MEMORY", buffer); +#endif + +#if DEBUG + clog << "Token: " << fastTokenToId(Element) << endl; +#endif + attributes(Attribs); + lcl_startFastElement(Element, Attribs); +} + +void SAL_CALL OOXMLFastContextHandler::startUnknownElement +(const ::rtl::OUString & Namespace, const ::rtl::OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +throw (uno::RuntimeException, xml::sax::SAXException) +{ +#ifdef DEBUG_CONTEXT_STACK + debug_logger->startElement("unknown-element"); + debug_logger->attribute("namespace", Namespace); + debug_logger->attribute("name", Name); +#else + (void) Namespace; + (void) Name; +#endif +} + +void SAL_CALL OOXMLFastContextHandler::endFastElement(Token_t Element) +throw (uno::RuntimeException, xml::sax::SAXException) +{ + lcl_endFastElement(Element); + +#ifdef DEBUG_ELEMENT + debug_logger->startElement("at-end"); + debug_logger->addTag(toTag()); + debug_logger->endElement("at-end"); + debug_logger->endElement("element"); +#endif +#ifdef DEBUG_MEMORY + static char buffer[256]; + snprintf(buffer, sizeof(buffer), "%ld: %s:endFastElement", mnInstanceNumber, + getType().c_str()); + logger("MEMORY", buffer); +#endif +} + +void OOXMLFastContextHandler::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + OOXMLFactory::getInstance()->startAction(this, Element); +} + +void OOXMLFastContextHandler::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ +#ifdef DEBUG_CONTEXT_STACK + debug_logger->startElement("endAction"); + debug_logger->endElement("endAction"); + debug_logger->startElement("token"); + debug_logger->chars(fastTokenToId(Element)); + debug_logger->endElement("token"); +#endif + + OOXMLFactory::getInstance()->endAction(this, Element); +} + +void SAL_CALL OOXMLFastContextHandler::endUnknownElement +(const ::rtl::OUString & , const ::rtl::OUString & ) +throw (uno::RuntimeException, xml::sax::SAXException) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("unknown-element"); + debug_logger->endElement("unknown-element"); +#endif +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL + OOXMLFastContextHandler::createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ +#ifdef DEBUG_CONTEXT_STACK + debug_logger->startElement("createFastChildContext"); + debug_logger->attribute("token", fastTokenToId(Element)); + debug_logger->attribute("type", getType()); +#endif + + uno::Reference< xml::sax::XFastContextHandler > xResult + (lcl_createFastChildContext(Element, Attribs)); + +#ifdef DEBUG_CONTEXT_STACK + debug_logger->endElement("createFastChildContext"); +#endif + + return xResult; +} + +uno::Reference< xml::sax::XFastContextHandler > + OOXMLFastContextHandler::lcl_createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + return OOXMLFactory::getInstance()->createFastChildContext(this, Element); +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandler::createUnknownChildContext +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) + throw (uno::RuntimeException, xml::sax::SAXException) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("createUnknownChildContext"); + debug_logger->attribute("namespace", Namespace); + debug_logger->attribute("name", Name); + debug_logger->endElement("createUnknownChildContext"); +#else + (void) Namespace; + (void) Name; +#endif + + return uno::Reference< xml::sax::XFastContextHandler > + (new OOXMLFastContextHandler(*const_cast<const OOXMLFastContextHandler *>(this))); +} + +void SAL_CALL OOXMLFastContextHandler::characters +(const ::rtl::OUString & aChars) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + lcl_characters(aChars); +} + +void OOXMLFastContextHandler::lcl_characters +(const ::rtl::OUString & rString) +throw (uno::RuntimeException, xml::sax::SAXException) +{ + OOXMLFactory::getInstance()->characters(this, rString); +} + +const uno::Sequence< sal_Int8 > & OOXMLFastContextHandler::getUnoTunnelId() +{ + static uno::Sequence< sal_Int8 > aSeq = CreateUnoTunnelId(); + return aSeq; +} + +sal_Int64 SAL_CALL OOXMLFastContextHandler::getSomething( const uno::Sequence< sal_Int8 >& rId ) + throw(uno::RuntimeException) +{ + if( rId.getLength() == 16 + && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return sal::static_int_cast<sal_Int64> + (reinterpret_cast<sal_IntPtr>(this)); + } + + return 0x0; +} + +void OOXMLFastContextHandler::setStream(Stream * pStream) +{ + mpStream = pStream; +} + +OOXMLValue::Pointer_t OOXMLFastContextHandler::getValue() const +{ + return OOXMLValue::Pointer_t(); +} + +void OOXMLFastContextHandler::attributes +(const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + OOXMLFactory::getInstance()->attributes(this, Attribs); +} + +void OOXMLFastContextHandler::startAction(Token_t Element) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("startAction"); +#endif + lcl_startAction(Element); +#ifdef DEBUG_ELEMENT + debug_logger->endElement("startAction"); +#endif +} + +void OOXMLFastContextHandler::lcl_startAction(Token_t Element) +{ + OOXMLFactory::getInstance()->startAction(this, Element); +} + +void OOXMLFastContextHandler::endAction(Token_t Element) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("endAction"); +#endif + lcl_endAction(Element); +#ifdef DEBUG_ELEMENT + debug_logger->endElement("endAction"); +#endif +} + +void OOXMLFastContextHandler::lcl_endAction(Token_t Element) +{ + OOXMLFactory::getInstance()->endAction(this, Element); +} + +XMLTag::Pointer_t OOXMLFastContextHandler::toPropertiesTag + (OOXMLPropertySet::Pointer_t pProps) +{ + XMLTag::Pointer_t pTag; + + if (pProps.get() != NULL) + { + PropertySetToTagHandler aHandler(IdToString::Pointer_t(new OOXMLIdToString())); + + pProps->resolve(aHandler); + pTag = aHandler.getTag(); + } + + return pTag; +} + +XMLTag::Pointer_t OOXMLFastContextHandler::toTag() const +{ + XMLTag::Pointer_t pTag(new XMLTag("context")); + + static char sBuffer[128]; + snprintf(sBuffer, sizeof(sBuffer), "%p", this); + + pTag->addAttr("parent", sBuffer); + pTag->addAttr("type", getType()); + pTag->addAttr("resource", getResourceString()); + pTag->addAttr("token", fastTokenToId(getToken())); + pTag->addAttr("id", (*QNameToString::Instance())(getId())); + + OOXMLValue::Pointer_t pVal(getValue()); + + if (pVal.get() != NULL) + pTag->addAttr("value", pVal->toString()); + else + pTag->addAttr("value", "(null)"); + + XMLTag::Pointer_t pTagProps(toPropertiesTag(getPropertySet())); + if (pTagProps.get() != NULL) + pTag->addTag(pTagProps); + + pTag->addTag(mpParserState->toTag()); + + return pTag; +} + +string OOXMLFastContextHandler::toString() const +{ + return toTag()->toString(); +} + +string OOXMLFastContextHandler::getResourceString() const +{ + return resourceToString(getResource()); +} + +void OOXMLFastContextHandler::setId(Id rId) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("setId"); + + static char sBuffer[256]; + snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, rId); + + debug_logger->attribute("id", sBuffer); + debug_logger->chars((*QNameToString::Instance())(rId)); + debug_logger->endElement("setId"); +#endif + + mId = rId; +} + +Id OOXMLFastContextHandler::getId() const +{ + return mId; +} + +void OOXMLFastContextHandler::setDefine(Id nDefine) +{ + mnDefine = nDefine; +} + +Id OOXMLFastContextHandler::getDefine() const +{ + return mnDefine; +} + +void OOXMLFastContextHandler::setFallback(bool bFallback) +{ + mbFallback = bFallback; +} + +bool OOXMLFastContextHandler::isFallback() const +{ + return mbFallback; +} + +OOXMLParserState::Pointer_t OOXMLFastContextHandler::getParserState() const +{ + return mpParserState; +} + +void OOXMLFastContextHandler::setToken(Token_t nToken) +{ + mnToken = nToken; + +#ifdef DEBUG_CONTEXT_STACK + msTokenString = fastTokenToId(mnToken); +#endif +} + +Token_t OOXMLFastContextHandler::getToken() const +{ + return mnToken; +} + +void OOXMLFastContextHandler::mark(const Id & rId, OOXMLValue::Pointer_t pVal) +{ + OOXMLPropertySetImpl::Pointer_t pPropSet(new OOXMLPropertySetImpl()); + OOXMLPropertyImpl::Pointer_t pProperty + (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE)); + +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("mark"); + debug_logger->chars(xmlify(pProperty->toString())); + debug_logger->endElement("mark"); +#endif + pPropSet->add(pProperty); + mpStream->props(pPropSet); +} + +void OOXMLFastContextHandler::setParent +(OOXMLFastContextHandler * pParent) +{ + mpParent = pParent; +} + +OOXMLPropertySet * OOXMLFastContextHandler::getPicturePropSet +(const ::rtl::OUString & rId) +{ + return dynamic_cast<OOXMLDocumentImpl *>(mpParserState->getDocument())-> + getPicturePropSet(rId); +} + +void OOXMLFastContextHandler::sendTableDepth() const +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendTableDepth"); +#endif + + if (mnTableDepth > 0) + { + OOXMLPropertySet * pProps = new OOXMLPropertySetImpl(); + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(mnTableDepth)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PTableDepth, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(1)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PFInTable, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("props"); + debug_logger->chars(pProps->toString()); + debug_logger->endElement("props"); +#endif + mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps)); + } +#ifdef DEBUG_ELEMENT + debug_logger->endElement("sendTableDepth"); +#endif +} + +void OOXMLFastContextHandler::setHandle() +{ + mpParserState->setHandle(); + mpStream->info(mpParserState->getHandle()); +} + +void OOXMLFastContextHandler::startCharacterGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInCharacterGroup()) + endCharacterGroup(); + + if (! mpParserState->isInParagraphGroup()) + startParagraphGroup(); + + if (! mpParserState->isInCharacterGroup()) + { +#ifdef DEBUG_ELEMENT + debug_logger->element("startCharacterGroup"); +#endif + + mpStream->startCharacterGroup(); + mpParserState->setInCharacterGroup(true); + mpParserState->resolveCharacterProperties(*mpStream); + } + } +} + +void OOXMLFastContextHandler::endCharacterGroup() +{ + if (isForwardEvents() && mpParserState->isInCharacterGroup()) + { +#ifdef DEBUG_ELEMENT + debug_logger->element("endCharacterGroup"); +#endif + + mpStream->endCharacterGroup(); + mpParserState->setInCharacterGroup(false); + } +} + +void OOXMLFastContextHandler::startParagraphGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInParagraphGroup()) + endParagraphGroup(); + + if (! mpParserState->isInSectionGroup()) + startSectionGroup(); + + if (! mpParserState->isInParagraphGroup()) + { +#ifdef DEBUG_ELEMENT + debug_logger->element("startParagraphGroup"); +#endif + + mpStream->startParagraphGroup(); + mpParserState->setInParagraphGroup(true); + } + } +} + +void OOXMLFastContextHandler::endParagraphGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInCharacterGroup()) + endCharacterGroup(); + + if (mpParserState->isInParagraphGroup()) + { +#ifdef DEBUG_ELEMENT + debug_logger->element("endParagraphGroup"); +#endif + mpStream->endParagraphGroup(); + mpParserState->setInParagraphGroup(false); + } + } +} + +void OOXMLFastContextHandler::startSectionGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInSectionGroup()) + endSectionGroup(); + + if (! mpParserState->isInSectionGroup()) + { +#ifdef DEBUG_ELEMENT + debug_logger->element("startSectionGroup"); +#endif + mpStream->info(mpParserState->getHandle()); + mpStream->startSectionGroup(); + mpParserState->setInSectionGroup(true); + } + } +} + +void OOXMLFastContextHandler::endSectionGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInParagraphGroup()) + endParagraphGroup(); + + if (mpParserState->isInSectionGroup()) + { +#ifdef DEBUG_ELEMENT + debug_logger->element("endSectionGroup"); +#endif + mpStream->endSectionGroup(); + mpParserState->setInSectionGroup(false); + } + } +} + +void OOXMLFastContextHandler::setLastParagraphInSection() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("setLastParagraphInSection"); +#endif + + mpParserState->setLastParagraphInSection(true); +} + +void OOXMLFastContextHandler::newProperty +(const Id & /*nId*/, OOXMLValue::Pointer_t /*pVal*/) +{ +} + +void OOXMLFastContextHandler::setPropertySet +(OOXMLPropertySet::Pointer_t /* pPropertySet */) +{ +} + +OOXMLPropertySet::Pointer_t OOXMLFastContextHandler::getPropertySet() const +{ + return OOXMLPropertySet::Pointer_t(); +} + +void OOXMLFastContextHandler::startField() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("startField"); +#endif + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(sFieldStart, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::fieldSeparator() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("fieldSeparator"); +#endif + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(sFieldSep, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::endField() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("endField"); +#endif + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(sFieldEnd, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::ftnednref() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("ftnednref"); +#endif + if (isForwardEvents()) + mpStream->utext(sFtnEdnRef, 1); +} + +void OOXMLFastContextHandler::ftnednsep() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("ftnednsep"); +#endif + if (isForwardEvents()) + mpStream->utext(sFtnEdnSep, 1); +} + +void OOXMLFastContextHandler::ftnedncont() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("ftnedncont"); +#endif + if (isForwardEvents()) + mpStream->text(sFtnEdnCont, 1); +} + +void OOXMLFastContextHandler::pgNum() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("pgNum"); +#endif + if (isForwardEvents()) + mpStream->utext((const sal_uInt8*)sPgNum, 1); +} + +void OOXMLFastContextHandler::tab() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("tab"); +#endif + if (isForwardEvents()) + mpStream->utext((const sal_uInt8*)sTab, 1); +} + +void OOXMLFastContextHandler::cr() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("cr"); +#endif + if (isForwardEvents()) + mpStream->utext((const sal_uInt8*)sCR, 1); +} + +void OOXMLFastContextHandler::noBreakHyphen() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("noBreakHyphen"); +#endif + if (isForwardEvents()) + mpStream->utext((const sal_uInt8*)sNoBreakHyphen, 1); +} + +void OOXMLFastContextHandler::softHyphen() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("softHyphen"); +#endif + if (isForwardEvents()) + mpStream->utext((const sal_uInt8*)sSoftHyphen, 1); +} + +void OOXMLFastContextHandler::handleLastParagraphInSection() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("handleLastParagraphInSection"); +#endif + + if (mpParserState->isLastParagraphInSection()) + { + mpParserState->setLastParagraphInSection(false); + startSectionGroup(); + } +} + +void OOXMLFastContextHandler::endOfParagraph() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("endOfParagraph"); +#endif + if (! mpParserState->isInCharacterGroup()) + startCharacterGroup(); + if (isForwardEvents()) + mpStream->utext((const sal_uInt8*)sCR, 1); +} + +void OOXMLFastContextHandler::text(const ::rtl::OUString & sText) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("text"); + debug_logger->chars(sText); + debug_logger->endElement("text"); +#endif + if (isForwardEvents()) + mpStream->utext(reinterpret_cast < const sal_uInt8 * > + (sText.getStr()), + sText.getLength()); +} + +void OOXMLFastContextHandler::propagateCharacterProperties() +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("propagateCharacterProperties"); + debug_logger->addTag(toPropertiesTag(getPropertySet())); + debug_logger->endElement("propagateCharacterProperties"); +#endif + + mpParserState->setCharacterProperties(getPropertySet()); +} + +void OOXMLFastContextHandler::propagateCharacterPropertiesAsSet(const Id & rId) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("propagateCharacterPropertiesAsSet"); + debug_logger->addTag(toPropertiesTag(getPropertySet())); + debug_logger->endElement("propagateCharacterPropertiesAsSet"); +#endif + + OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet())); + OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySetImpl()); + + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(rId, pValue, OOXMLPropertyImpl::SPRM)); + + pPropertySet->add(pProp); + mpParserState->setCharacterProperties(pPropertySet); +} + +bool OOXMLFastContextHandler::propagatesProperties() const +{ + return false; +} + +void OOXMLFastContextHandler::propagateCellProperties() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("propagateCellProperties"); +#endif + + mpParserState->setCellProperties(getPropertySet()); +} + +void OOXMLFastContextHandler::propagateRowProperties() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("propagateRowProperties"); +#endif + + mpParserState->setRowProperties(getPropertySet()); +} + +void OOXMLFastContextHandler::propagateTableProperties() +{ + OOXMLPropertySet::Pointer_t pProps = getPropertySet(); +#ifdef DEBUG_ELEMENT + debug_logger->startElement("propagateTableProperties"); + debug_logger->addTag(toPropertiesTag(pProps)); + debug_logger->endElement("propagateTableProperties"); +#endif + + mpParserState->setTableProperties(pProps); +} + +void OOXMLFastContextHandler::sendCellProperties() +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendCellProperties"); +#endif + + mpParserState->resolveCellProperties(*mpStream); + +#ifdef DEBUG_ELEMENT + debug_logger->endElement("sendCellProperties"); +#endif +} + +void OOXMLFastContextHandler::sendRowProperties() +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendRowProperties"); +#endif + + mpParserState->resolveRowProperties(*mpStream); + +#ifdef DEBUG_ELEMENT + debug_logger->endElement("sendRowProperties"); +#endif +} + +void OOXMLFastContextHandler::sendTableProperties() +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendTableProperties"); +#endif + + mpParserState->resolveTableProperties(*mpStream); + +#ifdef DEBUG_ELEMENT + debug_logger->endElement("sendTableProperties"); +#endif +} + +void OOXMLFastContextHandler::clearCellProps() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("clearCellProps"); +#endif + + mpParserState->setCellProperties(OOXMLPropertySet::Pointer_t + (new OOXMLPropertySetImpl())); +} + +void OOXMLFastContextHandler::clearRowProps() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("clearRowProps"); +#endif + + mpParserState->setRowProperties(OOXMLPropertySet::Pointer_t + (new OOXMLPropertySetImpl())); +} + +void OOXMLFastContextHandler::clearTableProps() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("clearTableProps"); +#endif + + mpParserState->setTableProperties(OOXMLPropertySet::Pointer_t + (new OOXMLPropertySetImpl())); +} + +void OOXMLFastContextHandler::sendPropertiesWithId(const Id & rId) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendPropertiesWithId"); + debug_logger->attribute("id", fastTokenToId(rId)); +#endif + + OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet())); + OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySetImpl()); + + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(rId, pValue, OOXMLPropertyImpl::SPRM)); + + pPropertySet->add(pProp); + mpStream->props(pPropertySet); + +#ifdef DEBUG_ELEMENT + debug_logger->addTag(toPropertiesTag(pPropertySet)); + debug_logger->endElement("sendPropertiesWithId"); +#endif +} + +void OOXMLFastContextHandler::clearProps() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("clearProps"); +#endif + + setPropertySet(OOXMLPropertySet::Pointer_t(new OOXMLPropertySetImpl())); +} + +void OOXMLFastContextHandler::setDefaultBooleanValue() +{ +} + +void OOXMLFastContextHandler::setDefaultIntegerValue() +{ +} + +void OOXMLFastContextHandler::setDefaultHexValue() +{ +} + +void OOXMLFastContextHandler::setDefaultStringValue() +{ +} + +const ::rtl::OUString & OOXMLFastContextHandler::getText() const +{ + return aEmptyStr; +} + +void OOXMLFastContextHandler::setDocument(OOXMLDocument * pDocument) +{ + mpParserState->setDocument(pDocument); +} + +OOXMLDocument * OOXMLFastContextHandler::getDocument() +{ + return mpParserState->getDocument(); +} + +void OOXMLFastContextHandler::setForwardEvents(bool bForwardEvents) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("setForwardEvents"); + + if (bForwardEvents) + debug_logger->chars("true"); + else + debug_logger->chars("false"); + + debug_logger->endElement("setForwardEvents"); +#endif + + mpParserState->setForwardEvents(bForwardEvents); +} + +bool OOXMLFastContextHandler::isForwardEvents() const +{ + return mpParserState->isForwardEvents(); +} + +void OOXMLFastContextHandler::setXNoteId(const ::rtl::OUString & rId) +{ + mpParserState->setXNoteId(rId); +} + +void OOXMLFastContextHandler::setXNoteId(OOXMLValue::Pointer_t pValue) +{ + mpParserState->setXNoteId(pValue->getString()); +} + +const rtl::OUString & OOXMLFastContextHandler::getXNoteId() const +{ + return mpParserState->getXNoteId(); +} + +void OOXMLFastContextHandler::resolveFootnote +(const rtl::OUString & rId) +{ + mpParserState->getDocument()->resolveFootnote + (*mpStream, 0, rId); +} + +void OOXMLFastContextHandler::resolveEndnote(const rtl::OUString & rId) +{ + mpParserState->getDocument()->resolveEndnote + (*mpStream, 0, rId); +} + +void OOXMLFastContextHandler::resolveComment(const rtl::OUString & rId) +{ + mpParserState->getDocument()->resolveComment(*mpStream, rId); +} + +void OOXMLFastContextHandler::resolvePicture(const rtl::OUString & rId) +{ + mpParserState->getDocument()->resolvePicture(*mpStream, rId); +} + +void OOXMLFastContextHandler::resolveHeader +(const sal_Int32 type, const rtl::OUString & rId) +{ + mpParserState->getDocument()->resolveHeader(*mpStream, type, rId); +} + +void OOXMLFastContextHandler::resolveFooter +(const sal_Int32 type, const rtl::OUString & rId) +{ + mpParserState->getDocument()->resolveFooter(*mpStream, type, rId); +} + +void OOXMLFastContextHandler::resolveOLE(const rtl::OUString & rId) +{ + uno::Reference<io::XInputStream> xInputStream + (mpParserState->getDocument()->getInputStreamForId(rId)); + + OOXMLValue::Pointer_t aValue(new OOXMLInputStreamValue(xInputStream)); + + newProperty(NS_ooxml::LN_inputstream, aValue); +} + +::rtl::OUString OOXMLFastContextHandler::getTargetForId +(const ::rtl::OUString & rId) +{ + return mpParserState->getDocument()->getTargetForId(rId); +} + +void OOXMLFastContextHandler::resolvePropertySetAttrs() +{ +} + +void OOXMLFastContextHandler::sendPropertyToParent() +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendPropertyToParent"); +#endif + + if (mpParent != NULL) + { + OOXMLPropertySet::Pointer_t pProps(mpParent->getPropertySet()); + + if (pProps.get() != NULL) + { + OOXMLProperty::Pointer_t + pProp(new OOXMLPropertyImpl(mId, getValue(), + OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + +#ifdef DEBUG_ELEMENT + debug_logger->addTag(toPropertiesTag(pProps)); +#endif + } + } + +#ifdef DEBUG_ELEMENT + debug_logger->endElement("sendPropertyToParent"); +#endif +} + +void OOXMLFastContextHandler::sendPropertiesToParent() +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("sendPropertiesToParent"); +#endif + if (mpParent != NULL) + { + OOXMLPropertySet::Pointer_t pParentProps(mpParent->getPropertySet()); + + if (pParentProps.get() != NULL) + { + OOXMLPropertySet::Pointer_t pProps(getPropertySet()); + +#ifdef DEBUG_ELEMENT + debug_logger->startElement("me"); + debug_logger->addTag(toPropertiesTag(pProps)); + debug_logger->endElement("me"); +#endif + + if (pProps.get() != NULL) + { + OOXMLValue::Pointer_t pValue + (new OOXMLPropertySetValue(getPropertySet())); + + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(getId(), pValue, OOXMLPropertyImpl::SPRM)); + +#ifdef DEBUG_ELEMENT + debug_logger->startElement("propertyForSet"); + debug_logger->chars(pProp->toString()); + debug_logger->endElement("propertyForSet"); +#endif + + pParentProps->add(pProp); + +#ifdef DEBUG_ELEMENT + debug_logger->startElement("parent"); + debug_logger->addTag(toPropertiesTag(pParentProps)); + debug_logger->endElement("parent"); +#endif + } + } + } +#ifdef DEBUG_ELEMENT + debug_logger->endElement("sendPropertiesToParent"); +#endif +} + +uno::Reference< uno::XComponentContext > +OOXMLFastContextHandler::getComponentContext() +{ + return m_xContext; +} + +/* + class OOXMLFastContextHandlerNoResource + */ +OOXMLFastContextHandlerNoResource::OOXMLFastContextHandlerNoResource +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerNoResource::~OOXMLFastContextHandlerNoResource() +{ +} + +/* + class OOXMLFastContextHandlerStream + */ + +OOXMLFastContextHandlerStream::OOXMLFastContextHandlerStream +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext), + mpPropertySetAttrs(new OOXMLPropertySetImpl()) +{ +} + +OOXMLFastContextHandlerStream::~OOXMLFastContextHandlerStream() +{ +} + +void OOXMLFastContextHandlerStream::newProperty(const Id & rId, + OOXMLValue::Pointer_t pVal) +{ + if (rId != 0x0) + { + OOXMLPropertyImpl::Pointer_t pProperty + (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE)); + + mpPropertySetAttrs->add(pProperty); + } +} + +void OOXMLFastContextHandlerStream::sendProperty(Id nId) +{ +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("sendProperty"); + debug_logger->attribute("id", (*QNameToString::Instance())(nId)); + debug_logger->chars(xmlify(getPropertySetAttrs()->toString())); + debug_logger->endElement("sendProperty"); +#endif + + OOXMLPropertySetEntryToString aHandler(nId); + getPropertySetAttrs()->resolve(aHandler); + const ::rtl::OUString & sText = aHandler.getString(); + mpStream->utext(reinterpret_cast < const sal_uInt8 * > + (sText.getStr()), + sText.getLength()); +} + +void OOXMLFastContextHandlerStream::setPropertySetAttrs +(OOXMLPropertySet::Pointer_t pPropertySetAttrs) +{ + mpPropertySetAttrs = pPropertySetAttrs; +} + +OOXMLPropertySet::Pointer_t +OOXMLFastContextHandlerStream::getPropertySetAttrs() const +{ + return mpPropertySetAttrs; +} + +void OOXMLFastContextHandlerStream::resolvePropertySetAttrs() +{ +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("resolvePropertySetAttrs"); + debug_logger->chars(mpPropertySetAttrs->toString()); + debug_logger->endElement("resolvePropertySetAttrs"); +#endif + mpStream->props(mpPropertySetAttrs); +} + +OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerStream::getPropertySet() + const +{ + return getPropertySetAttrs(); +} + +void OOXMLFastContextHandlerStream::handleHyperlink() +{ + OOXMLHyperlinkHandler aHyperlinkHandler(this); + getPropertySetAttrs()->resolve(aHyperlinkHandler); +} + +void OOXMLFastContextHandlerStream::lcl_characters +(const ::rtl::OUString & rChars) +throw (uno::RuntimeException, xml::sax::SAXException) +{ + text(rChars); +} + +/* + class OOXMLFastContextHandlerProperties + */ +OOXMLFastContextHandlerProperties::OOXMLFastContextHandlerProperties +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext), mpPropertySet(new OOXMLPropertySetImpl()), + mbResolve(false) +{ + if (pContext->getResource() == STREAM) + mbResolve = true; +} + +OOXMLFastContextHandlerProperties::~OOXMLFastContextHandlerProperties() +{ +} + +void OOXMLFastContextHandlerProperties::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + endAction(Element); + + if (mbResolve) + { + if (isForwardEvents()) + { +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("sendproperties"); +#endif + mpStream->props(mpPropertySet); +#ifdef DEBUG_PROPERTIES + debug_logger->endElement("sendproperties"); +#endif + } + } + else + { + sendPropertiesToParent(); + } +} + +OOXMLValue::Pointer_t OOXMLFastContextHandlerProperties::getValue() const +{ + return OOXMLValue::Pointer_t(new OOXMLPropertySetValue(mpPropertySet)); +} + +XMLTag::Pointer_t OOXMLFastContextHandlerProperties::toTag() const +{ + XMLTag::Pointer_t pTag(OOXMLFastContextHandler::toTag()); + pTag->addAttr("resolve", mbResolve ? "resolve" : "noResolve"); + + return pTag; +} + +void OOXMLFastContextHandlerProperties::newProperty +(const Id & rId, OOXMLValue::Pointer_t pVal) +{ + if (rId != 0x0) + { + OOXMLPropertyImpl::Pointer_t pProperty + (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE)); + + mpPropertySet->add(pProperty); + } +} + +void OOXMLFastContextHandlerProperties::handleXNotes() +{ + switch (mnToken) + { + case NS_wordprocessingml|OOXML_footnoteReference: + { + OOXMLFootnoteHandler aFootnoteHandler(this); + mpPropertySet->resolve(aFootnoteHandler); + } + break; + case NS_wordprocessingml|OOXML_endnoteReference: + { + OOXMLEndnoteHandler aEndnoteHandler(this); + mpPropertySet->resolve(aEndnoteHandler); + } + break; + default: + break; + } +} + +void OOXMLFastContextHandlerProperties::handleHdrFtr() +{ + switch (mnToken) + { + case NS_wordprocessingml|OOXML_footerReference: + { + OOXMLFooterHandler aFooterHandler(this); + mpPropertySet->resolve(aFooterHandler); + } + break; + case NS_wordprocessingml|OOXML_headerReference: + { + OOXMLHeaderHandler aHeaderHandler(this); + mpPropertySet->resolve(aHeaderHandler); + } + break; + default: + break; + } +} + +void OOXMLFastContextHandlerProperties::handleComment() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("handleComment"); +#endif + + OOXMLCommentHandler aCommentHandler(this); + getPropertySet()->resolve(aCommentHandler); +} + +void OOXMLFastContextHandlerProperties::handlePicture() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("handlePicture"); +#endif + + OOXMLPictureHandler aPictureHandler(this); + getPropertySet()->resolve(aPictureHandler); +} + +void OOXMLFastContextHandlerProperties::handleBreak() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("handleBreak"); +#endif + + OOXMLBreakHandler aBreakHandler(*mpStream, this); + getPropertySet()->resolve(aBreakHandler); +} + +void OOXMLFastContextHandlerProperties::handleOLE() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("handleOLE"); +#endif + + OOXMLOLEHandler aOLEHandler(this); + getPropertySet()->resolve(aOLEHandler); +} + +void OOXMLFastContextHandlerProperties::setParent +(OOXMLFastContextHandler * pParent) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("setParent"); + debug_logger->chars("OOXMLFastContextHandlerProperties"); + debug_logger->endElement("setParent"); +#endif + + OOXMLFastContextHandler::setParent(pParent); + + if (mpParent->getResource() == STREAM) + mbResolve = true; +} + +void OOXMLFastContextHandlerProperties::setPropertySet +(OOXMLPropertySet::Pointer_t pPropertySet) +{ + if (pPropertySet.get() != NULL) + mpPropertySet = pPropertySet; +} + +OOXMLPropertySet::Pointer_t +OOXMLFastContextHandlerProperties::getPropertySet() const +{ + return mpPropertySet; +} + +/* + * class OOXMLFasContextHandlerPropertyTable + */ + +OOXMLFastContextHandlerPropertyTable::OOXMLFastContextHandlerPropertyTable +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandlerProperties(pContext) +{ +} + +OOXMLFastContextHandlerPropertyTable::~OOXMLFastContextHandlerPropertyTable() +{ +} + +void OOXMLFastContextHandlerPropertyTable::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + OOXMLPropertySet::Pointer_t pPropSet(mpPropertySet->clone()); + OOXMLTableImpl::ValuePointer_t pTmpVal + (new OOXMLPropertySetValue(pPropSet)); + + mTable.add(pTmpVal); + + writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone()); + +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("table"); + debug_logger->attribute("id", (*QNameToString::Instance())(mId)); + debug_logger->endElement("table"); +#endif + + mpStream->table(mId, pTable); + + endAction(Element); +} + +/* + class OOXMLFastContextHandlerValue +*/ + +OOXMLFastContextHandlerValue::OOXMLFastContextHandlerValue +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerValue::~OOXMLFastContextHandlerValue() +{ +} + +void OOXMLFastContextHandlerValue::setValue(OOXMLValue::Pointer_t pValue) +{ + mpValue = pValue; +} + +OOXMLValue::Pointer_t OOXMLFastContextHandlerValue::getValue() const +{ + return mpValue; +} + +void OOXMLFastContextHandlerValue::lcl_endFastElement +(Token_t Element) +throw (uno::RuntimeException, xml::sax::SAXException) +{ + sendPropertyToParent(); + + endAction(Element); +} + +void OOXMLFastContextHandlerValue::setDefaultBooleanValue() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("setDefaultBooleanValue"); +#endif + + if (mpValue.get() == NULL) + { + OOXMLValue::Pointer_t pValue(new OOXMLBooleanValue(true)); + setValue(pValue); + } +} + +void OOXMLFastContextHandlerValue::setDefaultIntegerValue() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("setDefaultIntegerValue"); +#endif + + if (mpValue.get() == NULL) + { + OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(0)); + setValue(pValue); + } +} + +void OOXMLFastContextHandlerValue::setDefaultHexValue() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("setDefaultHexValue"); +#endif + + if (mpValue.get() == NULL) + { + OOXMLValue::Pointer_t pValue(new OOXMLHexValue(0)); + setValue(pValue); + } +} + +void OOXMLFastContextHandlerValue::setDefaultStringValue() +{ +#ifdef DEBUG_ELEMENT + debug_logger->element("setDefaultStringValue"); +#endif + + if (mpValue.get() == NULL) + { + OOXMLValue::Pointer_t pValue(new OOXMLStringValue(::rtl::OUString())); + setValue(pValue); + } +} +/* + class OOXMLFastContextHandlerTable +*/ + +OOXMLFastContextHandlerTable::OOXMLFastContextHandlerTable +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTable::~OOXMLFastContextHandlerTable() +{ +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandlerTable::createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + addCurrentChild(); + + mCurrentChild.set + (OOXMLFastContextHandler::createFastChildContext(Element, Attribs)); + + return mCurrentChild; +} + +void OOXMLFastContextHandlerTable::lcl_endFastElement +(Token_t /*Element*/) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + addCurrentChild(); + + writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone()); + if (isForwardEvents() && mId != 0x0) + { +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("table"); + string str = (*QNameToString::Instance())(mId); + debug_logger->attribute("id", str); + debug_logger->endElement("table"); +#endif + + mpStream->table(mId, pTable); + } +} + +void OOXMLFastContextHandlerTable::addCurrentChild() +{ + OOXMLFastContextHandler * pHandler = mCurrentChild.getPointer(); + if ( pHandler != NULL) + { + OOXMLValue::Pointer_t pValue(pHandler->getValue()); + + if (pValue.get() != NULL) + { + OOXMLTableImpl::ValuePointer_t pTmpVal(pValue->clone()); + mTable.add(pTmpVal); + } + } +} + +void OOXMLFastContextHandlerTable::newPropertySet +(OOXMLPropertySet::Pointer_t /*pPropertySet*/) +{ + +} + +/* + class OOXMLFastContextHandlerXNote + */ + +OOXMLFastContextHandlerXNote::OOXMLFastContextHandlerXNote +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerXNote::~OOXMLFastContextHandlerXNote() +{ +} + +void OOXMLFastContextHandlerXNote::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + mbForwardEventsSaved = isForwardEvents(); + + if (msMyXNoteId.compareTo(getXNoteId()) == 0) + setForwardEvents(true); + else + setForwardEvents(false); + + startAction(Element); +} + +void OOXMLFastContextHandlerXNote::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + endAction(Element); + + setForwardEvents(mbForwardEventsSaved); +} + +void OOXMLFastContextHandlerXNote::checkId(OOXMLValue::Pointer_t pValue) +{ +#ifdef DEBUG_ELEMENT + debug_logger->startElement("checkId"); + debug_logger->attribute("myId", pValue->getString()); + debug_logger->attribute("id", getXNoteId()); + debug_logger->endElement("checkId"); +#endif + + msMyXNoteId = pValue->getString(); +} + +/* + class OOXMLFastContextHandlerTextTableCell + */ + +OOXMLFastContextHandlerTextTableCell::OOXMLFastContextHandlerTextTableCell +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTextTableCell::~OOXMLFastContextHandlerTextTableCell() +{ +} + +void OOXMLFastContextHandlerTextTableCell::startCell() +{ +} + +void OOXMLFastContextHandlerTextTableCell::endCell() +{ + if (isForwardEvents()) + { + OOXMLPropertySet * pProps = new OOXMLPropertySetImpl(); + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(mnTableDepth)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PTableDepth, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(1)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PFInTable, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + { + OOXMLValue::Pointer_t pVal + (new OOXMLBooleanValue(mnTableDepth > 0)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PCell, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("endcell"); + debug_logger->addTag(toPropertiesTag + (OOXMLPropertySet::Pointer_t(pProps->clone()))); + debug_logger->endElement("endcell"); +#endif + mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps)); + } +} + +/* + class OOXMLFastContextHandlerTextTableRow + */ + +OOXMLFastContextHandlerTextTableRow::OOXMLFastContextHandlerTextTableRow +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTextTableRow::~OOXMLFastContextHandlerTextTableRow() +{ +} + +void OOXMLFastContextHandlerTextTableRow::startRow() +{ +} + +void OOXMLFastContextHandlerTextTableRow::endRow() +{ + startParagraphGroup(); + + if (isForwardEvents()) + { + OOXMLPropertySet * pProps = new OOXMLPropertySetImpl(); + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(mnTableDepth)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PTableDepth, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(1)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PFInTable, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(1)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_sprm::LN_PRow, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + +#ifdef DEBUG_PROPERTIES + debug_logger->startElement("endrow"); + debug_logger->addTag(toPropertiesTag + (OOXMLPropertySet::Pointer_t(pProps->clone()))); + debug_logger->endElement("endrow"); +#endif + + mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps)); + } + + startCharacterGroup(); + + if (isForwardEvents()) + mpStream->utext(s0xd, 1); + + endCharacterGroup(); + endParagraphGroup(); +} + +/* + class OOXMLFastContextHandlerTextTable + */ + +OOXMLFastContextHandlerTextTable::OOXMLFastContextHandlerTextTable +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTextTable::~OOXMLFastContextHandlerTextTable() +{ + clearTableProps(); +} + +void OOXMLFastContextHandlerTextTable::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + mpParserState->startTable(); + mnTableDepth++; + + boost::shared_ptr<OOXMLPropertySet> pProps( new OOXMLPropertySetImpl ); + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(mnTableDepth)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_ooxml::LN_tblStart, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + mpParserState->setCharacterProperties(pProps); + + startAction(Element); +} + +void OOXMLFastContextHandlerTextTable::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + endAction(Element); + + mnTableDepth--; + mpParserState->endTable(); +} + +/* + class OOXMLFastContextHandlerShape + */ + +class ShapesNoAdd: + public ::cppu::WeakImplHelper1< + drawing::XShapes> +{ +public: + explicit ShapesNoAdd(uno::Reference< uno::XComponentContext > const & context, uno::Reference< drawing::XShapes> const & xShapes); + +private: + // container::XElementAccess: + virtual uno::Type SAL_CALL getElementType() throw (uno::RuntimeException); + virtual ::sal_Bool SAL_CALL hasElements() throw (uno::RuntimeException); + + // container::XIndexAccess: + virtual ::sal_Int32 SAL_CALL getCount() throw (uno::RuntimeException); + virtual uno::Any SAL_CALL getByIndex(::sal_Int32 Index) throw (uno::RuntimeException, lang::IndexOutOfBoundsException, lang::WrappedTargetException); + + // drawing::XShapes: + virtual void SAL_CALL add(const uno::Reference< drawing::XShape > & xShape) throw (uno::RuntimeException); + virtual void SAL_CALL remove(const uno::Reference< drawing::XShape > & xShape) throw (uno::RuntimeException); + + ShapesNoAdd(ShapesNoAdd &); // not defined + void operator =(ShapesNoAdd &); // not defined + + virtual ~ShapesNoAdd() {} + + uno::Reference< uno::XComponentContext > m_xContext; + uno::Reference< drawing::XShapes > m_xShapes; +}; + +ShapesNoAdd::ShapesNoAdd(uno::Reference< uno::XComponentContext > const & context, uno::Reference< drawing::XShapes> const & xShapes) : +m_xContext(context), m_xShapes(xShapes) +{} + +// container::XElementAccess: +uno::Type SAL_CALL ShapesNoAdd::getElementType() throw (uno::RuntimeException) +{ + return m_xShapes->getElementType(); +} + +::sal_Bool SAL_CALL ShapesNoAdd::hasElements() throw (uno::RuntimeException) +{ + return m_xShapes->hasElements(); +} + +// container::XIndexAccess: +::sal_Int32 SAL_CALL ShapesNoAdd::getCount() throw (uno::RuntimeException) +{ + return m_xShapes->getCount(); +} + +uno::Any SAL_CALL ShapesNoAdd::getByIndex(::sal_Int32 Index) throw (uno::RuntimeException, lang::IndexOutOfBoundsException, lang::WrappedTargetException) +{ + return m_xShapes->getByIndex(Index); +} + +// drawing::XShapes: +void SAL_CALL ShapesNoAdd::add(const uno::Reference< drawing::XShape > & + ) throw (uno::RuntimeException) +{ +} + +void SAL_CALL ShapesNoAdd::remove(const uno::Reference< drawing::XShape > & xShape) throw (uno::RuntimeException) +{ + m_xShapes->remove(xShape); +} + +OOXMLFastContextHandlerShape::OOXMLFastContextHandlerShape +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandlerProperties(pContext), m_bShapeSent( false ), + m_bShapeStarted(false) +{ + uno::Reference<uno::XComponentContext> xContext(getComponentContext()); + if (xContext.is()) + { + uno::Reference<XMultiComponentFactory> rServiceManager + (xContext->getServiceManager()); + + mrShapeContext.set + (rServiceManager-> + createInstanceWithContext + (::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.xml.sax.FastShapeContextHandler")), xContext), + uno::UNO_QUERY); + + if (mrShapeContext.is()) + { + mrShapeContext->setModel(getDocument()->getModel()); + mrShapeContext->setDrawPage(getDocument()->getDrawPage()); + mrShapeContext->setInputStream(getDocument()->getStorageStream()); + +#ifdef DEBUG_ELEMENT + debug_logger->startElement("setRelationFragmentPath"); + debug_logger->attribute("path", mpParserState->getTarget()); + debug_logger->endElement("setRelationFragmentPath"); +#endif + mrShapeContext->setRelationFragmentPath + (mpParserState->getTarget()); + } +#ifdef DEBUG_CONTEXT_STACK + else + { + debug_logger->startElement("error"); + debug_logger->chars("failed to get shape handler"); + debug_logger->endElement("error"); + } +#endif + } +} + +OOXMLFastContextHandlerShape::~OOXMLFastContextHandlerShape() +{ +} + +void OOXMLFastContextHandlerShape::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + startAction(Element); + + if (mrShapeContext.is()) + { + mrShapeContext->startFastElement(Element, Attribs); + } +} + +void SAL_CALL OOXMLFastContextHandlerShape::startUnknownElement +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mrShapeContext.is()) + mrShapeContext->startUnknownElement(Namespace, Name, Attribs); +} + +void OOXMLFastContextHandlerShape::setToken(Token_t nToken) +{ + OOXMLFastContextHandler::setToken(nToken); + + if (mrShapeContext.is()) + mrShapeContext->setStartToken(nToken); +} + +void OOXMLFastContextHandlerShape::sendShape( Token_t Element ) +{ + if ( mrShapeContext.is() && !m_bShapeSent ) + { + uno::Reference<drawing::XShape> xShape(mrShapeContext->getShape()); + if (xShape.is()) + { + OOXMLValue::Pointer_t + pValue(new OOXMLShapeValue(xShape)); + newProperty(NS_ooxml::LN_shape, pValue); + m_bShapeSent = true; + + bool bIsPicture = Element == ( NS_picture | OOXML_pic ); + + // Notify the dmapper that the shape is ready to use + if ( !bIsPicture ) + { + mpStream->startShape( xShape ); + m_bShapeStarted = true; + } + } + } +} + +void OOXMLFastContextHandlerShape::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mrShapeContext.is()) + { + mrShapeContext->endFastElement(Element); + sendShape( Element ); + } + + OOXMLFastContextHandlerProperties::lcl_endFastElement(Element); + + // Ending the shape should be the last thing to do + bool bIsPicture = Element == ( NS_picture | OOXML_pic ); + if ( !bIsPicture && m_bShapeStarted) + mpStream->endShape( ); +} + +void SAL_CALL OOXMLFastContextHandlerShape::endUnknownElement +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mrShapeContext.is()) + mrShapeContext->endUnknownElement(Namespace, Name); +} + +uno::Reference< xml::sax::XFastContextHandler > +OOXMLFastContextHandlerShape::lcl_createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + uno::Reference< xml::sax::XFastContextHandler > xContextHandler; + + sal_uInt32 nNamespace = Element & 0xffff0000; + + switch (nNamespace) + { + case NS_wordprocessingml: + case NS_vml_wordprocessingDrawing: + case NS_office: + xContextHandler.set(OOXMLFactory::getInstance()->createFastChildContextFromStart(this, Element)); + break; + default: + if (mrShapeContext.is()) + { + uno::Reference<XFastContextHandler> pChildContext = + mrShapeContext->createFastChildContext(Element, Attribs); + + OOXMLFastContextHandlerWrapper * pWrapper = + new OOXMLFastContextHandlerWrapper(this, pChildContext); + + pWrapper->addNamespace(NS_wordprocessingml); + pWrapper->addNamespace(NS_vml_wordprocessingDrawing); + pWrapper->addNamespace(NS_office); + pWrapper->addToken( NS_vml|OOXML_textbox ); + + xContextHandler.set(pWrapper); + } + else + xContextHandler.set(this); + break; + } + + + return xContextHandler; +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandlerShape::createUnknownChildContext +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + + if (mrShapeContext.is()) + xResult.set(mrShapeContext->createUnknownChildContext + (Namespace, Name, Attribs)); + + return xResult; +} + +void OOXMLFastContextHandlerShape::lcl_characters +(const ::rtl::OUString & aChars) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mrShapeContext.is()) + mrShapeContext->characters(aChars); +} + +/* + class OOXMLFastContextHandlerWrapper +*/ + +OOXMLFastContextHandlerWrapper::OOXMLFastContextHandlerWrapper +(OOXMLFastContextHandler * pParent, + uno::Reference<XFastContextHandler> xContext) +: OOXMLFastContextHandler(pParent), mxContext(xContext) +{ + if (pParent != NULL) + { + setId(pParent->getId()); + setToken(pParent->getToken()); + setPropertySet(pParent->getPropertySet()); + } +} + +OOXMLFastContextHandlerWrapper::~OOXMLFastContextHandlerWrapper() +{ +} + +void SAL_CALL OOXMLFastContextHandlerWrapper::startUnknownElement +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mxContext.is()) + mxContext->startUnknownElement(Namespace, Name, Attribs); +} + +void SAL_CALL OOXMLFastContextHandlerWrapper::endUnknownElement +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mxContext.is()) + mxContext->endUnknownElement(Namespace, Name); +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandlerWrapper::createUnknownChildContext +(const ::rtl::OUString & Namespace, + const ::rtl::OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + + if (mxContext.is()) + xResult = mxContext->createUnknownChildContext + (Namespace, Name, Attribs); + else + xResult.set(this); + + return xResult; +} + +void OOXMLFastContextHandlerWrapper::attributes +(const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + pHandler->attributes(Attribs); + } +} + +OOXMLFastContextHandler::ResourceEnum_t +OOXMLFastContextHandlerWrapper::getResource() const +{ + return UNKNOWN; +} + +void OOXMLFastContextHandlerWrapper::addNamespace(const Id & nId) +{ + mMyNamespaces.insert(nId); +} + +void OOXMLFastContextHandlerWrapper::addToken( Token_t Token ) +{ + mMyTokens.insert( Token ); +} + +void OOXMLFastContextHandlerWrapper::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mxContext.is()) + mxContext->startFastElement(Element, Attribs); +} + +void OOXMLFastContextHandlerWrapper::lcl_endFastElement +(Token_t Element) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mxContext.is()) + mxContext->endFastElement(Element); +} + +uno::Reference< xml::sax::XFastContextHandler > +OOXMLFastContextHandlerWrapper::lcl_createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + + Id nNameSpace = Element & 0xffff0000; + +#ifdef DEBUG_ELEMENT + debug_logger->startElement("Wrapper-createChildContext"); + debug_logger->attribute("token", fastTokenToId(Element)); + + set<Id>::const_iterator aIt(mMyNamespaces.begin()); + while (aIt != mMyNamespaces.end()) + { + debug_logger->startElement("namespace"); + debug_logger->attribute("id", fastTokenToId(*aIt)); + debug_logger->endElement("namespace"); + + aIt++; + } + + debug_logger->endElement("Wrapper-createChildContext"); +#endif + + bool bInNamespaces = mMyNamespaces.find(nNameSpace) != mMyNamespaces.end(); + bool bInTokens = mMyTokens.find( Element ) != mMyTokens.end( ); + if ( bInNamespaces ) + xResult.set(OOXMLFactory::getInstance()->createFastChildContextFromStart(this, Element)); + else if (mxContext.is()) + { + OOXMLFastContextHandlerWrapper * pWrapper = + new OOXMLFastContextHandlerWrapper + (this, mxContext->createFastChildContext(Element, Attribs)); + pWrapper->mMyNamespaces = mMyNamespaces; + pWrapper->setPropertySet(getPropertySet()); + xResult.set(pWrapper); + } + else + xResult.set(this); + + if ( bInTokens ) + { + OOXMLFastContextHandlerShape* pShapeCtx = (OOXMLFastContextHandlerShape*)mpParent; + pShapeCtx->sendShape( Element ); + } + + return xResult; +} + +void OOXMLFastContextHandlerWrapper::lcl_characters +(const ::rtl::OUString & aChars) + throw (uno::RuntimeException, xml::sax::SAXException) +{ + if (mxContext.is()) + mxContext->characters(aChars); +} + +OOXMLFastContextHandler * +OOXMLFastContextHandlerWrapper::getFastContextHandler() const +{ + if (mxContext.is()) + return dynamic_cast<OOXMLFastContextHandler *>(mxContext.get()); + + return NULL; +} + +void OOXMLFastContextHandlerWrapper::newProperty +(const Id & rId, OOXMLValue::Pointer_t pVal) +{ + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + pHandler->newProperty(rId, pVal); + } +} + +void OOXMLFastContextHandlerWrapper::setPropertySet +(OOXMLPropertySet::Pointer_t pPropertySet) +{ + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + pHandler->setPropertySet(pPropertySet); + } + + mpPropertySet = pPropertySet; +} + +OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerWrapper::getPropertySet() + const +{ + OOXMLPropertySet::Pointer_t pResult(mpPropertySet); + + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + pResult = pHandler->getPropertySet(); + } + + return pResult; +} + +string OOXMLFastContextHandlerWrapper::getType() const +{ + string sResult = "Wrapper("; + + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + sResult += pHandler->getType(); + } + + sResult += ")"; + + return sResult; +} + +void OOXMLFastContextHandlerWrapper::setId(Id rId) +{ + OOXMLFastContextHandler::setId(rId); + + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + pHandler->setId(rId); + } +} + +Id OOXMLFastContextHandlerWrapper::getId() const +{ + Id nResult = OOXMLFastContextHandler::getId(); + + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL && pHandler->getId() != 0) + nResult = pHandler->getId(); + } + + return nResult; +} + +void OOXMLFastContextHandlerWrapper::setToken(Token_t nToken) +{ + OOXMLFastContextHandler::setToken(nToken); + + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + pHandler->setToken(nToken); + } +} + +Token_t OOXMLFastContextHandlerWrapper::getToken() const +{ + Token_t nResult = OOXMLFastContextHandler::getToken(); + + if (mxContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != NULL) + nResult = pHandler->getToken(); + } + + return nResult; +} + +}} |