summaryrefslogtreecommitdiff
path: root/writerfilter/source/ooxml/OOXMLParserState.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source/ooxml/OOXMLParserState.cxx')
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx325
1 files changed, 325 insertions, 0 deletions
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
new file mode 100644
index 000000000000..fb347d02048e
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLParserState.cxx
@@ -0,0 +1,325 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <iostream>
+#include "OOXMLParserState.hxx"
+#include "ooxmlLoggers.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+/*
+ class OOXMLParserState
+*/
+
+OOXMLParserState::OOXMLParserState() :
+ mbInSectionGroup(false),
+ mbInParagraphGroup(false),
+ mbInCharacterGroup(false),
+ mbLastParagraphInSection(false),
+ mbForwardEvents(true),
+ mnContexts(0),
+ mnHandle(0),
+ mpDocument(NULL)
+{
+}
+
+OOXMLParserState::~OOXMLParserState()
+{
+}
+
+void OOXMLParserState::setLastParagraphInSection(bool bLastParagraphInSection)
+{
+ mbLastParagraphInSection = bLastParagraphInSection;
+}
+
+bool OOXMLParserState::isLastParagraphInSection() const
+{
+ return mbLastParagraphInSection;
+}
+
+bool OOXMLParserState::isInSectionGroup() const
+{
+ return mbInSectionGroup;
+}
+
+void OOXMLParserState::setInSectionGroup(bool bInSectionGroup)
+{
+ mbInSectionGroup = bInSectionGroup;
+}
+
+bool OOXMLParserState::isInParagraphGroup() const
+{
+ return mbInParagraphGroup;
+}
+
+void OOXMLParserState::setInParagraphGroup(bool bInParagraphGroup)
+{
+ mbInParagraphGroup = bInParagraphGroup;
+}
+
+bool OOXMLParserState::isInCharacterGroup() const
+{
+ return mbInCharacterGroup;
+}
+
+void OOXMLParserState::setInCharacterGroup(bool bInCharacterGroup)
+{
+ mbInCharacterGroup = bInCharacterGroup;
+}
+
+void OOXMLParserState::setForwardEvents(bool bForwardEvents)
+{
+ mbForwardEvents = bForwardEvents;
+}
+
+bool OOXMLParserState::isForwardEvents() const
+{
+ return mbForwardEvents;
+}
+
+const string OOXMLParserState::getHandle() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", mnHandle);
+
+ return sBuffer;
+}
+
+void OOXMLParserState::setHandle()
+{
+ mnHandle = mnContexts;
+}
+
+void OOXMLParserState::setDocument(OOXMLDocument * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+OOXMLDocument * OOXMLParserState::getDocument() const
+{
+ return mpDocument;
+}
+
+void OOXMLParserState::setXNoteId(const rtl::OUString & rId)
+{
+ mpDocument->setXNoteId(rId);
+}
+
+const rtl::OUString & OOXMLParserState::getXNoteId() const
+{
+ return mpDocument->getXNoteId();
+}
+
+const ::rtl::OUString & OOXMLParserState::getTarget() const
+{
+ return mpDocument->getTarget();
+}
+
+void OOXMLParserState::resolveCharacterProperties(Stream & rStream)
+{
+ if (mpCharacterProps.get() != NULL)
+ {
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("resolveCharacterProperties");
+#endif
+
+ rStream.props(mpCharacterProps);
+ mpCharacterProps.reset(new OOXMLPropertySetImpl());
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->endElement("resolveCharacterProperties");
+#endif
+ }
+}
+
+void OOXMLParserState::setCharacterProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mpCharacterProps.get() == NULL)
+ mpCharacterProps = pProps;
+ else
+ mpCharacterProps->add(pProps);
+}
+
+void OOXMLParserState::setCellProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mCellProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top();
+
+ if (rCellProps.get() == NULL)
+ rCellProps = pProps;
+ else
+ rCellProps->add(pProps);
+ }
+}
+
+void OOXMLParserState::setRowProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mRowProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top();
+
+ if (rRowProps.get() == NULL)
+ rRowProps = pProps;
+ else
+ rRowProps->add(pProps);
+ }
+}
+
+void OOXMLParserState::resolveCellProperties(Stream & rStream)
+{
+ if (mCellProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top();
+
+ if (rCellProps.get() != NULL)
+ {
+ rStream.props(rCellProps);
+ rCellProps.reset(new OOXMLPropertySetImpl());
+ }
+ }
+}
+
+void OOXMLParserState::resolveRowProperties(Stream & rStream)
+{
+ if (mRowProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top();
+
+ if (rRowProps.get() != NULL)
+ {
+ rStream.props(rRowProps);
+ rRowProps.reset(new OOXMLPropertySetImpl());
+ }
+ }
+}
+
+void OOXMLParserState::resolveTableProperties(Stream & rStream)
+{
+ if (mTableProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top();
+
+ if (rTableProps.get() != NULL)
+ {
+ rStream.props(rTableProps);
+ rTableProps.reset(new OOXMLPropertySetImpl());
+ }
+ }
+}
+
+void OOXMLParserState::setTableProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mTableProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top();
+ if (rTableProps.get() == NULL)
+ rTableProps = pProps;
+ else
+ rTableProps->add(pProps);
+ }
+}
+
+void OOXMLParserState::startTable()
+{
+ OOXMLPropertySet::Pointer_t pCellProps;
+ OOXMLPropertySet::Pointer_t pRowProps;
+ OOXMLPropertySet::Pointer_t pTableProps;
+
+ mCellProps.push(pCellProps);
+ mRowProps.push(pRowProps);
+ mTableProps.push(pTableProps);
+}
+
+void OOXMLParserState::endTable()
+{
+ mCellProps.pop();
+ mRowProps.pop();
+ mTableProps.pop();
+}
+
+void OOXMLParserState::incContextCount()
+{
+ mnContexts++;
+}
+
+#ifdef DEBUG
+unsigned int OOXMLParserState::getContextCount() const
+{
+ return mnContexts;
+}
+
+string OOXMLParserState::toString() const
+{
+ return toTag()->toString();
+}
+
+XMLTag::Pointer_t OOXMLParserState::toTag() const
+{
+ XMLTag::Pointer_t pTag(new XMLTag("parserstate"));
+
+ string sTmp;
+
+ if (isInSectionGroup())
+ sTmp += "s";
+ else
+ sTmp += "-";
+
+ if (isInParagraphGroup())
+ sTmp += "p";
+ else
+ sTmp += "-";
+
+ if (isInCharacterGroup())
+ sTmp += "c";
+ else
+ sTmp += "-";
+
+ if (isForwardEvents())
+ sTmp += "f";
+ else
+ sTmp += "-";
+
+ pTag->addAttr("state", sTmp);
+ pTag->addAttr("XNoteId",
+ OUStringToOString(getXNoteId(),
+ RTL_TEXTENCODING_ASCII_US).getStr());
+ if (mpCharacterProps != OOXMLPropertySet::Pointer_t())
+ pTag->chars(mpCharacterProps->toString());
+
+ return pTag;
+ }
+#endif
+
+}}