From 235cea0dd1033f42933efcb494510a58606b7a6c Mon Sep 17 00:00:00 2001 From: Henning Brinkmann Date: Wed, 22 Jul 2009 12:49:19 +0200 Subject: #i100754# initial version of new code generation --- .../source/ooxml/OOXMLFastContextHandler.cxx | 7 + .../source/ooxml/OOXMLFastContextHandler.hxx | 69 +- writerfilter/source/ooxml/makefile.mk | 36 ++ writerfilter/source/ooxml/resourcestools.xsl | 705 ++++++++++++++++++++- 4 files changed, 769 insertions(+), 48 deletions(-) (limited to 'writerfilter') diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index f6f5f1ca7774..c9c6d6379989 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -41,6 +41,8 @@ #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 }; @@ -985,6 +987,11 @@ void OOXMLFastContextHandler::clearProps() setPropertySet(OOXMLPropertySet::Pointer_t(new OOXMLPropertySetImpl())); } +const ::rtl::OUString & OOXMLFastContextHandler::getText() const +{ + return aEmptyStr; +} + void OOXMLFastContextHandler::setDocument(OOXMLDocument * pDocument) { mpParserState->setDocument(pDocument); diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx index 479cf0e4e78f..7a31d044e2ff 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx @@ -191,6 +191,41 @@ public: sal_uInt32 getInstanceNumber() const; + void sendTableDepth() const; + void setHandle(); + + void startSectionGroup(); + void setLastParagraphInSection(); + void endSectionGroup(); + void startParagraphGroup(); + void endParagraphGroup(); + void startCharacterGroup(); + void endCharacterGroup(); + + void startField(); + void fieldSeparator(); + void endField(); + void ftnednref(); + void ftnedncont(); + void ftnednsep(); + void pgNum(); + void tab(); + void cr(); + void noBreakHyphen(); + void softHyphen(); + void handleLastParagraphInSection(); + void endOfParagraph(); + void text(const ::rtl::OUString & sText); + virtual void propagateCharacterProperties(); + virtual void propagateCharacterPropertiesAsSet(const Id & rId); + virtual bool propagatesProperties() const; + void sendPropertiesWithId(const Id & rId); + void propagateTableProperties(); + void clearProps(); + + const ::rtl::OUString & getText() const; + + void sendPropertyToParent(); static void dumpOpenContexts(); protected: @@ -241,40 +276,6 @@ protected: (const ::rtl::OUString & rId); virtual void resolvePropertySetAttrs(); - void sendTableDepth() const; - void setHandle(); - - void startSectionGroup(); - void setLastParagraphInSection(); - void endSectionGroup(); - void startParagraphGroup(); - void endParagraphGroup(); - void startCharacterGroup(); - void endCharacterGroup(); - - void startField(); - void fieldSeparator(); - void endField(); - void ftnednref(); - void ftnedncont(); - void ftnednsep(); - void pgNum(); - void tab(); - void cr(); - void noBreakHyphen(); - void softHyphen(); - void handleLastParagraphInSection(); - void endOfParagraph(); - void text(const ::rtl::OUString & sText); - virtual void propagateCharacterProperties(); - virtual void propagateCharacterPropertiesAsSet(const Id & rId); - virtual bool propagatesProperties() const; - void sendPropertiesWithId(const Id & rId); - void propagateTableProperties(); - void clearProps(); - - void sendPropertyToParent(); - uno::Reference< uno::XComponentContext > getComponentContext(); sal_uInt32 mnInstanceNumber; diff --git a/writerfilter/source/ooxml/makefile.mk b/writerfilter/source/ooxml/makefile.mk index 6eab209be473..07720da4fb49 100644 --- a/writerfilter/source/ooxml/makefile.mk +++ b/writerfilter/source/ooxml/makefile.mk @@ -74,9 +74,14 @@ NAMESPACES= \ SLOFASTNAMESPACES= \ $(SLO)$/OOXMLfastresources_{$(NAMESPACES)}.obj + +SLOFACTORIESNAMESPACES= \ + $(SLO)$/OOXMLFactory_{$(NAMESPACES)}.obj SLOFILES= \ + $(SLOFACTORIESNAMESPACES) \ $(SLOFASTNAMESPACES) \ + $(SLO)$/OOXMLFactory.obj \ $(SLO)$/OOXMLBinaryObjectReference.obj\ $(SLO)$/OOXMLfastresources.obj \ $(SLO)$/OOXMLvalues.obj \ @@ -134,6 +139,9 @@ OOXMLHXXOUTDIRCREATED=$(OOXMLHXXOUTDIR)/created OOXMLFASTRESOURCECXXS=$(OOXMLCXXOUTDIR)$/OOXMLfastresources_{$(NAMESPACES)}.cxx OOXMLFASTRESOURCEHXXS=$(OOXMLHXXOUTDIR)$/OOXMLfastresources_{$(NAMESPACES)}.hxx +OOXMLFACTORYCXXS=$(OOXMLCXXOUTDIR)$/OOXMLFactory_{$(NAMESPACES)}.cxx +OOXMLFACTORYHXXS=$(OOXMLHXXOUTDIR)$/OOXMLFactory_{$(NAMESPACES)}.hxx + OOXMLMODEL=model.xml OOXMLPREPROCESSXSL=modelpreprocess.xsl OOXMLRESOURCESTOOLSXSL=resourcestools.xsl @@ -154,6 +162,8 @@ OOXMLRESOURCEIDSHXX=$(OOXMLHXXOUTDIR)$/resourceids.hxx TOKENXML=$(OOXMLCXXOUTDIR)$/token.xml TOKENXMLTMP=$(OOXMLCXXOUTDIR)$/token.tmp +OOXMLFACTORYGENERATEDHXX=$(OOXMLHXXOUTDIR)$/OOXMLFactory_generated.hxx +OOXMLFACTORYGENERATEDCXX=$(OOXMLCXXOUTDIR)$/OOXMLFactory_generated.cxx OOXMLFASTTOKENSHXX=$(OOXMLHXXOUTDIR)$/OOXMLFastTokens.hxx OOXMLFASTRESOURCESHXX=$(OOXMLHXXOUTDIR)$/OOXMLfastresources.hxx OOXMLNAMESPACEIDSHXX=$(OOXMLHXXOUTDIR)$/OOXMLnamespaceids.hxx @@ -164,6 +174,8 @@ GPERFFASTTOKENHXX=$(OOXMLHXXOUTDIR)$/gperffasttoken.hxx MODELPROCESSED=$(MISC)$/model_preprocessed.xml OOXMLGENHEADERS= \ + $(OOXMLFACTORYGENERATEDHXX) \ + $(OOXMLFACTORYHXXS) \ $(OOXMLFASTRESOURCESHXX) \ $(OOXMLFASTTOKENSHXX) \ $(OOXMLVALUESHXX) \ @@ -175,6 +187,8 @@ OOXMLGENHEADERS= \ GENERATEDFILES= \ $(OOXMLGENHEADERS) \ $(MODELPROCESSED) \ + $(OOXMLFACTORYGENERATEDCXX) \ + $(OOXMLFACTORYCXXS) \ $(OOXMLFASTRESOURCECXXS) \ $(OOXMLVALUESCXX) \ $(TOKENXMLTMP) \ @@ -205,16 +219,36 @@ $(OOXMLFASTRESOURCESCXX): $(OOXMLFASTRESOURCEHXXS) \ $(OOXMLFASTRESOURCESIMPLXSL) $(MODELPROCESSED) $(XSLTPROC) $(OOXMLFASTRESOURCESIMPLXSL) $(MODELPROCESSED) > $@ +$(OOXMLFACTORYGENERATEDHXX): factoryinc.xsl + $(XSLTPROC) $< $(MODELPROCESSED) > $@ + +$(OOXMLFACTORYGENERATEDCXX): factoryimpl.xsl + $(XSLTPROC) $< $(MODELPROCESSED) > $@ + +$(OOXMLFACTORYGENERATEDCXX): $(MODELPROCESSED) + +$(OOXMLFACTORYGENERATEDHXX): $(MODELPROCESSED) + $(OOXMLFASTRESOURCECXXS): $(MODELPROCESSED) $(OOXMLFASTRESOURCEHXXS): $(MODELPROCESSED) +$(OOXMLFACTORYCXXS): $(MODELPROCESSED) + +$(OOXMLFACTORYHXXS): $(MODELPROCESSED) + $(OOXMLCXXOUTDIR)$/OOXMLfastresources%.cxx: fastresourcesimpl_ns.xsl $(XSLTPROC) --stringparam file $@ $< $(MODELPROCESSED) > $@ $(OOXMLHXXOUTDIR)$/OOXMLfastresources%.hxx: fastresources_ns.xsl $(XSLTPROC) --stringparam file $@ $< $(MODELPROCESSED) > $@ +$(OOXMLCXXOUTDIR)$/OOXMLFactory%.cxx: factoryimpl_ns.xsl + $(XSLTPROC) --stringparam file $@ $< $(MODELPROCESSED) > $@ + +$(OOXMLHXXOUTDIR)$/OOXMLFactory%.hxx: factory_ns.xsl + $(XSLTPROC) --stringparam file $@ $< $(MODELPROCESSED) > $@ + $(OOXMLVALUESHXX): $(OOXMLVALUESXSL) $(MODELPROCESSED) $(XSLTPROC) $(OOXMLVALUESXSL) $(MODELPROCESSED) > $@ @@ -235,6 +269,8 @@ $(GPERFFASTTOKENHXX): $(OOXMLGPERFFASTTOKENXSL) $(MODELPROCESSED) $(SLOFASTNAMESPACES): $(OOXMLFASTRESOURCESCXX) $(OOXMLGENHEADERS) +$(SLOFACTORIESNAMESPACES): $(OOXMLFACTORYSCXXS) $(OOXMLGENHEADERS) + $(GENERATEDFILES): $(OOXMLRESOURCESTOOLSXSL) $(SLOFILES): $(OOXMLGENHEADERS) diff --git a/writerfilter/source/ooxml/resourcestools.xsl b/writerfilter/source/ooxml/resourcestools.xsl index 9b17e4d3126f..2c2f7d73ff1f 100644 --- a/writerfilter/source/ooxml/resourcestools.xsl +++ b/writerfilter/source/ooxml/resourcestools.xsl @@ -1,4 +1,4 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + (*pMap)[ + + ] = RT_ + + ; + + + + + + + + + + +AttributeToResourceMapPointer + + ::createAttributeToResourceMap(Id nId) +{ + AttributeToResourceMapPointer pMap(new AttributeToResourceMap()); + + switch (nId) + { + + + + + + + + + + + break; + + + default: + break; + } + + return pMap; +} + + + + + +ListValueMapPointer + + ::createListValueMap(Id nId) +{ + ListValueMapPointer pMap(new ListValueMap()); + + switch (nId) + { + + + + + + + (*pMap)[ + + + + ] = + + + + ; + + + break; + + + default: + break; + } + + return pMap; +} + + + + + + + + + + + + + + + + + + + + (*pMap)[ + + ] = CreateElement(RT_ + + , + + + + ); + + + + + + + + + + + + /* ref: + + */ + + + + + + + + + + + + + + + + + /* start: + + */ + + + + + + + + +CreateElementMapPointer + + ::createCreateElementMap(Id nId) +{ + CreateElementMapPointer pMap(new CreateElementMap()); + + switch (nId) + { + + + + + + + + + + + break; + + + + default: + + + break; + } + + return pMap; +} + + + + + + + if (sal::static_int_cast<Id>(pHandler->getId()) == + + + + ) + { + + + + { + OOXMLPropertySetEntryToInteger aHandler( + + + + ); + dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler)->getPropertySetAttrs()->resolve(aHandler); + + if (sal::static_int_cast<Id>(aHandler.getValue()) == + + + + ) + { + + + + + dynamic_cast<OOXMLFastContextHandlerProperties*>(pHandler)-> + + (); + + + + pHandler->propagateCharacterPropertiesAsSet( + + + + ); + + + + dynamic_cast<OOXMLFastContextHandlerTextTableCell*>(pHandler)-> + + (); + + + + dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler)-> + + (); + + + + pHandler->startField(); + + + + pHandler->fieldSeparator(); + + + + pHandler->endField(); + + + + dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler)->sendProperty( + + + + ); + + + + pHandler->sendPropertiesWithId( + + + + ); + + + pHandler->text(sText); + + + + OOXMLFastHelper<OOXMLIntegerValue>::newProperty(pHandler, + + + + , ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" + + "))); + + + + OOXMLFastHelper<OOXMLIntegerValue>::mark(pHandler, + + + + , ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" + + "))); + + + + OOXMLFastHelper<OOXMLIntegerValue>::newProperty(pHandler, + + ooxml:token + + , pHandler->getToken()); + + + + pHandler-> + + (); + + + + + } + } + + + + } + + + + + + + +void + + :: + + Action(OOXMLFastContextHandler * pHandler + + , const ::rtl::OUString & sText + + ) +{ + switch (pHandler->getId()) + { + + + + + + + + + break; + + + default: + break; + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + void + + Action(OOXMLFastContextHandler * pHandler + + , const ::rtl::OUString & sText + + ); + + + + + + + OOXMLFactory_ + + + + + + + + + +class + + : public OOXMLFactory_ns +{ +public: + typedef boost::shared_ptr < OOXMLFactory_ns > Pointer_t; + + static Pointer_t getInstance(); + + virtual AttributeToResourceMapPointer createAttributeToResourceMap(Id nId); + virtual ListValueMapPointer createListValueMap(Id nId); + virtual CreateElementMapPointer createCreateElementMap(Id nId); + + + + virtual ~ + + (); + +protected: + static Pointer_t m_pInstance; + + + + (); +}; + + + + + + +#include " + + .hxx" + + + + + +OOXMLFactory_ns::Pointer_t OOXMLFactory::getFactoryForNamespace(Id nId) +{ + OOXMLFactory_ns::Pointer_t pResult; + + switch (nId & 0xffff0000) + { + + + case + + : + pResult.reset( + + ::getInstance()); + break; + + + default: + break; + } + + return aResult; +} + + + + + + + +extern const Id + + ; + + + + + + + +const Id + + = + + << 16; + + + + + + + + + + +extern const Id + + ; + + + + + + + + + +const Id + + = + + ; + + + + + + + _Mutex + + + + + + + +typedef rtl::Static < osl::Mutex, + + > + + _Mutex; + + + + + + + + + + + :: + + () +{ + // multi-thread-safe mutex for all platforms + + osl::MutexGuard aGuard( + + ::get()); +} + + + + + + + + + + + ::~ + + () +{ +} + + + + + + + + +OOXMLFactory_ns::Pointer_t + + ::m_pInstance; + +OOXMLFactory_ns::Pointer_t + + ::getInstance() +{ + if (m_pInstance.get() == NULL) + m_pInstance.reset(new + + ()); + + return m_pInstance; +} + + + + + + + + + RT_ + + , + + + + + + +uno::Reference< xml::sax::XFastContextHandler > OOXMLFactory::createFastChildContext +(OOXMLFastContextHandler * pHandler, Token_t Element) +{ + uno::Reference > xml::sax::XFastContextHandler < aResult; + Id nId = pHandler->getId(); + + OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nId); + + if (pFactory.get() != NULL) + { + CreateElementMapPointer pMap = pFactory->getCreateElementMap(nId); + + if (pMap.get() != NULL) + { + CreateElement aCreateElement = (*pMap)[Element]; + + switch (aCreateElement.m_nResource) + { + + + + case RT_ + + : + aResult.set(OOXMLFastHelper<OOXMLFastContextHandler + + ::createAndSetParent(pHandler, Element, aCreateElement.m_nId)); + break; + + + + default: + break; + } + } + } + + return aResult; +} + + + -- cgit v1.2.3