/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #include #include #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 sal_Int32 nId) { mpDocument->setXNoteId(nId); } sal_Int32 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(); #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.empty()) { 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.empty()) { OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top(); if (rRowProps.get() == NULL) rRowProps = pProps; else rRowProps->add(pProps); } } void OOXMLParserState::resolveCellProperties(Stream & rStream) { if (!mCellProps.empty()) { OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top(); if (rCellProps.get() != NULL) { rStream.props(rCellProps); rCellProps.reset(new OOXMLPropertySetImpl()); } } } void OOXMLParserState::resolveRowProperties(Stream & rStream) { if (!mRowProps.empty()) { OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top(); if (rRowProps.get() != NULL) { rStream.props(rRowProps); rRowProps.reset(new OOXMLPropertySetImpl()); } } } void OOXMLParserState::resolveTableProperties(Stream & rStream) { if (!mTableProps.empty()) { 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.empty()) { 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++; } #if OSL_DEBUG_LEVEL > 1 void OOXMLParserState::dumpXml( const TagLogger::Pointer_t& pLogger ) { pLogger->startElement("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 += "-"; pLogger->attribute("state", sTmp); pLogger->attribute("XNoteId", getXNoteId() ); if (mpCharacterProps != OOXMLPropertySet::Pointer_t()) pLogger->chars(mpCharacterProps->toString()); pLogger->endElement(); } XPathLogger & OOXMLParserState::getXPathLogger() { return m_xPathLogger; } #endif }} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */