diff options
Diffstat (limited to '')
29 files changed, 28153 insertions, 0 deletions
diff --git a/writerfilter/source/ooxml/Handler.cxx b/writerfilter/source/ooxml/Handler.cxx new file mode 100644 index 000000000..7cbd9b6bf --- /dev/null +++ b/writerfilter/source/ooxml/Handler.cxx @@ -0,0 +1,435 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <ooxml/resourceids.hxx> +#include "Handler.hxx" + +#include <sal/log.hxx> + +namespace writerfilter::ooxml +{ + +/* + class OOXMLFootnoteHandler + */ +OOXMLFootnoteHandler::OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLFootnoteHandler::~OOXMLFootnoteHandler() +{ +} + +void OOXMLFootnoteHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_FtnEdnRef_id: + mpFastContext->resolveFootnote(sal_Int32(val.getInt())); + break; + default: + break; + } +} + +void OOXMLFootnoteHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLEndnoteHandler + */ +OOXMLEndnoteHandler::OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLEndnoteHandler::~OOXMLEndnoteHandler() +{ +} + +void OOXMLEndnoteHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_FtnEdnRef_id: + mpFastContext->resolveEndnote(sal_Int32(val.getInt())); + break; + default: + break; + } +} + +void OOXMLEndnoteHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLCommentHandler +*/ +OOXMLCommentHandler::OOXMLCommentHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLCommentHandler::~OOXMLCommentHandler() +{ +} + +void OOXMLCommentHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_Markup_id: + mpFastContext->resolveComment(val.getInt()); + break; + default: + ; + } +} + +void OOXMLCommentHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLOLEHandler +*/ +OOXMLOLEHandler::OOXMLOLEHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLOLEHandler::~OOXMLOLEHandler() +{ +} + +void OOXMLOLEHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_OLEObject_r_id: + try { + mpFastContext->resolveData(val.getString()); + } + catch (const ::css::uno::Exception&) + { + // Can't resolve OLE stream + SAL_WARN("writerfilter.ooxml", "Failed to open OLE stream!"); + } + break; + default: + ; + } +} + +void OOXMLOLEHandler::sprm(Sprm & /*sprm*/) +{ +} + +OOXMLEmbeddedFontHandler::OOXMLEmbeddedFontHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLEmbeddedFontHandler::~OOXMLEmbeddedFontHandler() +{ +} + +void OOXMLEmbeddedFontHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_Rel_id: + mpFastContext->resolveData(val.getString()); + break; + default: + break; + } +} + +void OOXMLEmbeddedFontHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLFooterHandler + */ +OOXMLFooterHandler::OOXMLFooterHandler(OOXMLFastContextHandler * pContext) + : mpFastContext(pContext), mnType(0) +{ +} + +void OOXMLFooterHandler::finalize() +{ + mpFastContext->resolveFooter(mnType, msStreamId); +} + +void OOXMLFooterHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_HdrFtrRef_id: + msStreamId = val.getString(); + break; + case NS_ooxml::LN_CT_HdrFtrRef_type: + mnType = val.getInt(); + break; + default: + break; + } +} + +void OOXMLFooterHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLHeaderHandler + */ +OOXMLHeaderHandler::OOXMLHeaderHandler(OOXMLFastContextHandler * pContext) + : mpFastContext(pContext), mnType(0) +{ +} + +void OOXMLHeaderHandler::finalize() +{ + mpFastContext->resolveHeader(mnType, msStreamId); +} + +void OOXMLHeaderHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_HdrFtrRef_id: + msStreamId = val.getString(); + break; + case NS_ooxml::LN_CT_HdrFtrRef_type: + mnType = val.getInt(); + break; + default: + break; + } +} + +void OOXMLHeaderHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLBreakHandler + */ +OOXMLBreakHandler::OOXMLBreakHandler(OOXMLFastContextHandler* pContext, Stream &rStream) +: mnType(0), + mpFastContext(pContext), + mrStream(rStream) +{ +} + +OOXMLBreakHandler::~OOXMLBreakHandler() +{ + if (mpFastContext) + { + mrStream.props(mpFastContext->getPropertySet().get()); + mpFastContext->clearProps(); + } + + sal_uInt8 tmpBreak[1]; + switch (mnType) + { + case NS_ooxml::LN_Value_ST_BrType_column: + tmpBreak[0] = 0x0E; + break; + case NS_ooxml::LN_Value_ST_BrType_page: + tmpBreak[0] = 0x0C; + break; + case NS_ooxml::LN_Value_ST_BrType_textWrapping: + default: // when no attribute type is present, the spec assume textWrapping + tmpBreak[0] = 0x0A; + break; + } + mrStream.text(&tmpBreak[0], 1); +} + +void OOXMLBreakHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_Br_type: + mnType = val.getInt(); + break; + case NS_ooxml::LN_CT_Br_clear: + break; + default: + break; + } +} + +void OOXMLBreakHandler::sprm(Sprm & /*sprm*/) +{ +} + +/* + class OOXMLPictureHandler + */ +OOXMLPictureHandler::OOXMLPictureHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLPictureHandler::~OOXMLPictureHandler() +{ +} + +void OOXMLPictureHandler::attribute(Id name, Value & val) +{ + if (name == NS_ooxml::LN_AG_Blob_r_embed) + mpFastContext->resolvePicture(val.getString()); + else + { + writerfilter::Reference<Properties>::Pointer_t pProps + (val.getProperties()); + if (pProps) + pProps->resolve(*this); + } +} + +void OOXMLPictureHandler::sprm(Sprm & rSprm) +{ + writerfilter::Reference<Properties>::Pointer_t pProps + (rSprm.getProps()); + + if (pProps) + pProps->resolve(*this); +} + +/** + class OOXMLHyperlinkHandler + */ + +OOXMLHyperlinkHandler::OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLHyperlinkHandler::~OOXMLHyperlinkHandler() +{ +} + +void OOXMLHyperlinkHandler::writetext() +{ + OUString sReturn = " HYPERLINK \"" + mURL + "\"" + mFieldCode; + mpFastContext->text(sReturn); +} + +void OOXMLHyperlinkHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_Hyperlink_tgtFrame: + mFieldCode += " \\t \""; + mFieldCode += val.getString(); + mFieldCode += "\""; + break; + case NS_ooxml::LN_CT_Hyperlink_tooltip: + mFieldCode += " \\o \""; + mFieldCode += val.getString(); + mFieldCode += "\""; + break; + case NS_ooxml::LN_CT_Hyperlink_docLocation: + break; + case NS_ooxml::LN_CT_Hyperlink_history: + break; + case NS_ooxml::LN_CT_Hyperlink_anchor: + mFieldCode += " \\l \""; + mFieldCode += val.getString(); + mFieldCode += "\""; + break; + case NS_ooxml::LN_CT_Hyperlink_r_id: + mURL = mpFastContext->getTargetForId(val.getString()); + break; + default: + break; + } +} + +void OOXMLHyperlinkHandler::sprm(Sprm & /*rSprm*/) +{ +} + +/** + class OOXMLHyperlinkURLHandler + */ + +OOXMLHyperlinkURLHandler::OOXMLHyperlinkURLHandler(OOXMLFastContextHandler * pContext) +: mpFastContext(pContext) +{ +} + +OOXMLHyperlinkURLHandler::~OOXMLHyperlinkURLHandler() +{ + mpFastContext->clearProps(); + mpFastContext->newProperty(NS_ooxml::LN_CT_Hyperlink_URL, OOXMLValue::Pointer_t(new OOXMLStringValue(mURL))); +} + +void OOXMLHyperlinkURLHandler::attribute(Id name, Value & val) +{ + switch (name) + { + case NS_ooxml::LN_CT_Hyperlink_URL: + mURL = mpFastContext->getTargetForId(val.getString()); + break; + default: + break; + } +} + +void OOXMLHyperlinkURLHandler::sprm(Sprm & /*rSprm*/) +{ +} + +OOXMLAltChunkHandler::OOXMLAltChunkHandler(OOXMLFastContextHandler* pContext) + : mpFastContext(pContext) +{ +} + +OOXMLAltChunkHandler::~OOXMLAltChunkHandler() +{ + mpFastContext->clearProps(); + mpFastContext->newProperty(NS_ooxml::LN_CT_AltChunk, + OOXMLValue::Pointer_t(new OOXMLStringValue(m_aStreamName))); +} + +void OOXMLAltChunkHandler::attribute(Id nName, Value& rValue) +{ + switch (nName) + { + case NS_ooxml::LN_CT_AltChunk: + m_aStreamName = mpFastContext->getTargetForId(rValue.getString()); + break; + default: + break; + } +} + +void OOXMLAltChunkHandler::sprm(Sprm& /*rSprm*/) {} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/Handler.hxx b/writerfilter/source/ooxml/Handler.hxx new file mode 100644 index 000000000..df6673d44 --- /dev/null +++ b/writerfilter/source/ooxml/Handler.hxx @@ -0,0 +1,179 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <dmapper/resourcemodel.hxx> +#include "OOXMLFastContextHandler.hxx" + +namespace writerfilter::ooxml +{ +class OOXMLFootnoteHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + +public: + explicit OOXMLFootnoteHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLFootnoteHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLEndnoteHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + +public: + explicit OOXMLEndnoteHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLEndnoteHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLFooterHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + OUString msStreamId; + sal_Int32 mnType; + +public: + explicit OOXMLFooterHandler(OOXMLFastContextHandler* pContext); + void finalize(); + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLHeaderHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + OUString msStreamId; + sal_Int32 mnType; + +public: + explicit OOXMLHeaderHandler(OOXMLFastContextHandler* pContext); + void finalize(); + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLCommentHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + +public: + explicit OOXMLCommentHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLCommentHandler() override; + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLOLEHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + +public: + explicit OOXMLOLEHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLOLEHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLEmbeddedFontHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + +public: + explicit OOXMLEmbeddedFontHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLEmbeddedFontHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLBreakHandler : public Properties +{ + sal_Int32 mnType; + OOXMLFastContextHandler* mpFastContext; + Stream& mrStream; + +public: + explicit OOXMLBreakHandler(OOXMLFastContextHandler* pContext, Stream& rStream); + virtual ~OOXMLBreakHandler() override; + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLPictureHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + +public: + explicit OOXMLPictureHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLPictureHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLHyperlinkHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + OUString mFieldCode; + OUString mURL; + +public: + explicit OOXMLHyperlinkHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLHyperlinkHandler() override; + void writetext(); + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +class OOXMLHyperlinkURLHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + OUString mURL; + +public: + explicit OOXMLHyperlinkURLHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLHyperlinkURLHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; + +/// Looks up the stream name for a '<w:altChunk r:id="..."/>' reference. +class OOXMLAltChunkHandler : public Properties +{ + OOXMLFastContextHandler* mpFastContext; + OUString m_aStreamName; + +public: + explicit OOXMLAltChunkHandler(OOXMLFastContextHandler* pContext); + virtual ~OOXMLAltChunkHandler() override; + + virtual void attribute(Id name, Value& val) override; + virtual void sprm(Sprm& sprm) override; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx new file mode 100644 index 000000000..1cf7ba7d0 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx @@ -0,0 +1,71 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#include "OOXMLBinaryObjectReference.hxx" +#include <string.h> + +namespace writerfilter::ooxml +{ + +using namespace ::com::sun::star; + +OOXMLBinaryObjectReference::OOXMLBinaryObjectReference +(OOXMLStream::Pointer_t const & pStream) +: mpStream(pStream), mbRead(false) +{ +} + +OOXMLBinaryObjectReference::~OOXMLBinaryObjectReference() +{ +} + +void OOXMLBinaryObjectReference::read() +{ + sal_uInt32 nMaxReadBytes = 1024*1024; + uno::Sequence<sal_Int8> aSeq(nMaxReadBytes); + uno::Reference<io::XInputStream> xInputStream = + mpStream->getDocumentStream(); + + sal_uInt32 nSize = 0; + sal_uInt32 nOldSize = 0; + sal_uInt32 nBytesRead = 0; + + while ((nBytesRead = xInputStream->readSomeBytes(aSeq, nMaxReadBytes)) > 0) + { + nOldSize = nSize; + nSize += nBytesRead; + mSequence.resize(nSize); + + memcpy(&mSequence[nOldSize], aSeq.getArray(), nBytesRead); + } + + mbRead = true; +} + +void OOXMLBinaryObjectReference::resolve(BinaryObj & rHandler) +{ + if (! mbRead) + read(); + + rHandler.data(reinterpret_cast<sal_uInt8 *>(mSequence.data()), + mSequence.size()); +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx new file mode 100644 index 000000000..84940b625 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <dmapper/resourcemodel.hxx> +#include <ooxml/OOXMLDocument.hxx> +#include <vector> + +namespace writerfilter::ooxml +{ +class OOXMLBinaryObjectReference : public writerfilter::Reference<BinaryObj> +{ + OOXMLStream::Pointer_t mpStream; + std::vector<sal_Int8> mSequence; + bool mbRead; + + void read(); + +public: + explicit OOXMLBinaryObjectReference(OOXMLStream::Pointer_t const& pStream); + virtual ~OOXMLBinaryObjectReference() override; + + virtual void resolve(BinaryObj& rHandler) override; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx new file mode 100644 index 000000000..0abd516a4 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx @@ -0,0 +1,898 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <comphelper/sequenceashashmap.hxx> + +#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> +#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> +#include <com/sun/star/xml/sax/SAXException.hpp> +#include <com/sun/star/xml/dom/DocumentBuilder.hpp> +#include <com/sun/star/graphic/GraphicMapper.hpp> +#include <ooxml/resourceids.hxx> +#include <oox/shape/ShapeFilterBase.hxx> +#include "OOXMLStreamImpl.hxx" +#include "OOXMLDocumentImpl.hxx" +#include "OOXMLBinaryObjectReference.hxx" +#include "OOXMLFastDocumentHandler.hxx" +#include "OOXMLPropertySet.hxx" + +#include <sal/log.hxx> +#include <tools/diagnose_ex.h> +#include <svx/dialmgr.hxx> +#include <svx/strings.hrc> +#include <comphelper/sequence.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <cppuhelper/exc_hlp.hxx> +#include <unotools/mediadescriptor.hxx> + +#include <iostream> +#include <sfx2/objsh.hxx> + +// this extern variable is declared in OOXMLStreamImpl.hxx +OUString customTarget; +OUString embeddingsTarget; +using namespace ::com::sun::star; +namespace writerfilter::ooxml +{ + +OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t const & pStream, const uno::Reference<task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, const uno::Sequence<beans::PropertyValue>& rDescriptor) + : mpStream(pStream) + , mxStatusIndicator(xStatusIndicator) + , mnXNoteId(0) + , mbIsSubstream(false) + , mbSkipImages(bSkipImages) + , mnPercentSize(0) + , mnProgressLastPos(0) + , mnProgressCurrentPos(0) + , mnProgressEndPos(0) + , m_rBaseURL(utl::MediaDescriptor(rDescriptor).getUnpackedValueOrDefault("DocumentBaseURL", OUString())) + , maMediaDescriptor(rDescriptor) + , mxGraphicMapper(graphic::GraphicMapper::create(mpStream->getContext())) +{ + pushShapeContext(); +} + +OOXMLDocumentImpl::~OOXMLDocumentImpl() +{ +} + +void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler, + OOXMLStream::StreamType_t nType) +{ + OOXMLStream::Pointer_t pStream; + try + { + pStream = OOXMLDocumentFactory::createStream(mpStream, nType); + } + catch (uno::Exception const&) + { + TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "resolveFastSubStream: exception while " + "resolving stream " << nType); + return; + } + OOXMLStream::Pointer_t savedStream = mpStream; + mpStream = pStream; + + uno::Reference<xml::sax::XFastParser> xParser(mpStream->getFastParser()); + + if (xParser.is()) + { + uno::Reference<uno::XComponentContext> xContext(mpStream->getContext()); + rtl::Reference<OOXMLFastDocumentHandler> pDocHandler = + new OOXMLFastDocumentHandler(xContext, &rStreamHandler, this, mnXNoteId); + + uno::Reference<xml::sax::XFastTokenHandler> xTokenHandler(mpStream->getFastTokenHandler()); + + xParser->setFastDocumentHandler(pDocHandler); + xParser->setTokenHandler(xTokenHandler); + + uno::Reference<io::XInputStream> xInputStream = mpStream->getDocumentStream(); + + if (xInputStream.is()) + { + struct xml::sax::InputSource oInputSource; + oInputSource.aInputStream = xInputStream; + xParser->parseStream(oInputSource); + + xInputStream->closeInput(); + } + } + + mpStream = savedStream; +} + +void OOXMLDocumentImpl::resolveFastSubStreamWithId(Stream & rStream, + const writerfilter::Reference<Stream>::Pointer_t& pStream, + sal_uInt32 nId) +{ + rStream.substream(nId, pStream); +} + +uno::Reference<xml::dom::XDocument> OOXMLDocumentImpl::importSubStream(OOXMLStream::StreamType_t nType) +{ + uno::Reference<xml::dom::XDocument> xRet; + + OOXMLStream::Pointer_t pStream; + try + { + pStream = OOXMLDocumentFactory::createStream(mpStream, nType); + } + catch (uno::Exception const&) + { + TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while " + "importing stream " << nType); + return xRet; + } + + uno::Reference<io::XInputStream> xInputStream = pStream->getDocumentStream(); + if (xInputStream.is()) + { + try + { + uno::Reference<uno::XComponentContext> xContext(mpStream->getContext()); + uno::Reference<xml::dom::XDocumentBuilder> xDomBuilder(xml::dom::DocumentBuilder::create(xContext)); + xRet = xDomBuilder->parse(xInputStream); + } + catch (uno::Exception const&) + { + TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while " + "parsing stream " << nType); + return xRet; + } + } + + if (OOXMLStream::CUSTOMXML == nType) + { + importSubStreamRelations(pStream, OOXMLStream::CUSTOMXMLPROPS); + } + else if (OOXMLStream::CHARTS == nType) + { + importSubStreamRelations(pStream, OOXMLStream::EMBEDDINGS); + } + + return xRet; +} + + +void OOXMLDocumentImpl::importSubStreamRelations(const OOXMLStream::Pointer_t& pStream, OOXMLStream::StreamType_t nType) +{ + uno::Reference<xml::dom::XDocument> xRelation; + OOXMLStream::Pointer_t cStream; + try + { + cStream = OOXMLDocumentFactory::createStream(pStream, nType); + } + catch (uno::Exception const&) + { + TOOLS_WARN_EXCEPTION("writerfilter.ooxml", "importSubStreamRelations: exception while " + "importing stream " << nType); + return; + } + + uno::Reference<io::XInputStream> xcpInputStream = cStream->getDocumentStream(); + + if (!xcpInputStream.is()) + return; + + // importing itemprops files for item.xml from customXml. + if (OOXMLStream::CUSTOMXMLPROPS == nType) + { + try + { + uno::Reference<uno::XComponentContext> xcpContext(pStream->getContext()); + uno::Reference<xml::dom::XDocumentBuilder> xDomBuilder(xml::dom::DocumentBuilder::create(xcpContext)); + xRelation = xDomBuilder->parse(xcpInputStream); + } + catch (uno::Exception const&) + { + TOOLS_WARN_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while " + "parsing stream " << nType); + mxCustomXmlProsDom = xRelation; + } + + if(xRelation.is()) + { + mxCustomXmlProsDom = xRelation; + } + } + else if(OOXMLStream::EMBEDDINGS == nType) + { + mxEmbeddings = xcpInputStream; + } + else if(OOXMLStream::CHARTS == nType) + { + importSubStreamRelations(cStream, OOXMLStream::EMBEDDINGS); + } + + +} + +void OOXMLDocumentImpl::setXNoteId(const sal_Int32 nId) +{ + mnXNoteId = nId; +} + +sal_Int32 OOXMLDocumentImpl::getXNoteId() const +{ + return mnXNoteId; +} + +const OUString & OOXMLDocumentImpl::getTarget() const +{ + return mpStream->getTarget(); +} + +writerfilter::Reference<Stream>::Pointer_t +OOXMLDocumentImpl::getSubStream(const OUString & rId) +{ + OOXMLStream::Pointer_t pStream + (OOXMLDocumentFactory::createStream(mpStream, rId)); + + OOXMLDocumentImpl * pTemp; + // Do not pass status indicator to sub-streams: they are typically marginal in size, so we just track the main document for now. + writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages, maMediaDescriptor)); + pTemp->setModel(mxModel); + pTemp->setDrawPage(mxDrawPage); + pTemp->mbIsSubstream = true; + return pRet; +} + +writerfilter::Reference<Stream>::Pointer_t +OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const sal_Int32 nId) +{ + OOXMLStream::Pointer_t pStream = + OOXMLDocumentFactory::createStream(mpStream, nType); + // See above, no status indicator for the note stream, either. + OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages, maMediaDescriptor); + pDocument->setXNoteId(nId); + pDocument->setModel(getModel()); + pDocument->setDrawPage(getDrawPage()); + + return writerfilter::Reference<Stream>::Pointer_t(pDocument); +} + +void OOXMLDocumentImpl::resolveFootnote(Stream & rStream, + Id aType, + const sal_Int32 nNoteId) +{ + if (!mpXFootnoteStream) + mpXFootnoteStream = getXNoteStream(OOXMLStream::FOOTNOTES, nNoteId); + + Id nId; + switch (aType) + { + case NS_ooxml::LN_Value_doc_ST_FtnEdn_separator: + case NS_ooxml::LN_Value_doc_ST_FtnEdn_continuationSeparator: + nId = aType; + break; + default: + nId = NS_ooxml::LN_footnote; + break; + } + + resolveFastSubStreamWithId(rStream, mpXFootnoteStream, nId); +} + +void OOXMLDocumentImpl::resolveEndnote(Stream & rStream, + Id aType, + const sal_Int32 nNoteId) +{ + if (!mpXEndnoteStream) + mpXEndnoteStream = getXNoteStream(OOXMLStream::ENDNOTES, nNoteId); + + Id nId; + switch (aType) + { + case NS_ooxml::LN_Value_doc_ST_FtnEdn_separator: + case NS_ooxml::LN_Value_doc_ST_FtnEdn_continuationSeparator: + nId = aType; + break; + default: + nId = NS_ooxml::LN_endnote; + break; + } + + resolveFastSubStreamWithId(rStream, mpXEndnoteStream, nId); +} + +void OOXMLDocumentImpl::resolveCommentsExtendedStream(Stream& rStream) +{ + resolveFastSubStream(rStream, OOXMLStream::COMMENTS_EXTENDED); +} + +void OOXMLDocumentImpl::resolveComment(Stream & rStream, + const sal_Int32 nId) +{ + if (!mbCommentsExtendedResolved) + { + resolveCommentsExtendedStream(rStream); + mbCommentsExtendedResolved = true; + } + + writerfilter::Reference<Stream>::Pointer_t pStream = + getXNoteStream(OOXMLStream::COMMENTS, nId); + + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_annotation); +} + +OOXMLPropertySet * OOXMLDocumentImpl::getPicturePropSet +(const OUString & rId) +{ + OOXMLStream::Pointer_t pStream + (OOXMLDocumentFactory::createStream(mpStream, rId)); + + writerfilter::Reference<BinaryObj>::Pointer_t pPicture + (new OOXMLBinaryObjectReference(pStream)); + + OOXMLValue::Pointer_t pPayloadValue(new OOXMLBinaryValue(pPicture)); + + OOXMLPropertySet::Pointer_t pBlipSet(new OOXMLPropertySet); + + pBlipSet->add(NS_ooxml::LN_payload, pPayloadValue, OOXMLProperty::ATTRIBUTE); + + OOXMLValue::Pointer_t pBlipValue(new OOXMLPropertySetValue(pBlipSet)); + + OOXMLPropertySet * pProps = new OOXMLPropertySet; + + pProps->add(NS_ooxml::LN_blip, pBlipValue, OOXMLProperty::ATTRIBUTE); + + return pProps; +} + +void OOXMLDocumentImpl::resolvePicture(Stream & rStream, + const OUString & rId) +{ + OOXMLPropertySet::Pointer_t pProps(getPicturePropSet(rId)); + + rStream.props(pProps.get()); +} + +OUString OOXMLDocumentImpl::getTargetForId(const OUString & rId) +{ + return mpStream->getTargetForId(rId); +} + +void OOXMLDocumentImpl::resolveHeader(Stream & rStream, + const sal_Int32 type, + const OUString & rId) +{ + writerfilter::Reference<Stream>::Pointer_t pStream = + getSubStream(rId); + switch (type) + { + case NS_ooxml::LN_Value_ST_HdrFtr_even: + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_headerl); + break; + case NS_ooxml::LN_Value_ST_HdrFtr_default: // here we assume that default is right, but not necessarily true :-( + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_headerr); + break; + case NS_ooxml::LN_Value_ST_HdrFtr_first: + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_headerf); + break; + default: + break; + } +} + +void OOXMLDocumentImpl::resolveFooter(Stream & rStream, + const sal_Int32 type, + const OUString & rId) +{ + writerfilter::Reference<Stream>::Pointer_t pStream = + getSubStream(rId); + + switch (type) + { + case NS_ooxml::LN_Value_ST_HdrFtr_even: + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_footerl); + break; + case NS_ooxml::LN_Value_ST_HdrFtr_default: // here we assume that default is right, but not necessarily true :-( + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_footerr); + break; + case NS_ooxml::LN_Value_ST_HdrFtr_first: + resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_footerf); + break; + default: + break; + } +} + +namespace { +// Ensures that the indicator is reset after exiting OOXMLDocumentImpl::resolve +class StatusIndicatorGuard{ +public: + explicit StatusIndicatorGuard(css::uno::Reference<css::task::XStatusIndicator> const & xStatusIndicator) + :mxStatusIndicator(xStatusIndicator) + { + } + + ~StatusIndicatorGuard() + { + if (mxStatusIndicator.is()) + mxStatusIndicator->end(); + } + +private: + css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator; +}; +} + +void OOXMLDocumentImpl::resolve(Stream & rStream) +{ + StatusIndicatorGuard aStatusIndicatorGuard(mxStatusIndicator); + + if (utl::MediaDescriptor(maMediaDescriptor).getUnpackedValueOrDefault("ReadGlossaries", false)) + { + resolveFastSubStream(rStream, OOXMLStream::GLOSSARY); + return; + } + + uno::Reference<xml::sax::XFastParser> xParser(mpStream->getFastParser()); + + if (mxModel.is()) + { + uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(mxModel, uno::UNO_QUERY); + uno::Reference<document::XDocumentProperties> xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties(); + comphelper::SequenceAsHashMap aMap(xDocumentProperties->getDocumentStatistics()); + if (aMap.find("ParagraphCount") != aMap.end()) + { + sal_Int32 nValue; + if (aMap["ParagraphCount"] >>= nValue) + { + if (mxStatusIndicator.is()) + { + // We want to care about the progress if we know the estimated paragraph count and we have given a status indicator as well. + // Set the end position only here, so later it's enough to check if that is non-zero in incrementProgress(). + mnProgressEndPos = nValue; + OUString aDocLoad(SvxResId(RID_SVXSTR_DOC_LOAD)); + mxStatusIndicator->start(aDocLoad, mnProgressEndPos); + mnPercentSize = mnProgressEndPos / 100; + } + } + } + } + + if (!xParser.is()) + return; + + uno::Reference<uno::XComponentContext> xContext(mpStream->getContext()); + + rStream.setDocumentReference(this); + + rtl::Reference<OOXMLFastDocumentHandler> pDocHandler = + new OOXMLFastDocumentHandler(xContext, &rStream, this, mnXNoteId); + pDocHandler->setIsSubstream( mbIsSubstream ); + uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler(mpStream->getFastTokenHandler()); + + resolveFastSubStream(rStream, OOXMLStream::SETTINGS); + mxThemeDom = importSubStream(OOXMLStream::THEME); + resolveFastSubStream(rStream, OOXMLStream::THEME); + mxGlossaryDocDom = importSubStream(OOXMLStream::GLOSSARY); + if (mxGlossaryDocDom.is()) + resolveGlossaryStream(rStream); + + resolveEmbeddingsStream(mpStream); + + // Custom xml's are handled as part of grab bag. + resolveCustomXmlStream(rStream); + + resolveFastSubStream(rStream, OOXMLStream::FONTTABLE); + resolveFastSubStream(rStream, OOXMLStream::STYLES); + resolveFastSubStream(rStream, OOXMLStream::NUMBERING); + + xParser->setFastDocumentHandler( pDocHandler ); + xParser->setTokenHandler( xTokenHandler ); + + xml::sax::InputSource aParserInput; + aParserInput.sSystemId = mpStream->getTarget(); + aParserInput.aInputStream = mpStream->getDocumentStream(); + try + { + xParser->parseStream(aParserInput); + } + catch (xml::sax::SAXException const& rErr) + { + // don't silently swallow these - handlers may not have been executed, + // and the domain mapper is likely in an inconsistent state + // In case user chooses to try to continue loading, don't ask again for this file + SfxObjectShell* rShell = SfxObjectShell::GetShellFromComponent(mxModel); + if (!rShell + || !rShell->IsContinueImportOnFilterExceptions( + OUStringConcatenation("SAXException: " + rErr.Message))) + throw; + } + catch (uno::RuntimeException const&) + { + throw; + } + // note: cannot throw anything other than SAXException out of here? + catch (uno::Exception const&) + { + css::uno::Any anyEx = cppu::getCaughtException(); + SAL_WARN("writerfilter.ooxml", "OOXMLDocumentImpl::resolve(): " << exceptionToString(anyEx)); + throw lang::WrappedTargetRuntimeException("", nullptr, anyEx); + } + catch (...) + { + SAL_WARN("writerfilter.ooxml", + "OOXMLDocumentImpl::resolve(): non-UNO exception"); + } +} + +void OOXMLDocumentImpl::incrementProgress() +{ + mnProgressCurrentPos++; + // 1) If we know the end + // 2) We progressed enough that updating makes sense + // 3) We did not reach the end yet (possible in case the doc stat is misleading) + if (mnProgressEndPos && mnProgressCurrentPos > (mnProgressLastPos + mnPercentSize) && mnProgressLastPos < mnProgressEndPos) + { + mnProgressLastPos = mnProgressCurrentPos; + if (mxStatusIndicator.is()) + mxStatusIndicator->setValue(mnProgressLastPos); + } +} + +void OOXMLDocumentImpl::resolveCustomXmlStream(Stream & rStream) +{ + // Resolving all item[n].xml files from CustomXml folder. + uno::Reference<embed::XRelationshipAccess> xRelationshipAccess; + xRelationshipAccess.set(dynamic_cast<OOXMLStreamImpl&>(*mpStream).accessDocumentStream(), uno::UNO_QUERY); + if (!xRelationshipAccess.is()) + return; + + static const char sCustomType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"; + static const char sCustomTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/customXml"; + bool bFound = false; + const uno::Sequence<uno::Sequence< beans::StringPair>> aSeqs = xRelationshipAccess->getAllRelationships(); + std::vector<uno::Reference<xml::dom::XDocument>> aCustomXmlDomList; + std::vector<uno::Reference<xml::dom::XDocument>> aCustomXmlDomPropsList; + for (const uno::Sequence<beans::StringPair>& aSeq : aSeqs) + { + for (const beans::StringPair& aPair : aSeq) + { + // Need to resolve only customxml files from document relationships. + // Skipping other files. + if (aPair.Second == sCustomType || + aPair.Second == sCustomTypeStrict) + bFound = true; + else if (aPair.First == "Target" && bFound) + { + // Adding value to extern variable customTarget. It will be used in ooxmlstreamimpl + // to ensure customxml target is visited in lcl_getTarget. + customTarget = aPair.Second; + } + } + + if (bFound) + { + uno::Reference<xml::dom::XDocument> customXmlTemp = importSubStream(OOXMLStream::CUSTOMXML); + // This will add all item[n].xml with its relationship file i.e itemprops.xml to + // grabbag list. + if (mxCustomXmlProsDom.is() && customXmlTemp.is()) + { + aCustomXmlDomList.push_back(customXmlTemp); + aCustomXmlDomPropsList.push_back(mxCustomXmlProsDom); + resolveFastSubStream(rStream, OOXMLStream::CUSTOMXML); + } + + bFound = false; + } + } + + mxCustomXmlDomList = comphelper::containerToSequence(aCustomXmlDomList); + mxCustomXmlDomPropsList = comphelper::containerToSequence(aCustomXmlDomPropsList); +} + +namespace +{ +const char sSettingsType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"; +const char sStylesType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"; +const char sFonttableType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"; +const char sWebSettings[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings"; +const char sSettingsTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/settings"; +const char sStylesTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/styles"; +const char sFonttableTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable"; +const char sWebSettingsStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings"; + +constexpr OUStringLiteral sId = u"Id"; +constexpr OUStringLiteral sType = u"Type"; +constexpr OUStringLiteral sTarget = u"Target"; +constexpr OUStringLiteral sTargetMode = u"TargetMode"; +constexpr OUStringLiteral sContentType = u"_contentType"; +constexpr OUStringLiteral sRelDom = u"_relDom"; +constexpr OUStringLiteral sSettingsContentType = u"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"; +constexpr OUStringLiteral sStylesContentType = u"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"; +constexpr OUStringLiteral sWebsettingsContentType = u"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"; +constexpr OUStringLiteral sFonttableContentType = u"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"; +} + +// See DocxExport::WriteGlossary +void OOXMLDocumentImpl::resolveGlossaryStream(Stream & /*rStream*/) +{ + OOXMLStream::Pointer_t pStream; + try + { + pStream = OOXMLDocumentFactory::createStream(mpStream, OOXMLStream::GLOSSARY); + } + catch (uno::Exception const&) + { + TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "resolveGlossaryStream: exception while " + "createStream for glossary" << OOXMLStream::GLOSSARY); + return; + } + uno::Reference<embed::XRelationshipAccess> xRelationshipAccess; + xRelationshipAccess.set(dynamic_cast<OOXMLStreamImpl&>(*pStream).accessDocumentStream(), uno::UNO_QUERY); + if (!xRelationshipAccess.is()) + return; + + + const uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs = xRelationshipAccess->getAllRelationships(); + std::vector< uno::Sequence<beans::NamedValue> > aGlossaryDomList; + for (const uno::Sequence< beans::StringPair >& aSeq : aSeqs) + { + comphelper::NamedValueCollection aRelDefinition; + for (const auto& [name, value] : aSeq) + aRelDefinition.put(name, value); + + const OUString gType = aRelDefinition.getOrDefault(sType, OUString{}); + OOXMLStream::StreamType_t nType(OOXMLStream::UNKNOWN); + if (gType == sSettingsType || gType == sSettingsTypeStrict) + { + nType = OOXMLStream::SETTINGS; + aRelDefinition.put(sContentType, sSettingsContentType); + } + else if (gType == sStylesType || gType == sStylesTypeStrict) + { + nType = OOXMLStream::STYLES; + aRelDefinition.put(sContentType, sStylesContentType); + } + else if (gType == sWebSettings || gType == sWebSettingsStrict) + { + nType = OOXMLStream::WEBSETTINGS; + aRelDefinition.put(sContentType, sWebsettingsContentType); + } + else if (gType == sFonttableType || gType == sFonttableTypeStrict) + { + nType = OOXMLStream::FONTTABLE; + aRelDefinition.put(sContentType, sFonttableContentType); + } + else if (aRelDefinition.getOrDefault(sTargetMode, OUString{}) != "External") + { + // Some internal relation, but we don't create a DOM for it here yet? + SAL_WARN("writerfilter.ooxml", "Unknown type of glossary internal relation: " + "Id=\"" + aRelDefinition.getOrDefault<OUString>(sId, {}) + "\" " + "Type=\"" + gType + "\" " + "Target=\"" + aRelDefinition.getOrDefault<OUString>(sTarget, {}) + "\""); + continue; + } + + if (nType != OOXMLStream::UNKNOWN) + { + try + { + auto gStream = OOXMLDocumentFactory::createStream(pStream, nType); + uno::Reference xInputStream = gStream->getDocumentStream(); + uno::Reference xContext(pStream->getContext()); + uno::Reference xDomBuilder(xml::dom::DocumentBuilder::create(xContext)); + uno::Reference xDom = xDomBuilder->parse(xInputStream); + aRelDefinition.put(sRelDom, xDom); + } + catch (uno::Exception const&) + { + TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while " + "parsing stream of Type" << nType); + } + } + aGlossaryDomList.push_back(aRelDefinition.getNamedValues()); + } + mxGlossaryDomList = comphelper::containerToSequence(aGlossaryDomList); +} + +void OOXMLDocumentImpl::resolveEmbeddingsStream(const OOXMLStream::Pointer_t& pStream) +{ + uno::Reference<embed::XRelationshipAccess> xRelationshipAccess; + xRelationshipAccess.set(dynamic_cast<OOXMLStreamImpl&>(*pStream).accessDocumentStream(), uno::UNO_QUERY); + if (xRelationshipAccess.is()) + { + OUString const sChartType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"); + OUString const sChartTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/chart"); + OUString const sFootersType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"); + OUString const sFootersTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/footer"); + OUString const sHeaderType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"); + OUString const sHeaderTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/header"); + + bool bFound = false; + bool bHeaderFooterFound = false; + OOXMLStream::StreamType_t streamType = OOXMLStream::UNKNOWN; + const uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs = xRelationshipAccess->getAllRelationships(); + for (const uno::Sequence< beans::StringPair >& aSeq : aSeqs) + { + for (const beans::StringPair& aPair : aSeq) + { + if (aPair.Second == sChartType || + aPair.Second == sChartTypeStrict) + { + bFound = true; + } + else if(aPair.Second == sFootersType || + aPair.Second == sFootersTypeStrict) + { + bHeaderFooterFound = true; + streamType = OOXMLStream::FOOTER; + } + else if(aPair.Second == sHeaderType || + aPair.Second == sHeaderTypeStrict) + { + bHeaderFooterFound = true; + streamType = OOXMLStream::HEADER; + } + else if(aPair.First == "Target" && ( bFound || bHeaderFooterFound )) + { + // Adding value to extern variable customTarget. It will be used in ooxmlstreamimpl + // to ensure chart.xml target is visited in lcl_getTarget. + customTarget = aPair.Second; + } + } + if( bFound || bHeaderFooterFound) + { + if(bFound) + { + importSubStreamRelations(pStream, OOXMLStream::CHARTS); + } + if(bHeaderFooterFound) + { + try + { + OOXMLStream::Pointer_t Stream = OOXMLDocumentFactory::createStream(pStream, streamType); + if (Stream) + resolveEmbeddingsStream(Stream); + } + catch (uno::Exception const&) + { + TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "resolveEmbeddingsStream: can't find header/footer whilst " + "resolving stream " << streamType); + return; + } + } + + beans::PropertyValue embeddingsTemp; + // This will add all .xlsx and .bin to grabbag list. + if(bFound && mxEmbeddings.is()) + { + embeddingsTemp.Name = embeddingsTarget; + embeddingsTemp.Value <<= mxEmbeddings; + aEmbeddings.push_back(embeddingsTemp); + mxEmbeddings.clear(); + } + bFound = false; + bHeaderFooterFound = false; + } + } + } + if (!aEmbeddings.empty()) + mxEmbeddingsList = comphelper::containerToSequence(aEmbeddings); +} + +uno::Reference<xml::dom::XDocument> OOXMLDocumentImpl::getGlossaryDocDom( ) +{ + return mxGlossaryDocDom; +} + +uno::Sequence<uno::Sequence< beans::NamedValue> > OOXMLDocumentImpl::getGlossaryDomList() +{ + return mxGlossaryDomList; +} + +uno::Reference<io::XInputStream> OOXMLDocumentImpl::getInputStreamForId(const OUString & rId) +{ + OOXMLStream::Pointer_t pStream(OOXMLDocumentFactory::createStream(mpStream, rId)); + + return pStream->getDocumentStream(); +} + +void OOXMLDocumentImpl::setModel(uno::Reference<frame::XModel> xModel) +{ + mxModel.set(xModel); +} + +uno::Reference<frame::XModel> OOXMLDocumentImpl::getModel() +{ + return mxModel; +} + +void OOXMLDocumentImpl::setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage) +{ + mxDrawPage.set(xDrawPage); +} + +uno::Reference<drawing::XDrawPage> OOXMLDocumentImpl::getDrawPage() +{ + return mxDrawPage; +} + +const uno::Sequence<beans::PropertyValue>& OOXMLDocumentImpl::getMediaDescriptor() const +{ + return maMediaDescriptor; +} + +void OOXMLDocumentImpl::setShapeContext( rtl::Reference<oox::shape::ShapeContextHandler> xContext ) +{ + if (!maShapeContexts.empty()) + maShapeContexts.top() = xContext; +} + +rtl::Reference<oox::shape::ShapeContextHandler> OOXMLDocumentImpl::getShapeContext( ) +{ + if (!maShapeContexts.empty()) + return maShapeContexts.top(); + else + return {}; +} + +void OOXMLDocumentImpl::pushShapeContext() +{ + maShapeContexts.push({}); +} + +void OOXMLDocumentImpl::popShapeContext() +{ + if (!maShapeContexts.empty()) + maShapeContexts.pop(); +} + +uno::Reference<xml::dom::XDocument> OOXMLDocumentImpl::getThemeDom( ) +{ + return mxThemeDom; +} + +uno::Sequence<uno::Reference<xml::dom::XDocument> > OOXMLDocumentImpl::getCustomXmlDomList( ) +{ + return mxCustomXmlDomList; +} + +uno::Sequence<uno::Reference<xml::dom::XDocument> > OOXMLDocumentImpl::getCustomXmlDomPropsList( ) +{ + return mxCustomXmlDomPropsList; +} + +uno::Sequence<beans::PropertyValue > OOXMLDocumentImpl::getEmbeddingsList( ) +{ + return mxEmbeddingsList; +} + +const rtl::Reference<oox::shape::ShapeFilterBase>& OOXMLDocumentImpl::getShapeFilterBase() +{ + if (!mxShapeFilterBase) + mxShapeFilterBase = new oox::shape::ShapeFilterBase(mpStream->getContext()); + return mxShapeFilterBase; +} + +OOXMLDocument * +OOXMLDocumentFactory::createDocument +(const OOXMLStream::Pointer_t& pStream, + const uno::Reference<task::XStatusIndicator>& xStatusIndicator, + bool mbSkipImages, const uno::Sequence<beans::PropertyValue>& rDescriptor) +{ + return new OOXMLDocumentImpl(pStream, xStatusIndicator, mbSkipImages, rDescriptor); +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx new file mode 100644 index 000000000..eedf1eb12 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx @@ -0,0 +1,166 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <ooxml/OOXMLDocument.hxx> + +#include <com/sun/star/xml/dom/XDocument.hpp> +#include <com/sun/star/graphic/XGraphicMapper.hpp> + +#include <oox/drawingml/drawingmltypes.hxx> + +#include "OOXMLPropertySet.hxx" + +#include <vector> +#include <stack> + +namespace writerfilter::ooxml +{ + +class OOXMLDocumentImpl : public OOXMLDocument +{ + OOXMLStream::Pointer_t mpStream; + css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator; + writerfilter::Reference<Stream>::Pointer_t mpXFootnoteStream; + writerfilter::Reference<Stream>::Pointer_t mpXEndnoteStream; + sal_Int32 mnXNoteId; + + css::uno::Reference<css::frame::XModel> mxModel; + css::uno::Reference<css::drawing::XDrawPage> mxDrawPage; + css::uno::Reference<css::xml::dom::XDocument> mxGlossaryDocDom; + css::uno::Sequence < css::uno::Sequence< css::beans::NamedValue > > mxGlossaryDomList; + /// Stack of shape contexts, 1 element for VML, 1 element / nesting level for drawingML. + std::stack< rtl::Reference<oox::shape::ShapeContextHandler> > maShapeContexts; + css::uno::Reference<css::xml::dom::XDocument> mxThemeDom; + css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > mxCustomXmlDomList; + css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > mxCustomXmlDomPropsList; + css::uno::Reference<css::xml::dom::XDocument> mxCustomXmlProsDom; + css::uno::Reference<css::io::XInputStream> mxEmbeddings; + css::uno::Sequence < css::beans::PropertyValue > mxEmbeddingsList; + std::vector<css::beans::PropertyValue> aEmbeddings; + bool mbIsSubstream; + bool mbSkipImages; + /// How many paragraphs equal to 1 percent? + sal_Int32 mnPercentSize; + /// Position progress when it was last updated, possibly not after every paragraph in case of large documents. + sal_Int32 mnProgressLastPos; + /// Current position progress, updated after every paragraph. + sal_Int32 mnProgressCurrentPos; + /// End position, i.e. the estimated number of paragraphs. + sal_Int32 mnProgressEndPos; + /// DocumentBaseURL + OUString m_rBaseURL; + css::uno::Sequence<css::beans::PropertyValue> maMediaDescriptor; + /// Graphic mapper + css::uno::Reference<css::graphic::XGraphicMapper> mxGraphicMapper; + // For a document there is a single theme in document.xml.rels + // and the same is used by header and footer as well. + oox::drawingml::ThemePtr mpTheme; + rtl::Reference<oox::shape::ShapeFilterBase> mxShapeFilterBase; + + bool mbCommentsExtendedResolved = false; + +private: + void resolveFastSubStream(Stream & rStream, + OOXMLStream::StreamType_t nType); + + static void resolveFastSubStreamWithId(Stream & rStream, + const writerfilter::Reference<Stream>::Pointer_t& pStream, + sal_uInt32 nId); + + css::uno::Reference<css::xml::dom::XDocument> importSubStream(OOXMLStream::StreamType_t nType); + + void importSubStreamRelations(const OOXMLStream::Pointer_t& pStream, OOXMLStream::StreamType_t nType); + + writerfilter::Reference<Stream>::Pointer_t + getSubStream(const OUString & rId); + + writerfilter::Reference<Stream>::Pointer_t + getXNoteStream(OOXMLStream::StreamType_t nType, const sal_Int32 nNoteId); + + void resolveCustomXmlStream(Stream & rStream); + void resolveGlossaryStream(Stream & rStream); + void resolveEmbeddingsStream(const OOXMLStream::Pointer_t& pStream); + void resolveCommentsExtendedStream(Stream & rStream); + +public: + OOXMLDocumentImpl(OOXMLStream::Pointer_t const & pStream, const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, const css::uno::Sequence<css::beans::PropertyValue>& rDescriptor); + virtual ~OOXMLDocumentImpl() override; + + virtual void resolve(Stream & rStream) override; + + virtual void resolveFootnote(Stream & rStream, + Id aType, + const sal_Int32 nNoteId) override; + virtual void resolveEndnote(Stream & rStream, + Id aType, + const sal_Int32 nNoteId) override; + virtual void resolveHeader(Stream & rStream, + const sal_Int32 type, + const OUString & rId) override; + virtual void resolveFooter(Stream & rStream, + const sal_Int32 type, + const OUString & rId) override; + + virtual void resolveComment(Stream & rStream, const sal_Int32 nId) override; + + OOXMLPropertySet * getPicturePropSet(const OUString & rId); + virtual void resolvePicture(Stream & rStream, const OUString & rId) override; + + virtual OUString getTargetForId(const OUString & rId) override; + + virtual void setModel(css::uno::Reference<css::frame::XModel> xModel) override; + virtual css::uno::Reference<css::frame::XModel> getModel() override; + virtual void setDrawPage(css::uno::Reference<css::drawing::XDrawPage> xDrawPage) override; + virtual css::uno::Reference<css::drawing::XDrawPage> getDrawPage() override; + virtual css::uno::Reference<css::io::XInputStream> getInputStreamForId(const OUString & rId) override; + virtual void setXNoteId(const sal_Int32 nId) override; + virtual sal_Int32 getXNoteId() const override; + virtual const OUString & getTarget() const override; + virtual rtl::Reference<oox::shape::ShapeContextHandler> getShapeContext( ) override; + virtual void setShapeContext( rtl::Reference<oox::shape::ShapeContextHandler> xContext ) override; + void pushShapeContext() override; + void popShapeContext() override; + virtual css::uno::Reference<css::xml::dom::XDocument> getThemeDom() override; + virtual css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > getCustomXmlDomList() override; + virtual css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > getCustomXmlDomPropsList() override; + virtual css::uno::Reference<css::xml::dom::XDocument> getGlossaryDocDom() override; + virtual css::uno::Sequence<css::uno::Sequence< css::beans::NamedValue> > getGlossaryDomList() override; + virtual css::uno::Sequence<css::beans::PropertyValue > getEmbeddingsList() override; + + void incrementProgress(); + bool IsSkipImages() const { return mbSkipImages; }; + OUString const& GetDocumentBaseURL() const { return m_rBaseURL; }; + const css::uno::Sequence<css::beans::PropertyValue>& getMediaDescriptor() const; + + const css::uno::Reference<css::graphic::XGraphicMapper>& getGraphicMapper() const + { + return mxGraphicMapper; + } + + const oox::drawingml::ThemePtr & getTheme() const { return mpTheme; } + void setTheme(const oox::drawingml::ThemePtr& pTheme) { mpTheme = pTheme; } + + const rtl::Reference<oox::shape::ShapeFilterBase> & getShapeFilterBase(); + +}; + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx new file mode 100644 index 000000000..9e52c2b4c --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFactory.cxx @@ -0,0 +1,179 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sax/fastattribs.hxx> +#include "OOXMLFactory.hxx" + +namespace writerfilter::ooxml { + +using namespace com::sun::star; + + +OOXMLFactory_ns::~OOXMLFactory_ns() +{ +} + + +void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler, + const uno::Reference< xml::sax::XFastAttributeList > & xAttribs) +{ + Id nDefine = pHandler->getDefine(); + OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine); + + if (!pFactory) + return; + + sax_fastparser::FastAttributeList& rAttribs = + sax_fastparser::castToFastAttributeList( xAttribs ); + + const AttributeInfo *pAttr = pFactory->getAttributeInfoArray(nDefine); + if (!pAttr) + return; + + for (; pAttr->m_nToken != -1; ++pAttr) + { + sal_Int32 nToken = pAttr->m_nToken; + sal_Int32 nAttrIndex = rAttribs.getAttributeIndex(nToken); + if (nAttrIndex == -1) + continue; + + Id nId = pFactory->getResourceId(nDefine, nToken); + + OOXMLValue::Pointer_t xValue; + switch (pAttr->m_nResource) + { + case ResourceType::Boolean: + xValue = OOXMLBooleanValue::Create(rAttribs.getAsCharByIndex(nAttrIndex)); + break; + case ResourceType::String: + xValue = new OOXMLStringValue(rAttribs.getValueByIndex(nAttrIndex)); + break; + case ResourceType::Integer: + xValue = OOXMLIntegerValue::Create(rAttribs.getAsIntegerByIndex(nAttrIndex)); + break; + case ResourceType::Hex: + xValue = new OOXMLHexValue(rAttribs.getAsCharByIndex(nAttrIndex)); + break; + case ResourceType::HexColor: + xValue = new OOXMLHexColorValue(rAttribs.getAsCharByIndex(nAttrIndex)); + break; + case ResourceType::TwipsMeasure_asSigned: + case ResourceType::TwipsMeasure_asZero: + xValue = new OOXMLTwipsMeasureValue(rAttribs.getAsCharByIndex(nAttrIndex)); + if (xValue->getInt() < 0) + { + if (pAttr->m_nResource == ResourceType::TwipsMeasure_asZero) + xValue = OOXMLIntegerValue::Create(0); + } + break; + case ResourceType::HpsMeasure: + xValue = new OOXMLHpsMeasureValue(rAttribs.getAsCharByIndex(nAttrIndex)); + break; + case ResourceType::MeasurementOrPercent: + xValue = new OOXMLMeasurementOrPercentValue(rAttribs.getAsCharByIndex(nAttrIndex)); + break; + case ResourceType::List: + if (sal_uInt32 nValue; + pFactory->getListValue(pAttr->m_nRef, rAttribs.getValueByIndex(nAttrIndex), nValue)) + { + xValue = OOXMLIntegerValue::Create(nValue); + } + break; + default: + break; + } + + if (xValue) + { + pHandler->newProperty(nId, xValue); + pFactory->attributeAction(pHandler, nToken, xValue); + } + } +} + +uno::Reference< xml::sax::XFastContextHandler> +OOXMLFactory::createFastChildContext(OOXMLFastContextHandler * pHandler, + Token_t Element) +{ + Id nDefine = pHandler->getDefine(); + + OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine); + + uno::Reference< xml::sax::XFastContextHandler> ret; + + //Avoid handling unknown tokens and recursing to death + if ((Element & 0xffff) < oox::XML_TOKEN_COUNT) + ret = createFastChildContextFromFactory(pHandler, pFactory, Element); + + return ret; +} + +void OOXMLFactory::characters(OOXMLFastContextHandler * pHandler, + const OUString & rString) +{ + Id nDefine = pHandler->getDefine(); + OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine); + + if (pFactory) + { + pFactory->charactersAction(pHandler, rString); + } +} + +void OOXMLFactory::startAction(OOXMLFastContextHandler * pHandler) +{ + Id nDefine = pHandler->getDefine(); + OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine); + + if (pFactory) + { + pFactory->startAction(pHandler); + } +} + +void OOXMLFactory::endAction(OOXMLFastContextHandler * pHandler) +{ + Id nDefine = pHandler->getDefine(); + OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine); + + if (pFactory) + { + pFactory->endAction(pHandler); + } +} + +void OOXMLFactory_ns::startAction(OOXMLFastContextHandler *) +{ +} + +void OOXMLFactory_ns::endAction(OOXMLFastContextHandler *) +{ +} + +void OOXMLFactory_ns::charactersAction(OOXMLFastContextHandler *, const OUString &) +{ +} + +void OOXMLFactory_ns::attributeAction(OOXMLFastContextHandler *, Token_t, const OOXMLValue::Pointer_t&) +{ +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFactory.hxx b/writerfilter/source/ooxml/OOXMLFactory.hxx new file mode 100644 index 000000000..4f3c82f1b --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFactory.hxx @@ -0,0 +1,106 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <dmapper/resourcemodel.hxx> + +#include "OOXMLFastContextHandler.hxx" + +namespace writerfilter::ooxml { + +enum class ResourceType { + NoResource, + Table, + Stream, + List, + Integer, + Properties, + Hex, + HexColor, + String, + Shape, + Boolean, + Value, + XNote, + TextTableCell, + TextTableRow, + TextTable, + PropertyTable, + Math, + Any, + TwipsMeasure_asSigned, + TwipsMeasure_asZero, + HpsMeasure, + MeasurementOrPercent, + CommentEx, +}; + +struct AttributeInfo +{ + Token_t m_nToken; + ResourceType m_nResource; + Id m_nRef; +}; + +class OOXMLFactory_ns : public virtual SvRefBase { +public: + typedef tools::SvRef<OOXMLFactory_ns> Pointer_t; + + virtual void startAction(OOXMLFastContextHandler * pHandler); + virtual void charactersAction(OOXMLFastContextHandler * pHandler, const OUString & rString); + virtual void endAction(OOXMLFastContextHandler * pHandler); + virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, const OOXMLValue::Pointer_t& pValue); + +protected: + virtual ~OOXMLFactory_ns() override; + +public: + virtual bool getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue) = 0; + virtual Id getResourceId(Id nDefine, sal_Int32 nToken) = 0; + virtual const AttributeInfo* getAttributeInfoArray(Id nId) = 0; + virtual bool getElementId(Id nDefine, Id nId, ResourceType& rOutResource, Id& rOutElement) = 0; +}; + +class OOXMLFactory +{ +public: + + static css::uno::Reference< css::xml::sax::XFastContextHandler> createFastChildContext(OOXMLFastContextHandler * pHandler, Token_t Element); + + static css::uno::Reference< css::xml::sax::XFastContextHandler> createFastChildContextFromStart(OOXMLFastContextHandler * pHandler, Token_t Element); + + static void attributes(OOXMLFastContextHandler * pHandler, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs); + + static void characters(OOXMLFastContextHandler * pHandler, const OUString & rString); + + static void startAction(OOXMLFastContextHandler * pHandler); + static void endAction(OOXMLFastContextHandler * pHandler); + +private: + OOXMLFactory() = delete; + static OOXMLFactory_ns::Pointer_t getFactoryForNamespace(Id id); + + static css::uno::Reference< css::xml::sax::XFastContextHandler> createFastChildContextFromFactory(OOXMLFastContextHandler * pHandler, OOXMLFactory_ns::Pointer_t pFactory, Token_t Element); +}; + +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx new file mode 100644 index 000000000..c4ee2c048 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -0,0 +1,2307 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/text/RelOrientation.hpp> +#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> +#include <com/sun/star/xml/sax/SAXException.hpp> +#include <ooxml/resourceids.hxx> +#include <oox/mathml/import.hxx> +#include <oox/token/namespaces.hxx> +#include <sal/log.hxx> +#include <comphelper/embeddedobjectcontainer.hxx> +#include <comphelper/propertyvalue.hxx> +#include <cppuhelper/exc_hlp.hxx> +#include <tools/globname.hxx> +#include <comphelper/classids.hxx> +#include <sfx2/sfxbasemodel.hxx> +#include "OOXMLFastContextHandler.hxx" +#include "OOXMLFactory.hxx" +#include "Handler.hxx" +#include <dmapper/CommentProperties.hxx> +#include <dmapper/PropertyIds.hxx> +#include <comphelper/propertysequence.hxx> +#include <comphelper/sequenceashashmap.hxx> + +const sal_Unicode uCR = 0xd; +const sal_Unicode uFtnEdnRef = 0x2; +const sal_Unicode uFtnEdnSep = 0x3; +const sal_Unicode uFtnSep = 0x5; +const sal_Unicode uTab = 0x9; +const sal_Unicode uPgNum = 0x0; +const sal_Unicode uNoBreakHyphen = 0x2011; +const sal_Unicode uSoftHyphen = 0xAD; + +const sal_uInt8 cFtnEdnCont = 0x4; + +namespace writerfilter::ooxml +{ +using namespace ::com::sun::star; +using namespace oox; +using namespace ::std; +using namespace ::com::sun::star::xml::sax; + +/* + class OOXMLFastContextHandler + */ + +OOXMLFastContextHandler::OOXMLFastContextHandler +(uno::Reference< uno::XComponentContext > const & context) +: mpParent(nullptr), + mId(0), + mnDefine(0), + mnToken(oox::XML_TOKEN_COUNT), + mnMathJcVal(0), + mbIsMathPara(false), + mpStream(nullptr), + mnTableDepth(0), + inPositionV(false), + mbAllowInCell(true), + mbIsVMLfound(false), + m_xContext(context), + m_bDiscardChildren(false), + m_bTookChoice(false) +{ + if (!mpParserState) + mpParserState = new OOXMLParserState(); + + mpParserState->incContextCount(); +} + +OOXMLFastContextHandler::OOXMLFastContextHandler(OOXMLFastContextHandler * pContext) +: mpParent(pContext), + mId(0), + mnDefine(0), + mnToken(oox::XML_TOKEN_COUNT), + mnMathJcVal(pContext->mnMathJcVal), + mbIsMathPara(pContext->mbIsMathPara), + mpStream(pContext->mpStream), + mpParserState(pContext->mpParserState), + mnTableDepth(pContext->mnTableDepth), + inPositionV(pContext->inPositionV), + mbAllowInCell(pContext->mbAllowInCell), + mbIsVMLfound(pContext->mbIsVMLfound), + m_xContext(pContext->m_xContext), + m_bDiscardChildren(pContext->m_bDiscardChildren), + m_bTookChoice(pContext->m_bTookChoice) +{ + if (!mpParserState) + mpParserState = new OOXMLParserState(); + + mpParserState->incContextCount(); +} + +OOXMLFastContextHandler::~OOXMLFastContextHandler() +{ +} + +bool OOXMLFastContextHandler::prepareMceContext(Token_t nElement, const uno::Reference<xml::sax::XFastAttributeList>& rAttribs) +{ + switch (oox::getBaseToken(nElement)) + { + case XML_AlternateContent: + { + SavedAlternateState aState; + aState.m_bDiscardChildren = m_bDiscardChildren; + m_bDiscardChildren = false; + aState.m_bTookChoice = m_bTookChoice; + m_bTookChoice = false; + mpParserState->getSavedAlternateStates().push_back(aState); + } + break; + case XML_Choice: + { + OUString aRequires = rAttribs->getOptionalValue(XML_Requires); + static const char* aFeatures[] = { + "wps", + "wpg", + "w14", + }; + for (const char *p : aFeatures) + { + if (aRequires.equalsAscii(p)) + { + m_bTookChoice = true; + return false; + } + } + return true; + } + break; + case XML_Fallback: + // If Choice is already taken, then let's ignore the Fallback. + return m_bTookChoice; + default: + SAL_WARN("writerfilter", "OOXMLFastContextHandler::prepareMceContext: unhandled element:" << oox::getBaseToken(nElement)); + break; + } + return false; +} + +// xml::sax::XFastContextHandler: +void SAL_CALL OOXMLFastContextHandler::startFastElement +(sal_Int32 Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + // Set xml:space value early, to allow child contexts use it when dealing with strings. + if (Attribs && Attribs->hasAttribute(oox::NMSP_xml | oox::XML_space)) + { + mbPreserveSpace = Attribs->getValue(oox::NMSP_xml | oox::XML_space) == "preserve"; + mbPreserveSpaceSet = true; + } + if (Element == W_TOKEN(footnote) || Element == W_TOKEN(endnote)) + { + // send uFtnSep to sign new footnote content, but skip footnote separators + if (!Attribs->hasAttribute(W_TOKEN(type)) || + ( Attribs->getValue(W_TOKEN(type)) != "separator" && + Attribs->getValue(W_TOKEN(type)) != "continuationSeparator" && + Attribs->getValue(W_TOKEN(type)) != "continuationNotice" )) + { + mpParserState->setStartFootnote(true); + } + } + else if (Element == (NMSP_officeMath | XML_oMathPara)) + { + mnMathJcVal = eMathParaJc::CENTER; + mbIsMathPara = true; + } + else if (Element == (NMSP_officeMath | XML_jc) && mpParent && mpParent->mpParent ) + { + mbIsMathPara = true; + auto aAttrLst = Attribs->getFastAttributes(); + if (aAttrLst[0].Value == "center") mpParent->mpParent->mnMathJcVal = eMathParaJc::CENTER; + if (aAttrLst[0].Value == "left") mpParent->mpParent->mnMathJcVal = eMathParaJc::LEFT; + if (aAttrLst[0].Value == "right") mpParent->mpParent->mnMathJcVal = eMathParaJc::RIGHT; + } + + if (oox::getNamespace(Element) == NMSP_mce) + m_bDiscardChildren = prepareMceContext(Element, Attribs); + + else if (!m_bDiscardChildren) + { + attributes(Attribs); + lcl_startFastElement(Element, Attribs); + } +} + +void SAL_CALL OOXMLFastContextHandler::startUnknownElement +(const OUString & /*Namespace*/, const OUString & /*Name*/, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ +} + +void SAL_CALL OOXMLFastContextHandler::endFastElement(sal_Int32 Element) +{ + if (Element == (NMSP_mce | XML_Choice) || Element == (NMSP_mce | XML_Fallback)) + m_bDiscardChildren = false; + else if (Element == (NMSP_mce | XML_AlternateContent)) + { + SavedAlternateState aState(mpParserState->getSavedAlternateStates().back()); + mpParserState->getSavedAlternateStates().pop_back(); + m_bDiscardChildren = aState.m_bDiscardChildren; + m_bTookChoice = aState.m_bTookChoice; + } + else if (!m_bDiscardChildren) + lcl_endFastElement(Element); +} + +void OOXMLFastContextHandler::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + OOXMLFactory::startAction(this); + if( Element == (NMSP_dmlWordDr|XML_positionV) ) + inPositionV = true; + else if( Element == (NMSP_dmlWordDr|XML_positionH) ) + inPositionV = false; + +} + +void OOXMLFastContextHandler::lcl_endFastElement +(Token_t /*Element*/) +{ + OOXMLFactory::endAction(this); +} + +void SAL_CALL OOXMLFastContextHandler::endUnknownElement +(const OUString & , const OUString & ) +{ +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL + OOXMLFastContextHandler::createFastChildContext +(sal_Int32 Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + if (oox::getNamespace(Element) != NMSP_mce && !m_bDiscardChildren) + xResult.set(lcl_createFastChildContext(Element, Attribs)); + else if (oox::getNamespace(Element) == NMSP_mce) + xResult = this; + + return xResult; +} + +uno::Reference< xml::sax::XFastContextHandler > + OOXMLFastContextHandler::lcl_createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + return OOXMLFactory::createFastChildContext(this, Element); +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandler::createUnknownChildContext +(const OUString &, + const OUString &, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + return uno::Reference< xml::sax::XFastContextHandler > + (new OOXMLFastContextHandler(*const_cast<const OOXMLFastContextHandler *>(this))); +} + +void SAL_CALL OOXMLFastContextHandler::characters +(const OUString & aChars) +{ + lcl_characters(aChars); +} + +void OOXMLFastContextHandler::lcl_characters +(const OUString & rString) +{ + if (!m_bDiscardChildren) + OOXMLFactory::characters(this, rString); +} + +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) +{ + OOXMLFactory::attributes(this, Attribs); +} + +void OOXMLFastContextHandler::startAction() +{ + OOXMLFactory::startAction(this); +} + +void OOXMLFastContextHandler::endAction() +{ + OOXMLFactory::endAction(this); +} + +void OOXMLFastContextHandler::setId(Id rId) +{ + mId = rId; +} + +Id OOXMLFastContextHandler::getId() const +{ + return mId; +} + +void OOXMLFastContextHandler::setDefine(Id nDefine) +{ + mnDefine = nDefine; +} + + +void OOXMLFastContextHandler::setToken(Token_t nToken) +{ + mnToken = nToken; +} + +Token_t OOXMLFastContextHandler::getToken() const +{ + return mnToken; +} + +void OOXMLFastContextHandler::sendTableDepth() const +{ + if (mnTableDepth <= 0) + return; + + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth); + pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM); + } + + mpStream->props(pProps.get()); +} + +void OOXMLFastContextHandler::setHandle() +{ + mpParserState->setHandle(); + mpStream->info(mpParserState->getHandle()); +} + +void OOXMLFastContextHandler::startCharacterGroup() +{ + if (!isForwardEvents()) + return; + + if (mpParserState->isInCharacterGroup()) + endCharacterGroup(); + + if (! mpParserState->isInParagraphGroup()) + startParagraphGroup(); + + if (! mpParserState->isInCharacterGroup()) + { + mpStream->startCharacterGroup(); + mpParserState->setInCharacterGroup(true); + mpParserState->resolveCharacterProperties(*mpStream); + if (mpParserState->isStartFootnote()) + { + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uFtnSep), 1); + mpParserState->setStartFootnote(false); + } + } + + // tdf#108714 : if we have a postponed break information, + // then apply it now, before any other paragraph content. + mpParserState->resolvePostponedBreak(*mpStream); +} + +void OOXMLFastContextHandler::endCharacterGroup() +{ + if (isForwardEvents() && mpParserState->isInCharacterGroup()) + { + mpStream->endCharacterGroup(); + mpParserState->setInCharacterGroup(false); + } +} + +void OOXMLFastContextHandler::pushBiDiEmbedLevel() {} + +void OOXMLFastContextHandler::popBiDiEmbedLevel() {} + +void OOXMLFastContextHandler::startParagraphGroup() +{ + if (!isForwardEvents()) + return; + + if (mpParserState->isInParagraphGroup()) + endParagraphGroup(); + + if (! mpParserState->isInSectionGroup()) + startSectionGroup(); + + if ( mpParserState->isInParagraphGroup()) + return; + + mpStream->startParagraphGroup(); + mpParserState->setInParagraphGroup(true); + + if (const auto& pPropSet = getPropertySet()) + { + OOXMLPropertySetEntryToString aHandler(NS_ooxml::LN_AG_Parids_paraId); + pPropSet->resolve(aHandler); + if (const OUString& sText = aHandler.getString(); !sText.isEmpty()) + { + OOXMLStringValue::Pointer_t pVal = new OOXMLStringValue(sText); + OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySet); + pPropertySet->add(NS_ooxml::LN_AG_Parids_paraId, pVal, OOXMLProperty::ATTRIBUTE); + mpStream->props(pPropertySet.get()); + } + } +} + +void OOXMLFastContextHandler::endParagraphGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInCharacterGroup()) + endCharacterGroup(); + + if (mpParserState->isInParagraphGroup()) + { + mpStream->endParagraphGroup(); + mpParserState->setInParagraphGroup(false); + } + } +} + +void OOXMLFastContextHandler::startSdt() +{ + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_CT_SdtBlock_sdtContent, pVal, OOXMLProperty::ATTRIBUTE); + mpStream->props(pProps.get()); +} + +void OOXMLFastContextHandler::endSdt() +{ + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_CT_SdtBlock_sdtEndContent, pVal, OOXMLProperty::ATTRIBUTE); + mpStream->props(pProps.get()); +} + +void OOXMLFastContextHandler::startSdtRun() +{ + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_CT_SdtRun_sdtContent, pVal, OOXMLProperty::ATTRIBUTE); + mpStream->props(pProps.get()); +} + +void OOXMLFastContextHandler::endSdtRun() +{ + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_CT_SdtRun_sdtEndContent, pVal, OOXMLProperty::ATTRIBUTE); + mpStream->props(pProps.get()); +} + +void OOXMLFastContextHandler::startSectionGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInSectionGroup()) + endSectionGroup(); + + if (! mpParserState->isInSectionGroup()) + { + mpStream->info(mpParserState->getHandle()); + mpStream->startSectionGroup(); + mpParserState->setInSectionGroup(true); + } + } +} + +void OOXMLFastContextHandler::endSectionGroup() +{ + if (isForwardEvents()) + { + if (mpParserState->isInParagraphGroup()) + endParagraphGroup(); + + if (mpParserState->isInSectionGroup()) + { + mpStream->endSectionGroup(); + mpParserState->setInSectionGroup(false); + } + } +} + +void OOXMLFastContextHandler::setLastParagraphInSection() +{ + mpParserState->setLastParagraphInSection(true); + mpStream->markLastParagraphInSection( ); +} + +void OOXMLFastContextHandler::setLastSectionGroup() +{ + mpStream->markLastSectionGroup( ); +} + +void OOXMLFastContextHandler::newProperty +(Id /*nId*/, const OOXMLValue::Pointer_t& /*pVal*/) +{ +} + +void OOXMLFastContextHandler::setPropertySet +(const OOXMLPropertySet::Pointer_t& /* pPropertySet */) +{ +} + +OOXMLPropertySet::Pointer_t OOXMLFastContextHandler::getPropertySet() const +{ + return OOXMLPropertySet::Pointer_t(); +} + +void OOXMLFastContextHandler::startField() +{ + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(&cFieldStart, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::fieldSeparator() +{ + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(&cFieldSep, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::endField() +{ + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(&cFieldEnd, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::lockField() +{ + startCharacterGroup(); + if (isForwardEvents()) + mpStream->text(&cFieldLock, 1); + endCharacterGroup(); +} + +void OOXMLFastContextHandler::ftnednref() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uFtnEdnRef), 1); +} + +void OOXMLFastContextHandler::ftnednsep() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uFtnEdnSep), 1); +} + +void OOXMLFastContextHandler::ftnedncont() +{ + if (isForwardEvents()) + mpStream->text(&cFtnEdnCont, 1); +} + +void OOXMLFastContextHandler::pgNum() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uPgNum), 1); +} + +void OOXMLFastContextHandler::tab() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uTab), 1); +} + +void OOXMLFastContextHandler::symbol() +{ + if (isForwardEvents()) + sendPropertiesWithId(NS_ooxml::LN_EG_RunInnerContent_sym); +} + +void OOXMLFastContextHandler::cr() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uCR), 1); +} + +void OOXMLFastContextHandler::noBreakHyphen() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uNoBreakHyphen), 1); +} + +void OOXMLFastContextHandler::softHyphen() +{ + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uSoftHyphen), 1); +} + +void OOXMLFastContextHandler::handleLastParagraphInSection() +{ + if (mpParserState->isLastParagraphInSection()) + { + mpParserState->setLastParagraphInSection(false); + startSectionGroup(); + } +} + +void OOXMLFastContextHandler::endOfParagraph() +{ + if (! mpParserState->isInCharacterGroup()) + startCharacterGroup(); + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uCR), 1); + + mpParserState->getDocument()->incrementProgress(); +} + +void OOXMLFastContextHandler::startTxbxContent() +{ +/* + This usually means there are recursive <w:p> elements, and the ones + inside and outside of w:txbxContent should not interfere (e.g. + the lastParagraphInSection setting). So save the whole state + and possibly start new groups for the nested content (not section + group though, as that'd cause the txbxContent to be moved onto + another page, I'm not sure how that should work exactly). +*/ + mpParserState->startTxbxContent(); + startParagraphGroup(); +} + +void OOXMLFastContextHandler::endTxbxContent() +{ + endParagraphGroup(); + mpParserState->endTxbxContent(); +} + +namespace { +// XML schema defines white space as one of four characters: +// #x9 (tab), #xA (line feed), #xD (carriage return), and #x20 (space) +bool IsXMLWhitespace(sal_Unicode cChar) +{ + return cChar == 0x9 || cChar == 0xA || cChar == 0xD || cChar == 0x20; +} + +OUString TrimXMLWhitespace(const OUString & sText) +{ + sal_Int32 nTrimmedStart = 0; + const sal_Int32 nLen = sText.getLength(); + sal_Int32 nTrimmedEnd = nLen - 1; + while (nTrimmedStart < nLen && IsXMLWhitespace(sText[nTrimmedStart])) + ++nTrimmedStart; + while (nTrimmedStart <= nTrimmedEnd && IsXMLWhitespace(sText[nTrimmedEnd])) + --nTrimmedEnd; + if ((nTrimmedStart == 0) && (nTrimmedEnd == nLen - 1)) + return sText; + else if (nTrimmedStart > nTrimmedEnd) + return OUString(); + else + return sText.copy(nTrimmedStart, nTrimmedEnd-nTrimmedStart+1); +} +} + +void OOXMLFastContextHandler::text(const OUString & sText) +{ + if (!isForwardEvents()) + return; + + // tdf#108806: CRLFs in XML were converted to \n before this point. + // These must be converted to spaces before further processing. + OUString sNormalizedText = sText.replaceAll("\n", " "); + // tdf#108995: by default, leading and trailing white space is ignored; + // tabs are converted to spaces + if (!IsPreserveSpace()) + { + sNormalizedText = TrimXMLWhitespace(sNormalizedText).replaceAll("\t", " "); + } + mpStream->utext(reinterpret_cast < const sal_uInt8 * > + (sNormalizedText.getStr()), + sNormalizedText.getLength()); +} + +void OOXMLFastContextHandler::positionOffset(const OUString& rText) +{ + if (isForwardEvents()) + mpStream->positionOffset(rText, inPositionV); +} + +void OOXMLFastContextHandler::ignore() +{ +} + +void OOXMLFastContextHandler::alignH(const OUString& rText) +{ + if (isForwardEvents()) + mpStream->align(rText, /*bVertical=*/false); +} + +void OOXMLFastContextHandler::alignV(const OUString& rText) +{ + if (isForwardEvents()) + mpStream->align(rText, /*bVertical=*/true); +} + +void OOXMLFastContextHandler::positivePercentage(const OUString& rText) +{ + if (isForwardEvents()) + mpStream->positivePercentage(rText); +} + +void OOXMLFastContextHandler::startGlossaryEntry() +{ + if (isForwardEvents()) + mpStream->startGlossaryEntry(); +} + +void OOXMLFastContextHandler::endGlossaryEntry() +{ + if (isForwardEvents()) + mpStream->endGlossaryEntry(); +} + +void OOXMLFastContextHandler::propagateCharacterProperties() +{ + mpParserState->setCharacterProperties(getPropertySet()); +} + +void OOXMLFastContextHandler::propagateCellProperties() +{ + mpParserState->setCellProperties(getPropertySet()); +} + +void OOXMLFastContextHandler::propagateRowProperties() +{ + mpParserState->setRowProperties(getPropertySet()); +} + +void OOXMLFastContextHandler::propagateTableProperties() +{ + OOXMLPropertySet::Pointer_t pProps = getPropertySet(); + + mpParserState->setTableProperties(pProps); +} + +void OOXMLFastContextHandler::sendCellProperties() +{ + mpParserState->resolveCellProperties(*mpStream); +} + +void OOXMLFastContextHandler::sendRowProperties() +{ + mpParserState->resolveRowProperties(*mpStream); +} + +void OOXMLFastContextHandler::sendTableProperties() +{ + mpParserState->resolveTableProperties(*mpStream); +} + +void OOXMLFastContextHandler::clearTableProps() +{ + mpParserState->setTableProperties(new OOXMLPropertySet()); +} + +void OOXMLFastContextHandler::sendPropertiesWithId(Id nId) +{ + OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet())); + OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySet); + + pPropertySet->add(nId, pValue, OOXMLProperty::SPRM); + mpStream->props(pPropertySet.get()); +} + +void OOXMLFastContextHandler::clearProps() +{ + setPropertySet(new OOXMLPropertySet()); +} + +void OOXMLFastContextHandler::setDefaultBooleanValue() +{ +} + +void OOXMLFastContextHandler::setDefaultIntegerValue() +{ +} + +void OOXMLFastContextHandler::setDefaultHexValue() +{ +} + +void OOXMLFastContextHandler::setDefaultStringValue() +{ +} + +void OOXMLFastContextHandler::setDocument(OOXMLDocumentImpl* pDocument) +{ + mpParserState->setDocument(pDocument); +} + +OOXMLDocumentImpl* OOXMLFastContextHandler::getDocument() +{ + return mpParserState->getDocument(); +} + +void OOXMLFastContextHandler::setForwardEvents(bool bForwardEvents) +{ + mpParserState->setForwardEvents(bForwardEvents); +} + +bool OOXMLFastContextHandler::isForwardEvents() const +{ + return mpParserState->isForwardEvents(); +} + +void OOXMLFastContextHandler::setXNoteId(const sal_Int32 nId) +{ + mpParserState->setXNoteId(nId); +} + +void OOXMLFastContextHandler::setXNoteId(const OOXMLValue::Pointer_t& pValue) +{ + mpParserState->setXNoteId(sal_Int32(pValue->getInt())); +} + +sal_Int32 OOXMLFastContextHandler::getXNoteId() const +{ + return mpParserState->getXNoteId(); +} + +void OOXMLFastContextHandler::resolveFootnote +(const sal_Int32 nId) +{ + mpParserState->getDocument()->resolveFootnote + (*mpStream, 0, nId); +} + +void OOXMLFastContextHandler::resolveEndnote(const sal_Int32 nId) +{ + mpParserState->getDocument()->resolveEndnote + (*mpStream, 0, nId); +} + +void OOXMLFastContextHandler::resolveComment(const sal_Int32 nId) +{ + mpParserState->getDocument()->resolveComment(*mpStream, nId); +} + +void OOXMLFastContextHandler::resolvePicture(const OUString & rId) +{ + mpParserState->getDocument()->resolvePicture(*mpStream, rId); +} + +void OOXMLFastContextHandler::resolveHeader +(const sal_Int32 type, const OUString & rId) +{ + mpParserState->getDocument()->resolveHeader(*mpStream, type, rId); +} + +void OOXMLFastContextHandler::resolveFooter +(const sal_Int32 type, const OUString & rId) +{ + mpParserState->getDocument()->resolveFooter(*mpStream, type, rId); +} + +// Add the data pointed to by the reference as another property. +void OOXMLFastContextHandler::resolveData(const OUString & rId) +{ + OOXMLDocument * objDocument = getDocument(); + SAL_WARN_IF(!objDocument, "writerfilter", "no document to resolveData"); + if (!objDocument) + return; + + uno::Reference<io::XInputStream> xInputStream + (objDocument->getInputStreamForId(rId)); + + OOXMLValue::Pointer_t aValue(new OOXMLInputStreamValue(xInputStream)); + + newProperty(NS_ooxml::LN_inputstream, aValue); +} + +OUString OOXMLFastContextHandler::getTargetForId +(const OUString & rId) +{ + return mpParserState->getDocument()->getTargetForId(rId); +} + +void OOXMLFastContextHandler::sendPropertyToParent() +{ + if (mpParent != nullptr) + { + OOXMLPropertySet::Pointer_t pProps(mpParent->getPropertySet()); + + if (pProps) + { + pProps->add(mId, getValue(), OOXMLProperty::SPRM); + } + } +} + +void OOXMLFastContextHandler::sendPropertiesToParent() +{ + if (mpParent == nullptr) + return; + + OOXMLPropertySet::Pointer_t pParentProps(mpParent->getPropertySet()); + + if (!pParentProps) + return; + + OOXMLPropertySet::Pointer_t pProps(getPropertySet()); + + if (pProps) + { + OOXMLValue::Pointer_t pValue + (new OOXMLPropertySetValue(getPropertySet())); + + pParentProps->add(getId(), pValue, OOXMLProperty::SPRM); + + } +} + +bool OOXMLFastContextHandler::IsPreserveSpace() const +{ + // xml:space attribute applies to all elements within the content of the element where it is specified, + // unless overridden with another instance of the xml:space attribute + if (mbPreserveSpaceSet) + return mbPreserveSpace; + if (mpParent) + return mpParent->IsPreserveSpace(); + return false; // default value +} + +/* + class OOXMLFastContextHandlerStream + */ + +OOXMLFastContextHandlerStream::OOXMLFastContextHandlerStream +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext), + mpPropertySetAttrs(new OOXMLPropertySet) +{ +} + +OOXMLFastContextHandlerStream::~OOXMLFastContextHandlerStream() +{ +} + +void OOXMLFastContextHandlerStream::newProperty(Id nId, + const OOXMLValue::Pointer_t& pVal) +{ + if (nId != 0x0) + { + mpPropertySetAttrs->add(nId, pVal, OOXMLProperty::ATTRIBUTE); + } +} + +void OOXMLFastContextHandlerStream::sendProperty(Id nId) +{ + OOXMLPropertySetEntryToString aHandler(nId); + getPropertySetAttrs()->resolve(aHandler); + const OUString & sText = aHandler.getString(); + mpStream->utext(reinterpret_cast < const sal_uInt8 * > + (sText.getStr()), + sText.getLength()); +} + + +OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerStream::getPropertySet() + const +{ + return getPropertySetAttrs(); +} + +void OOXMLFastContextHandlerStream::handleHyperlink() +{ + OOXMLHyperlinkHandler aHyperlinkHandler(this); + getPropertySetAttrs()->resolve(aHyperlinkHandler); + aHyperlinkHandler.writetext(); +} + +/* + class OOXMLFastContextHandlerProperties + */ +OOXMLFastContextHandlerProperties::OOXMLFastContextHandlerProperties +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext), mpPropertySet(new OOXMLPropertySet), + mbResolve(false) +{ + if (pContext->getResource() == STREAM) + mbResolve = true; +} + +OOXMLFastContextHandlerProperties::~OOXMLFastContextHandlerProperties() +{ +} + +void OOXMLFastContextHandlerProperties::lcl_endFastElement +(Token_t /*Element*/) +{ + try + { + endAction(); + + if (mbResolve) + { + if (isForwardEvents()) + { + mpStream->props(mpPropertySet.get()); + } + } + else + { + sendPropertiesToParent(); + } + } + catch (const uno::RuntimeException&) + { + throw; + } + catch (const xml::sax::SAXException&) + { + throw; + } + catch (const uno::Exception& e) + { + auto a = cppu::getCaughtException(); + throw lang::WrappedTargetRuntimeException(e.Message, e.Context, a); + } +} + +OOXMLValue::Pointer_t OOXMLFastContextHandlerProperties::getValue() const +{ + return OOXMLValue::Pointer_t(new OOXMLPropertySetValue(mpPropertySet)); +} + +void OOXMLFastContextHandlerProperties::newProperty +(Id nId, const OOXMLValue::Pointer_t& pVal) +{ + if (nId != 0x0) + { + mpPropertySet->add(nId, pVal, OOXMLProperty::ATTRIBUTE); + } +} + +void OOXMLFastContextHandlerProperties::handleXNotes() +{ + switch (mnToken) + { + case W_TOKEN(footnoteReference): + { + OOXMLFootnoteHandler aFootnoteHandler(this); + mpPropertySet->resolve(aFootnoteHandler); + } + break; + case W_TOKEN(endnoteReference): + { + OOXMLEndnoteHandler aEndnoteHandler(this); + mpPropertySet->resolve(aEndnoteHandler); + } + break; + default: + break; + } +} + +void OOXMLFastContextHandlerProperties::handleHdrFtr() +{ + switch (mnToken) + { + case W_TOKEN(footerReference): + { + OOXMLFooterHandler aFooterHandler(this); + mpPropertySet->resolve(aFooterHandler); + aFooterHandler.finalize(); + } + break; + case W_TOKEN(headerReference): + { + OOXMLHeaderHandler aHeaderHandler(this); + mpPropertySet->resolve(aHeaderHandler); + aHeaderHandler.finalize(); + } + break; + default: + break; + } +} + +void OOXMLFastContextHandlerProperties::handleComment() +{ + OOXMLCommentHandler aCommentHandler(this); + getPropertySet()->resolve(aCommentHandler); +} + +void OOXMLFastContextHandlerProperties::handlePicture() +{ + OOXMLPictureHandler aPictureHandler(this); + getPropertySet()->resolve(aPictureHandler); +} + +void OOXMLFastContextHandlerProperties::handleBreak() +{ + if(isForwardEvents()) + { + OOXMLBreakHandler aBreakHandler(this, *mpStream); + getPropertySet()->resolve(aBreakHandler); + } +} + +// tdf#108714 : allow <w:br> at block level (despite this is illegal according to ECMA-376-1:2016) +void OOXMLFastContextHandlerProperties::handleOutOfOrderBreak() +{ + if(isForwardEvents()) + { + mpParserState->setPostponedBreak(getPropertySet()); + } +} + +void OOXMLFastContextHandlerProperties::handleOLE() +{ + OOXMLOLEHandler aOLEHandler(this); + getPropertySet()->resolve(aOLEHandler); +} + +void OOXMLFastContextHandlerProperties::handleFontRel() +{ + OOXMLEmbeddedFontHandler handler(this); + getPropertySet()->resolve(handler); +} + +void OOXMLFastContextHandlerProperties::handleHyperlinkURL() { + OOXMLHyperlinkURLHandler aHyperlinkURLHandler(this); + getPropertySet()->resolve(aHyperlinkURLHandler); +} + +void OOXMLFastContextHandlerProperties::handleAltChunk() +{ + OOXMLAltChunkHandler aHandler(this); + getPropertySet()->resolve(aHandler); +} + +void OOXMLFastContextHandlerProperties::setPropertySet +(const OOXMLPropertySet::Pointer_t& pPropertySet) +{ + if (pPropertySet) + 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*/) +{ + OOXMLPropertySet::Pointer_t pPropSet(mpPropertySet->clone()); + OOXMLTable::ValuePointer_t pTmpVal + (new OOXMLPropertySetValue(pPropSet)); + + mTable.add(pTmpVal); + + writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone()); + + mpStream->table(mId, pTable); + + endAction(); +} + +/* + class OOXMLFastContextHandlerValue +*/ + +OOXMLFastContextHandlerValue::OOXMLFastContextHandlerValue +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerValue::~OOXMLFastContextHandlerValue() +{ +} + +void OOXMLFastContextHandlerValue::setValue(const OOXMLValue::Pointer_t& pValue) +{ + mpValue = pValue; +} + +OOXMLValue::Pointer_t OOXMLFastContextHandlerValue::getValue() const +{ + return mpValue; +} + +void OOXMLFastContextHandlerValue::lcl_endFastElement +(Token_t /*Element*/) +{ + sendPropertyToParent(); + + endAction(); +} + +void OOXMLFastContextHandlerValue::setDefaultBooleanValue() +{ + if (!mpValue) + { + OOXMLValue::Pointer_t pValue = OOXMLBooleanValue::Create(true); + setValue(pValue); + } +} + +void OOXMLFastContextHandlerValue::setDefaultIntegerValue() +{ + if (!mpValue) + { + OOXMLValue::Pointer_t pValue = OOXMLIntegerValue::Create(0); + setValue(pValue); + } +} + +void OOXMLFastContextHandlerValue::setDefaultHexValue() +{ + if (!mpValue) + { + OOXMLValue::Pointer_t pValue(new OOXMLHexValue(sal_uInt32(0))); + setValue(pValue); + } +} + +void OOXMLFastContextHandlerValue::setDefaultStringValue() +{ + if (!mpValue) + { + OOXMLValue::Pointer_t pValue(new OOXMLStringValue(OUString())); + setValue(pValue); + } +} + +// ECMA-376-1:2016 17.3.2.8; https://www.unicode.org/reports/tr9/#Explicit_Directional_Embeddings +void OOXMLFastContextHandlerValue::pushBiDiEmbedLevel() +{ + const bool bRtl + = mpValue && mpValue->getInt() == NS_ooxml::LN_Value_ST_Direction_rtl; + OOXMLFactory::characters(this, bRtl ? OUString(u"\u202B") : OUString(u"\u202A")); // RLE / LRE +} + +void OOXMLFastContextHandlerValue::popBiDiEmbedLevel() +{ + OOXMLFactory::characters(this, u"\u202C"); // PDF (POP DIRECTIONAL FORMATTING) +} + +void OOXMLFastContextHandlerValue::handleGridAfter() +{ + if (!getValue()) + return; + + if (OOXMLFastContextHandler* pTableRowProperties = getParent()) + { + if (OOXMLFastContextHandler* pTableRow = pTableRowProperties->getParent()) + // Save the value into the table row context, so it can be handled + // right before the end of the row. + pTableRow->setGridAfter(getValue()); + } +} + +/* + class OOXMLFastContextHandlerTable +*/ + +OOXMLFastContextHandlerTable::OOXMLFastContextHandlerTable +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTable::~OOXMLFastContextHandlerTable() +{ +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandlerTable::createFastChildContext +(sal_Int32 Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + addCurrentChild(); + + mCurrentChild.set(OOXMLFastContextHandler::createFastChildContext(Element, Attribs)); + + return mCurrentChild; +} + +void OOXMLFastContextHandlerTable::lcl_endFastElement +(Token_t /*Element*/) +{ + addCurrentChild(); + + writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone()); + if (isForwardEvents() && mId != 0x0) + { + mpStream->table(mId, pTable); + } +} + +void OOXMLFastContextHandlerTable::addCurrentChild() +{ + OOXMLFastContextHandler * pHandler = dynamic_cast<OOXMLFastContextHandler*>(mCurrentChild.get()); + if (pHandler != nullptr) + { + OOXMLValue::Pointer_t pValue(pHandler->getValue()); + + if (pValue) + { + OOXMLTable::ValuePointer_t pTmpVal(pValue->clone()); + mTable.add(pTmpVal); + } + } +} + +/* + class OOXMLFastContextHandlerXNote + */ + +OOXMLFastContextHandlerXNote::OOXMLFastContextHandlerXNote + (OOXMLFastContextHandler * pContext) + : OOXMLFastContextHandlerProperties(pContext) + , mbForwardEventsSaved(false) + , mnMyXNoteId(0) + , mnMyXNoteType(0) +{ +} + +OOXMLFastContextHandlerXNote::~OOXMLFastContextHandlerXNote() +{ +} + +void OOXMLFastContextHandlerXNote::lcl_startFastElement +(Token_t /*Element*/, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + mbForwardEventsSaved = isForwardEvents(); + + // If this is the note we're looking for or this is the footnote separator one. + if (mnMyXNoteId == getXNoteId() || + static_cast<sal_uInt32>(mnMyXNoteType) == NS_ooxml::LN_Value_doc_ST_FtnEdn_separator || + mpParserState->isStartFootnote()) + setForwardEvents(true); + else + setForwardEvents(false); + + startAction(); +} + +void OOXMLFastContextHandlerXNote::lcl_endFastElement +(Token_t Element) +{ + endAction(); + + OOXMLFastContextHandlerProperties::lcl_endFastElement(Element); + + setForwardEvents(mbForwardEventsSaved); +} + +void OOXMLFastContextHandlerXNote::checkId(const OOXMLValue::Pointer_t& pValue) +{ + mnMyXNoteId = sal_Int32(pValue->getInt()); + mpStream->checkId(mnMyXNoteId); +} + +void OOXMLFastContextHandlerXNote::checkType(const OOXMLValue::Pointer_t& pValue) +{ + mnMyXNoteType = pValue->getInt(); +} + +/* + class OOXMLFastContextHandlerTextTableCell + */ + +OOXMLFastContextHandlerTextTableCell::OOXMLFastContextHandlerTextTableCell +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTextTableCell::~OOXMLFastContextHandlerTextTableCell() +{ +} + +void OOXMLFastContextHandlerTextTableCell::startCell() +{ + if (isForwardEvents()) + { + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + { + OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0); + pProps->add(NS_ooxml::LN_tcStart, pVal, OOXMLProperty::SPRM); + } + + mpStream->props(pProps.get()); + } +} + +void OOXMLFastContextHandlerTextTableCell::endCell() +{ + if (!isForwardEvents()) + return; + + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth); + pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0); + pProps->add(NS_ooxml::LN_tblCell, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0); + pProps->add(NS_ooxml::LN_tcEnd, pVal, OOXMLProperty::SPRM); + } + + mpStream->props(pProps.get()); +} + +/* + class OOXMLFastContextHandlerTextTableRow + */ + +OOXMLFastContextHandlerTextTableRow::OOXMLFastContextHandlerTextTableRow +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandler(pContext) +{ +} + +OOXMLFastContextHandlerTextTableRow::~OOXMLFastContextHandlerTextTableRow() +{ +} + +void OOXMLFastContextHandlerTextTableRow::startRow() +{ +} + +void OOXMLFastContextHandlerTextTableRow::endRow() +{ + if (mpGridAfter) + { + // Grid after is the same as grid before, the empty cells are just + // inserted after the real ones, not before. + handleGridBefore(mpGridAfter); + mpGridAfter = nullptr; + } + + startParagraphGroup(); + + if (isForwardEvents()) + { + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth); + pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_tblRow, pVal, OOXMLProperty::SPRM); + } + + mpStream->props(pProps.get()); + } + + startCharacterGroup(); + + if (isForwardEvents()) + mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uCR), 1); + + endCharacterGroup(); + endParagraphGroup(); +} + +namespace { +OOXMLValue::Pointer_t fakeNoBorder() +{ + OOXMLPropertySet::Pointer_t pProps( new OOXMLPropertySet ); + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(0); + pProps->add(NS_ooxml::LN_CT_Border_val, pVal, OOXMLProperty::ATTRIBUTE); + OOXMLValue::Pointer_t pValue( new OOXMLPropertySetValue( pProps )); + return pValue; +} +} + +// Handle w:gridBefore here by faking necessary input that'll fake cells. I'm apparently +// not insane enough to find out how to add cells in dmapper. +void OOXMLFastContextHandlerTextTableRow::handleGridBefore( const OOXMLValue::Pointer_t& val ) +{ + // start removing: disable for w:gridBefore + if (!mpGridAfter) + return; + + int count = val->getInt(); + for( int i = 0; + i < count; + ++i ) + { + endOfParagraph(); + + if (isForwardEvents()) + { + // This whole part is OOXMLFastContextHandlerTextTableCell::endCell() . + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth); + pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1); + pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM); + } + { + OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0); + pProps->add(NS_ooxml::LN_tblCell, pVal, OOXMLProperty::SPRM); + } + + mpStream->props(pProps.get()); + + // fake <w:tcBorders> with no border + OOXMLPropertySet::Pointer_t pCellProps( new OOXMLPropertySet ); + { + OOXMLPropertySet::Pointer_t pBorderProps( new OOXMLPropertySet ); + static Id borders[] = { NS_ooxml::LN_CT_TcBorders_top, NS_ooxml::LN_CT_TcBorders_bottom, + NS_ooxml::LN_CT_TcBorders_start, NS_ooxml::LN_CT_TcBorders_end }; + for(sal_uInt32 border : borders) + pBorderProps->add(border, fakeNoBorder(), OOXMLProperty::SPRM); + OOXMLValue::Pointer_t pValue( new OOXMLPropertySetValue( pBorderProps )); + pCellProps->add(NS_ooxml::LN_CT_TcPrBase_tcBorders, pValue, OOXMLProperty::SPRM); + mpParserState->setCellProperties(pCellProps); + } + } + + sendCellProperties(); + 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*/) +{ + mpParserState->startTable(); + mnTableDepth++; + + OOXMLPropertySet::Pointer_t pProps( new OOXMLPropertySet ); + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth); + pProps->add(NS_ooxml::LN_tblStart, pVal, OOXMLProperty::SPRM); + } + mpParserState->setCharacterProperties(pProps); + + startAction(); +} + +void OOXMLFastContextHandlerTextTable::lcl_endFastElement +(Token_t /*Element*/) +{ + endAction(); + + OOXMLPropertySet::Pointer_t pProps( new OOXMLPropertySet ); + { + OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth); + pProps->add(NS_ooxml::LN_tblEnd, pVal, OOXMLProperty::SPRM); + } + mpParserState->setCharacterProperties(pProps); + + mnTableDepth--; + mpParserState->endTable(); +} + +// tdf#111550 +void OOXMLFastContextHandlerTextTable::start_P_Tbl() +{ + // Normally, when one paragraph ends, and another begins, + // in OOXMLFactory_wml::endAction handler for <w:p>, + // pHandler->endOfParagraph() is called, which (among other things) + // calls TableManager::setHandle() to update current cell's starting point. + // Then, in OOXMLFactory_wml::startAction for next <w:p>, + // pHandler->startParagraphGroup() is called, which ends previous group, + // and there, it pushes cells to row in TableManager::endParagraphGroup() + // (cells have correct bounds defined by mCurHandle). + // When a table is child of a <w:p>, that paragraph doesn't end before nested + // paragraph begins. So, pHandler->endOfParagraph() was not (and should not be) + // called. But as next paragraph starts, is the previous group is closed, then + // cells will have wrong boundings. Here, we know that we *are* in paragraph + // group, but it should not be finished. + mpParserState->setInParagraphGroup(false); +} + +/* + class OOXMLFastContextHandlerShape + */ + +OOXMLFastContextHandlerShape::OOXMLFastContextHandlerShape +(OOXMLFastContextHandler * pContext) +: OOXMLFastContextHandlerProperties(pContext), m_bShapeSent( false ), + m_bShapeStarted(false), m_bShapeContextPushed(false) +{ +} + +OOXMLFastContextHandlerShape::~OOXMLFastContextHandlerShape() +{ + if (m_bShapeContextPushed) + getDocument()->popShapeContext(); +} + +void OOXMLFastContextHandlerShape::lcl_startFastElement +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + startAction(); + + if (mrShapeContext.is()) + { + mrShapeContext->startFastElement(Element, Attribs); + } +} + +void SAL_CALL OOXMLFastContextHandlerShape::startUnknownElement +(const OUString & Namespace, + const OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + if (mrShapeContext.is()) + mrShapeContext->startUnknownElement(Namespace, Name, Attribs); +} + +void OOXMLFastContextHandlerShape::setToken(Token_t nToken) +{ + if (nToken == Token_t(NMSP_wps | XML_wsp) || nToken == Token_t(NMSP_dmlPicture | XML_pic)) + { + // drawingML shapes are independent, <wps:bodyPr> is not parsed after + // shape contents without pushing/popping the stack. + m_bShapeContextPushed = true; + getDocument()->pushShapeContext(); + } + + mrShapeContext = getDocument()->getShapeContext(); + if (!mrShapeContext.is()) + { + // Define the shape context for the whole document + mrShapeContext = new oox::shape::ShapeContextHandler(getDocument()->getShapeFilterBase()); + getDocument()->setShapeContext(mrShapeContext); + auto pThemePtr = getDocument()->getTheme(); + if (pThemePtr) + mrShapeContext->setTheme(pThemePtr); + } + + mrShapeContext->setModel(getDocument()->getModel()); + uno::Reference<document::XDocumentPropertiesSupplier> xDocSupplier(getDocument()->getModel(), uno::UNO_QUERY_THROW); + mrShapeContext->setDocumentProperties(xDocSupplier->getDocumentProperties()); + mrShapeContext->setDrawPage(getDocument()->getDrawPage()); + mrShapeContext->setMediaDescriptor(getDocument()->getMediaDescriptor()); + + mrShapeContext->setRelationFragmentPath(mpParserState->getTarget()); + + // Floating tables (table inside a textframe) have issues with fullWPG, + // so disable the fullWPGsupport in tables until that issue is not fixed. + mrShapeContext->setFullWPGSupport(!mnTableDepth); + + auto xGraphicMapper = getDocument()->getGraphicMapper(); + + if (xGraphicMapper.is()) + mrShapeContext->setGraphicMapper(xGraphicMapper); + + OOXMLFastContextHandler::setToken(nToken); + + if (mrShapeContext.is()) + mrShapeContext->pushStartToken(nToken); +} + +void OOXMLFastContextHandlerShape::sendShape( Token_t Element ) +{ + if ( !mrShapeContext.is() || m_bShapeSent ) + return; + + awt::Point aPosition = mpStream->getPositionOffset(); + mrShapeContext->setPosition(aPosition); + uno::Reference<drawing::XShape> xShape(mrShapeContext->getShape()); + m_bShapeSent = true; + if (!xShape.is()) + return; + + OOXMLValue::Pointer_t + pValue(new OOXMLShapeValue(xShape)); + newProperty(NS_ooxml::LN_shape, pValue); + + bool bIsPicture = Element == ( NMSP_dmlPicture | XML_pic ); + + //tdf#87569: Fix table layout with correcting anchoring + //If anchored object is in table, Word calculates its position from cell border + //instead of page (what is set in the sample document) + uno::Reference<beans::XPropertySet> xShapePropSet(xShape, uno::UNO_QUERY); + if (mnTableDepth > 0 && xShapePropSet.is() && mbIsVMLfound) //if we had a table + { + xShapePropSet->setPropertyValue(dmapper::getPropertyName(dmapper::PROP_FOLLOW_TEXT_FLOW), + uno::Any(mbAllowInCell)); + } + // Notify the dmapper that the shape is ready to use + if ( !bIsPicture ) + { + mpStream->startShape( xShape ); + m_bShapeStarted = true; + } +} + +bool OOXMLFastContextHandlerShape::isDMLGroupShape() const +{ + return (mrShapeContext->getFullWPGSupport() && mrShapeContext->isWordProcessingGroupShape()); +}; + +void OOXMLFastContextHandlerShape::lcl_endFastElement +(Token_t Element) +{ + if (!isForwardEvents()) + return; + + 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 == ( NMSP_dmlPicture | XML_pic ); + if ( !bIsPicture && m_bShapeStarted) + mpStream->endShape( ); +} + +void SAL_CALL OOXMLFastContextHandlerShape::endUnknownElement +(const OUString & Namespace, + const OUString & Name) +{ + 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) +{ + // we need to share a single theme across all the shapes, but we parse it + // in ShapeContextHandler. So if it has been parsed there, propagate it to + // the document. + if (mrShapeContext && mrShapeContext->getTheme() && !getDocument()->getTheme()) + { + auto pThemePtr = mrShapeContext->getTheme(); + getDocument()->setTheme(pThemePtr); + } + + uno::Reference< xml::sax::XFastContextHandler > xContextHandler; + + bool bGroupShape = Element == Token_t(NMSP_vml | XML_group); + // drawingML version also counts as a group shape. + if (!mrShapeContext->getFullWPGSupport()) + bGroupShape |= mrShapeContext->getStartToken() == Token_t(NMSP_wpg | XML_wgp); + mbIsVMLfound = (getNamespace(Element) == NMSP_vmlOffice) || (getNamespace(Element) == NMSP_vml); + switch (oox::getNamespace(Element)) + { + case NMSP_doc: + case NMSP_vmlWord: + case NMSP_vmlOffice: + if (!bGroupShape) + xContextHandler.set(OOXMLFactory::createFastChildContextFromStart(this, Element)); + [[fallthrough]]; + default: + if (!xContextHandler.is()) + { + if (mrShapeContext.is()) + { + uno::Reference<XFastContextHandler> pChildContext = + mrShapeContext->createFastChildContext(Element, Attribs); + + rtl::Reference<OOXMLFastContextHandlerWrapper> pWrapper = + new OOXMLFastContextHandlerWrapper(this, + pChildContext, + this); + + //tdf129888 store allowincell attribute of the VML shape + if (Attribs->hasAttribute(NMSP_vmlOffice | XML_allowincell)) + mbAllowInCell + = !(Attribs->getValue(NMSP_vmlOffice | XML_allowincell) == "f"); + + if (!bGroupShape) + { + pWrapper->addNamespace(NMSP_doc); + pWrapper->addNamespace(NMSP_vmlWord); + pWrapper->addNamespace(NMSP_vmlOffice); + pWrapper->addToken( NMSP_vml|XML_textbox ); + } + xContextHandler.set(pWrapper); + } + else + xContextHandler.set(this); + } + break; + } + + // VML import of shape text is already handled by + // OOXMLFastContextHandlerWrapper::lcl_createFastChildContext(), here we + // handle the WPS import of shape text, as there the parent context is a + // Shape one, so a different situation. + if (Element == static_cast<sal_Int32>(NMSP_wps | XML_txbx) || + Element == static_cast<sal_Int32>(NMSP_wps | XML_linkedTxbx) ) + sendShape(Element); + + return xContextHandler; +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandlerShape::createUnknownChildContext +(const OUString & Namespace, + const OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + + if (mrShapeContext.is()) + xResult.set(mrShapeContext->createUnknownChildContext + (Namespace, Name, Attribs)); + + return xResult; +} + +void OOXMLFastContextHandlerShape::lcl_characters +(const OUString & aChars) +{ + if (mrShapeContext.is()) + mrShapeContext->characters(aChars); +} + +/* + class OOXMLFastContextHandlerWrapper +*/ + +OOXMLFastContextHandlerWrapper::OOXMLFastContextHandlerWrapper +(OOXMLFastContextHandler * pParent, + uno::Reference<XFastContextHandler> const & xContext, + rtl::Reference<OOXMLFastContextHandlerShape> const & xShapeHandler) + : OOXMLFastContextHandler(pParent), + mxWrappedContext(xContext), + mxShapeHandler(xShapeHandler) +{ + setId(pParent->getId()); + setToken(pParent->getToken()); + setPropertySet(pParent->getPropertySet()); +} + +OOXMLFastContextHandlerWrapper::~OOXMLFastContextHandlerWrapper() +{ +} + +void SAL_CALL OOXMLFastContextHandlerWrapper::startUnknownElement +(const OUString & Namespace, + const OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + if (mxWrappedContext.is()) + mxWrappedContext->startUnknownElement(Namespace, Name, Attribs); +} + +void SAL_CALL OOXMLFastContextHandlerWrapper::endUnknownElement +(const OUString & Namespace, + const OUString & Name) +{ + if (mxWrappedContext.is()) + mxWrappedContext->endUnknownElement(Namespace, Name); +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastContextHandlerWrapper::createUnknownChildContext +(const OUString & Namespace, + const OUString & Name, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + + if (mxWrappedContext.is()) + xResult = mxWrappedContext->createUnknownChildContext + (Namespace, Name, Attribs); + else + xResult.set(this); + + return xResult; +} + +void OOXMLFastContextHandlerWrapper::attributes +(const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + pHandler->attributes(Attribs); + } +} + +OOXMLFastContextHandler::ResourceEnum_t +OOXMLFastContextHandlerWrapper::getResource() const +{ + return UNKNOWN; +} + +void OOXMLFastContextHandlerWrapper::addNamespace(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) +{ + if (mxWrappedContext.is()) + mxWrappedContext->startFastElement(Element, Attribs); + + if (mxShapeHandler->isDMLGroupShape() + && (Element == Token_t(NMSP_wps | XML_txbx) + || Element == Token_t(NMSP_wps | XML_linkedTxbx))) + { + mpStream->startTextBoxContent(); + } +} + +void OOXMLFastContextHandlerWrapper::lcl_endFastElement +(Token_t Element) +{ + if (mxWrappedContext.is()) + mxWrappedContext->endFastElement(Element); + + if (mxShapeHandler->isDMLGroupShape() + && (Element == Token_t(NMSP_wps | XML_txbx) + || Element == Token_t(NMSP_wps | XML_linkedTxbx))) + { + mpStream->endTextBoxContent(); + } +} + +uno::Reference< xml::sax::XFastContextHandler > +OOXMLFastContextHandlerWrapper::lcl_createFastChildContext +(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +{ + uno::Reference< xml::sax::XFastContextHandler > xResult; + + bool bInNamespaces = mMyNamespaces.find(oox::getNamespace(Element)) != mMyNamespaces.end(); + bool bInTokens = mMyTokens.find( Element ) != mMyTokens.end( ); + + // We have methods to _add_ individual tokens or whole namespaces to be + // processed by writerfilter (instead of oox), but we have no method to + // filter out a single token. Just hardwire the 'wrap' and 'signatureline' tokens + // here until we need a more generic solution. + bool bIsWrap = Element == static_cast<sal_Int32>(NMSP_vmlWord | XML_wrap); + bool bIsSignatureLine = Element == static_cast<sal_Int32>(NMSP_vmlOffice | XML_signatureline); + bool bSkipImages = getDocument()->IsSkipImages() && oox::getNamespace(Element) == NMSP_dml && + (oox::getBaseToken(Element) != XML_linkedTxbx) && (oox::getBaseToken(Element) != XML_txbx); + + if ( bInNamespaces && ((!bIsWrap && !bIsSignatureLine) + || mxShapeHandler->isShapeSent()) ) + { + xResult.set(OOXMLFactory::createFastChildContextFromStart(this, Element)); + } + else if (mxWrappedContext.is() && !bSkipImages) + { + rtl::Reference<OOXMLFastContextHandlerWrapper> pWrapper = + new OOXMLFastContextHandlerWrapper + (this, mxWrappedContext->createFastChildContext(Element, Attribs), + mxShapeHandler); + pWrapper->mMyNamespaces = mMyNamespaces; + pWrapper->mMyTokens = mMyTokens; + pWrapper->setPropertySet(getPropertySet()); + xResult.set(pWrapper); + } + else + { + xResult.set(this); + } + + if ( bInTokens ) + mxShapeHandler->sendShape( Element ); + + return xResult; +} + +void OOXMLFastContextHandlerWrapper::lcl_characters +(const OUString & aChars) +{ + if (mxWrappedContext.is()) + mxWrappedContext->characters(aChars); +} + +OOXMLFastContextHandler * +OOXMLFastContextHandlerWrapper::getFastContextHandler() const +{ + if (mxWrappedContext.is()) + return dynamic_cast<OOXMLFastContextHandler *>(mxWrappedContext.get()); + + return nullptr; +} + +void OOXMLFastContextHandlerWrapper::newProperty +(Id nId, const OOXMLValue::Pointer_t& pVal) +{ + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + pHandler->newProperty(nId, pVal); + } +} + +void OOXMLFastContextHandlerWrapper::setPropertySet +(const OOXMLPropertySet::Pointer_t& pPropertySet) +{ + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + pHandler->setPropertySet(pPropertySet); + } + + mpPropertySet = pPropertySet; +} + +OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerWrapper::getPropertySet() + const +{ + OOXMLPropertySet::Pointer_t pResult(mpPropertySet); + + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + pResult = pHandler->getPropertySet(); + } + + return pResult; +} + +string OOXMLFastContextHandlerWrapper::getType() const +{ + string sResult = "Wrapper("; + + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + sResult += pHandler->getType(); + } + + sResult += ")"; + + return sResult; +} + +void OOXMLFastContextHandlerWrapper::setId(Id rId) +{ + OOXMLFastContextHandler::setId(rId); + + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + pHandler->setId(rId); + } +} + +Id OOXMLFastContextHandlerWrapper::getId() const +{ + Id nResult = OOXMLFastContextHandler::getId(); + + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr && pHandler->getId() != 0) + nResult = pHandler->getId(); + } + + return nResult; +} + +void OOXMLFastContextHandlerWrapper::setToken(Token_t nToken) +{ + OOXMLFastContextHandler::setToken(nToken); + + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + pHandler->setToken(nToken); + } +} + +Token_t OOXMLFastContextHandlerWrapper::getToken() const +{ + Token_t nResult = OOXMLFastContextHandler::getToken(); + + if (mxWrappedContext.is()) + { + OOXMLFastContextHandler * pHandler = getFastContextHandler(); + if (pHandler != nullptr) + nResult = pHandler->getToken(); + } + + return nResult; +} + + +/* + class OOXMLFastContextHandlerLinear + */ + +OOXMLFastContextHandlerLinear::OOXMLFastContextHandlerLinear(OOXMLFastContextHandler* pContext) + : OOXMLFastContextHandlerProperties(pContext) + , depthCount( 0 ) +{ +} + +void OOXMLFastContextHandlerLinear::lcl_startFastElement(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList >& Attribs) +{ + buffer.appendOpeningTag( Element, Attribs ); + ++depthCount; +} + +void OOXMLFastContextHandlerLinear::lcl_endFastElement(Token_t Element) +{ + buffer.appendClosingTag( Element ); + if( --depthCount == 0 ) + process(); +} + +uno::Reference< xml::sax::XFastContextHandler > +OOXMLFastContextHandlerLinear::lcl_createFastChildContext(Token_t, + const uno::Reference< xml::sax::XFastAttributeList >&) +{ + uno::Reference< xml::sax::XFastContextHandler > xContextHandler; + xContextHandler.set( this ); + return xContextHandler; +} + +void OOXMLFastContextHandlerLinear::lcl_characters(const OUString& aChars) +{ + buffer.appendCharacters( aChars ); +} + +/* + class OOXMLFastContextHandlerLinear + */ + +OOXMLFastContextHandlerMath::OOXMLFastContextHandlerMath(OOXMLFastContextHandler* pContext) + : OOXMLFastContextHandlerLinear(pContext) +{ +} + +void OOXMLFastContextHandlerMath::process() +{ + SvGlobalName name( SO3_SM_CLASSID ); + comphelper::EmbeddedObjectContainer container; + OUString aName; + uno::Sequence<beans::PropertyValue> objArgs{ comphelper::makePropertyValue( + "DefaultParentBaseURL", getDocument()->GetDocumentBaseURL()) }; + uno::Reference<embed::XEmbeddedObject> ref = + container.CreateEmbeddedObject(name.GetByteSequence(), objArgs, aName); + assert(ref.is()); + if (!ref.is()) + return; + uno::Reference< uno::XInterface > component(ref->getComponent(), uno::UNO_QUERY_THROW); +// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class, +// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated +// to RTLD_GLOBAL, so most probably a gcc bug. + oox::FormulaImportBase& import = dynamic_cast<oox::FormulaImportBase&>(dynamic_cast<SfxBaseModel&>(*component)); + import.readFormulaOoxml(buffer); + if (!isForwardEvents()) + return; + + OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet); + OOXMLValue::Pointer_t pVal( new OOXMLStarMathValue( ref )); + if (mbIsMathPara) + { + switch (mnMathJcVal) + { + case eMathParaJc::CENTER: + pProps->add(NS_ooxml::LN_Value_math_ST_Jc_centerGroup, pVal, + OOXMLProperty::ATTRIBUTE); + break; + case eMathParaJc::LEFT: + pProps->add(NS_ooxml::LN_Value_math_ST_Jc_left, pVal, + OOXMLProperty::ATTRIBUTE); + break; + case eMathParaJc::RIGHT: + pProps->add(NS_ooxml::LN_Value_math_ST_Jc_right, pVal, + OOXMLProperty::ATTRIBUTE); + break; + default: + break; + } + } + else + pProps->add(NS_ooxml::LN_starmath, pVal, OOXMLProperty::ATTRIBUTE); + mpStream->props( pProps.get() ); +} + +OOXMLFastContextHandlerCommentEx::OOXMLFastContextHandlerCommentEx( + OOXMLFastContextHandler* pContext) + : OOXMLFastContextHandler(pContext) +{ +} + +void OOXMLFastContextHandlerCommentEx::lcl_endFastElement(Token_t /*Element*/) +{ + mpStream->commentProps(m_sParaId, { m_bDone }); +} + +void OOXMLFastContextHandlerCommentEx::att_paraId(const OOXMLValue::Pointer_t& pValue) +{ + m_sParaId = pValue->getString(); +} + +void OOXMLFastContextHandlerCommentEx::att_done(const OOXMLValue::Pointer_t& pValue) +{ + if (pValue->getInt()) + m_bDone = true; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx new file mode 100644 index 000000000..30491f08d --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx @@ -0,0 +1,632 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <set> +#include <cppuhelper/implbase.hxx> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/xml/sax/XFastContextHandler.hpp> +#include <oox/mathml/importutils.hxx> +#include <rtl/ref.hxx> +#include "OOXMLParserState.hxx" +#include "OOXMLPropertySet.hxx" + +namespace writerfilter::ooxml +{ +class OOXMLDocumentImpl; + +class OOXMLFastContextHandler: public ::cppu::WeakImplHelper<css::xml::sax::XFastContextHandler> +{ +public: + typedef tools::SvRef<OOXMLFastContextHandler> Pointer_t; + + enum ResourceEnum_t { UNKNOWN, STREAM, PROPERTIES, TABLE, SHAPE }; + + explicit OOXMLFastContextHandler(css::uno::Reference< css::uno::XComponentContext > const & context); + + explicit OOXMLFastContextHandler(OOXMLFastContextHandler * pContext); + + OOXMLFastContextHandler(OOXMLFastContextHandler const &) = default; + + virtual ~OOXMLFastContextHandler() override; + + // css::xml::sax::XFastContextHandler: + virtual void SAL_CALL startFastElement (sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList >& Attribs) override final; + + virtual void SAL_CALL startUnknownElement(const OUString & Namespace, const OUString & Name, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void SAL_CALL endFastElement(sal_Int32 Element) override; + + virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name) override; + + virtual css::uno::Reference<css::xml::sax::XFastContextHandler> SAL_CALL createFastChildContext(sal_Int32 Element, + const css::uno::Reference<css::xml::sax::XFastAttributeList>& Attribs) override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext(const OUString & Namespace, const OUString & Name, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void SAL_CALL characters(const OUString & aChars) override; + + // local + + void setStream(Stream * pStream); + + /** + Return value of this context(element). + + @return the value + */ + virtual OOXMLValue::Pointer_t getValue() const; + + /** + Returns a string describing the type of the context. + + This is the name of the define normally. + + @return type string + */ + virtual std::string getType() const { return "??"; } + + virtual ResourceEnum_t getResource() const { return STREAM; } + + /// @throws css::uno::RuntimeException + /// @throws css::xml::sax::SAXException + virtual void attributes(const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs); + + virtual void newProperty(Id aId, const OOXMLValue::Pointer_t& pVal); + virtual void setPropertySet(const OOXMLPropertySet::Pointer_t& pPropertySet); + virtual OOXMLPropertySet::Pointer_t getPropertySet() const; + + virtual void setToken(Token_t nToken); + virtual Token_t getToken() const; + + void resolveFootnote(const sal_Int32 nId); + void resolveEndnote(const sal_Int32 nId); + void resolveComment(const sal_Int32 nId); + void resolvePicture(const OUString & rId); + void resolveHeader(const sal_Int32 type, + const OUString & rId); + void resolveFooter(const sal_Int32 type, + const OUString & rId); + void resolveData(const OUString & rId); + + OUString getTargetForId(const OUString & rId); + + void setDocument(OOXMLDocumentImpl* pDocument); + OOXMLDocumentImpl* getDocument(); + void setXNoteId(const OOXMLValue::Pointer_t& pValue); + void setXNoteId(const sal_Int32 nId); + sal_Int32 getXNoteId() const; + void setForwardEvents(bool bForwardEvents); + bool isForwardEvents() const; + virtual void setId(Id nId); + virtual Id getId() const; + + void setDefine(Id nDefine); + Id getDefine() const { return mnDefine;} + + const OOXMLParserState::Pointer_t& getParserState() const { return mpParserState;} + + void sendTableDepth() const; + void setHandle(); + + void startSectionGroup(); + void setLastParagraphInSection(); + void setLastSectionGroup(); + void endSectionGroup(); + void startParagraphGroup(); + void endParagraphGroup(); + void startCharacterGroup(); + void endCharacterGroup(); + virtual void pushBiDiEmbedLevel(); + virtual void popBiDiEmbedLevel(); + void startSdt(); + void endSdt(); + void startSdtRun(); + void endSdtRun(); + + void startField(); + void fieldSeparator(); + void endField(); + void lockField(); + void ftnednref(); + void ftnedncont(); + void ftnednsep(); + void pgNum(); + void tab(); + void symbol(); + void cr(); + void noBreakHyphen(); + void softHyphen(); + void handleLastParagraphInSection(); + void endOfParagraph(); + void text(const OUString & sText); + void positionOffset(const OUString & sText); + static void ignore(); + void alignH(const OUString & sText); + void alignV(const OUString & sText); + void positivePercentage(const OUString& rText); + void startGlossaryEntry(); + void endGlossaryEntry(); + void startTxbxContent(); + void endTxbxContent(); + void propagateCharacterProperties(); + void propagateTableProperties(); + void propagateRowProperties(); + void propagateCellProperties(); + void sendPropertiesWithId(Id nId); + void sendPropertiesToParent(); + void sendCellProperties(); + void sendRowProperties(); + void sendTableProperties(); + void clearTableProps(); + void clearProps(); + + virtual void setDefaultBooleanValue(); + virtual void setDefaultIntegerValue(); + virtual void setDefaultHexValue(); + virtual void setDefaultStringValue(); + + void sendPropertyToParent(); + OOXMLFastContextHandler* getParent() const { return mpParent; } + void setGridAfter(const OOXMLValue::Pointer_t& pGridAfter) { mpGridAfter = pGridAfter; } + +protected: + OOXMLFastContextHandler * mpParent; + Id mId; + Id mnDefine; + Token_t mnToken; + + // the formula insertion mode: inline/newline(left, center, right) + sal_Int8 mnMathJcVal; + bool mbIsMathPara; + enum eMathParaJc + { + INLINE, //The equation is anchored as inline to the text + CENTER, //The equation is center aligned + LEFT, //The equation is left aligned + RIGHT //The equation is right aligned + }; + // the stream to send the stream events to. + Stream * mpStream; + + // the current global parser state + OOXMLParserState::Pointer_t mpParserState; + + // the table depth of this context + unsigned int mnTableDepth; + + /// @throws css::uno::RuntimeException + /// @throws css::xml::sax::SAXException + virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs); + + /// @throws css::uno::RuntimeException + /// @throws css::xml::sax::SAXException + virtual void lcl_endFastElement(Token_t Element); + + /// @throws css::uno::RuntimeException + /// @throws css::xml::sax::SAXException + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs); + + /// @throws css::uno::RuntimeException + /// @throws css::xml::sax::SAXException + virtual void lcl_characters(const OUString & aChars); + + void startAction(); + void endAction(); + + bool inPositionV; + bool mbAllowInCell; // o:allowincell + bool mbIsVMLfound; + OOXMLValue::Pointer_t mpGridAfter; + +private: + void operator =(OOXMLFastContextHandler const &) = delete; + /// Handles AlternateContent. Returns true, if children of the current element should be ignored. + bool prepareMceContext(Token_t nElement, const css::uno::Reference<css::xml::sax::XFastAttributeList>& Attribs); + + // 2.10 of XML 1.0 specification + bool IsPreserveSpace() const; + + css::uno::Reference< css::uno::XComponentContext > m_xContext; + bool m_bDiscardChildren; + bool m_bTookChoice; ///< Did we take the Choice or want Fallback instead? + bool mbPreserveSpace = false; + bool mbPreserveSpaceSet = false; + +}; + +class OOXMLFastContextHandlerStream : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerStream(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerStream() override; + + virtual ResourceEnum_t getResource() const override { return STREAM; } + + const OOXMLPropertySet::Pointer_t& getPropertySetAttrs() const { return mpPropertySetAttrs;} + + virtual void newProperty(Id aId, const OOXMLValue::Pointer_t& pVal) override; + void sendProperty(Id nId); + virtual OOXMLPropertySet::Pointer_t getPropertySet() const override; + + void handleHyperlink(); + +private: + mutable OOXMLPropertySet::Pointer_t mpPropertySetAttrs; +}; + +class OOXMLFastContextHandlerProperties : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerProperties(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerProperties() override; + + virtual OOXMLValue::Pointer_t getValue() const override; + virtual ResourceEnum_t getResource() const override { return PROPERTIES; } + + virtual void newProperty(Id nId, const OOXMLValue::Pointer_t& pVal) override; + + void handleXNotes(); + void handleHdrFtr(); + void handleComment(); + void handlePicture(); + void handleBreak(); + void handleOutOfOrderBreak(); + void handleOLE(); + void handleFontRel(); + void handleHyperlinkURL(); + void handleAltChunk(); + + virtual void setPropertySet(const OOXMLPropertySet::Pointer_t& pPropertySet) override; + virtual OOXMLPropertySet::Pointer_t getPropertySet() const override; + +protected: + /// the properties + OOXMLPropertySet::Pointer_t mpPropertySet; + + virtual void lcl_endFastElement(Token_t Element) override; + +private: + + bool mbResolve; +}; + +class OOXMLFastContextHandlerPropertyTable : + public OOXMLFastContextHandlerProperties +{ +public: + explicit OOXMLFastContextHandlerPropertyTable(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerPropertyTable() override; + +private: + OOXMLTable mTable; + + virtual void lcl_endFastElement(Token_t Element) override; +}; + +class OOXMLFastContextHandlerValue : + public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerValue(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerValue() override; + + void setValue(const OOXMLValue::Pointer_t& pValue); + virtual OOXMLValue::Pointer_t getValue() const override; + + virtual void lcl_endFastElement(Token_t Element) override; + + virtual std::string getType() const override { return "Value"; } + + virtual void setDefaultBooleanValue() override; + virtual void setDefaultIntegerValue() override; + virtual void setDefaultHexValue() override; + virtual void setDefaultStringValue() override; + + virtual void pushBiDiEmbedLevel() override; + virtual void popBiDiEmbedLevel() override; + + void handleGridAfter(); + +private: + OOXMLValue::Pointer_t mpValue; +}; + +class OOXMLFastContextHandlerTable : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerTable(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerTable() override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext (sal_Int32 Element, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + +private: + OOXMLTable mTable; + + css::uno::Reference<css::xml::sax::XFastContextHandler> mCurrentChild; + + virtual void lcl_endFastElement(Token_t Element) override; + + virtual ResourceEnum_t getResource() const override { return TABLE; } + + virtual std::string getType() const override { return "Table"; } + + void addCurrentChild(); +}; + +class OOXMLFastContextHandlerXNote : public OOXMLFastContextHandlerProperties +{ +public: + explicit OOXMLFastContextHandlerXNote(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerXNote() override; + + void checkId(const OOXMLValue::Pointer_t& pValue); + + void checkType(const OOXMLValue::Pointer_t& pValue); + + virtual std::string getType() const override { return "XNote"; } + +private: + bool mbForwardEventsSaved; + sal_Int32 mnMyXNoteId; + sal_Int32 mnMyXNoteType; + + virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_endFastElement(Token_t Element) override; + + virtual ResourceEnum_t getResource() const override { return STREAM; } +}; + +class OOXMLFastContextHandlerTextTableCell : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerTextTableCell(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerTextTableCell() override; + + virtual std::string getType() const override { return "TextTableCell"; } + + void startCell(); + void endCell(); +}; + +class OOXMLFastContextHandlerTextTableRow : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerTextTableRow(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerTextTableRow() override; + + virtual std::string getType() const override { return "TextTableRow"; } + + static void startRow(); + void endRow(); + void handleGridBefore( const OOXMLValue::Pointer_t& val ); +}; + +class OOXMLFastContextHandlerTextTable : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerTextTable(OOXMLFastContextHandler * pContext); + + virtual ~OOXMLFastContextHandlerTextTable() override; + + virtual std::string getType() const override { return "TextTable"; } + + // tdf#111550 + // when <w:tbl> appears as direct child of <w:p>, we need to rearrange this paragraph + // to merge with the table's first paragraph (that's what Word does in this case) + void start_P_Tbl(); +protected: + virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_endFastElement(Token_t Element) override; +}; + +class OOXMLFastContextHandlerShape: public OOXMLFastContextHandlerProperties +{ + bool m_bShapeSent; + bool m_bShapeStarted; + /// Is it necessary to pop the stack in the dtor? + bool m_bShapeContextPushed; + rtl::Reference<oox::shape::ShapeContextHandler> mrShapeContext; + +public: + explicit OOXMLFastContextHandlerShape(OOXMLFastContextHandler * pContext); + virtual ~OOXMLFastContextHandlerShape() override; + + virtual std::string getType() const override { return "Shape"; } + + // css::xml::sax::XFastContextHandler: + virtual void SAL_CALL startUnknownElement (const OUString & Namespace, const OUString & Name, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name) override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext(const OUString & Namespace, const OUString & Name, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void setToken(Token_t nToken) override; + + virtual ResourceEnum_t getResource() const override { return SHAPE; } + + void sendShape( Token_t Element ); + bool isShapeSent( ) const { return m_bShapeSent; } + bool isDMLGroupShape() const; + +protected: + virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_endFastElement(Token_t Element) override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext (Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_characters(const OUString & aChars) override; + +}; + +/** + OOXMLFastContextHandlerWrapper wraps an OOXMLFastContextHandler. + + The method calls for the interface css::xml::sax::XFastContextHandler are + forwarded to the wrapped OOXMLFastContextHandler. + */ +class OOXMLFastContextHandlerWrapper : public OOXMLFastContextHandler +{ +public: + OOXMLFastContextHandlerWrapper(OOXMLFastContextHandler * pParent, + css::uno::Reference<css::xml::sax::XFastContextHandler> const & xContext, + rtl::Reference<OOXMLFastContextHandlerShape> const & xShapeHandler); + virtual ~OOXMLFastContextHandlerWrapper() override; + + // css::xml::sax::XFastContextHandler: + virtual void SAL_CALL startUnknownElement(const OUString & Namespace, const OUString & Name, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name) override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext (const OUString & Namespace, const OUString & Name, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void attributes(const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual ResourceEnum_t getResource() const override; + + void addNamespace(Id nId); + void addToken( Token_t Element ); + + virtual void newProperty(Id nId, const OOXMLValue::Pointer_t& pVal) override; + virtual void setPropertySet(const OOXMLPropertySet::Pointer_t& pPropertySet) override; + virtual OOXMLPropertySet::Pointer_t getPropertySet() const override; + + virtual std::string getType() const override; + +protected: + virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_endFastElement(Token_t Element) override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_characters(const OUString & aChars) override; + + virtual void setId(Id nId) override; + virtual Id getId() const override; + + virtual void setToken(Token_t nToken) override; + virtual Token_t getToken() const override; + +private: + css::uno::Reference<css::xml::sax::XFastContextHandler> mxWrappedContext; + rtl::Reference<OOXMLFastContextHandlerShape> mxShapeHandler; + std::set<Id> mMyNamespaces; + std::set<Token_t> mMyTokens; + OOXMLPropertySet::Pointer_t mpPropertySet; + + OOXMLFastContextHandler * getFastContextHandler() const; +}; + +/** + A class that converts from XFastParser/XFastContextHandler usage to a liner XML stream of data. + + The purpose of this class is to convert the rather complex XFastContextHandler-based XML + processing that requires context subclasses, callbacks, etc. into a linear stream of XML tokens + that can be handled simply by reading the tokens one by one and directly processing them. + See the oox::formulaimport::XmlStream class documentation for more information. + + Usage: Create a subclass of OOXMLFastContextHandlerLinear, reimplemented getType() to provide + type of the subclass and process() to actually process the XML stream. Also make sure to + add a line like the following to model.xml (for class OOXMLFastContextHandlerMath): + + <resource name="CT_OMath" resource="Math"/> + + @since 3.5 +*/ +class OOXMLFastContextHandlerLinear: public OOXMLFastContextHandlerProperties +{ +public: + explicit OOXMLFastContextHandlerLinear(OOXMLFastContextHandler * pContext); + /** + Return the type of the class, as written in model.xml . + */ + virtual std::string getType() const override = 0; + +protected: + /** + Called when the tokens for the element, its content and sub-elements have been linearized + and should be processed. The data member @ref buffer contains the converted data. + */ + virtual void process() = 0; + + virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_endFastElement(Token_t Element) override; + + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + + virtual void lcl_characters(const OUString & aChars) override; + + // should be private, but not much point in making deep copies of it + oox::formulaimport::XmlStreamBuilder buffer; + +private: + int depthCount; +}; + +class OOXMLFastContextHandlerMath: public OOXMLFastContextHandlerLinear +{ +public: + explicit OOXMLFastContextHandlerMath(OOXMLFastContextHandler * pContext); + virtual std::string getType() const override { return "Math"; } +protected: + virtual void process() override; +}; + +/** + A class that reads individual w15:commentEx elements from commentsExtended stream [MS-DOCX]. + + It is used to pre-populate the extended comment properties in domain mapper. The stream + contains information about resolved state of the comments ("done" attribute) and the parent + comment (the one that this comment answers to). + + Note that the data is linked to paraId identifiers (also introduced in [MS-DOCX]), which + correspond to paragraphs, not directly to comment ids. + + @since 7.2 +*/ +class OOXMLFastContextHandlerCommentEx : public OOXMLFastContextHandler +{ +public: + explicit OOXMLFastContextHandlerCommentEx(OOXMLFastContextHandler* pContext); + + virtual std::string getType() const override { return "CommentEx"; } + virtual void lcl_endFastElement(Token_t Element) override; + + void att_paraId(const OOXMLValue::Pointer_t& pValue); + void att_done(const OOXMLValue::Pointer_t& pValue); + +private: + OUString m_sParaId; + bool m_bDone = false; +}; + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx new file mode 100644 index 000000000..aba5ec0ac --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx @@ -0,0 +1,146 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "OOXMLFastDocumentHandler.hxx" +#include "OOXMLFastContextHandler.hxx" +#include "OOXMLFactory.hxx" +#include <sal/log.hxx> + +namespace writerfilter::ooxml +{ +using namespace ::com::sun::star; +using namespace ::std; + + +OOXMLFastDocumentHandler::OOXMLFastDocumentHandler( + uno::Reference< uno::XComponentContext > const & context, + Stream* pStream, + OOXMLDocumentImpl* pDocument, + sal_Int32 nXNoteId ) + : m_xContext(context) + , mpStream( pStream ) + , mpDocument( pDocument ) + , mnXNoteId( nXNoteId ) +{ +} + +OOXMLFastDocumentHandler::~OOXMLFastDocumentHandler() {} + +// css::xml::sax::XFastContextHandler: +void SAL_CALL OOXMLFastDocumentHandler::startFastElement(sal_Int32 Element +, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + SAL_INFO("writerfilter", "start element:" << fastTokenToId(Element)); +} + +void SAL_CALL OOXMLFastDocumentHandler::startUnknownElement +(const OUString & Namespace +, const OUString & Name +, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + SAL_INFO("writerfilter", "start unknown element:" << Namespace << ":" << Name); +} + +void SAL_CALL OOXMLFastDocumentHandler::endFastElement(sal_Int32 Element) +{ + SAL_INFO("writerfilter", "end element:" << fastTokenToId(Element)); +} + +void SAL_CALL OOXMLFastDocumentHandler::endUnknownElement +(const OUString & Namespace +, const OUString & Name) +{ + SAL_INFO("writerfilter", "end unknown element:" << Namespace << ":" << Name); +} + +rtl::Reference< OOXMLFastContextHandler > const & +OOXMLFastDocumentHandler::getContextHandler() const +{ + if (!mxContextHandler.is()) + { + mxContextHandler = new OOXMLFastContextHandler(m_xContext); + mxContextHandler->setStream(mpStream); + mxContextHandler->setDocument(mpDocument); + mxContextHandler->setXNoteId(mnXNoteId); + mxContextHandler->setForwardEvents(true); + } + + return mxContextHandler; +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL + OOXMLFastDocumentHandler::createFastChildContext +(::sal_Int32 Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + if ( mpStream == nullptr && mpDocument == nullptr ) + { + // document handler has been created as unknown child - see <OOXMLFastDocumentHandler::createUnknownChildContext(..)> + // --> do not provide a child context + return nullptr; + } + + return OOXMLFactory::createFastChildContextFromStart(getContextHandler().get(), Element); +} + +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL +OOXMLFastDocumentHandler::createUnknownChildContext +(const OUString & Namespace +, const OUString & Name +, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +{ + SAL_INFO("writerfilter", "createUnknownChildContext:" << Namespace << ":"<< Name); + + return uno::Reference< xml::sax::XFastContextHandler > + ( new OOXMLFastDocumentHandler( m_xContext, nullptr, nullptr, 0 ) ); +} + +void SAL_CALL OOXMLFastDocumentHandler::characters(const OUString & /*aChars*/) +{ +} + +// css::xml::sax::XFastDocumentHandler: +void SAL_CALL OOXMLFastDocumentHandler::startDocument() +{ +} + +void SAL_CALL OOXMLFastDocumentHandler::endDocument() +{ +} + +void SAL_CALL OOXMLFastDocumentHandler::processingInstruction( const OUString& /*rTarget*/, const OUString& /*rData*/ ) +{ +} + +void SAL_CALL OOXMLFastDocumentHandler::setDocumentLocator +(const uno::Reference< xml::sax::XLocator > & /*xLocator*/) +{ +} + +void OOXMLFastDocumentHandler::setIsSubstream( bool bSubstream ) +{ + if ( mpStream != nullptr && mpDocument != nullptr ) + { + getContextHandler( )->getParserState( )->setInSectionGroup( bSubstream ); + } +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx new file mode 100644 index 000000000..8bcbdb68f --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx @@ -0,0 +1,90 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <com/sun/star/uno/XComponentContext.hpp> +#include <cppuhelper/implbase.hxx> +#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp> +#include <dmapper/resourcemodel.hxx> +#include <ooxml/OOXMLDocumentImpl.hxx> +#include <rtl/ref.hxx> + +namespace writerfilter::ooxml +{ + +class OOXMLFastContextHandler; + +class OOXMLFastDocumentHandler : public cppu::WeakImplHelper<css::xml::sax::XFastDocumentHandler> +{ +public: + OOXMLFastDocumentHandler( + css::uno::Reference< css::uno::XComponentContext > const & context, + Stream* pStream, + OOXMLDocumentImpl* pDocument, + sal_Int32 nXNoteId ); + virtual ~OOXMLFastDocumentHandler() override; + + // css::xml::sax::XFastDocumentHandler: + virtual void SAL_CALL startDocument() override; + virtual void SAL_CALL endDocument() override; + virtual void SAL_CALL processingInstruction( const OUString& rTarget, const OUString& rData ) override; + virtual void SAL_CALL setDocumentLocator + (const css::uno::Reference< css::xml::sax::XLocator > & xLocator) override; + + // css::xml::sax::XFastContextHandler: + virtual void SAL_CALL startFastElement + (::sal_Int32 Element, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + virtual void SAL_CALL startUnknownElement + (const OUString & Namespace, + const OUString & Name, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + virtual void SAL_CALL endFastElement(::sal_Int32 Element) override; + virtual void SAL_CALL endUnknownElement + (const OUString & Namespace, + const OUString & Name) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL + createFastChildContext + (::sal_Int32 Element, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL + createUnknownChildContext + (const OUString & Namespace, + const OUString & Name, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; + virtual void SAL_CALL characters(const OUString & aChars) override; + + void setIsSubstream( bool bSubstream ); + +private: + OOXMLFastDocumentHandler(OOXMLFastDocumentHandler const &) = delete; + void operator =(OOXMLFastDocumentHandler const &) = delete; + + css::uno::Reference< css::uno::XComponentContext > m_xContext; + + Stream * mpStream; + OOXMLDocumentImpl* mpDocument; + sal_Int32 mnXNoteId; + mutable rtl::Reference<OOXMLFastContextHandler> mxContextHandler; + rtl::Reference<OOXMLFastContextHandler> const & getContextHandler() const; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLFastHelper.hxx b/writerfilter/source/ooxml/OOXMLFastHelper.hxx new file mode 100644 index 000000000..ecb8b6943 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLFastHelper.hxx @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include "OOXMLFastContextHandler.hxx" + +namespace writerfilter::ooxml +{ + +template <class T> +class OOXMLFastHelper +{ +public: + static rtl::Reference<OOXMLFastContextHandler> createAndSetParentAndDefine + (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine); + + static void newProperty(OOXMLFastContextHandler * pHandler, + Id nId, sal_Int32 nValue); +}; + +template <class T> +rtl::Reference<OOXMLFastContextHandler> OOXMLFastHelper<T>::createAndSetParentAndDefine (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine) +{ + rtl::Reference<OOXMLFastContextHandler> pTmp = new T(pHandler); + + pTmp->setToken(nToken); + pTmp->setId(nId); + pTmp->setDefine(nDefine); + + return pTmp; +} + +template <class T> +void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler, + Id nId, + sal_Int32 nVal) +{ + OOXMLValue::Pointer_t pVal(T::Create(nVal)); + + pHandler->newProperty(nId, pVal); +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx new file mode 100644 index 000000000..a11afde8f --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLParserState.cxx @@ -0,0 +1,286 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "OOXMLParserState.hxx" +#include "Handler.hxx" + +#include <sal/log.hxx> + +namespace writerfilter::ooxml +{ +/* + class OOXMLParserState +*/ + +OOXMLParserState::OOXMLParserState() : + mbInSectionGroup(false), + mbInParagraphGroup(false), + mbInCharacterGroup(false), + mbLastParagraphInSection(false), + mbForwardEvents(true), + mnContexts(0), + mnHandle(0), + mpDocument(nullptr), + inTxbxContent(false), + savedInParagraphGroup(false), + savedInCharacterGroup(false), + savedLastParagraphInSection(false), + mbStartFootnote(false) +{ +} + +OOXMLParserState::~OOXMLParserState() +{ +} + +void OOXMLParserState::setLastParagraphInSection(bool bLastParagraphInSection) +{ + mbLastParagraphInSection = bLastParagraphInSection; +} + + +void OOXMLParserState::setInSectionGroup(bool bInSectionGroup) +{ + mbInSectionGroup = bInSectionGroup; +} + + +void OOXMLParserState::setInParagraphGroup(bool bInParagraphGroup) +{ + mbInParagraphGroup = bInParagraphGroup; +} + + +void OOXMLParserState::setInCharacterGroup(bool bInCharacterGroup) +{ + mbInCharacterGroup = bInCharacterGroup; +} + +void OOXMLParserState::setForwardEvents(bool bForwardEvents) +{ + mbForwardEvents = bForwardEvents; +} + + +std::string OOXMLParserState::getHandle() const +{ + return std::to_string(mnHandle); +} + +void OOXMLParserState::setHandle() +{ + mnHandle = mnContexts; +} + +void OOXMLParserState::setDocument(OOXMLDocumentImpl* pDocument) +{ + mpDocument = pDocument; +} + + +void OOXMLParserState::setXNoteId(const sal_Int32 nId) +{ + mpDocument->setXNoteId(nId); +} + +sal_Int32 OOXMLParserState::getXNoteId() const +{ + return mpDocument->getXNoteId(); +} + +const OUString & OOXMLParserState::getTarget() const +{ + return mpDocument->getTarget(); +} + +void OOXMLParserState::resolveCharacterProperties(Stream & rStream) +{ + if (mpCharacterProps) + { + rStream.props(mpCharacterProps.get()); + mpCharacterProps = new OOXMLPropertySet; + } +} + +void OOXMLParserState::setCharacterProperties(const OOXMLPropertySet::Pointer_t& pProps) +{ + if (!mpCharacterProps) + mpCharacterProps = pProps; + else + mpCharacterProps->add(pProps); +} + +void OOXMLParserState::setCellProperties(const OOXMLPropertySet::Pointer_t& pProps) +{ + if (!mCellProps.empty()) + { + OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top(); + + if (!rCellProps) + rCellProps = pProps; + else + rCellProps->add(pProps); + } +} + +void OOXMLParserState::setRowProperties(const OOXMLPropertySet::Pointer_t& pProps) +{ + if (!mRowProps.empty()) + { + OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top(); + + if (!rRowProps) + rRowProps = pProps; + else + rRowProps->add(pProps); + } +} + +void OOXMLParserState::resolveCellProperties(Stream & rStream) +{ + if (!mCellProps.empty()) + { + OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top(); + + if (rCellProps) + { + rStream.props(rCellProps.get()); + rCellProps = new OOXMLPropertySet; + } + } +} + +void OOXMLParserState::resolveRowProperties(Stream & rStream) +{ + if (!mRowProps.empty()) + { + OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top(); + + if (rRowProps) + { + rStream.props(rRowProps.get()); + rRowProps = new OOXMLPropertySet; + } + } +} + +void OOXMLParserState::resolveTableProperties(Stream & rStream) +{ + if (!mTableProps.empty()) + { + OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top(); + + if (rTableProps) + { + rStream.props(rTableProps.get()); + // Don't clean the table props to send them again for each row + // This mimics the behaviour from RTF tokenizer. + } + } +} + +void OOXMLParserState::setTableProperties(const OOXMLPropertySet::Pointer_t& pProps) +{ + if (!mTableProps.empty()) + { + OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top(); + if (!rTableProps) + rTableProps = pProps; + else + rTableProps->add(pProps); + } +} + +// tdf#108714 +void OOXMLParserState::resolvePostponedBreak(Stream & rStream) +{ + for (const auto & rBreak: mvPostponedBreaks) + { + OOXMLBreakHandler aBreakHandler(nullptr, rStream); + rBreak->resolve(aBreakHandler); + } + mvPostponedBreaks.clear(); +} + +void OOXMLParserState::setPostponedBreak(const OOXMLPropertySet::Pointer_t & pProps) +{ + mvPostponedBreaks.push_back(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++; +} + +void OOXMLParserState::startTxbxContent() +{ + SAL_WARN_IF(inTxbxContent, "writerfilter", "Nested w:txbxContent"); + + inTxbxContent = true; + // Do not save and reset section group state, it'd cause a new page. +// savedInSectionGroup = mbInSectionGroup; + savedInParagraphGroup = mbInParagraphGroup; + savedInCharacterGroup = mbInCharacterGroup; + savedLastParagraphInSection = mbLastParagraphInSection; +// mbInSectionGroup = false; + mbInParagraphGroup = false; + mbInCharacterGroup = false; + mbLastParagraphInSection = false; +} + +void OOXMLParserState::endTxbxContent() +{ + if( !inTxbxContent ) + { + SAL_WARN( "writerfilter", "Non-matching closing w:txbxContent" ); + return; + } +// mbInSectionGroup = savedInSectionGroup; + mbInParagraphGroup = savedInParagraphGroup; + mbInCharacterGroup = savedInCharacterGroup; + mbLastParagraphInSection = savedLastParagraphInSection; + inTxbxContent = false; +} + +void OOXMLParserState::setStartFootnote(bool bStartFootnote) +{ + mbStartFootnote = bStartFootnote; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx new file mode 100644 index 000000000..5bb9a7dc7 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLParserState.hxx @@ -0,0 +1,121 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <stack> +#include "OOXMLDocumentImpl.hxx" +#include "OOXMLPropertySet.hxx" + +namespace writerfilter::ooxml +{ +/** + * Struct to store our 'alternate state'. If multiple mc:AlternateContent + * elements arrive, then while the inner ones are active, the original state is + * saved away, and once they inner goes out of scope, the original state is + * restored. + */ +struct SavedAlternateState +{ + bool m_bDiscardChildren; + bool m_bTookChoice; ///< Did we take the Choice or want Fallback instead? +}; + +class OOXMLParserState final : public virtual SvRefBase +{ + bool mbInSectionGroup; + bool mbInParagraphGroup; + bool mbInCharacterGroup; + bool mbLastParagraphInSection; + bool mbForwardEvents; + unsigned int mnContexts; + unsigned int mnHandle; + OOXMLDocumentImpl* mpDocument; + OOXMLPropertySet::Pointer_t mpCharacterProps; + std::stack<OOXMLPropertySet::Pointer_t> mCellProps; + std::stack<OOXMLPropertySet::Pointer_t> mRowProps; + std::stack<OOXMLPropertySet::Pointer_t> mTableProps; + bool inTxbxContent; + // these 4 save when inTxbxContent + bool savedInParagraphGroup; + bool savedInCharacterGroup; + bool savedLastParagraphInSection; + std::vector<SavedAlternateState> maSavedAlternateStates; + std::vector<OOXMLPropertySet::Pointer_t> mvPostponedBreaks; + bool mbStartFootnote; + +public: + typedef tools::SvRef<OOXMLParserState> Pointer_t; + + OOXMLParserState(); + ~OOXMLParserState() override; + + bool isInSectionGroup() const { return mbInSectionGroup; } + void setInSectionGroup(bool bInSectionGroup); + + void setLastParagraphInSection(bool bLastParagraphInSection); + bool isLastParagraphInSection() const { return mbLastParagraphInSection; } + + std::vector<SavedAlternateState>& getSavedAlternateStates() { return maSavedAlternateStates; } + + bool isInParagraphGroup() const { return mbInParagraphGroup; } + void setInParagraphGroup(bool bInParagraphGroup); + + bool isInCharacterGroup() const { return mbInCharacterGroup; } + void setInCharacterGroup(bool bInCharacterGroup); + + void setForwardEvents(bool bForwardEvents); + bool isForwardEvents() const { return mbForwardEvents; } + + std::string getHandle() const; + void setHandle(); + + void setDocument(OOXMLDocumentImpl* pDocument); + OOXMLDocumentImpl* getDocument() const { return mpDocument; } + + void setXNoteId(const sal_Int32 rId); + sal_Int32 getXNoteId() const; + + const OUString& getTarget() const; + + void resolveCharacterProperties(Stream& rStream); + void setCharacterProperties(const OOXMLPropertySet::Pointer_t& pProps); + void resolveCellProperties(Stream& rStream); + void setCellProperties(const OOXMLPropertySet::Pointer_t& pProps); + void resolveRowProperties(Stream& rStream); + void setRowProperties(const OOXMLPropertySet::Pointer_t& pProps); + void resolveTableProperties(Stream& rStream); + void setTableProperties(const OOXMLPropertySet::Pointer_t& pProps); + // tdf#108714 + void resolvePostponedBreak(Stream& rStream); + void setPostponedBreak(const OOXMLPropertySet::Pointer_t& pProps); + + void startTable(); + void endTable(); + + void incContextCount(); + + void startTxbxContent(); + void endTxbxContent(); + + void setStartFootnote(bool bStartFootnote); + bool isStartFootnote() const { return mbStartFootnote; } +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLPropertySet.cxx b/writerfilter/source/ooxml/OOXMLPropertySet.cxx new file mode 100644 index 000000000..1d1724c9c --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLPropertySet.cxx @@ -0,0 +1,857 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "OOXMLPropertySet.hxx" +#include <stdio.h> +#include <iostream> +#include <ooxml/QNameToString.hxx> +#include <com/sun/star/drawing/XShape.hpp> +#include <sax/tools/converter.hxx> +#include <tools/color.hxx> + +namespace writerfilter::ooxml +{ +using namespace ::std; +using namespace com::sun::star; + +OOXMLProperty::OOXMLProperty(Id id, const OOXMLValue::Pointer_t& pValue, + OOXMLProperty::Type_t eType) + : mId(id), mpValue(pValue), meType(eType) +{ +} + +OOXMLProperty::~OOXMLProperty() +{ +} + +sal_uInt32 OOXMLProperty::getId() const +{ + return mId; +} + +Value::Pointer_t OOXMLProperty::getValue() +{ + Value::Pointer_t pResult; + + if (mpValue) + pResult = Value::Pointer_t(mpValue->clone()); + else + pResult = Value::Pointer_t(new OOXMLValue()); + + return pResult; +} + +writerfilter::Reference<Properties>::Pointer_t OOXMLProperty::getProps() +{ + writerfilter::Reference<Properties>::Pointer_t pResult; + + if (mpValue) + pResult = mpValue->getProperties(); + + return pResult; +} + +#ifdef DBG_UTIL +string OOXMLProperty::getName() const +{ + string sResult(QNameToString(mId)); + + if (sResult.length() == 0) + sResult = fastTokenToId(mId); + + if (sResult.length() == 0) + { + static char sBuffer[256]; + + snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIxUINT32, mId); + sResult = sBuffer; + } + + return sResult; +} +#endif + +#ifdef DBG_UTIL +string OOXMLProperty::toString() const +{ + string sResult = "("; + + sResult += getName(); + sResult += ", "; + if (mpValue) + sResult += mpValue->toString(); + else + sResult +="(null)"; + sResult +=")"; + + return sResult; +} +#endif + +void OOXMLProperty::resolve(writerfilter::Properties & rProperties) +{ + switch (meType) + { + case SPRM: + if (mId != 0x0) + rProperties.sprm(*this); + break; + case ATTRIBUTE: + rProperties.attribute(mId, *getValue()); + break; + } +} + +/* + class OOXMLValue +*/ + +OOXMLValue::OOXMLValue() +{ +} + +OOXMLValue::~OOXMLValue() +{ +} + +int OOXMLValue::getInt() const +{ + return 0; +} + +OUString OOXMLValue::getString() const +{ + return OUString(); +} + +uno::Any OOXMLValue::getAny() const +{ + return uno::Any(); +} + +writerfilter::Reference<Properties>::Pointer_t OOXMLValue::getProperties() +{ + return writerfilter::Reference<Properties>::Pointer_t(); +} + +writerfilter::Reference<BinaryObj>::Pointer_t OOXMLValue::getBinary() +{ + return writerfilter::Reference<BinaryObj>::Pointer_t(); +} + +#ifdef DBG_UTIL +string OOXMLValue::toString() const +{ + return "OOXMLValue"; +} +#endif + +OOXMLValue * OOXMLValue::clone() const +{ + return new OOXMLValue(*this); +} + +/* + class OOXMLBinaryValue + */ + +OOXMLBinaryValue::OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t const & + pBinaryObj) +: mpBinaryObj(pBinaryObj) +{ +} + +OOXMLBinaryValue::~OOXMLBinaryValue() +{ +} + +writerfilter::Reference<BinaryObj>::Pointer_t OOXMLBinaryValue::getBinary() +{ + return mpBinaryObj; +} + +#ifdef DBG_UTIL +string OOXMLBinaryValue::toString() const +{ + return "BinaryObj"; +} +#endif + +OOXMLValue * OOXMLBinaryValue::clone() const +{ + return new OOXMLBinaryValue(mpBinaryObj); +} + +/* + class OOXMLBooleanValue +*/ + +static bool GetBooleanValue(const char *pValue) +{ + return !strcmp(pValue, "true") + || !strcmp(pValue, "True") + || !strcmp(pValue, "1") + || !strcmp(pValue, "on") + || !strcmp(pValue, "On"); +} + +OOXMLValue::Pointer_t const & OOXMLBooleanValue::Create(bool bValue) +{ + static OOXMLValue::Pointer_t False(new OOXMLBooleanValue (false)); + static OOXMLValue::Pointer_t True(new OOXMLBooleanValue (true)); + + return bValue ? True : False; +} + +OOXMLValue::Pointer_t const & OOXMLBooleanValue::Create(const char *pValue) +{ + return Create (GetBooleanValue(pValue)); +} + +OOXMLBooleanValue::OOXMLBooleanValue(bool bValue) +: mbValue(bValue) +{ +} + +OOXMLBooleanValue::~OOXMLBooleanValue() +{ +} + +int OOXMLBooleanValue::getInt() const +{ + return mbValue ? 1 : 0; +} + +uno::Any OOXMLBooleanValue::getAny() const +{ + return uno::Any(mbValue); +} + +#ifdef DBG_UTIL +string OOXMLBooleanValue::toString() const +{ + return mbValue ? "true" : "false"; +} +#endif + +OOXMLValue * OOXMLBooleanValue::clone() const +{ + return new OOXMLBooleanValue(*this); +} + +/* + class OOXMLStringValue +*/ + +OOXMLStringValue::OOXMLStringValue(const OUString & rStr) +: mStr(rStr) +{ +} + +OOXMLStringValue::~OOXMLStringValue() +{ +} + +uno::Any OOXMLStringValue::getAny() const +{ + return uno::Any(mStr); +} + +OUString OOXMLStringValue::getString() const +{ + return mStr; +} + +#ifdef DBG_UTIL +string OOXMLStringValue::toString() const +{ + return OUStringToOString(mStr, RTL_TEXTENCODING_ASCII_US).getStr(); +} +#endif + +OOXMLValue * OOXMLStringValue::clone() const +{ + return new OOXMLStringValue(*this); +} + +/* + class OOXMLInputStreamValue + */ +OOXMLInputStreamValue::OOXMLInputStreamValue(uno::Reference<io::XInputStream> const & xInputStream) +: mxInputStream(xInputStream) +{ +} + +OOXMLInputStreamValue::~OOXMLInputStreamValue() +{ +} + +uno::Any OOXMLInputStreamValue::getAny() const +{ + return uno::Any(mxInputStream); +} + +#ifdef DBG_UTIL +string OOXMLInputStreamValue::toString() const +{ + return "InputStream"; +} +#endif + +OOXMLValue * OOXMLInputStreamValue::clone() const +{ + return new OOXMLInputStreamValue(mxInputStream); +} + +/** + class OOXMLPropertySet +*/ + +OOXMLPropertySet::OOXMLPropertySet() +{ +} + +OOXMLPropertySet::~OOXMLPropertySet() +{ +} + +void OOXMLPropertySet::resolve(Properties & rHandler) +{ + // The pProp->resolve(rHandler) call below can cause elements to + // be appended to mProperties. I don't think it can cause elements + // to be deleted. But let's check with < here just to be safe that + // the indexing below works. + for (size_t nIt = 0; nIt < mProperties.size(); ++nIt) + { + OOXMLProperty::Pointer_t pProp = mProperties[nIt]; + + if (pProp) + pProp->resolve(rHandler); + } +} + +OOXMLPropertySet::OOXMLProperties_t::iterator OOXMLPropertySet::begin() +{ + return mProperties.begin(); +} + +OOXMLPropertySet::OOXMLProperties_t::iterator OOXMLPropertySet::end() +{ + return mProperties.end(); +} + +OOXMLPropertySet::OOXMLProperties_t::const_iterator +OOXMLPropertySet::begin() const +{ + return mProperties.begin(); +} + +OOXMLPropertySet::OOXMLProperties_t::const_iterator +OOXMLPropertySet::end() const +{ + return mProperties.end(); +} + +void OOXMLPropertySet::add(const OOXMLProperty::Pointer_t& pProperty) +{ + if (pProperty && pProperty->getId() != 0x0) + { + mProperties.push_back(pProperty); + } +} + +void OOXMLPropertySet::add(Id id, const OOXMLValue::Pointer_t& pValue, OOXMLProperty::Type_t eType) +{ + OOXMLProperty::Pointer_t pProperty(new OOXMLProperty(id, pValue, eType)); + add(pProperty); +} + +void OOXMLPropertySet::add(const OOXMLPropertySet::Pointer_t& pPropertySet) +{ + const OOXMLPropertySet * pSet = pPropertySet.get(); + + if (pSet != nullptr) + { + mProperties.insert( mProperties.end(), pSet->mProperties.begin(), pSet->mProperties.end() ); + } +} + +OOXMLPropertySet * OOXMLPropertySet::clone() const +{ + return new OOXMLPropertySet(*this); +} + +#ifdef DBG_UTIL +string OOXMLPropertySet::toString() +{ + string sResult = "["; + char sBuffer[256]; + snprintf(sBuffer, sizeof(sBuffer), "%p", this); + sResult += sBuffer; + sResult += ":"; + + OOXMLProperties_t::iterator aItBegin = begin(); + OOXMLProperties_t::iterator aItEnd = end(); + + for (OOXMLProperties_t::iterator aIt = aItBegin; aIt != aItEnd; ++aIt) + { + if (aIt != aItBegin) + sResult += ", "; + + if (*aIt) + sResult += (*aIt)->toString(); + else + sResult += "0x0"; + } + + sResult += "]"; + + return sResult; +} +#endif + +/* + class OOXMLPropertySetValue +*/ + +OOXMLPropertySetValue::OOXMLPropertySetValue(const OOXMLPropertySet::Pointer_t& pPropertySet) + : mpPropertySet(pPropertySet) +{ +} + +OOXMLPropertySetValue::~OOXMLPropertySetValue() +{ +} + +writerfilter::Reference<Properties>::Pointer_t OOXMLPropertySetValue::getProperties() +{ + return writerfilter::Reference<Properties>::Pointer_t + (mpPropertySet->clone()); +} + +#ifdef DBG_UTIL +string OOXMLPropertySetValue::toString() const +{ + char sBuffer[256]; + + snprintf(sBuffer, sizeof(sBuffer), "t:%p, m:%p", this, mpPropertySet.get()); + + return "OOXMLPropertySetValue(" + string(sBuffer) + ")"; +} +#endif + +OOXMLValue * OOXMLPropertySetValue::clone() const +{ + return new OOXMLPropertySetValue(*this); +} + +/* + class OOXMLIntegerValue +*/ + +OOXMLValue::Pointer_t OOXMLIntegerValue::Create(sal_Int32 nValue) +{ + static OOXMLValue::Pointer_t Zero(new OOXMLIntegerValue (0)); + static OOXMLValue::Pointer_t One(new OOXMLIntegerValue (1)); + static OOXMLValue::Pointer_t Two(new OOXMLIntegerValue (2)); + static OOXMLValue::Pointer_t Three(new OOXMLIntegerValue (3)); + static OOXMLValue::Pointer_t Four(new OOXMLIntegerValue (4)); + static OOXMLValue::Pointer_t Five(new OOXMLIntegerValue (5)); + static OOXMLValue::Pointer_t Six(new OOXMLIntegerValue (6)); + static OOXMLValue::Pointer_t Seven(new OOXMLIntegerValue (7)); + static OOXMLValue::Pointer_t Eight(new OOXMLIntegerValue (8)); + static OOXMLValue::Pointer_t Nine(new OOXMLIntegerValue (9)); + + switch (nValue) { + case 0: return Zero; + case 1: return One; + case 2: return Two; + case 3: return Three; + case 4: return Four; + case 5: return Five; + case 6: return Six; + case 7: return Seven; + case 8: return Eight; + case 9: return Nine; + default: break; + } + + OOXMLValue::Pointer_t value(new OOXMLIntegerValue(nValue)); + + return value; +} + +OOXMLIntegerValue::OOXMLIntegerValue(sal_Int32 nValue) +: mnValue(nValue) +{ +} + +OOXMLIntegerValue::~OOXMLIntegerValue() +{ +} + +int OOXMLIntegerValue::getInt() const +{ + return mnValue; +} + +uno::Any OOXMLIntegerValue::getAny() const +{ + return uno::Any(mnValue); +} + +OOXMLValue * OOXMLIntegerValue::clone() const +{ + return new OOXMLIntegerValue(*this); +} + +#ifdef DBG_UTIL +string OOXMLIntegerValue::toString() const +{ + char buffer[256]; + snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, mnValue); + + return buffer; +} +#endif + +/* + class OOXMLHexValue +*/ + +OOXMLHexValue::OOXMLHexValue(sal_uInt32 nValue) +: mnValue(nValue) +{ +} + +OOXMLHexValue::OOXMLHexValue(const char * pValue) +: mnValue(rtl_str_toUInt32(pValue, 16)) +{ +} + +OOXMLHexValue::~OOXMLHexValue() +{ +} + +int OOXMLHexValue::getInt() const +{ + return mnValue; +} + +OOXMLValue * OOXMLHexValue::clone() const +{ + return new OOXMLHexValue(*this); +} + +#ifdef DBG_UTIL +string OOXMLHexValue::toString() const +{ + char buffer[256]; + snprintf(buffer, sizeof(buffer), "0x%" SAL_PRIxUINT32, mnValue); + + return buffer; +} +#endif + +/* + class OOXMLHexColorValue +*/ +OOXMLHexColorValue::OOXMLHexColorValue(const char * pValue) + : OOXMLHexValue(sal_uInt32(COL_AUTO)) +{ + if (!strcmp(pValue, "auto")) + return; + + mnValue = rtl_str_toUInt32(pValue, 16); + + // Convert hash-encoded values (like #FF0080) + const sal_Int32 nLen = strlen(pValue); + if ( !mnValue && nLen > 1 && pValue[0] == '#' ) + { + sal_Int32 nColor(COL_AUTO); + // Word appears to require strict 6 digit length, else it ignores it + if ( nLen == 7 ) + { + const OUString sHashColor(pValue, nLen, RTL_TEXTENCODING_ASCII_US); + sax::Converter::convertColor( nColor, sHashColor ); + } + mnValue = nColor; + } +} + +// OOXMLUniversalMeasureValue +// ECMA-376 5th ed. Part 1 , 22.9.2.15 +OOXMLUniversalMeasureValue::OOXMLUniversalMeasureValue(const char * pValue, sal_uInt32 npPt) +{ + double val = rtl_str_toDouble(pValue); // will ignore the trailing unit + + int nLen = strlen(pValue); + if (nLen > 2 && + pValue[nLen-2] == 'p' && + pValue[nLen-1] == 't') + { + mnValue = static_cast<int>(val * npPt); + } + else if (nLen > 2 && + pValue[nLen - 2] == 'c' && + pValue[nLen - 1] == 'm') + { + mnValue = static_cast<int>(val * npPt * 72 / 2.54); + } + else if (nLen > 2 && + pValue[nLen - 2] == 'm' && + pValue[nLen - 1] == 'm') + { + mnValue = static_cast<int>(val * npPt * 72 / 25.4); + } + else if (nLen > 2 && + pValue[nLen - 2] == 'i' && + pValue[nLen - 1] == 'n') + { + mnValue = static_cast<int>(val * npPt * 72); + } + else if (nLen > 2 && + pValue[nLen - 2] == 'p' && + ( pValue[nLen - 1] == 'c' || pValue[nLen - 1] == 'i' )) + { + mnValue = static_cast<int>(val * npPt * 12); + } + else + { + mnValue = static_cast<int>(val); + } +} + +OOXMLUniversalMeasureValue::~OOXMLUniversalMeasureValue() +{ +} + +int OOXMLUniversalMeasureValue::getInt() const +{ + return mnValue; +} + +#ifdef DBG_UTIL +string OOXMLUniversalMeasureValue::toString() const +{ + return OString::number(mnValue).getStr(); +} +#endif + +// OOXMLMeasurementOrPercentValue +// ECMA-376 5th ed. Part 1 , 17.18.107; 17.18.11 +OOXMLMeasurementOrPercentValue::OOXMLMeasurementOrPercentValue(const char * pValue) +{ + double val = rtl_str_toDouble(pValue); // will ignore the trailing unit + + int nLen = strlen(pValue); + if (nLen > 1 && + pValue[nLen - 1] == '%') + { + mnValue = static_cast<int>(val * 50); + } + else + { + mnValue = OOXMLTwipsMeasureValue(pValue).getInt(); + } +} + +int OOXMLMeasurementOrPercentValue::getInt() const +{ + return mnValue; +} + +#ifdef DBG_UTIL +string OOXMLMeasurementOrPercentValue::toString() const +{ + return OString::number(mnValue).getStr(); +} +#endif + +/* + class OOXMLShapeValue + */ + + +OOXMLShapeValue::OOXMLShapeValue(uno::Reference<drawing::XShape> const & rShape) +: mrShape(rShape) +{ +} + +OOXMLShapeValue::~OOXMLShapeValue() +{ +} + +uno::Any OOXMLShapeValue::getAny() const +{ + return uno::Any(mrShape); +} + +#ifdef DBG_UTIL +string OOXMLShapeValue::toString() const +{ + return "Shape"; +} +#endif + +OOXMLValue * OOXMLShapeValue::clone() const +{ + return new OOXMLShapeValue(mrShape); +} + +/* + class OOXMLStarMathValue + */ + + +OOXMLStarMathValue::OOXMLStarMathValue( uno::Reference< embed::XEmbeddedObject > const & c ) +: component(c) +{ +} + +OOXMLStarMathValue::~OOXMLStarMathValue() +{ +} + +uno::Any OOXMLStarMathValue::getAny() const +{ + return uno::Any(component); +} + +#ifdef DBG_UTIL +string OOXMLStarMathValue::toString() const +{ + return "StarMath"; +} +#endif + +OOXMLValue * OOXMLStarMathValue::clone() const +{ + return new OOXMLStarMathValue( component ); +} + +/* + class OOXMLTableImpl + */ + +OOXMLTable::OOXMLTable() +{ +} + +OOXMLTable::~OOXMLTable() +{ +} + + +void OOXMLTable::resolve(Table & rTable) +{ + Table * pTable = &rTable; + + int nPos = 0; + + for (const auto& rPropSet : mPropertySets) + { + writerfilter::Reference<Properties>::Pointer_t pProperties + (rPropSet->getProperties()); + + if (pProperties) + pTable->entry(nPos, pProperties); + + ++nPos; + } +} + +void OOXMLTable::add(const ValuePointer_t& pPropertySet) +{ + if (pPropertySet) + mPropertySets.push_back(pPropertySet); +} + +OOXMLTable * OOXMLTable::clone() const +{ + return new OOXMLTable(*this); +} + +/* + class: OOXMLPropertySetEntryToString +*/ + +OOXMLPropertySetEntryToString::OOXMLPropertySetEntryToString(Id nId) +: mnId(nId) +{ +} + +OOXMLPropertySetEntryToString::~OOXMLPropertySetEntryToString() +{ +} + +void OOXMLPropertySetEntryToString::sprm(Sprm & /*rSprm*/) +{ +} + +void OOXMLPropertySetEntryToString::attribute(Id nId, Value & rValue) +{ + if (nId == mnId) + mStr = rValue.getString(); +} + +/* + class: OOXMLPropertySetEntryToInteger +*/ + +OOXMLPropertySetEntryToInteger::OOXMLPropertySetEntryToInteger(Id nId) +: mnId(nId), mnValue(0) +{ +} + +OOXMLPropertySetEntryToInteger::~OOXMLPropertySetEntryToInteger() +{ +} + +void OOXMLPropertySetEntryToInteger::sprm(Sprm & /*rSprm*/) +{ +} + +void OOXMLPropertySetEntryToInteger::attribute(Id nId, Value & rValue) +{ + if (nId == mnId) + mnValue = rValue.getInt(); +} + +/* + class: OOXMLPropertySetEntryToBool +*/ + +OOXMLPropertySetEntryToBool::OOXMLPropertySetEntryToBool(Id nId) + : mnId(nId), mValue(false) +{} + +OOXMLPropertySetEntryToBool::~OOXMLPropertySetEntryToBool() {} + +void OOXMLPropertySetEntryToBool::sprm(Sprm & /*rSprm*/) {} + +void OOXMLPropertySetEntryToBool::attribute(Id nId, Value & rValue) +{ + if (nId == mnId) + mValue = (rValue.getInt() != 0); +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLPropertySet.hxx b/writerfilter/source/ooxml/OOXMLPropertySet.hxx new file mode 100644 index 000000000..b30fbaf61 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLPropertySet.hxx @@ -0,0 +1,413 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <vector> +#include "OOXMLBinaryObjectReference.hxx" +#include <com/sun/star/embed/XEmbeddedObject.hpp> +#include <dmapper/resourcemodel.hxx> + +namespace writerfilter::ooxml +{ +class OOXMLValue : public Value +{ +public: + typedef tools::SvRef<OOXMLValue> Pointer_t; + OOXMLValue(); + virtual ~OOXMLValue() override; + + OOXMLValue(OOXMLValue const&) = default; + OOXMLValue(OOXMLValue&&) = default; + OOXMLValue& operator=(OOXMLValue const&) = default; + OOXMLValue& operator=(OOXMLValue&&) = default; + + virtual int getInt() const override; + ; + virtual OUString getString() const override; + virtual css::uno::Any getAny() const override; + virtual writerfilter::Reference<Properties>::Pointer_t getProperties() override; + virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const; +}; + +class OOXMLProperty : public Sprm +{ +public: + typedef tools::SvRef<OOXMLProperty> Pointer_t; + enum Type_t + { + SPRM, + ATTRIBUTE + }; + +private: + Id mId; + mutable OOXMLValue::Pointer_t mpValue; + Type_t meType; + +public: + OOXMLProperty(Id id, const OOXMLValue::Pointer_t& pValue, Type_t eType); + OOXMLProperty(const OOXMLProperty& rSprm) = delete; + virtual ~OOXMLProperty() override; + + sal_uInt32 getId() const override; + Value::Pointer_t getValue() override; + writerfilter::Reference<Properties>::Pointer_t getProps() override; +#ifdef DBG_UTIL + std::string getName() const override; + std::string toString() const override; +#endif + void resolve(Properties& rProperties); +}; + +class OOXMLBinaryValue : public OOXMLValue +{ + mutable OOXMLBinaryObjectReference::Pointer_t mpBinaryObj; + +public: + explicit OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t const& pBinaryObj); + virtual ~OOXMLBinaryValue() override; + + virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLBooleanValue : public OOXMLValue +{ + bool mbValue; + explicit OOXMLBooleanValue(bool bValue); + +public: + static OOXMLValue::Pointer_t const& Create(bool bValue); + static OOXMLValue::Pointer_t const& Create(const char* pValue); + + virtual ~OOXMLBooleanValue() override; + + OOXMLBooleanValue(OOXMLBooleanValue const&) = default; + OOXMLBooleanValue(OOXMLBooleanValue&&) = default; + OOXMLBooleanValue& operator=(OOXMLBooleanValue const&) = delete; // due to const mbValue + OOXMLBooleanValue& operator=(OOXMLBooleanValue&&) = delete; // due to const mbValue + + virtual int getInt() const override; + virtual css::uno::Any getAny() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLStringValue : public OOXMLValue +{ + OUString mStr; + +public: + explicit OOXMLStringValue(const OUString& rStr); + virtual ~OOXMLStringValue() override; + + OOXMLStringValue(OOXMLStringValue const&) = default; + OOXMLStringValue(OOXMLStringValue&&) = default; + OOXMLStringValue& operator=(OOXMLStringValue const&) = delete; // due to const mStr + OOXMLStringValue& operator=(OOXMLStringValue&&) = delete; // due to const mStr + + virtual css::uno::Any getAny() const override; + virtual OUString getString() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLInputStreamValue : public OOXMLValue +{ + css::uno::Reference<css::io::XInputStream> mxInputStream; + +public: + explicit OOXMLInputStreamValue(css::uno::Reference<css::io::XInputStream> const& xInputStream); + virtual ~OOXMLInputStreamValue() override; + + virtual css::uno::Any getAny() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLPropertySet : public writerfilter::Reference<Properties> +{ +public: + typedef std::vector<OOXMLProperty::Pointer_t> OOXMLProperties_t; + typedef tools::SvRef<OOXMLPropertySet> Pointer_t; + +private: + OOXMLProperties_t mProperties; + void add(const OOXMLProperty::Pointer_t& pProperty); + +public: + OOXMLPropertySet(); + virtual ~OOXMLPropertySet() override; + + OOXMLPropertySet(OOXMLPropertySet const&) = default; + OOXMLPropertySet(OOXMLPropertySet&&) = default; + OOXMLPropertySet& operator=(OOXMLPropertySet const&) = default; + OOXMLPropertySet& operator=(OOXMLPropertySet&&) = default; + + void resolve(Properties& rHandler) override; + void add(Id id, const OOXMLValue::Pointer_t& pValue, OOXMLProperty::Type_t eType); + void add(const OOXMLPropertySet::Pointer_t& pPropertySet); + OOXMLPropertySet* clone() const; + + OOXMLProperties_t::iterator begin(); + OOXMLProperties_t::iterator end(); + OOXMLProperties_t::const_iterator begin() const; + OOXMLProperties_t::const_iterator end() const; + +#ifdef DBG_UTIL + std::string toString(); +#endif +}; + +class OOXMLValue; + +class OOXMLTable : public writerfilter::Reference<Table> +{ +public: + typedef tools::SvRef<OOXMLValue> ValuePointer_t; + OOXMLTable(); + virtual ~OOXMLTable() override; + + OOXMLTable(OOXMLTable const&) = default; + OOXMLTable(OOXMLTable&&) = default; + OOXMLTable& operator=(OOXMLTable const&) = default; + OOXMLTable& operator=(OOXMLTable&&) = default; + + void resolve(Table& rTable) override; + void add(const ValuePointer_t& pPropertySet); + OOXMLTable* clone() const; + +private: + typedef std::vector<ValuePointer_t> PropertySets_t; + PropertySets_t mPropertySets; +}; + +class OOXMLPropertySetValue : public OOXMLValue +{ + OOXMLPropertySet::Pointer_t mpPropertySet; + +public: + explicit OOXMLPropertySetValue(const OOXMLPropertySet::Pointer_t& pPropertySet); + virtual ~OOXMLPropertySetValue() override; + + OOXMLPropertySetValue(OOXMLPropertySetValue const&) = default; + OOXMLPropertySetValue(OOXMLPropertySetValue&&) = default; + OOXMLPropertySetValue& operator=(OOXMLPropertySetValue const&) + = delete; // due to const mpPropertySet + OOXMLPropertySetValue& operator=(OOXMLPropertySetValue&&) + = delete; // due to const mpPropertySet + + virtual writerfilter::Reference<Properties>::Pointer_t getProperties() override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLIntegerValue : public OOXMLValue +{ + sal_Int32 mnValue; + explicit OOXMLIntegerValue(sal_Int32 nValue); + +public: + static OOXMLValue::Pointer_t Create(sal_Int32 nValue); + virtual ~OOXMLIntegerValue() override; + + OOXMLIntegerValue(OOXMLIntegerValue const&) = default; + OOXMLIntegerValue(OOXMLIntegerValue&&) = default; + OOXMLIntegerValue& operator=(OOXMLIntegerValue const&) = delete; // due to const mnValue + OOXMLIntegerValue& operator=(OOXMLIntegerValue&&) = delete; // due to const mnValue + + virtual int getInt() const override; + virtual css::uno::Any getAny() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLHexValue : public OOXMLValue +{ +protected: + sal_uInt32 mnValue; + +public: + explicit OOXMLHexValue(sal_uInt32 nValue); + explicit OOXMLHexValue(const char* pValue); + virtual ~OOXMLHexValue() override; + + OOXMLHexValue(OOXMLHexValue const&) = default; + OOXMLHexValue(OOXMLHexValue&&) = default; + OOXMLHexValue& operator=(OOXMLHexValue const&) = default; + OOXMLHexValue& operator=(OOXMLHexValue&&) = default; + + virtual int getInt() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLHexColorValue : public OOXMLHexValue +{ +public: + explicit OOXMLHexColorValue(const char* pValue); +}; + +class OOXMLUniversalMeasureValue : public OOXMLValue +{ +private: + int mnValue; + +public: + OOXMLUniversalMeasureValue(const char* pValue, sal_uInt32 npPt); + virtual ~OOXMLUniversalMeasureValue() override; + + OOXMLUniversalMeasureValue(OOXMLUniversalMeasureValue const&) = default; + OOXMLUniversalMeasureValue(OOXMLUniversalMeasureValue&&) = default; + OOXMLUniversalMeasureValue& operator=(OOXMLUniversalMeasureValue const&) = default; + OOXMLUniversalMeasureValue& operator=(OOXMLUniversalMeasureValue&&) = default; + + virtual int getInt() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif +}; + +/// npPt is quotient defining how much units are in 1 pt +template <sal_uInt32 npPt> class OOXMLNthPtMeasureValue : public OOXMLUniversalMeasureValue +{ +public: + explicit OOXMLNthPtMeasureValue(const char* pValue) + : OOXMLUniversalMeasureValue(pValue, npPt) + { + } + virtual OOXMLValue* clone() const override { return new OOXMLNthPtMeasureValue<npPt>(*this); } +}; + +/// Handles OOXML's ST_TwipsMeasure value. +typedef OOXMLNthPtMeasureValue<20> OOXMLTwipsMeasureValue; + +/// Handles OOXML's ST_HpsMeasure value. +typedef OOXMLNthPtMeasureValue<2> OOXMLHpsMeasureValue; + +class OOXMLMeasurementOrPercentValue : public OOXMLValue +{ + int mnValue; + +public: + explicit OOXMLMeasurementOrPercentValue(const char* pValue); + + virtual int getInt() const override; + virtual OOXMLValue* clone() const override { return new OOXMLMeasurementOrPercentValue(*this); } +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif +}; + +class OOXMLShapeValue : public OOXMLValue +{ + css::uno::Reference<css::drawing::XShape> mrShape; + +public: + explicit OOXMLShapeValue(css::uno::Reference<css::drawing::XShape> const& rShape); + virtual ~OOXMLShapeValue() override; + + virtual css::uno::Any getAny() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLStarMathValue : public OOXMLValue +{ + css::uno::Reference<css::embed::XEmbeddedObject> component; + +public: + explicit OOXMLStarMathValue(css::uno::Reference<css::embed::XEmbeddedObject> const& component); + virtual ~OOXMLStarMathValue() override; + + virtual css::uno::Any getAny() const override; +#ifdef DBG_UTIL + virtual std::string toString() const override; +#endif + virtual OOXMLValue* clone() const override; +}; + +class OOXMLPropertySetEntryToString : public Properties +{ + Id mnId; + OUString mStr; + +public: + explicit OOXMLPropertySetEntryToString(Id nId); + virtual ~OOXMLPropertySetEntryToString() override; + + virtual void sprm(Sprm& rSprm) override; + virtual void attribute(Id nId, Value& rValue) override; + + const OUString& getString() const { return mStr; } +}; + +class OOXMLPropertySetEntryToInteger : public Properties +{ + Id mnId; + int mnValue; + +public: + explicit OOXMLPropertySetEntryToInteger(Id nId); + virtual ~OOXMLPropertySetEntryToInteger() override; + + virtual void sprm(Sprm& rSprm) override; + virtual void attribute(Id nId, Value& rValue) override; + + int getValue() const { return mnValue; } +}; + +class OOXMLPropertySetEntryToBool : public Properties +{ + Id mnId; + bool mValue; + +public: + explicit OOXMLPropertySetEntryToBool(Id nId); + virtual ~OOXMLPropertySetEntryToBool() override; + + virtual void sprm(Sprm& rSprm) override; + virtual void attribute(Id nId, Value& rValue) override; + + bool getValue() const { return mValue; } +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx new file mode 100644 index 000000000..1cfd48139 --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx @@ -0,0 +1,448 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "OOXMLStreamImpl.hxx" +#include <oox/core/fasttokenhandler.hxx> + +#include <com/sun/star/embed/XHierarchicalStorageAccess.hpp> +#include <com/sun/star/uri/UriReferenceFactory.hpp> +#include <comphelper/storagehelper.hxx> + +namespace writerfilter::ooxml +{ + +using namespace com::sun::star; + +OOXMLStreamImpl::OOXMLStreamImpl +(uno::Reference<uno::XComponentContext> const & xContext, + uno::Reference<io::XInputStream> const & xStorageStream, + StreamType_t nType, bool bRepairStorage) +: mxContext(xContext), mxStorageStream(xStorageStream), mnStreamType(nType) +{ + mxStorage.set + (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream + (OFOPXML_STORAGE_FORMAT_STRING, mxStorageStream, xContext, bRepairStorage)); + mxRelationshipAccess.set(mxStorage, uno::UNO_QUERY_THROW); + + init(); +} + +OOXMLStreamImpl::OOXMLStreamImpl +(OOXMLStreamImpl const & rOOXMLStream, StreamType_t nStreamType) +: mxContext(rOOXMLStream.mxContext), + mxStorageStream(rOOXMLStream.mxStorageStream), + mxStorage(rOOXMLStream.mxStorage), + mnStreamType(nStreamType), + msPath(rOOXMLStream.msPath) +{ + mxRelationshipAccess.set(rOOXMLStream.mxDocumentStream, uno::UNO_QUERY_THROW); + + init(); +} + +OOXMLStreamImpl::OOXMLStreamImpl +(OOXMLStreamImpl const & rOOXMLStream, const OUString & rId) +: mxContext(rOOXMLStream.mxContext), + mxStorageStream(rOOXMLStream.mxStorageStream), + mxStorage(rOOXMLStream.mxStorage), + mnStreamType(UNKNOWN), + msId(rId), + msPath(rOOXMLStream.msPath) +{ + mxRelationshipAccess.set(rOOXMLStream.mxDocumentStream, uno::UNO_QUERY_THROW); + + init(); +} + +OOXMLStreamImpl::~OOXMLStreamImpl() +{ +} + +const OUString & OOXMLStreamImpl::getTarget() const +{ + return msTarget; +} + +bool OOXMLStreamImpl::lcl_getTarget(const uno::Reference<embed::XRelationshipAccess>& + xRelationshipAccess, + StreamType_t nStreamType, + const OUString & rId, + OUString & rDocumentTarget) +{ + static const char sId[] = "Id"; + static const char sTarget[] = "Target"; + static const char sTargetMode[] = "TargetMode"; + static const char sExternal[] = "External"; + if (maIdCache.empty()) + { + // Cache is empty? Then let's build it! + const uno::Sequence< uno::Sequence<beans::StringPair> >aSeqs = xRelationshipAccess->getAllRelationships(); + for (const uno::Sequence<beans::StringPair>& rSeq : aSeqs) + { + OUString aId; + OUString aTarget; + bool bExternal = false; + for (const beans::StringPair& rPair : rSeq) + { + if (rPair.First == sId) + aId = rPair.Second; + else if (rPair.First == sTarget) + aTarget = rPair.Second; + else if (rPair.First == sTargetMode && rPair.Second == sExternal) + bExternal = true; + } + // Only cache external targets, internal ones are more complex (see below) + if (bExternal || aTarget.startsWith("#")) + maIdCache[aId] = aTarget; + } + } + + if (maIdCache.find(rId) != maIdCache.end()) + { + rDocumentTarget = maIdCache[rId]; + return true; + } + + bool bFound = false; + static uno::Reference<uri::XUriReferenceFactory> xFac = uri::UriReferenceFactory::create(mxContext); + // use '/' to representent the root of the zip package ( and provide a 'file' scheme to + // keep the XUriReference implementation happy ) + // add mspath to represent the 'source' of this stream + uno::Reference<uri::XUriReference> xBase = xFac->parse("file:///" + msPath); + + static const char sType[] = "Type"; + static const OUStringLiteral sDocumentType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; + static const OUStringLiteral sStylesType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"; + static const OUStringLiteral sNumberingType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"; + static const OUStringLiteral sFonttableType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"; + static const OUStringLiteral sFootnotesType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"; + static const OUStringLiteral sEndnotesType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"; + static const OUStringLiteral sCommentsType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"; + static const OUStringLiteral sThemeType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"; + static const OUStringLiteral sCustomType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"; + static const OUStringLiteral sCustomPropsType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps"; + static const OUStringLiteral sGlossaryType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument"; + static const OUStringLiteral sWebSettings = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings"; + static const OUStringLiteral sSettingsType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"; + static const OUStringLiteral sChartType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"; + static const OUStringLiteral sEmbeddingsType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"; + static const OUStringLiteral sFooterType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"; + static const OUStringLiteral sHeaderType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"; + static const OUStringLiteral sOleObjectType = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"; + static const OUStringLiteral sCommentsExtendedType = u"http://schemas.microsoft.com/office/2011/relationships/commentsExtended"; + // OOXML strict + static const OUStringLiteral sDocumentTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument"; + static const OUStringLiteral sStylesTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/styles"; + static const OUStringLiteral sNumberingTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/numbering"; + static const OUStringLiteral sFonttableTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable"; + static const OUStringLiteral sFootnotesTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/footnotes"; + static const OUStringLiteral sEndnotesTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/endnotes"; + static const OUStringLiteral sCommentsTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/comments"; + static const OUStringLiteral sThemeTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/theme"; + static const OUStringLiteral sCustomTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/customXml"; + static const OUStringLiteral sCustomPropsTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/customXmlProps"; + static const OUStringLiteral sGlossaryTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/glossaryDocument"; + static const OUStringLiteral sWebSettingsStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings"; + static const OUStringLiteral sSettingsTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/settings"; + static const OUStringLiteral sChartTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/chart"; + static const OUStringLiteral sEmbeddingsTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/package"; + static const OUStringLiteral sFootersTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/footer"; + static const OUStringLiteral sHeaderTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/header"; + static const OUStringLiteral sOleObjectTypeStrict = u"http://purl.oclc.org/ooxml/officeDocument/relationships/oleObject"; + static const OUStringLiteral sVBAProjectType = u"http://schemas.microsoft.com/office/2006/relationships/vbaProject"; + static const OUStringLiteral sVBADataType = u"http://schemas.microsoft.com/office/2006/relationships/wordVbaData"; + + OUString sStreamType; + OUString sStreamTypeStrict; + + switch (nStreamType) + { + case VBAPROJECT: + sStreamType = sVBAProjectType; + sStreamTypeStrict = sVBAProjectType; + break; + case VBADATA: + sStreamType = sVBADataType; + sStreamTypeStrict = sVBADataType; + break; + case DOCUMENT: + sStreamType = sDocumentType; + sStreamTypeStrict = sDocumentTypeStrict; + break; + case STYLES: + sStreamType = sStylesType; + sStreamTypeStrict = sStylesTypeStrict; + break; + case NUMBERING: + sStreamType = sNumberingType; + sStreamTypeStrict = sNumberingTypeStrict; + break; + case FONTTABLE: + sStreamType = sFonttableType; + sStreamTypeStrict = sFonttableTypeStrict; + break; + case FOOTNOTES: + sStreamType = sFootnotesType; + sStreamTypeStrict = sFootnotesTypeStrict; + break; + case ENDNOTES: + sStreamType = sEndnotesType; + sStreamTypeStrict = sEndnotesTypeStrict; + break; + case COMMENTS: + sStreamType = sCommentsType; + sStreamTypeStrict = sCommentsTypeStrict; + break; + case THEME: + sStreamType = sThemeType; + sStreamTypeStrict = sThemeTypeStrict; + break; + case CUSTOMXML: + sStreamType = sCustomType; + sStreamTypeStrict = sCustomTypeStrict; + break; + case CUSTOMXMLPROPS: + sStreamType = sCustomPropsType; + sStreamTypeStrict = sCustomPropsTypeStrict; + break; + case SETTINGS: + sStreamType = sSettingsType; + sStreamTypeStrict = sSettingsTypeStrict; + break; + case GLOSSARY: + sStreamType = sGlossaryType; + sStreamTypeStrict = sGlossaryTypeStrict; + break; + case WEBSETTINGS: + sStreamType = sWebSettings; + sStreamTypeStrict = sWebSettingsStrict; + break; + case CHARTS: + sStreamType = sChartType; + sStreamTypeStrict = sChartTypeStrict; + break; + case EMBEDDINGS: + sStreamType = sEmbeddingsType; + sStreamTypeStrict = sEmbeddingsTypeStrict; + break; + case FOOTER: + sStreamType = sFooterType; + sStreamTypeStrict = sFootersTypeStrict; + break; + case HEADER: + sStreamType = sHeaderType; + sStreamTypeStrict = sHeaderTypeStrict; + break; + case COMMENTS_EXTENDED: + sStreamType = sCommentsExtendedType; + sStreamTypeStrict = sCommentsExtendedType; + break; + default: + break; + } + + if (xRelationshipAccess.is()) + { + const uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs = + xRelationshipAccess->getAllRelationships(); + + for (const uno::Sequence< beans::StringPair > &rSeq : aSeqs) + { + bool bExternalTarget = false; + OUString sMyTarget; + for (const beans::StringPair &rPair : rSeq) + { + if (rPair.First == sType && + ( rPair.Second == sStreamType || + rPair.Second == sStreamTypeStrict )) + bFound = true; + else if(rPair.First == sType && + ((rPair.Second == sOleObjectType || + rPair.Second == sOleObjectTypeStrict) && + nStreamType == EMBEDDINGS)) + { + bFound = true; + } + else if (rPair.First == sId && + rPair.Second == rId) + bFound = true; + else if (rPair.First == sTarget) + { + // checking item[n].xml is not visited already. + if(customTarget != rPair.Second && (sStreamType == sCustomType || sStreamType == sChartType || sStreamType == sFooterType || sStreamType == sHeaderType)) + { + bFound = false; + } + else + { + sMyTarget = rPair.Second; + } + } + else if (rPair.First == sTargetMode && + rPair.Second == sExternal) + bExternalTarget = true; + } + + if (bFound) + { + if (bExternalTarget) + rDocumentTarget = sMyTarget; + else + { + // 'Target' is a relative Uri, so a 'Target=/path' + // with a base Uri of file://base/foo will resolve to + // file://base/word. We need something more than some + // simple string concatenation here to handle that. + uno::Reference<uri::XUriReference> xPart = xFac->parse(sMyTarget); + uno::Reference<uri::XUriReference> xAbs = xFac->makeAbsolute(xBase, xPart, true, uri::RelativeUriExcessParentSegments_RETAIN); + if (!xAbs) + { + //it was invalid gibberish + bFound = false; + } + else + { + rDocumentTarget = xAbs->getPath(); + // path will start with the fragment separator. need to + // remove that + rDocumentTarget = rDocumentTarget.copy( 1 ); + if(sStreamType == sEmbeddingsType) + embeddingsTarget = rDocumentTarget; + } + } + + break; + } + } + } + + return bFound; +} + +OUString OOXMLStreamImpl::getTargetForId(const OUString & rId) +{ + OUString sTarget; + + uno::Reference<embed::XRelationshipAccess> xRelationshipAccess + (mxDocumentStream, uno::UNO_QUERY_THROW); + + if (lcl_getTarget(xRelationshipAccess, UNKNOWN, rId, sTarget)) + return sTarget; + + return OUString(); +} + +void OOXMLStreamImpl::init() +{ + bool bFound = lcl_getTarget(mxRelationshipAccess, + mnStreamType, msId, msTarget); + + if (!bFound) + return; + + sal_Int32 nLastIndex = msTarget.lastIndexOf('/'); + if (nLastIndex >= 0) + msPath = msTarget.copy(0, nLastIndex + 1); + + uno::Reference<embed::XHierarchicalStorageAccess> + xHierarchicalStorageAccess(mxStorage, uno::UNO_QUERY); + + if (xHierarchicalStorageAccess.is()) + { + uno::Any aAny(xHierarchicalStorageAccess-> + openStreamElementByHierarchicalName + (msTarget, embed::ElementModes::SEEKABLEREAD)); + aAny >>= mxDocumentStream; + // Non-cached ID lookup works by accessing mxDocumentStream as an embed::XRelationshipAccess. + // So when it changes, we should empty the cache. + maIdCache.clear(); + } +} + +uno::Reference<io::XInputStream> OOXMLStreamImpl::getDocumentStream() +{ + uno::Reference<io::XInputStream> xResult; + + if (mxDocumentStream.is()) + xResult = mxDocumentStream->getInputStream(); + + return xResult; +} + +uno::Reference<uno::XComponentContext> OOXMLStreamImpl::getContext() +{ + return mxContext; +} + +uno::Reference <xml::sax::XFastTokenHandler> OOXMLStreamImpl::getFastTokenHandler() +{ + if (! mxFastTokenHandler.is()) + mxFastTokenHandler.set(new oox::core::FastTokenHandler()); + + return mxFastTokenHandler; +} + +OOXMLStream::Pointer_t +OOXMLDocumentFactory::createStream +(const uno::Reference<uno::XComponentContext>& xContext, + const uno::Reference<io::XInputStream>& rStream, + bool bRepairStorage) +{ + OOXMLStreamImpl * pStream = new OOXMLStreamImpl(xContext, rStream, + OOXMLStream::DOCUMENT, bRepairStorage); + return OOXMLStream::Pointer_t(pStream); +} + +OOXMLStream::Pointer_t +OOXMLDocumentFactory::createStream +(const OOXMLStream::Pointer_t& pStream, OOXMLStream::StreamType_t nStreamType) +{ + OOXMLStream::Pointer_t pRet; + + if (nStreamType != OOXMLStream::VBADATA) + { + if (OOXMLStreamImpl* pImpl = dynamic_cast<OOXMLStreamImpl *>(pStream.get())) + pRet = new OOXMLStreamImpl(*pImpl, nStreamType); + } + else + { + // VBADATA is not a relation of the document, but of the VBAPROJECT stream. + if (OOXMLStreamImpl* pImpl = dynamic_cast<OOXMLStreamImpl *>(pStream.get())) + { + OOXMLStreamImpl aProject(*pImpl, OOXMLStream::VBAPROJECT); + pRet = new OOXMLStreamImpl(aProject, OOXMLStream::VBADATA); + } + } + + return pRet; +} + +OOXMLStream::Pointer_t +OOXMLDocumentFactory::createStream +(const OOXMLStream::Pointer_t& pStream, const OUString & rId) +{ + OOXMLStream::Pointer_t pRet; + if (OOXMLStreamImpl* pImpl = dynamic_cast<OOXMLStreamImpl *>(pStream.get())) + pRet = new OOXMLStreamImpl(*pImpl, rId); + return pRet; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx new file mode 100644 index 000000000..e09db3c4f --- /dev/null +++ b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx @@ -0,0 +1,83 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <map> + +#include <ooxml/OOXMLDocument.hxx> +#include <com/sun/star/embed/XRelationshipAccess.hpp> + +extern OUString customTarget; +extern OUString embeddingsTarget; + +namespace writerfilter::ooxml +{ + +class OOXMLStreamImpl : public OOXMLStream +{ + void init(); + + css::uno::Reference<css::uno::XComponentContext> mxContext; + css::uno::Reference<css::io::XInputStream> mxStorageStream; + css::uno::Reference<css::embed::XStorage> mxStorage; + css::uno::Reference<css::embed::XRelationshipAccess> mxRelationshipAccess; + css::uno::Reference<css::io::XStream> mxDocumentStream; + css::uno::Reference<css::xml::sax::XFastParser> mxFastParser; + css::uno::Reference<css::xml::sax::XFastTokenHandler> mxFastTokenHandler; + + StreamType_t mnStreamType; + + OUString msId; + OUString msPath; + OUString msTarget; + + /// Cache holding an Id <-> Target map of external relations. + std::map<OUString, OUString> maIdCache; + + bool lcl_getTarget(const css::uno::Reference<css::embed::XRelationshipAccess>& xRelationshipAccess, + StreamType_t nStreamType, + const OUString & rId, + OUString & rDocumentTarget); +public: + typedef tools::SvRef<OOXMLStreamImpl> Pointer_t; + + OOXMLStreamImpl + (OOXMLStreamImpl const & rStream, StreamType_t nType); + OOXMLStreamImpl + (css::uno::Reference<css::uno::XComponentContext> const & xContext, + css::uno::Reference<css::io::XInputStream> const & xStorageStream, + StreamType_t nType, bool bRepairStorage); + OOXMLStreamImpl(OOXMLStreamImpl const & rStream, const OUString & rId); + + virtual ~OOXMLStreamImpl() override; + + virtual css::uno::Reference<css::xml::sax::XFastParser> getFastParser() override; + virtual css::uno::Reference<css::io::XInputStream> getDocumentStream() override; + virtual css::uno::Reference<css::uno::XComponentContext> getContext() override; + virtual OUString getTargetForId(const OUString & rId) override; + virtual const OUString & getTarget() const override; + + virtual css::uno::Reference<css::xml::sax::XFastTokenHandler> getFastTokenHandler() override; + + // Giving access to mxDocumentStream. It is needed by resolving custom xml to get list of customxml's used in document. + const css::uno::Reference<css::io::XStream>& accessDocumentStream() { return mxDocumentStream;} +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/README b/writerfilter/source/ooxml/README new file mode 100644 index 000000000..c72b341ae --- /dev/null +++ b/writerfilter/source/ooxml/README @@ -0,0 +1,13 @@ += DOCX tokenizer + +== Coding style + +This directory uses the PEP 8 (see +<http://legacy.python.org/dev/peps/pep-0008/>) coding style for Python files. +Please run + +---- +pycodestyle *.py +---- + +before committing. diff --git a/writerfilter/source/ooxml/factory_ns.py b/writerfilter/source/ooxml/factory_ns.py new file mode 100644 index 000000000..1d9924e23 --- /dev/null +++ b/writerfilter/source/ooxml/factory_ns.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from xml.dom import minidom +import sys + + +def createHeader(model, ns): + nsToken = ns.replace('-', '_') + print(""" +#ifndef INCLUDED_OOXML_FACTORY_%s_HXX +#define INCLUDED_OOXML_FACTORY_%s_HXX +#include "ooxml/OOXMLFactory.hxx" +#include "OOXMLFactory_generated.hxx" +#include "oox/token/namespaces.hxx" +#include "ooxml/resourceids.hxx" +#include "tools/ref.hxx" + +namespace writerfilter { +namespace ooxml { + +/// @cond GENERATED +""" % (nsToken.upper(), nsToken.upper())) + + print("""class OOXMLFactory_%s : public OOXMLFactory_ns +{ +public: + typedef tools::SvRef<OOXMLFactory_ns> Pointer_t; + + static Pointer_t getInstance(); + + virtual const AttributeInfo* getAttributeInfoArray(Id nId); + virtual bool getElementId(Id nDefine, Id nId, ResourceType& rOutResource, Id& rOutElement); + virtual bool getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue); + virtual Id getResourceId(Id nDefine, sal_Int32 nToken); +""" % nsToken) + + actions = [] + for nsNode in [i for i in model.getElementsByTagName("namespace") if i.getAttribute("name") == ns]: + for resource in nsNode.getElementsByTagName("resource"): + for action in [i.getAttribute("name") for i in resource.childNodes if i.nodeType == minidom.Node.ELEMENT_NODE and i.tagName == "action"]: + if action != "characters" and action not in actions: + actions.append(action) + for action in actions: + print(" void %sAction(OOXMLFastContextHandler* pHandler);" % action) + + print("""virtual void charactersAction(OOXMLFastContextHandler* pHandler, const OUString & sText); + virtual void attributeAction(OOXMLFastContextHandler* pHandler, Token_t nToken, const OOXMLValue::Pointer_t& pValue); + + virtual ~OOXMLFactory_%s(); + +protected: + static Pointer_t m_pInstance; + + OOXMLFactory_%s(); +}; +""" % (nsToken, nsToken)) + + print("""/// @endcond +}} +#endif //INCLUDED_OOXML_FACTORY_%s_HXX""" % nsToken.upper()) + + +modelPath = sys.argv[1] +filePath = sys.argv[2] +model = minidom.parse(modelPath) +ns = filePath.split('OOXMLFactory_')[1].split('.hxx')[0] +createHeader(model, ns) + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/factoryimpl.py b/writerfilter/source/ooxml/factoryimpl.py new file mode 100644 index 000000000..c68d5ba06 --- /dev/null +++ b/writerfilter/source/ooxml/factoryimpl.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from xml.dom import minidom +import sys + + +def getElementsByTagNamesNS(parent, ns, names, ret=minidom.NodeList()): + for node in parent.childNodes: + if node.nodeType == minidom.Node.ELEMENT_NODE and node.namespaceURI == ns and node.tagName in names: + ret.append(node) + getElementsByTagNamesNS(node, ns, names, ret) + return ret + + +def createFastChildContextFromFactory(model): + print("""uno::Reference<xml::sax::XFastContextHandler> OOXMLFactory::createFastChildContextFromFactory +(OOXMLFastContextHandler* pHandler, OOXMLFactory_ns::Pointer_t pFactory, Token_t Element) +{ + uno::Reference <xml::sax::XFastContextHandler> aResult; + const Id nDefine = pHandler->getDefine(); + + if (pFactory.get() != NULL) + { + ResourceType nResource; + Id nElementId; + if (pFactory->getElementId(nDefine, Element, nResource, nElementId)) + { + const Id nId = pFactory->getResourceId(nDefine, Element); + + switch (nResource) + {""") + resources = [ + "List", "Integer", "Hex", "HexColor", "String", + "TwipsMeasure_asSigned", "TwipsMeasure_asZero", + "HpsMeasure", "Boolean", "MeasurementOrPercent", + ] + for resource in [r.getAttribute("resource") for r in model.getElementsByTagName("resource")]: + if resource not in resources: + resources.append(resource) + print(""" case ResourceType::%s: + aResult.set(OOXMLFastHelper<OOXMLFastContextHandler%s>::createAndSetParentAndDefine(pHandler, Element, nId, nElementId)); + break;""" % (resource, resource)) + print(""" case ResourceType::Any: + aResult.set(createFastChildContextFromStart(pHandler, Element)); + break; + default: + break; + } + + } + } + + return aResult; +} +""") + + +def getFactoryForNamespace(model): + print("""OOXMLFactory_ns::Pointer_t OOXMLFactory::getFactoryForNamespace(Id nId) +{ + OOXMLFactory_ns::Pointer_t pResult; + + switch (oox::getNamespace(nId)) + {""") + + for namespace in [ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]: + id = namespace.replace('-', '_') + print(""" case NN_%s: + pResult = OOXMLFactory_%s::getInstance(); + break;""" % (id, id)) + print(""" default: + break; + } + + return pResult; +} +""") + + +def createFastChildContextFromStart(model): + print("""uno::Reference<xml::sax::XFastContextHandler> OOXMLFactory::createFastChildContextFromStart +(OOXMLFastContextHandler* pHandler, Token_t Element) +{ + uno::Reference<xml::sax::XFastContextHandler> aResult; + OOXMLFactory_ns::Pointer_t pFactory; + +""") + + for namespace in [ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]: + id = namespace.replace('-', '_') + print(""" if (!aResult.is()) + { + pFactory = getFactoryForNamespace(NN_%s); + aResult.set(createFastChildContextFromFactory(pHandler, pFactory, Element)); + }""" % id) + + print(""" + return aResult; +} +""") + + +def fastTokenToId(model): + print(""" +std::string fastTokenToId(sal_uInt32 nToken) +{ + std::string sResult; +#ifdef DBG_UTIL + + switch (oox::getNamespace(nToken)) + {""") + + aliases = [] + for alias in sorted(ooxUrlAliases.values()): + if alias not in aliases: + aliases.append(alias) + print(""" case oox::NMSP_%s: + sResult += "%s:"; + break;""" % (alias, alias)) + print(""" } + + switch (nToken & 0xffff) + {""") + + tokens = [""] + for token in [t.getAttribute("localname") for t in getElementsByTagNamesNS(model, "http://relaxng.org/ns/structure/1.0", ["element", "attribute"])]: + if token not in tokens: + tokens.append(token) + print(""" case oox::XML_%s: + sResult += "%s"; + break;""" % (token, token)) + + print(""" } +#else + (void)nToken; +#endif + return sResult; +} +""") + + +def getFastParser(): + print("""uno::Reference <xml::sax::XFastParser> OOXMLStreamImpl::getFastParser() +{ + if (!mxFastParser.is()) + { + mxFastParser = css::xml::sax::FastParser::create(mxContext); + // the threaded parser is about 20% slower loading writer documents + css::uno::Reference< css::lang::XInitialization > xInit( mxFastParser, css::uno::UNO_QUERY_THROW ); + css::uno::Sequence< css::uno::Any > args{ css::uno::Any(OUString("DisableThreadedParser")) }; + xInit->initialize(args); +""") + for url in sorted(ooxUrlAliases.keys()): + print(""" mxFastParser->registerNamespace("%s", oox::NMSP_%s);""" % (url, ooxUrlAliases[url])) + print(""" } + + return mxFastParser; +} + +/// @endcond +}}""") + + +def createImpl(model): + print(""" +#include <com/sun/star/xml/sax/FastParser.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include "ooxml/OOXMLFactory.hxx" +#include "ooxml/OOXMLFastHelper.hxx" +#include "ooxml/OOXMLStreamImpl.hxx" +""") + + for namespace in [ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]: + print('#include "OOXMLFactory_%s.hxx"' % namespace) + + print("""namespace writerfilter { +namespace ooxml { + +using namespace com::sun::star; + +/// @cond GENERATED +""") + + createFastChildContextFromFactory(model) + getFactoryForNamespace(model) + createFastChildContextFromStart(model) + fastTokenToId(model) + getFastParser() + + +def parseNamespaces(fro): + sock = open(fro) + for i in sock.readlines(): + line = i.strip() + alias, url = line.split(' ')[1:] # first column is ID, not interesting for us + ooxUrlAliases[url] = alias + sock.close() + + +namespacesPath = sys.argv[1] +ooxUrlAliases = {} +parseNamespaces(namespacesPath) +modelPath = sys.argv[2] +model = minidom.parse(modelPath) +createImpl(model) + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/factoryimpl_ns.py b/writerfilter/source/ooxml/factoryimpl_ns.py new file mode 100644 index 000000000..b17e0c8ff --- /dev/null +++ b/writerfilter/source/ooxml/factoryimpl_ns.py @@ -0,0 +1,767 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from xml.dom import minidom +import sys + + +# factoryMutexDecl + + +def factoryMutexDecl(nsLabel): + print("typedef rtl::Static<osl::Mutex, OOXMLFactory_%s> OOXMLFactory_%s_Mutex;" % (nsLabel, nsLabel)) + print() + + +# factoryConstructor + + +def factoryConstructor(nsLabel): + print("""OOXMLFactory_%s::OOXMLFactory_%s() +{ + // multi-thread-safe mutex for all platforms + + osl::MutexGuard aGuard(OOXMLFactory_%s_Mutex::get()); +}""" % (nsLabel, nsLabel, nsLabel)) + print() + + +# factoryDestructor + + +def factoryDestructor(nsLabel): + print("""OOXMLFactory_%s::~OOXMLFactory_%s() +{ +}""" % (nsLabel, nsLabel)) + print() + + +# factoryGetInstance + + +def factoryGetInstance(nsLabel): + print("""OOXMLFactory_ns::Pointer_t OOXMLFactory_%s::m_pInstance; + +OOXMLFactory_ns::Pointer_t OOXMLFactory_%s::getInstance() +{ + if (!m_pInstance) + m_pInstance = new OOXMLFactory_%s(); + + return m_pInstance; +}""" % (nsLabel, nsLabel, nsLabel)) + print() + + +# factoryAttributeToResourceMap + + +def nsToLabel(nsNode): + return nsNode.getAttribute("name").replace('-', '_') + + +def getChildByName(parentNode, childName): + elementNodes = [i for i in parentNode.childNodes if i.localName == childName] + assert len(elementNodes) == 1 + return elementNodes[0] + + +def resourceForAttribute(nsNode, attrNode): + resourceName = "" + + for refNode in getChildrenByName(attrNode, "ref"): + refName = refNode.getAttribute("name") + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == refName]: + resourceName = resourceNode.getAttribute("resource") + break + if not len(resourceName): + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + resourceName = resourceForAttribute(nsNode, define) + break + if len(resourceName): + break + + if not len(resourceName): + if len([i for i in attrNode.getElementsByTagName("data") if i.getAttribute("type") in ("base64Binary", "string")]): + resourceName = "String" + elif len([i for i in attrNode.getElementsByTagName("data") if i.getAttribute("type") == "boolean"]): + resourceName = "Boolean" + elif len([i for i in attrNode.getElementsByTagName("data") if i.getAttribute("type") in ("unsignedInt", "integer", "int")]): + resourceName = "Integer" + else: + dataNodes = attrNode.getElementsByTagName("data") + if len(dataNodes): + t = dataNodes[0].getAttribute("type") + # Denylist existing unexpected data types. + if t not in ("token", "long", "decimal", "float", "byte", "ST_DecimalNumber", "positiveInteger"): + raise Exception("unexpected data type: " + dataNodes[0].getAttribute("type")) + return resourceName + + +def idForNamespace(nsNode): + return "NN_%s" % nsNode.getAttribute("name").replace('-', '_') + + +def localIdForDefine(defineNode): + return "DEFINE_%s" % defineNode.getAttribute("name") + + +def idForDefine(nsNode, defineNode): + return "%s|%s" % (idForNamespace(nsNode), localIdForDefine(defineNode)) + + +def fastNamespace(attrNode): + return "oox::NMSP_%s" % attrNode.getAttribute("prefix") + + +def fastLocalName(attrNode): + if len(attrNode.getAttribute("localname")): + return "oox::XML_%s" % attrNode.getAttribute("localname") + else: + return "oox::XML_TOKEN_COUNT" + + +def fastToken(attrNode): + ret = [] + if len(attrNode.getAttribute("prefix")): + ret.append("%s|" % fastNamespace(attrNode)) + ret.append(fastLocalName(attrNode)) + return "".join(ret) + + +def collectAttributeToResource(nsNode, defineNode): + ret_dict = {} + ret_order = [] + for refNode in getChildrenByName(defineNode, "ref"): + refName = refNode.getAttribute("name") + parent = refNode.parentNode + if parent.localName in ("element", "attribute"): + continue + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + ret = collectAttributeToResource(nsNode, define) + ret_dict.update(ret[0]) + ret_order.extend(ret[1]) + + attrNodes = defineNode.getElementsByTagName("attribute") + for attrNode in attrNodes: + attrToken = fastToken(attrNode) + resourceName = resourceForAttribute(nsNode, attrNode) + refDefine = "0" + if len(resourceName): + for refNode in attrNode.getElementsByTagName("ref"): + refName = refNode.getAttribute("name") + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + refDefine = idForDefine(nsNode, define) + ret_dict[attrToken] = "ResourceType::%s, %s" % (resourceName, refDefine) + ret_order.append(attrToken) + + return [ret_dict, ret_order] + + +def factoryAttributeToResourceMapInner(nsNode, defineNode): + ret = [] + attributes = collectAttributeToResource(nsNode, defineNode) + already_used = set() + for k in attributes[1]: + if not (k in already_used): + ret.append(" { %s, %s }," % (k, attributes[0][k])) + already_used.add(k) + + return ret + + +def factoryAttributeToResourceMap(nsNode): + print("""const AttributeInfo* OOXMLFactory_%s::getAttributeInfoArray(Id nId) +{ + switch (nId) + {""" % nsToLabel(nsNode)) + for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"): + inner = "\n".join(factoryAttributeToResourceMapInner(nsNode, defineNode)) + if len(inner): + print(" case %s:" % idForDefine(nsNode, defineNode)) + print(" {") + print(" const static AttributeInfo info[] = {") + print(inner) + print(" { -1, ResourceType::NoResource, 0 }") + print(" };") + print(" return info;") + print(" }") + print(" break;") + + print(""" default: + break; + } + + return NULL; +}""") + print() + + +# factoryGetListValue + + +def idToLabel(idName): + ns, ln = idName.split(':') + return "NS_%s::LN_%s" % (ns, ln) + + +def appendValueData(values, name, value): + first = name[0:1] + + if not (first in values): + values[first] = [] + + values[first].append([name, value]) + + +def printValueData(values): + if "" in values: + output_else = "" + for i in values[""]: + print(" %sif (rValue == \"%s\") { rOutValue = %s; return true; }" % (output_else, i[0], i[1])) + output_else = "else " + print(" else switch (rValue[0])") + else: + print(" if (rValue.isEmpty())") + print(" return false;") + print(" switch (rValue[0])") + + print(" {") + for k in sorted(values.keys()): + if k != "": + print(" case '%s':" % k) + output_else = "" + for i in values[k]: + print(" %sif (rValue == \"%s\") { rOutValue = %s; }" % (output_else, i[0], i[1])) + output_else = "else " + print(" else { return false; }") + print(" return true;") + print(" }") + + +def factoryGetListValue(nsNode): + print("""bool OOXMLFactory_%s::getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue) +{ + (void) rValue; + (void) rOutValue; + + switch (nId) + {""" % nsToLabel(nsNode)) + + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("resource") == "List"]: + print(" case %s:" % idForDefine(nsNode, resourceNode)) + values = {} + for valueNode in getChildrenByName(resourceNode, "value"): + valueData = "" + if len(valueNode.childNodes): + valueData = valueNode.childNodes[0].data + appendValueData(values, valueData, idToLabel(valueNode.getAttribute("tokenid"))) + printValueData(values) + print(" return false;") + + print(""" default: + break; + } + + return false; +} +""") + + +# factoryCreateElementMap + + +def contextResource(files, nsNode, refNode): + refName = refNode.getAttribute("name") + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == refName]: + return resourceNode.getAttribute("resource") + + for includeNode in getChildrenByName(getChildByName(nsNode, "grammar"), "include"): + namespaceNode = files[includeNode.getAttribute("href")] + for resourceNode in [i for i in getChildrenByName(namespaceNode, "resource") if i.getAttribute("name") == refName]: + return resourceNode.getAttribute("resource") + + if refName == "BUILT_IN_ANY_TYPE": + return "Any" + else: + for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"): + for resourceNode in [i for i in getChildrenByName(namespaceNode, "resource") if i.getAttribute("name") == refName]: + return resourceNode.getAttribute("resource") + return "" + + +def idForRef(nsNode, refNode): + refName = refNode.getAttribute("name") + result1 = "" + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + result1 = idForDefine(nsNode, define) + if refName == "BUILT_IN_ANY_TYPE": + return "0" + elif result1 == "": + for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"): + for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]: + return idForDefine(namespaceNode, define) + else: + return result1 + + +def factoryCreateElementMapInner(files, nsNode, defineNode, resourceNamespaceNode=None): + if not resourceNamespaceNode: + resourceNamespaceNode = nsNode + ret = {} + for refNode in defineNode.getElementsByTagName("ref"): + parent = refNode.parentNode + if parent.localName in ("element", "attribute"): + continue + refName = refNode.getAttribute("name") + + block = {} + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + block = factoryCreateElementMapInner(files, nsNode, define) + + if len(block) == 0: + block1 = {} + for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"): + for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]: + block1.update(factoryCreateElementMapInner(files, namespaceNode, define, nsNode)) + else: + block1 = block + + if len(block1): + ret.update(block1) + + for elementNode in defineNode.getElementsByTagName("element"): + resource = "" + for refNode in getChildrenByName(elementNode, "ref"): + refName = refNode.getAttribute("name") + resource = contextResource(files, resourceNamespaceNode, refNode) + if len(resource): + break + if len(resource): + ret[fastToken(elementNode)] = " case %s: rOutResource = ResourceType::%s; rOutElement = %s; break;" % (fastToken(elementNode), resource, idForRef(nsNode, getChildByName(elementNode, "ref"))) + + return ret + + +def factoryCreateElementMapFromStart(files, nsNode): + for startNode in getChildrenByName(nsNode, "start"): + startName = startNode.getAttribute("name") + block = None + for defineNode in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == startName]: + block = factoryCreateElementMapInner(files, nsNode, defineNode) + print(" /* start: %s*/" % startName) + if block: + for k in block.keys(): + print(block[k]) + + +def factoryCreateElementMap(files, nsNode): + print("""bool OOXMLFactory_%s::getElementId(Id nDefine, Id nId, ResourceType& rOutResource, Id& rOutElement) +{ + (void) rOutResource; + (void) rOutElement; + + switch (nDefine) + {""" % nsToLabel(nsNode)) + + for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"): + inner = factoryCreateElementMapInner(files, nsNode, defineNode) + if len(inner): + print(" case %s:" % idForDefine(nsNode, defineNode)) + print(" switch (nId)") + print(" {") + for k in sorted(inner.keys()): + print(inner[k]) + print(" default: return false;") + print(" }") + print(" return true;") + print(" default:") + print(" switch (nId)") + print(" {") + factoryCreateElementMapFromStart(files, nsNode) + print(""" default: return false; + } + return true; + } +} +""") + + +# factoryActions + + +def charactersActionForValues(nsNode, refNode): + ret = [] + + refName = refNode.getAttribute("name") + for defineNode in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + ret.append(" {") + ret.append(" // %s" % defineNode.getAttribute("name")) + for dataNode in getChildrenByName(defineNode, "data"): + if dataNode.getAttribute("type") == "int": + ret.append(" OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(sText));") + ret.append(" pValueHandler->setValue(pValue);") + ret.append(" }") + + return ret + + +def factoryChooseAction(actionNode): + ret = [] + extra_space = "" + if actionNode.hasAttribute("tokenid"): + ret.append(" if (sal::static_int_cast<Id>(pHandler->getId()) == %s)" % idToLabel(actionNode.getAttribute("tokenid"))) + ret.append(" {") + extra_space = " " + for condNode in getChildrenByName(actionNode, "cond"): + ret.append(" {") + ret.append(" OOXMLPropertySetEntryToInteger aHandler(%s);" % idToLabel(condNode.getAttribute("tokenid"))) + ret.append(" if (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))") + ret.append(" pStream->getPropertySetAttrs()->resolve(aHandler);") + ret.append("") + ret.append(" if (sal::static_int_cast<Id>(aHandler.getValue()) == %s)" % idToLabel(condNode.getAttribute("value"))) + ret.append(" {") + extra_space = " " + + if actionNode.getAttribute("action") in ("handleXNotes", "handleHdrFtr", "handleComment", "handlePicture", "handleBreak", "handleOutOfOrderBreak", "handleOLE", "handleFontRel", "handleHyperlinkURL", "handleAltChunk"): + ret.append(" %sif (OOXMLFastContextHandlerProperties* pProperties = dynamic_cast<OOXMLFastContextHandlerProperties*>(pHandler))" % extra_space) + ret.append(" %s pProperties->%s();" % (extra_space, actionNode.getAttribute("action"))) + elif actionNode.getAttribute("action") == "propagateCharacterPropertiesAsSet": + ret.append(" %spHandler->propagateCharacterPropertiesAsSet(%s);" % (extra_space, idToLabel(actionNode.getAttribute("sendtokenid")))) + elif actionNode.getAttribute("action") in ("startCell", "endCell"): + ret.append(" %sif (OOXMLFastContextHandlerTextTableCell* pTextTableCell = dynamic_cast<OOXMLFastContextHandlerTextTableCell*>(pHandler))" % extra_space) + ret.append(" %s pTextTableCell->%s();" % (extra_space, actionNode.getAttribute("action"))) + elif actionNode.getAttribute("action") in ("startRow", "endRow"): + ret.append(" %sif (OOXMLFastContextHandlerTextTableRow* pTextTableRow = dynamic_cast<OOXMLFastContextHandlerTextTableRow*>(pHandler))" % extra_space) + ret.append(" %s pTextTableRow->%s();" % (extra_space, actionNode.getAttribute("action"))) + elif actionNode.getAttribute("action") == "handleGridAfter": + ret.append(" %sif (OOXMLFastContextHandlerValue* pValueHandler = dynamic_cast<OOXMLFastContextHandlerValue*>(pHandler))" % extra_space) + ret.append(" %s pValueHandler->%s();" % (extra_space, actionNode.getAttribute("action"))) + # tdf#111550 + elif actionNode.getAttribute("action") in ("start_P_Tbl"): + ret.append(" %sif (OOXMLFastContextHandlerTextTable* pTextTable = dynamic_cast<OOXMLFastContextHandlerTextTable*>(pHandler))" % extra_space) + ret.append(" %s pTextTable->%s();" % (extra_space, actionNode.getAttribute("action"))) + elif actionNode.getAttribute("action") in ("sendProperty", "handleHyperlink"): + ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % extra_space) + ret.append(" %s pStream->%s();" % (extra_space, actionNode.getAttribute("action"))) + elif actionNode.getAttribute("action") == "fieldstart": + ret.append(" %spHandler->startField();" % (extra_space)) + elif actionNode.getAttribute("action") == "fieldsep": + ret.append(" %spHandler->fieldSeparator();" % (extra_space)) + elif actionNode.getAttribute("action") == "fieldend": + ret.append(" %spHandler->endField();" % (extra_space)) + elif actionNode.getAttribute("action") == "fieldlock": + ret.append(" %s{" % (extra_space)) + ret.append(" %sOOXMLPropertySetEntryToBool aHandler(NS_ooxml::LN_CT_FldChar_fldLock);" % (extra_space)) + ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % (extra_space)) + ret.append(" %spStream->getPropertySetAttrs()->resolve(aHandler);" % (extra_space)) + ret.append(" %sif (aHandler.getValue())" % (extra_space)) + ret.append(" %spHandler->lockField();" % (extra_space)) + ret.append(" %s}" % (extra_space)) + elif actionNode.getAttribute("action") == "fieldlock_simple": + ret.append(" %s{" % (extra_space)) + ret.append(" %sOOXMLPropertySetEntryToBool aHandler(NS_ooxml::LN_CT_SimpleField_fldLock);" % (extra_space)) + ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % (extra_space)) + ret.append(" %spStream->getPropertySetAttrs()->resolve(aHandler);" % (extra_space)) + ret.append(" %sif (aHandler.getValue())" % (extra_space)) + ret.append(" %spHandler->lockField();" % (extra_space)) + ret.append(" %s}" % (extra_space)) + elif actionNode.getAttribute("action") == "printproperty": + ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % extra_space) + ret.append(" %s pStream->sendProperty(%s);" % (extra_space, idToLabel(actionNode.getAttribute("sendtokenid")))) + elif actionNode.getAttribute("action") == "sendPropertiesWithId": + ret.append(" %spHandler->sendPropertiesWithId(%s);" % (extra_space, idToLabel(actionNode.getAttribute("sendtokenid")))) + elif actionNode.getAttribute("action") == "text": + ret.append(" %spHandler->text(sText);" % (extra_space)) + elif actionNode.getAttribute("action") == "positionOffset": + ret.append(" %spHandler->positionOffset(sText);" % (extra_space)) + elif actionNode.getAttribute("action") == "positivePercentage": + ret.append(" %spHandler->positivePercentage(sText);" % (extra_space)) + elif actionNode.getAttribute("action") == "alignH": + ret.append(" %spHandler->alignH(sText);" % (extra_space)) + elif actionNode.getAttribute("action") == "alignV": + ret.append(" %spHandler->alignV(sText);" % (extra_space)) + elif actionNode.getAttribute("action") == "tokenproperty": + ret.append(" %sOOXMLFastHelper<OOXMLIntegerValue>::newProperty(pHandler, %s, pHandler->getToken());" % (extra_space, idToLabel("ooxml:token"))) + else: + ret.append(" %spHandler->%s();" % (extra_space, actionNode.getAttribute("action"))) + + for condNode in getChildrenByName(actionNode, "cond"): + ret.append(" }") + ret.append(" }") + if actionNode.hasAttribute("tokenid"): + ret.append(" }") + + return ret + + +def factoryAction(nsNode, action): + switchblock1 = [] + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if len([j for j in getChildrenByName(i, "action") if j.getAttribute("name") == action])]: + switchblock1.append("case %s:" % idForDefine(nsNode, resourceNode)) + for actionNode in [i for i in getChildrenByName(resourceNode, "action") if i.getAttribute("name") == action]: + switchblock1.extend(factoryChooseAction(actionNode)) + switchblock1.append(" break;") + switchblock1.append("") + + switchblock2 = [] + if action == "characters": + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("resource") == "Value"]: + if not len(getChildrenByName(resourceNode, "attribute")): + resourceName = resourceNode.getAttribute("name") + switchblock2.append("case %s:" % idForDefine(nsNode, resourceNode)) + ret = [] + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == resourceName]: + for refNode in getChildrenByName(define, "ref"): + ret.extend(charactersActionForValues(nsNode, refNode)) + switchblock2.extend(ret) + switchblock2.append(" break;") + + sys.stdout.write("void OOXMLFactory_%s::%sAction(OOXMLFastContextHandler*" % (nsToLabel(nsNode), action)) + if len(switchblock1) or len(switchblock2): + sys.stdout.write(" pHandler") + if action == "characters": + sys.stdout.write(", const OUString&") + if "sText" in "".join(switchblock1) or "sText" in "".join(switchblock2): + sys.stdout.write(" sText") + print(")") + print("{") + if len(switchblock1) or len(switchblock2): + print(" sal_uInt32 nDefine = pHandler->getDefine();") + if len(switchblock1): + print(" switch (nDefine)") + print(" {") + if switchblock1[-1] == "": + switchblock1 = switchblock1[:-1] + sys.stdout.write(" ") + print("\n ".join(switchblock1)) + print() + print(" default:") + print(" break;") + print(" }") + if len(switchblock2): + print(" switch (nDefine)") + print(" {") + print("\n ".join(switchblock2)) + print() + print(" default:") + print(" break;") + print(" }") + print("}") + + +def factoryActions(nsNode): + actions = [] + for resourceNode in getChildrenByName(nsNode, "resource"): + for actionNode in getChildrenByName(resourceNode, "action"): + actionName = actionNode.getAttribute("name") + if actionName != "characters" and actionName not in actions: + actions.append(actionName) + for action in sorted(actions): + factoryAction(nsNode, action) + print() + factoryAction(nsNode, "characters") + print() + + +# factoryGetResourceId + + +def collectTokenToId(nsNode, defineNode): + ret = {} + for refNode in defineNode.getElementsByTagName("ref"): + refName = refNode.getAttribute("name") + parent = refNode.parentNode + if parent.localName in ("element", "attribute"): + continue + refblock1 = {} + for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]: + refblock1.update(collectTokenToId(nsNode, define)) + if not len(refblock1): + for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"): + for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]: + ret.update(collectTokenToId(namespaceNode, define)) + else: + ret.update(refblock1) + + defineName = defineNode.getAttribute("name") + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == defineName]: + for node in [i for i in resourceNode.childNodes if i.localName in ("element", "attribute")]: + if node.hasAttribute("tokenid"): + ret[fastToken(node)] = idToLabel(node.getAttribute("tokenid")) + + return ret + + +def factoryTokenToIdMapInner(nsNode, defineNode): + ids = collectTokenToId(nsNode, defineNode) + ret = [] + for i in sorted(ids.keys()): + ret.append(" case %s: return %s;" % (i, ids[i])) + + return ret + + +def factoryGetResourceId(nsNode): + print("""Id OOXMLFactory_%s::getResourceId(Id nDefine, sal_Int32 nToken) +{ + (void) nDefine; + (void) nToken; + + switch (nDefine) + {""" % nsToLabel(nsNode)) + for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"): + inner = "\n".join(factoryTokenToIdMapInner(nsNode, defineNode)) + if len(inner): + print(" case %s:" % idForDefine(nsNode, defineNode)) + print(" switch (nToken)") + print(" {") + print(inner) + print(" }") + print(" break;") + print(" default:") + print(" switch (nToken)") + print(" {") + for startNode in getChildrenByName(nsNode, "start"): + startName = startNode.getAttribute("name") + for defineNode in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == startName]: + inner = factoryTokenToIdMapInner(nsNode, defineNode) + if len(inner): + print("\n".join(inner)) + print(""" } + break; + } + return 0; +} +""") + + +# factoryAttributeAction + + +def factoryAttributeActionDefineInner(nsNode, defineNode): + ret = [] + + defineName = defineNode.getAttribute("name") + block = [] + output_else = "" + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == defineName]: + for attributeNode in getChildrenByName(resourceNode, "attribute"): + if attributeNode.hasAttribute("action"): + block.append(" %sif (nToken == static_cast<Token_t>(%s))" % (output_else, fastToken(attributeNode))) + block.append(" pHandler->%s(pValue);" % attributeNode.getAttribute("action")) + output_else = "else " + if len(block): + resource = "" + for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == defineName]: + resource = resourceNode.getAttribute("resource") + break + ret.append(" if (OOXMLFastContextHandler%s* pHandler = dynamic_cast<OOXMLFastContextHandler%s*>(_pHandler))" % (resource, resource)) + ret.append(" {") + ret.extend(block) + ret.append(" }") + + return ret + + +def factoryAttributeActionInner(nsNode): + ret = [] + + for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"): + inner = factoryAttributeActionDefineInner(nsNode, defineNode) + if len(inner): + ret.append(" case %s:" % idForDefine(nsNode, defineNode)) + ret.extend(inner) + ret.append(" break;") + + return ret + + +def factoryAttributeAction(nsNode): + nsLabel = nsToLabel(nsNode) + inner = factoryAttributeActionInner(nsNode) + if len(inner): + print("""void OOXMLFactory_%s::attributeAction(OOXMLFastContextHandler* _pHandler, Token_t nToken, const OOXMLValue::Pointer_t& pValue) +{ + switch (_pHandler->getDefine()) + {""" % nsLabel) + print("\n".join(inner)) + print(" default:") + print(" break;") + print(" }") + print("}") + print() + else: + print("void OOXMLFactory_%s::attributeAction(OOXMLFastContextHandler*, Token_t, const OOXMLValue::Pointer_t&)" % nsLabel) + print("{") + print("}") + print() + + +# createImpl + + +def getChildrenByName(parentNode, childName): + return [i for i in parentNode.childNodes if i.localName == childName] + + +def createImpl(modelNode, nsName): + print(""" +#include "ooxml/resourceids.hxx" +#include "OOXMLFactory_%s.hxx" +#include "ooxml/OOXMLFastHelper.hxx" +#include "oox/token/tokens.hxx" + +#ifdef _MSC_VER +#pragma warning(disable:4060) // switch statement contains no 'case' or 'default' labels +#pragma warning(disable:4065) // switch statement contains 'default' but no 'case' labels +#pragma warning(disable:4702) // unreachable code +#endif + +namespace writerfilter { +namespace ooxml { + +using namespace com::sun::star; + +/// @cond GENERATED""" % nsName) + print() + + files = {} + for nsNode in getChildrenByName(modelNode, "namespace"): + files[nsNode.getAttribute("name")] = nsNode + + for nsNode in [i for i in getChildrenByName(modelNode, "namespace") if i.getAttribute("name") == nsName]: + nsLabel = nsToLabel(nsNode) + + factoryMutexDecl(nsLabel) + factoryConstructor(nsLabel) + factoryDestructor(nsLabel) + factoryGetInstance(nsLabel) + factoryAttributeToResourceMap(nsNode) + factoryGetListValue(nsNode) + factoryCreateElementMap(files, nsNode) + factoryActions(nsNode) + factoryGetResourceId(nsNode) + factoryAttributeAction(nsNode) + + print("""/// @endcond +}}""") + + +def main(): + modelPath = sys.argv[1] + filePath = sys.argv[2] + modelNode = getChildByName(minidom.parse(modelPath), "model") + nsName = filePath.split('OOXMLFactory_')[1].split('.cxx')[0] + createImpl(modelNode, nsName) + + +if __name__ == "__main__": + main() + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/factoryinc.py b/writerfilter/source/ooxml/factoryinc.py new file mode 100644 index 000000000..ec07f7fda --- /dev/null +++ b/writerfilter/source/ooxml/factoryinc.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from xml.dom import minidom +import sys + + +def createInclude(model): + print(""" +#ifndef INCLUDED_OOXML_FACTORY_GENERATED_HXX +#define INCLUDED_OOXML_FACTORY_GENERATED_HXX + +namespace writerfilter { +namespace ooxml { + +/// @cond GENERATED + """) + + # Create namespaces. + counter = 1 + for namespace in sorted([ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]): + print("const Id NN_%s = %s << 16;" % (namespace.replace('-', '_'), counter)) + counter += 1 + + # Create defines. + counter = 1 + defines = [] + for define in sorted([ns.getAttribute("name") for ns in model.getElementsByTagName("define")]): + if define not in defines: + print("const Id DEFINE_%s = %s;" % (define, counter)) + defines.append(define) + counter += 1 + print("""/// @endcond +}} + +#endif // INCLUDED_OOXML_FACTORY_GENERATED_HXX""") + + +modelPath = sys.argv[1] +model = minidom.parse(modelPath) +createInclude(model) + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml new file mode 100644 index 000000000..134726d64 --- /dev/null +++ b/writerfilter/source/ooxml/model.xml @@ -0,0 +1,19297 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . +--> +<model + xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" + xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" + xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" + xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" + xmlns:o="urn:schemas-microsoft-com:office:office" + xmlns:p="urn:schemas-microsoft-com:office:powerpoint" + xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" + xmlns:v="urn:schemas-microsoft-com:vml" + xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" + xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" + xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" + xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" + xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" + xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" + xmlns:wvml="urn:schemas-microsoft-com:office:word" + xmlns:x="urn:schemas-microsoft-com:office:excel" + xmlns:xml="http://www.w3.org/XML/1998/namespace"> + <token tokenid="ooxml:shape"/> + <token tokenid="ooxml:token"/> + <token tokenid="ooxml:inputstream"/> + <token tokenid="ooxml:trackchange"/> + <token tokenid="ooxml:object"/> + <token tokenid="ooxml:tblStart"/> + <token tokenid="ooxml:tblEnd"/> + <token tokenid="ooxml:tcStart"/> + <token tokenid="ooxml:tcEnd"/> + + <!-- These are not directly generated from OOXML XML elements / attributes, need to clean them up in the future. --> + <token tokenid="ooxml:tblDepth"/> + <token tokenid="ooxml:inTbl"/> + <token tokenid="ooxml:tblCell"/> + <token tokenid="ooxml:tblRow"/> + + <token tokenid="ooxml:ffdata"/> + <token tokenid="ooxml:starmath"/> + <token tokenid="ooxml:blip"/> + <token tokenid="ooxml:payload"/> + <token tokenid="ooxml:footnote"/> + <token tokenid="ooxml:endnote"/> + <token tokenid="ooxml:annotation"/> + <token tokenid="ooxml:headerl"/> + <token tokenid="ooxml:headerr"/> + <token tokenid="ooxml:headerf"/> + <token tokenid="ooxml:footerl"/> + <token tokenid="ooxml:footerr"/> + <token tokenid="ooxml:footerf"/> + + <!-- Present in RTF, but not in OOXML. --> + <token tokenid="ooxml:CT_Settings_widowControl"/> + <token tokenid="ooxml:CT_Settings_longerSpaceSequence"/> + + <namespace name="dml-stylesheet"> + <start name="theme"/> + <start name="themeOverride"/> + <start name="themeManager"/> + <start name="hlinkClick"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-baseStylesheet"/> + <!-- start = theme | themeOverride | themeManager | hlinkClick --> + <define name="CT_EmptyElement"> + </define> + <define name="CT_ColorMapping"> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="bg1"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="tx1"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="bg2"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="tx2"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="accent1"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="accent2"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="accent3"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="accent4"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="accent5"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="accent6"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="hlink"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + <attribute name="folHlink"> + <ref name="ST_ColorSchemeIndex"/> + </attribute> + </define> + <define name="CT_ColorMappingOverride"> + <choice> + <element name="masterClrMapping"> + <ref name="CT_EmptyElement"/> + </element> + <element name="overrideClrMapping"> + <ref name="CT_ColorMapping"/> + </element> + </choice> + </define> + <define name="CT_ColorSchemeAndMapping"> + <element name="clrScheme"> + <ref name="CT_ColorScheme"/> + </element> + <element name="clrMap"> + <ref name="CT_ColorMapping"/> + </element> + </define> + <define name="CT_ColorSchemeList"> + <element name="extraClrScheme"> + <ref name="CT_ColorSchemeAndMapping"/> + </element> + </define> + <define name="CT_OfficeStyleSheet"> + <element name="themeElements"> + <ref name="CT_BaseStyles"/> + </element> + <element name="objectDefaults"> + <ref name="CT_ObjectStyleDefaults"/> + </element> + <element name="extraClrSchemeLst"> + <ref name="CT_ColorSchemeList"/> + </element> + <element name="custClrLst"> + <ref name="CT_CustomColorList"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="name"> + <data type="string"/> + </attribute> + </define> + <define name="CT_BaseStylesOverride"> + <element name="clrScheme"> + <ref name="CT_ColorScheme"/> + </element> + <element name="fontScheme"> + <ref name="CT_FontScheme"/> + </element> + <element name="fmtScheme"> + <ref name="CT_StyleMatrix"/> + </element> + </define> + <define name="CT_ClipboardStyleSheet"> + <element name="themeElements"> + <ref name="CT_BaseStyles"/> + </element> + <element name="clrMap"> + <ref name="CT_ColorMapping"/> + </element> + </define> + <define name="CT_Hyperlink"> + <attribute name="r:id"> + <data type="string"/> + </attribute> + </define> + <define name="theme"> + <element name="theme"> + <ref name="CT_OfficeStyleSheet"/> + </element> + </define> + <define name="themeOverride"> + <element name="themeOverride"> + <ref name="CT_BaseStylesOverride"/> + </element> + </define> + <define name="themeManager"> + <element name="themeManager"> + <ref name="CT_EmptyElement"/> + </element> + </define> + <define name="hlinkClick"> + <element name="hlinkClick"> + <ref name="CT_Hyperlink"/> + </element> + </define> + </grammar> + <resource name="CT_OfficeStyleSheet" resource="Table" tokenid="ooxml:THEMETABLE"/> + <resource name="CT_Hyperlink" resource="Properties"> + <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_r_id"/> + </resource> + <resource name="theme" resource="Stream"> + <element name="theme" tokenid="ooxml:THEMETABLE"/> + </resource> + <resource name="themeOverride" resource="Stream"/> + <resource name="themeManager" resource="Stream"/> + <resource name="hlinkClick" resource="Properties"> + <element name="hlinkClick" tokenid="ooxml:hlinkClick_hlinkClick"/> + </resource> + </namespace> + <namespace name="dml-styleDefaults"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shapeProperties"/> + <define name="CT_DefaultShapeDefinition"> + <element name="spPr"> + <ref name="CT_ShapeProperties"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + <define name="CT_ObjectStyleDefaults"> + <element name="spDef"> + <ref name="CT_DefaultShapeDefinition"/> + </element> + <element name="lnDef"> + <ref name="CT_DefaultShapeDefinition"/> + </element> + <element name="txDef"> + <ref name="CT_DefaultShapeDefinition"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + </grammar> + </namespace> + <namespace name="dml-shape3DLighting"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <define name="ST_LightRigDirection"> + <choice> + <!-- Top Left --> + <value>tl</value> + <!-- Top --> + <value>t</value> + <!-- Top Right --> + <value>tr</value> + <!-- Left --> + <value>l</value> + <!-- Right --> + <value>r</value> + <!-- Bottom Left --> + <value>bl</value> + <!-- Bottom --> + <value>b</value> + <!-- Bottom Right --> + <value>br</value> + </choice> + </define> + <define name="ST_LightRigType"> + <choice> + <!-- Legacy Flat 1 --> + <value>legacyFlat1</value> + <!-- Legacy Flat 2 --> + <value>legacyFlat2</value> + <!-- Legacy Flat 3 --> + <value>legacyFlat3</value> + <!-- Legacy Flat 4 --> + <value>legacyFlat4</value> + <!-- Legacy Normal 1 --> + <value>legacyNormal1</value> + <!-- Legacy Normal 2 --> + <value>legacyNormal2</value> + <!-- Legacy Normal 3 --> + <value>legacyNormal3</value> + <!-- Legacy Normal 4 --> + <value>legacyNormal4</value> + <!-- Legacy Harsh 1 --> + <value>legacyHarsh1</value> + <!-- Legacy Harsh 2 --> + <value>legacyHarsh2</value> + <!-- Legacy Harsh 3 --> + <value>legacyHarsh3</value> + <!-- Legacy Harsh 4 --> + <value>legacyHarsh4</value> + <!-- Three Point --> + <value>threePt</value> + <!-- Light Rig Enum ( Balanced ) --> + <value>balanced</value> + <!-- Soft --> + <value>soft</value> + <!-- Harsh --> + <value>harsh</value> + <!-- Flood --> + <value>flood</value> + <!-- Contrasting --> + <value>contrasting</value> + <!-- Morning --> + <value>morning</value> + <!-- Sunrise --> + <value>sunrise</value> + <!-- Sunset --> + <value>sunset</value> + <!-- Chilly --> + <value>chilly</value> + <!-- Freezing --> + <value>freezing</value> + <!-- Flat --> + <value>flat</value> + <!-- Two Point --> + <value>twoPt</value> + <!-- Glow --> + <value>glow</value> + <!-- Bright Room --> + <value>brightRoom</value> + </choice> + </define> + <define name="CT_LightRig"> + <element name="rot"> + <ref name="CT_SphereCoords"/> + </element> + <attribute name="rig"> + <ref name="ST_LightRigType"/> + </attribute> + <attribute name="dir"> + <ref name="ST_LightRigDirection"/> + </attribute> + </define> + </grammar> + <resource name="ST_LightRigDirection" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tl">tl</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_t">t</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tr">tr</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_l">l</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_r">r</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_bl">bl</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_b">b</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_br">br</value> + </resource> + <resource name="ST_LightRigType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat1">legacyFlat1</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat2">legacyFlat2</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat3">legacyFlat3</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat4">legacyFlat4</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal1">legacyNormal1</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal2">legacyNormal2</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal3">legacyNormal3</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal4">legacyNormal4</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh1">legacyHarsh1</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh2">legacyHarsh2</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh3">legacyHarsh3</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh4">legacyHarsh4</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_threePt">threePt</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_balanced">balanced</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_soft">soft</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_harsh">harsh</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_flood">flood</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_contrasting">contrasting</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_morning">morning</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_sunrise">sunrise</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_sunset">sunset</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_chilly">chilly</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_freezing">freezing</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_flat">flat</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_twoPt">twoPt</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_glow">glow</value> + <value tokenid="ooxml:Value_drawingml_ST_LightRigType_brightRoom">brightRoom</value> + </resource> + </namespace> + <namespace name="dml-shape3DScene"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shape3DCamera"/> + <include href="dml-shape3DLighting"/> + <define name="CT_Scene3D"> + <element name="camera"> + <ref name="CT_Camera"/> + </element> + <element name="lightRig"> + <ref name="CT_LightRig"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + </grammar> + </namespace> + <namespace name="dml-shape3DStyles"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shapeGeometry"/> + <define name="ST_BevelPresetType"> + <choice> + <!-- Relaxed Inset --> + <value>relaxedInset</value> + <!-- Circle --> + <value>circle</value> + <!-- Slope --> + <value>slope</value> + <!-- Cross --> + <value>cross</value> + <!-- Angle --> + <value>angle</value> + <!-- Soft Round --> + <value>softRound</value> + <!-- Convex --> + <value>convex</value> + <!-- Cool Slant --> + <value>coolSlant</value> + <!-- Divot --> + <value>divot</value> + <!-- Riblet --> + <value>riblet</value> + <!-- Hard Edge --> + <value>hardEdge</value> + <!-- Art Deco --> + <value>artDeco</value> + </choice> + </define> + <define name="CT_Bevel"> + <attribute name="w"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="h"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="prst"> + <ref name="ST_BevelPresetType"/> + </attribute> + </define> + <define name="ST_PresetMaterialType"> + <choice> + <!-- Legacy Matte --> + <value>legacyMatte</value> + <!-- Legacy Plastic --> + <value>legacyPlastic</value> + <!-- Legacy Metal --> + <value>legacyMetal</value> + <!-- Legacy Wireframe --> + <value>legacyWireframe</value> + <!-- Matte --> + <value>matte</value> + <!-- Plastic --> + <value>plastic</value> + <!-- Metal --> + <value>metal</value> + <!-- Warm Matte --> + <value>warmMatte</value> + <!-- Translucent Powder --> + <value>translucentPowder</value> + <!-- Powder --> + <value>powder</value> + <!-- Dark Edge --> + <value>dkEdge</value> + <!-- Soft Edge --> + <value>softEdge</value> + <!-- Clear --> + <value>clear</value> + <!-- Flat --> + <value>flat</value> + <!-- Soft Metal --> + <value>softmetal</value> + </choice> + </define> + <define name="CT_Shape3D"> + <element name="bevelT"> + <ref name="CT_Bevel"/> + </element> + <element name="bevelB"> + <ref name="CT_Bevel"/> + </element> + <element name="extrusionClr"> + <ref name="CT_Color"/> + </element> + <element name="contourClr"> + <ref name="CT_Color"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="z"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="extrusionH"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="contourW"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="prstMaterial"> + <ref name="ST_PresetMaterialType"/> + </attribute> + </define> + <define name="CT_FlatText"> + <attribute name="z"> + <ref name="ST_Coordinate"/> + </attribute> + </define> + <define name="EG_Text3D"> + <choice> + <element name="sp3d"> + <ref name="CT_Shape3D"/> + </element> + <element name="flatTx"> + <ref name="CT_FlatText"/> + </element> + </choice> + </define> + </grammar> + <resource name="ST_BevelPresetType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_relaxedInset">relaxedInset</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_circle">circle</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_slope">slope</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_cross">cross</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_angle">angle</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_softRound">softRound</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_convex">convex</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_coolSlant">coolSlant</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_divot">divot</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_riblet">riblet</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_hardEdge">hardEdge</value> + <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_artDeco">artDeco</value> + </resource> + <resource name="ST_PresetMaterialType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMatte">legacyMatte</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyPlastic">legacyPlastic</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMetal">legacyMetal</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyWireframe">legacyWireframe</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_matte">matte</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_plastic">plastic</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_metal">metal</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_warmMatte">warmMatte</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_translucentPowder">translucentPowder</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_powder">powder</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_dkEdge">dkEdge</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softEdge">softEdge</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_clear">clear</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_flat">flat</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softmetal">softmetal</value> + </resource> + </namespace> + <namespace name="dml-shape3DCamera"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <define name="ST_PresetCameraType"> + <choice> + <!-- Legacy Oblique Top Left --> + <value>legacyObliqueTopLeft</value> + <!-- Legacy Oblique Top --> + <value>legacyObliqueTop</value> + <!-- Legacy Oblique Top Right --> + <value>legacyObliqueTopRight</value> + <!-- Legacy Oblique Left --> + <value>legacyObliqueLeft</value> + <!-- Legacy Oblique Front --> + <value>legacyObliqueFront</value> + <!-- Legacy Oblique Right --> + <value>legacyObliqueRight</value> + <!-- Legacy Oblique Bottom Left --> + <value>legacyObliqueBottomLeft</value> + <!-- Legacy Oblique Bottom --> + <value>legacyObliqueBottom</value> + <!-- Legacy Oblique Bottom Right --> + <value>legacyObliqueBottomRight</value> + <!-- Legacy Perspective Top Left --> + <value>legacyPerspectiveTopLeft</value> + <!-- Legacy Perspective Top --> + <value>legacyPerspectiveTop</value> + <!-- Legacy Perspective Top Right --> + <value>legacyPerspectiveTopRight</value> + <!-- Legacy Perspective Left --> + <value>legacyPerspectiveLeft</value> + <!-- Legacy Perspective Front --> + <value>legacyPerspectiveFront</value> + <!-- Legacy Perspective Right --> + <value>legacyPerspectiveRight</value> + <!-- Legacy Perspective Bottom Left --> + <value>legacyPerspectiveBottomLeft</value> + <!-- Legacy Perspective Bottom --> + <value>legacyPerspectiveBottom</value> + <!-- Legacy Perspective Bottom Right --> + <value>legacyPerspectiveBottomRight</value> + <!-- Orthographic Front --> + <value>orthographicFront</value> + <!-- Isometric Top Up --> + <value>isometricTopUp</value> + <!-- Isometric Top Down --> + <value>isometricTopDown</value> + <!-- Isometric Bottom Up --> + <value>isometricBottomUp</value> + <!-- Isometric Bottom Down --> + <value>isometricBottomDown</value> + <!-- Isometric Left Up --> + <value>isometricLeftUp</value> + <!-- Isometric Left Down --> + <value>isometricLeftDown</value> + <!-- Isometric Right Up --> + <value>isometricRightUp</value> + <!-- Isometric Right Down --> + <value>isometricRightDown</value> + <!-- Isometric Off Axis 1 Left --> + <value>isometricOffAxis1Left</value> + <!-- Isometric Off Axis 1 Right --> + <value>isometricOffAxis1Right</value> + <!-- Isometric Off Axis 1 Top --> + <value>isometricOffAxis1Top</value> + <!-- Isometric Off Axis 2 Left --> + <value>isometricOffAxis2Left</value> + <!-- Isometric Off Axis 2 Right --> + <value>isometricOffAxis2Right</value> + <!-- Isometric Off Axis 2 Top --> + <value>isometricOffAxis2Top</value> + <!-- Isometric Off Axis 3 Left --> + <value>isometricOffAxis3Left</value> + <!-- Isometric Off Axis 3 Right --> + <value>isometricOffAxis3Right</value> + <!-- Isometric Off Axis 3 Bottom --> + <value>isometricOffAxis3Bottom</value> + <!-- Isometric Off Axis 4 Left --> + <value>isometricOffAxis4Left</value> + <!-- Isometric Off Axis 4 Right --> + <value>isometricOffAxis4Right</value> + <!-- Isometric Off Axis 4 Bottom --> + <value>isometricOffAxis4Bottom</value> + <!-- Oblique Top Left --> + <value>obliqueTopLeft</value> + <!-- Oblique Top --> + <value>obliqueTop</value> + <!-- Oblique Top Right --> + <value>obliqueTopRight</value> + <!-- Oblique Left --> + <value>obliqueLeft</value> + <!-- Oblique Right --> + <value>obliqueRight</value> + <!-- Oblique Bottom Left --> + <value>obliqueBottomLeft</value> + <!-- Oblique Bottom --> + <value>obliqueBottom</value> + <!-- Oblique Bottom Right --> + <value>obliqueBottomRight</value> + <!-- Perspective Front --> + <value>perspectiveFront</value> + <!-- Perspective Left --> + <value>perspectiveLeft</value> + <!-- Perspective Right --> + <value>perspectiveRight</value> + <!-- Orthographic Above --> + <value>perspectiveAbove</value> + <!-- Perspective Below --> + <value>perspectiveBelow</value> + <!-- Perspective Above Left Facing --> + <value>perspectiveAboveLeftFacing</value> + <!-- Perspective Above Right Facing --> + <value>perspectiveAboveRightFacing</value> + <!-- Perspective Contrasting Left Facing --> + <value>perspectiveContrastingLeftFacing</value> + <!-- Perspective Contrasting Right Facing --> + <value>perspectiveContrastingRightFacing</value> + <!-- Perspective Heroic Left Facing --> + <value>perspectiveHeroicLeftFacing</value> + <!-- Perspective Heroic Right Facing --> + <value>perspectiveHeroicRightFacing</value> + <!-- Perspective Heroic Extreme Left Facing --> + <value>perspectiveHeroicExtremeLeftFacing</value> + <!-- Perspective Heroic Extreme Right Facing --> + <value>perspectiveHeroicExtremeRightFacing</value> + <!-- Perspective Relaxed --> + <value>perspectiveRelaxed</value> + <!-- Perspective Relaxed Moderately --> + <value>perspectiveRelaxedModerately</value> + </choice> + </define> + <define name="ST_FOVAngle"> + </define> + <define name="CT_Camera"> + <element name="rot"> + <ref name="CT_SphereCoords"/> + </element> + <attribute name="prst"> + <ref name="ST_PresetCameraType"/> + </attribute> + <attribute name="fov"> + <ref name="ST_FOVAngle"/> + </attribute> + <attribute name="zoom"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + </grammar> + <resource name="ST_PresetCameraType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopLeft">legacyObliqueTopLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTop">legacyObliqueTop</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopRight">legacyObliqueTopRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueLeft">legacyObliqueLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueFront">legacyObliqueFront</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueRight">legacyObliqueRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomLeft">legacyObliqueBottomLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottom">legacyObliqueBottom</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomRight">legacyObliqueBottomRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopLeft">legacyPerspectiveTopLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTop">legacyPerspectiveTop</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopRight">legacyPerspectiveTopRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveLeft">legacyPerspectiveLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveFront">legacyPerspectiveFront</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveRight">legacyPerspectiveRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomLeft">legacyPerspectiveBottomLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottom">legacyPerspectiveBottom</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomRight">legacyPerspectiveBottomRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_orthographicFront">orthographicFront</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopUp">isometricTopUp</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopDown">isometricTopDown</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomUp">isometricBottomUp</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomDown">isometricBottomDown</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftUp">isometricLeftUp</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftDown">isometricLeftDown</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightUp">isometricRightUp</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightDown">isometricRightDown</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Left">isometricOffAxis1Left</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Right">isometricOffAxis1Right</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Top">isometricOffAxis1Top</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Left">isometricOffAxis2Left</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Right">isometricOffAxis2Right</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Top">isometricOffAxis2Top</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Left">isometricOffAxis3Left</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Right">isometricOffAxis3Right</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Bottom">isometricOffAxis3Bottom</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Left">isometricOffAxis4Left</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Right">isometricOffAxis4Right</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Bottom">isometricOffAxis4Bottom</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopLeft">obliqueTopLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTop">obliqueTop</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopRight">obliqueTopRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueLeft">obliqueLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueRight">obliqueRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomLeft">obliqueBottomLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottom">obliqueBottom</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomRight">obliqueBottomRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveFront">perspectiveFront</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveLeft">perspectiveLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRight">perspectiveRight</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAbove">perspectiveAbove</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveBelow">perspectiveBelow</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveLeftFacing">perspectiveAboveLeftFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveRightFacing">perspectiveAboveRightFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingLeftFacing">perspectiveContrastingLeftFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingRightFacing">perspectiveContrastingRightFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicLeftFacing">perspectiveHeroicLeftFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicRightFacing">perspectiveHeroicRightFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing">perspectiveHeroicExtremeLeftFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeRightFacing">perspectiveHeroicExtremeRightFacing</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxed">perspectiveRelaxed</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxedModerately">perspectiveRelaxedModerately</value> + </resource> + </namespace> + <namespace name="dml-baseStylesheet"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <!-- ISO RELAX NG Schema --> + <define name="ST_ColorSchemeIndex"> + <choice> + <!-- Dark 1 --> + <value>dk1</value> + <!-- Light 1 --> + <value>lt1</value> + <!-- Dark 2 --> + <value>dk2</value> + <!-- Light 2 --> + <value>lt2</value> + <!-- Accent 1 --> + <value>accent1</value> + <!-- Accent 2 --> + <value>accent2</value> + <!-- Accent 3 --> + <value>accent3</value> + <!-- Accent 4 --> + <value>accent4</value> + <!-- Accent 5 --> + <value>accent5</value> + <!-- Accent 6 --> + <value>accent6</value> + <!-- Hyperlink --> + <value>hlink</value> + <!-- Followed Hyperlink --> + <value>folHlink</value> + </choice> + </define> + <define name="CT_ColorScheme"> + <element name="dk1"> + <ref name="CT_Color"/> + </element> + <element name="lt1"> + <ref name="CT_Color"/> + </element> + <element name="dk2"> + <ref name="CT_Color"/> + </element> + <element name="lt2"> + <ref name="CT_Color"/> + </element> + <element name="accent1"> + <ref name="CT_Color"/> + </element> + <element name="accent2"> + <ref name="CT_Color"/> + </element> + <element name="accent3"> + <ref name="CT_Color"/> + </element> + <element name="accent4"> + <ref name="CT_Color"/> + </element> + <element name="accent5"> + <ref name="CT_Color"/> + </element> + <element name="accent6"> + <ref name="CT_Color"/> + </element> + <element name="hlink"> + <ref name="CT_Color"/> + </element> + <element name="folHlink"> + <ref name="CT_Color"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="name"> + <data type="string"> + </data> + </attribute> + </define> + <define name="CT_CustomColor"> + <ref name="EG_ColorChoice"/> + <attribute name="name"> + <data type="string"> + </data> + </attribute> + </define> + <define name="CT_SupplementalFont"> + <attribute name="script"> + <data type="string"> + </data> + </attribute> + <attribute name="typeface"> + <ref name="ST_TextTypeface"/> + <data type="string"> + </data> + </attribute> + </define> + <define name="CT_CustomColorList"> + <element name="custClr"> + <ref name="CT_CustomColor"/> + </element> + </define> + <define name="CT_FontCollection"> + <element name="latin"> + <ref name="CT_TextFont"/> + </element> + <element name="ea"> + <ref name="CT_TextFont"/> + </element> + <element name="cs"> + <ref name="CT_TextFont"/> + </element> + <element name="font"> + <ref name="CT_SupplementalFont"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + <define name="CT_EffectStyleItem"> + <ref name="EG_EffectProperties"/> + <element name="scene3d"> + <ref name="CT_Scene3D"/> + </element> + <element name="sp3d"> + <ref name="CT_Shape3D"/> + </element> + </define> + <define name="CT_FontScheme"> + <element name="majorFont"> + <ref name="CT_FontCollection"/> + </element> + <element name="minorFont"> + <ref name="CT_FontCollection"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="name"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FillStyleList"> + <ref name="EG_FillProperties"/> + </define> + <define name="CT_LineStyleList"> + <element name="ln"> + <ref name="CT_LineProperties"/> + </element> + </define> + <define name="CT_EffectStyleList"> + <element name="effectStyle"> + <ref name="CT_EffectStyleItem"/> + </element> + </define> + <define name="CT_BackgroundFillStyleList"> + <ref name="EG_FillProperties"/> + </define> + <define name="CT_StyleMatrix"> + <element name="fillStyleLst"> + <ref name="CT_FillStyleList"/> + </element> + <element name="lnStyleLst"> + <ref name="CT_LineStyleList"/> + </element> + <element name="effectStyleLst"> + <ref name="CT_EffectStyleList"/> + </element> + <element name="bgFillStyleLst"> + <ref name="CT_BackgroundFillStyleList"/> + </element> + <attribute name="name"> + <data type="string"/> + </attribute> + </define> + <define name="CT_BaseStyles"> + <element name="clrScheme"> + <ref name="CT_ColorScheme"/> + </element> + <element name="fontScheme"> + <ref name="CT_FontScheme"/> + </element> + <element name="fmtScheme"> + <ref name="CT_StyleMatrix"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + </grammar> + <resource name="ST_ColorSchemeIndex" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk1">dk1</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt1">lt1</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk2">dk2</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt2">lt2</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent1">accent1</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent2">accent2</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent3">accent3</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent4">accent4</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent5">accent5</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent6">accent6</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_hlink">hlink</value> + <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_folHlink">folHlink</value> + </resource> + <resource name="CT_ColorScheme" resource="Properties"> + <element name="dk1" tokenid="ooxml:CT_ColorScheme_dk1"/> + <element name="lt1" tokenid="ooxml:CT_ColorScheme_lt1"/> + <element name="dk2" tokenid="ooxml:CT_ColorScheme_dk2"/> + <element name="lt2" tokenid="ooxml:CT_ColorScheme_lt2"/> + <element name="accent1" tokenid="ooxml:CT_ColorScheme_accent1"/> + <element name="accent2" tokenid="ooxml:CT_ColorScheme_accent2"/> + <element name="accent3" tokenid="ooxml:CT_ColorScheme_accent3"/> + <element name="accent4" tokenid="ooxml:CT_ColorScheme_accent4"/> + <element name="accent5" tokenid="ooxml:CT_ColorScheme_accent5"/> + <element name="accent6" tokenid="ooxml:CT_ColorScheme_accent6"/> + <element name="hlink" tokenid="ooxml:CT_ColorScheme_hlink"/> + <element name="folHlink" tokenid="ooxml:CT_ColorScheme_folHlink"/> + <element name="extLst" tokenid="ooxml:CT_ColorScheme_extLst"/> + <attribute name="name" tokenid="ooxml:CT_ColorScheme_name"/> + </resource> + <resource name="CT_SupplementalFont" resource="Properties"> + <attribute name="script" tokenid="ooxml:CT_SupplementalFont_script"/> + <attribute name="typeface" tokenid="ooxml:CT_SupplementalFont_typeface"/> + </resource> + <resource name="CT_FontCollection" resource="Properties"> + <element name="latin" tokenid="ooxml:CT_FontCollection_latin"/> + <element name="ea" tokenid="ooxml:CT_FontCollection_ea"/> + <element name="cs" tokenid="ooxml:CT_FontCollection_cs"/> + <element name="font" tokenid="ooxml:CT_FontCollection_font"/> + <element name="extLst" tokenid="ooxml:CT_FontCollection_extLst"/> + </resource> + <resource name="CT_FontScheme" resource="Properties"> + <element name="majorFont" tokenid="ooxml:CT_FontScheme_majorFont"/> + <element name="minorFont" tokenid="ooxml:CT_FontScheme_minorFont"/> + <element name="extLst" tokenid="ooxml:CT_FontScheme_extLst"/> + <attribute name="name" tokenid="ooxml:CT_FontScheme_name"/> + </resource> + <resource name="CT_FillStyleList" resource="Properties"/> + <resource name="CT_LineStyleList" resource="Properties"> + <element name="ln" tokenid="ooxml:CT_LineStyleList_ln"/> + </resource> + <resource name="CT_EffectStyleList" resource="Properties"> + <element name="effectStyle" tokenid="ooxml:CT_EffectStyleList_effectStyle"/> + </resource> + <resource name="CT_BackgroundFillStyleList" resource="Properties"/> + <resource name="CT_StyleMatrix" resource="Properties"> + <element name="fillStyleLst" tokenid="ooxml:CT_StyleMatrix_fillStyleLst"/> + <element name="lnStyleLst" tokenid="ooxml:CT_StyleMatrix_lnStyleLst"/> + <element name="effectStyleLst" tokenid="ooxml:CT_StyleMatrix_effectStyleLst"/> + <element name="bgFillStyleLst" tokenid="ooxml:CT_StyleMatrix_bgFillStyleLst"/> + <attribute name="name" tokenid="ooxml:CT_StyleMatrix_name"/> + </resource> + <resource name="CT_BaseStyles" resource="Properties"> + <element name="clrScheme" tokenid="ooxml:CT_BaseStyles_clrScheme"/> + <element name="fontScheme" tokenid="ooxml:CT_BaseStyles_fontScheme"/> + <element name="fmtScheme" tokenid="ooxml:CT_BaseStyles_fmtScheme"/> + <element name="extLst" tokenid="ooxml:CT_BaseStyles_extLst"/> + </resource> + </namespace> + <namespace name="dml-textCharacter"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shapeEffects"/> + <include href="dml-shapeLineProperties"/> + <define name="ST_TextPoint"> + <data type="int"/> + </define> + <define name="ST_TextNonNegativePoint"> + <data type="int"/> + </define> + <define name="ST_TextFontSize"> + <data type="int"/> + </define> + <define name="ST_Panose"> + <data type="hexBinary"/> + </define> + <define name="ST_TextTypeface"> + <data type="string"/> + </define> + <define name="CT_TextFont"> + <attribute name="typeface"> + <ref name="ST_TextTypeface"/> + </attribute> + <attribute name="panose"> + <ref name="ST_Panose"/> + </attribute> + <attribute name="pitchFamily"> + <data type="byte"/> + </attribute> + <attribute name="charset"> + <data type="byte"/> + </attribute> + </define> + <define name="ST_TextLanguageID"> + <data type="string"/> + </define> + <define name="ST_TextUnderlineType"> + <choice> + <!-- Text Underline Enum ( None ) --> + <value>none</value> + <!-- Text Underline Enum ( Words ) --> + <value>words</value> + <!-- Text Underline Enum ( Single ) --> + <value>sng</value> + <!-- Text Underline Enum ( Double ) --> + <value>dbl</value> + <!-- Text Underline Enum ( Heavy ) --> + <value>heavy</value> + <!-- Text Underline Enum ( Dotted ) --> + <value>dotted</value> + <!-- Text Underline Enum ( Heavy Dotted ) --> + <value>dottedHeavy</value> + <!-- Text Underline Enum ( Dashed ) --> + <value>dash</value> + <!-- Text Underline Enum ( Heavy Dashed ) --> + <value>dashHeavy</value> + <!-- Text Underline Enum ( Long Dashed ) --> + <value>dashLong</value> + <!-- Text Underline Enum ( Heavy Long Dashed ) --> + <value>dashLongHeavy</value> + <!-- Text Underline Enum ( Dot Dash ) --> + <value>dotDash</value> + <!-- Text Underline Enum ( Heavy Dot Dash ) --> + <value>dotDashHeavy</value> + <!-- Text Underline Enum ( Dot Dot Dash ) --> + <value>dotDotDash</value> + <!-- Text Underline Enum ( Heavy Dot Dot Dash ) --> + <value>dotDotDashHeavy</value> + <!-- Text Underline Enum ( Wavy ) --> + <value>wavy</value> + <!-- Text Underline Enum ( Heavy Wavy ) --> + <value>wavyHeavy</value> + <!-- Text Underline Enum ( Double Wavy ) --> + <value>wavyDbl</value> + </choice> + </define> + <define name="CT_TextUnderlineLineFollowText"> + </define> + <define name="CT_TextUnderlineFillFollowText"> + </define> + <define name="CT_TextUnderlineFillGroupWrapper"> + <ref name="EG_FillProperties"/> + </define> + <define name="EG_TextUnderlineLine"> + <choice> + <element name="uLnTx"> + <ref name="CT_TextUnderlineLineFollowText"/> + </element> + <element name="uLn"> + <ref name="CT_LineProperties"/> + </element> + </choice> + </define> + <define name="EG_TextUnderlineFill"> + <choice> + <element name="uFillTx"> + <ref name="CT_TextUnderlineFillFollowText"/> + </element> + <element name="uFill"> + <ref name="CT_TextUnderlineFillGroupWrapper"/> + </element> + </choice> + </define> + <define name="ST_TextStrikeType"> + <choice> + <!-- Text Strike Enum ( No Strike ) --> + <value>noStrike</value> + <!-- Text Strike Enum ( Single Strike ) --> + <value>sngStrike</value> + <!-- Text Strike Enum ( Double Strike ) --> + <value>dblStrike</value> + </choice> + </define> + <define name="ST_TextCapsType"> + <choice> + <!-- Text Caps Enum ( None ) --> + <value>none</value> + <!-- Text Caps Enum ( Small ) --> + <value>small</value> + <!-- Text Caps Enum ( All ) --> + <value>all</value> + </choice> + </define> + <define name="CT_TextCharacterProperties"> + <element name="ln"> + <ref name="CT_LineProperties"/> + </element> + <ref name="EG_FillProperties"/> + <ref name="EG_EffectProperties"/> + <element name="highlight"> + <ref name="CT_Color"/> + </element> + <ref name="EG_TextUnderlineLine"/> + <ref name="EG_TextUnderlineFill"/> + <element name="latin"> + <ref name="CT_TextFont"/> + </element> + <element name="ea"> + <ref name="CT_TextFont"/> + </element> + <element name="cs"> + <ref name="CT_TextFont"/> + </element> + <element name="sym"> + <ref name="CT_TextFont"/> + </element> + <element name="hlinkClick"> + <ref name="CT_Hyperlink"/> + </element> + <element name="hlinkMouseOver"> + <ref name="CT_Hyperlink"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="kumimoji"> + <data type="boolean"/> + </attribute> + <attribute name="lang"> + <ref name="ST_TextLanguageID"/> + </attribute> + <attribute name="altLang"> + <ref name="ST_TextLanguageID"/> + </attribute> + <attribute name="sz"> + <ref name="ST_TextFontSize"/> + </attribute> + <attribute name="b"> + <data type="boolean"/> + </attribute> + <attribute name="i"> + <data type="boolean"/> + </attribute> + <attribute name="u"> + <ref name="ST_TextUnderlineType"/> + </attribute> + <attribute name="strike"> + <ref name="ST_TextStrikeType"/> + </attribute> + <attribute name="kern"> + <ref name="ST_TextNonNegativePoint"/> + </attribute> + <attribute name="cap"> + <ref name="ST_TextCapsType"/> + </attribute> + <attribute name="spc"> + <ref name="ST_TextPoint"/> + </attribute> + <attribute name="normalizeH"> + <data type="boolean"/> + </attribute> + <attribute name="baseline"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="noProof"> + <data type="boolean"/> + </attribute> + <attribute name="dirty"> + <data type="boolean"/> + </attribute> + <attribute name="err"> + <data type="boolean"/> + </attribute> + <attribute name="smtClean"> + <data type="boolean"/> + </attribute> + <attribute name="smtId"> + <data type="unsignedInt"/> + </attribute> + <attribute name="bmk"> + <data type="string"/> + </attribute> + </define> + </grammar> + <resource name="ST_TextPoint" resource="Integer"/> + <resource name="ST_TextNonNegativePoint" resource="Integer"/> + <resource name="ST_TextFontSize" resource="Integer"/> + <resource name="ST_Panose" resource="Hex"/> + <resource name="ST_TextTypeface" resource="String"/> + <resource name="CT_TextFont" resource="Properties"> + <attribute name="typeface" tokenid="ooxml:CT_TextFont_typeface"/> + <attribute name="panose" tokenid="ooxml:CT_TextFont_panose"/> + <attribute name="pitchFamily" tokenid="ooxml:CT_TextFont_pitchFamily"/> + <attribute name="charset" tokenid="ooxml:CT_TextFont_charset"/> + </resource> + <resource name="ST_TextLanguageID" resource="String"/> + <resource name="ST_TextUnderlineType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_none">none</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_words">words</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_sng">sng</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dbl">dbl</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_heavy">heavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotted">dotted</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dottedHeavy">dottedHeavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dash">dash</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashHeavy">dashHeavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLong">dashLong</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLongHeavy">dashLongHeavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDash">dotDash</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDashHeavy">dotDashHeavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDash">dotDotDash</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDashHeavy">dotDotDashHeavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavy">wavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyHeavy">wavyHeavy</value> + <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyDbl">wavyDbl</value> + </resource> + <resource name="ST_TextStrikeType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_TextStrikeType_noStrike">noStrike</value> + <value tokenid="ooxml:Value_drawingml_ST_TextStrikeType_sngStrike">sngStrike</value> + <value tokenid="ooxml:Value_drawingml_ST_TextStrikeType_dblStrike">dblStrike</value> + </resource> + <resource name="ST_TextCapsType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_TextCapsType_none">none</value> + <value tokenid="ooxml:Value_drawingml_ST_TextCapsType_small">small</value> + <value tokenid="ooxml:Value_drawingml_ST_TextCapsType_all">all</value> + </resource> + </namespace> + <namespace name="dml-shapeEffects"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <!-- start = blip --> + <define name="CT_AlphaBiLevelEffect"> + <attribute name="thresh"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_AlphaCeilingEffect"> + </define> + <define name="CT_AlphaFloorEffect"> + </define> + <define name="CT_AlphaInverseEffect"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_AlphaModulateFixedEffect"> + <attribute name="amt"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + <define name="CT_AlphaOutsetEffect"> + <attribute name="rad"> + <ref name="ST_Coordinate"/> + </attribute> + </define> + <define name="CT_AlphaReplaceEffect"> + <attribute name="a"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_BiLevelEffect"> + <attribute name="thresh"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_BlurEffect"> + <attribute name="rad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="grow"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_ColorChangeEffect"> + <element name="clrFrom"> + <ref name="CT_Color"/> + </element> + <element name="clrTo"> + <ref name="CT_Color"/> + </element> + <attribute name="useA"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_ColorReplaceEffect"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_DuotoneEffect"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_GlowEffect"> + <ref name="EG_ColorChoice"/> + <attribute name="rad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + </define> + <define name="CT_GrayscaleEffect"> + </define> + <define name="CT_HSLEffect"> + <attribute name="hue"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="sat"> + <ref name="ST_FixedPercentage"/> + </attribute> + <attribute name="lum"> + <ref name="ST_FixedPercentage"/> + </attribute> + </define> + <define name="CT_InnerShadowEffect"> + <ref name="EG_ColorChoice"/> + <attribute name="blurRad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dist"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + </define> + <define name="CT_LuminanceEffect"> + <attribute name="bright"> + <ref name="ST_FixedPercentage"/> + </attribute> + <attribute name="contrast"> + <ref name="ST_FixedPercentage"/> + </attribute> + </define> + <define name="CT_OuterShadowEffect"> + <ref name="EG_ColorChoice"/> + <attribute name="blurRad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dist"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="sx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="sy"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="kx"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="ky"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="algn"> + <ref name="ST_RectAlignment"/> + </attribute> + <attribute name="rotWithShape"> + <data type="boolean"/> + </attribute> + </define> + <define name="ST_PresetShadowVal"> + <choice> + <!-- Top Left Drop Shadow --> + <value>shdw1</value> + <!-- Top Right Drop Shadow --> + <value>shdw2</value> + <!-- Back Left Perspective Shadow --> + <value>shdw3</value> + <!-- Back Right Perspective Shadow --> + <value>shdw4</value> + <!-- Bottom Left Drop Shadow --> + <value>shdw5</value> + <!-- Bottom Right Drop Shadow --> + <value>shdw6</value> + <!-- Front Left Perspective Shadow --> + <value>shdw7</value> + <!-- Front Right Perspective Shadow --> + <value>shdw8</value> + <!-- Top Left Small Drop Shadow --> + <value>shdw9</value> + <!-- Top Left Large Drop Shadow --> + <value>shdw10</value> + <!-- Back Left Long Perspective Shadow --> + <value>shdw11</value> + <!-- Back Right Long Perspective Shadow --> + <value>shdw12</value> + <!-- Top Left Double Drop Shadow --> + <value>shdw13</value> + <!-- Bottom Right Small Drop Shadow --> + <value>shdw14</value> + <!-- Front Left Long Perspective Shadow --> + <value>shdw15</value> + <!-- Front Right LongPerspective Shadow --> + <value>shdw16</value> + <!-- 3D Outer Box Shadow --> + <value>shdw17</value> + <!-- 3D Inner Box Shadow --> + <value>shdw18</value> + <!-- Back Center Perspective Shadow --> + <value>shdw19</value> + <!-- Front Bottom Shadow --> + <value>shdw20</value> + </choice> + </define> + <define name="CT_PresetShadowEffect"> + <ref name="EG_ColorChoice"/> + <attribute name="prst"> + <ref name="ST_PresetShadowVal"/> + </attribute> + <attribute name="dist"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + </define> + <define name="CT_ReflectionEffect"> + <attribute name="blurRad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="stA"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="stPos"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="endA"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="endPos"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="dist"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="fadeDir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="sx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="sy"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="kx"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="ky"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="algn"> + <ref name="ST_RectAlignment"/> + </attribute> + <attribute name="rotWithShape"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_RelativeOffsetEffect"> + <attribute name="tx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="ty"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="CT_SoftEdgesEffect"> + <attribute name="rad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + </define> + <define name="CT_TintEffect"> + <attribute name="hue"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="amt"> + <ref name="ST_FixedPercentage"/> + </attribute> + </define> + <define name="CT_TransformEffect"> + <attribute name="sx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="sy"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="kx"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="ky"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="tx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="ty"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="CT_NoFillProperties"> + </define> + <define name="CT_SolidColorFillProperties"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_LinearShadeProperties"> + <attribute name="ang"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="scaled"> + <data type="boolean"/> + </attribute> + </define> + <define name="ST_PathShadeType"> + <choice> + <!-- Shape --> + <value>shape</value> + <!-- Circle --> + <value>circle</value> + <!-- Rectangle --> + <value>rect</value> + </choice> + </define> + <define name="CT_PathShadeProperties"> + <element name="fillToRect"> + <ref name="CT_RelativeRect"/> + </element> + <attribute name="path"> + <ref name="ST_PathShadeType"/> + </attribute> + </define> + <define name="EG_ShadeProperties"> + <choice> + <element name="lin"> + <ref name="CT_LinearShadeProperties"/> + </element> + <element name="path"> + <ref name="CT_PathShadeProperties"/> + </element> + </choice> + </define> + <define name="ST_TileFlipMode"> + <choice> + <!-- None --> + <value>none</value> + <!-- Horizontal --> + <value>x</value> + <!-- Vertical --> + <value>y</value> + <!-- Horizontal and Vertical --> + <value>xy</value> + </choice> + </define> + <define name="CT_GradientStop"> + <ref name="EG_ColorChoice"/> + <attribute name="pos"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_GradientStopList"> + <element name="gs"> + <ref name="CT_GradientStop"/> + </element> + </define> + <define name="CT_GradientFillProperties"> + <element name="gsLst"> + <ref name="CT_GradientStopList"/> + </element> + <ref name="EG_ShadeProperties"/> + <element name="tileRect"> + <ref name="CT_RelativeRect"/> + </element> + <attribute name="flip"> + <ref name="ST_TileFlipMode"/> + </attribute> + <attribute name="rotWithShape"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_TileInfoProperties"> + <attribute name="tx"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="ty"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="sx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="sy"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="flip"> + <ref name="ST_TileFlipMode"/> + </attribute> + <attribute name="algn"> + <ref name="ST_RectAlignment"/> + </attribute> + </define> + <define name="CT_StretchInfoProperties"> + <element name="fillRect"> + <ref name="CT_RelativeRect"/> + </element> + </define> + <define name="EG_FillModeProperties"> + <choice> + <element name="tile"> + <ref name="CT_TileInfoProperties"/> + </element> + <element name="stretch"> + <ref name="CT_StretchInfoProperties"/> + </element> + </choice> + </define> + <define name="ST_BlipCompression"> + <choice> + <!-- Email Compression --> + <value>email</value> + <!-- Screen Viewing Compression --> + <value>screen</value> + <!-- Printing Compression --> + <value>print</value> + <!-- High Quality Printing Compression --> + <value>hqprint</value> + <!-- No Compression --> + <value>none</value> + </choice> + </define> + <define name="CT_Blip"> + <choice> + <element name="alphaBiLevel"> + <ref name="CT_AlphaBiLevelEffect"/> + </element> + <element name="alphaCeiling"> + <ref name="CT_AlphaCeilingEffect"/> + </element> + <element name="alphaFloor"> + <ref name="CT_AlphaFloorEffect"/> + </element> + <element name="alphaInv"> + <ref name="CT_AlphaInverseEffect"/> + </element> + <element name="alphaMod"> + <ref name="CT_AlphaModulateEffect"/> + </element> + <element name="alphaModFix"> + <ref name="CT_AlphaModulateFixedEffect"/> + </element> + <element name="alphaRepl"> + <ref name="CT_AlphaReplaceEffect"/> + </element> + <element name="biLevel"> + <ref name="CT_BiLevelEffect"/> + </element> + <element name="blur"> + <ref name="CT_BlurEffect"/> + </element> + <element name="clrChange"> + <ref name="CT_ColorChangeEffect"/> + </element> + <element name="clrRepl"> + <ref name="CT_ColorReplaceEffect"/> + </element> + <element name="duotone"> + <ref name="CT_DuotoneEffect"/> + </element> + <element name="fillOverlay"> + <ref name="CT_FillOverlayEffect"/> + </element> + <element name="grayscl"> + <ref name="CT_GrayscaleEffect"/> + </element> + <element name="hsl"> + <ref name="CT_HSLEffect"/> + </element> + <element name="lum"> + <ref name="CT_LuminanceEffect"/> + </element> + <element name="tint"> + <ref name="CT_TintEffect"/> + </element> + </choice> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <ref name="AG_Blob"/> + <attribute name="cstate"> + <ref name="ST_BlipCompression"/> + </attribute> + </define> + <define name="CT_BlipFillProperties"> + <element name="blip"> + <ref name="CT_Blip"/> + </element> + <element name="srcRect"> + <ref name="CT_RelativeRect"/> + </element> + <ref name="EG_FillModeProperties"/> + <attribute name="dpi"> + <data type="unsignedInt"/> + </attribute> + <attribute name="rotWithShape"> + <data type="boolean"/> + </attribute> + </define> + <define name="ST_PresetPatternVal"> + <choice> + <!-- 5% --> + <value>pct5</value> + <!-- 10% --> + <value>pct10</value> + <!-- 20% --> + <value>pct20</value> + <!-- 25% --> + <value>pct25</value> + <!-- 30% --> + <value>pct30</value> + <!-- 40% --> + <value>pct40</value> + <!-- 50% --> + <value>pct50</value> + <!-- 60% --> + <value>pct60</value> + <!-- 70% --> + <value>pct70</value> + <!-- 75% --> + <value>pct75</value> + <!-- 80% --> + <value>pct80</value> + <!-- 90% --> + <value>pct90</value> + <!-- Horizontal --> + <value>horz</value> + <!-- Vertical --> + <value>vert</value> + <!-- Light Horizontal --> + <value>ltHorz</value> + <!-- Light Vertical --> + <value>ltVert</value> + <!-- Dark Horizontal --> + <value>dkHorz</value> + <!-- Dark Vertical --> + <value>dkVert</value> + <!-- Narrow Horizontal --> + <value>narHorz</value> + <!-- Narrow Vertical --> + <value>narVert</value> + <!-- Dashed Horizontal --> + <value>dashHorz</value> + <!-- Dashed Vertical --> + <value>dashVert</value> + <!-- Cross --> + <value>cross</value> + <!-- Downward Diagonal --> + <value>dnDiag</value> + <!-- Upward Diagonal --> + <value>upDiag</value> + <!-- Light Downward Diagonal --> + <value>ltDnDiag</value> + <!-- Light Upward Diagonal --> + <value>ltUpDiag</value> + <!-- Dark Downward Diagonal --> + <value>dkDnDiag</value> + <!-- Dark Upward Diagonal --> + <value>dkUpDiag</value> + <!-- Wide Downward Diagonal --> + <value>wdDnDiag</value> + <!-- Wide Upward Diagonal --> + <value>wdUpDiag</value> + <!-- Dashed Downward Diagonal --> + <value>dashDnDiag</value> + <!-- Dashed Upward Diagonal --> + <value>dashUpDiag</value> + <!-- Diagonal Cross --> + <value>diagCross</value> + <!-- Small Checker Board --> + <value>smCheck</value> + <!-- Large Checker Board --> + <value>lgCheck</value> + <!-- Small Grid --> + <value>smGrid</value> + <!-- Large Grid --> + <value>lgGrid</value> + <!-- Dotted Grid --> + <value>dotGrid</value> + <!-- Small Confetti --> + <value>smConfetti</value> + <!-- Large Confetti --> + <value>lgConfetti</value> + <!-- Horizontal Brick --> + <value>horzBrick</value> + <!-- Diagonal Brick --> + <value>diagBrick</value> + <!-- Solid Diamond --> + <value>solidDmnd</value> + <!-- Open Diamond --> + <value>openDmnd</value> + <!-- Dotted Diamond --> + <value>dotDmnd</value> + <!-- Plaid --> + <value>plaid</value> + <!-- Sphere --> + <value>sphere</value> + <!-- Weave --> + <value>weave</value> + <!-- Divot --> + <value>divot</value> + <!-- Shingle --> + <value>shingle</value> + <!-- Wave --> + <value>wave</value> + <!-- Trellis --> + <value>trellis</value> + <!-- Zig Zag --> + <value>zigZag</value> + <!-- Dashed Dotted --> + <value>dashDot</value> + <!-- Dashed Dotted Upward Diagonal --> + <value>dashdotUpDiag</value> + <!-- Solid Dotted --> + <value>lsolidDoted</value> + </choice> + </define> + <define name="CT_PatternFillProperties"> + <element name="fgClr"> + <ref name="CT_Color"/> + </element> + <element name="bgClr"> + <ref name="CT_Color"/> + </element> + <attribute name="prst"> + <ref name="ST_PresetPatternVal"/> + </attribute> + </define> + <define name="CT_GroupFillProperties"> + </define> + <define name="EG_FillProperties"> + <choice> + <element name="noFill"> + <ref name="CT_NoFillProperties"/> + </element> + <element name="solidFill"> + <ref name="CT_SolidColorFillProperties"/> + </element> + <element name="gradFill"> + <ref name="CT_GradientFillProperties"/> + </element> + <element name="blipFill"> + <ref name="CT_BlipFillProperties"/> + </element> + <element name="pattFill"> + <ref name="CT_PatternFillProperties"/> + </element> + <element name="grpFill"> + <ref name="CT_GroupFillProperties"/> + </element> + </choice> + </define> + <define name="CT_FillProperties"> + <ref name="EG_FillProperties"/> + </define> + <define name="CT_FillEffect"> + <ref name="EG_FillProperties"/> + </define> + <define name="ST_BlendMode"> + <choice> + <!-- Overlay --> + <value>over</value> + <!-- Multiply --> + <value>mult</value> + <!-- Screen --> + <value>screen</value> + <!-- Darken --> + <value>darken</value> + <!-- Lighten --> + <value>lighten</value> + </choice> + </define> + <define name="CT_FillOverlayEffect"> + <ref name="EG_FillProperties"/> + <attribute name="blend"> + <ref name="ST_BlendMode"/> + </attribute> + </define> + <define name="CT_EffectReference"> + <attribute name="ref"> + <data type="token"/> + </attribute> + </define> + <define name="EG_Effect"> + <choice> + <element name="cont"> + <ref name="CT_EffectContainer"/> + </element> + <element name="effect"> + <ref name="CT_EffectReference"/> + </element> + <element name="alphaBiLevel"> + <ref name="CT_AlphaBiLevelEffect"/> + </element> + <element name="alphaCeiling"> + <ref name="CT_AlphaCeilingEffect"/> + </element> + <element name="alphaFloor"> + <ref name="CT_AlphaFloorEffect"/> + </element> + <element name="alphaInv"> + <ref name="CT_AlphaInverseEffect"/> + </element> + <element name="alphaMod"> + <ref name="CT_AlphaModulateEffect"/> + </element> + <element name="alphaModFix"> + <ref name="CT_AlphaModulateFixedEffect"/> + </element> + <element name="alphaOutset"> + <ref name="CT_AlphaOutsetEffect"/> + </element> + <element name="alphaRepl"> + <ref name="CT_AlphaReplaceEffect"/> + </element> + <element name="biLevel"> + <ref name="CT_BiLevelEffect"/> + </element> + <element name="blend"> + <ref name="CT_BlendEffect"/> + </element> + <element name="blur"> + <ref name="CT_BlurEffect"/> + </element> + <element name="clrChange"> + <ref name="CT_ColorChangeEffect"/> + </element> + <element name="clrRepl"> + <ref name="CT_ColorReplaceEffect"/> + </element> + <element name="duotone"> + <ref name="CT_DuotoneEffect"/> + </element> + <element name="fill"> + <ref name="CT_FillEffect"/> + </element> + <element name="fillOverlay"> + <ref name="CT_FillOverlayEffect"/> + </element> + <element name="glow"> + <ref name="CT_GlowEffect"/> + </element> + <element name="grayscl"> + <ref name="CT_GrayscaleEffect"/> + </element> + <element name="hsl"> + <ref name="CT_HSLEffect"/> + </element> + <element name="innerShdw"> + <ref name="CT_InnerShadowEffect"/> + </element> + <element name="lum"> + <ref name="CT_LuminanceEffect"/> + </element> + <element name="outerShdw"> + <ref name="CT_OuterShadowEffect"/> + </element> + <element name="prstShdw"> + <ref name="CT_PresetShadowEffect"/> + </element> + <element name="reflection"> + <ref name="CT_ReflectionEffect"/> + </element> + <element name="relOff"> + <ref name="CT_RelativeOffsetEffect"/> + </element> + <element name="softEdge"> + <ref name="CT_SoftEdgesEffect"/> + </element> + <element name="tint"> + <ref name="CT_TintEffect"/> + </element> + <element name="xfrm"> + <ref name="CT_TransformEffect"/> + </element> + </choice> + </define> + <define name="ST_EffectContainerType"> + <choice> + <!-- Sibling --> + <value>sib</value> + <!-- Tree --> + <value>tree</value> + </choice> + </define> + <define name="CT_EffectContainer"> + <ref name="EG_Effect"/> + <attribute name="type"> + <ref name="ST_EffectContainerType"/> + </attribute> + <attribute name="name"> + <data type="token"/> + </attribute> + </define> + <define name="CT_AlphaModulateEffect"> + <element name="cont"> + <ref name="CT_EffectContainer"/> + </element> + </define> + <define name="CT_BlendEffect"> + <element name="cont"> + <ref name="CT_EffectContainer"/> + </element> + <attribute name="blend"> + <ref name="ST_BlendMode"/> + </attribute> + </define> + <define name="CT_EffectList"> + <element name="blur"> + <ref name="CT_BlurEffect"/> + </element> + <element name="fillOverlay"> + <ref name="CT_FillOverlayEffect"/> + </element> + <element name="glow"> + <ref name="CT_GlowEffect"/> + </element> + <element name="innerShdw"> + <ref name="CT_InnerShadowEffect"/> + </element> + <element name="outerShdw"> + <ref name="CT_OuterShadowEffect"/> + </element> + <element name="prstShdw"> + <ref name="CT_PresetShadowEffect"/> + </element> + <element name="reflection"> + <ref name="CT_ReflectionEffect"/> + </element> + <element name="softEdge"> + <ref name="CT_SoftEdgesEffect"/> + </element> + </define> + <define name="EG_EffectProperties"> + <choice> + <element name="effectLst"> + <ref name="CT_EffectList"/> + </element> + <element name="effectDag"> + <ref name="CT_EffectContainer"/> + </element> + </choice> + </define> + <define name="CT_EffectProperties"> + <ref name="EG_EffectProperties"/> + </define> + <define name="blip"> + <element name="blip"> + <ref name="CT_Blip"/> + </element> + </define> + </grammar> + <resource name="ST_PresetShadowVal" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw1">shdw1</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw2">shdw2</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw3">shdw3</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw4">shdw4</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw5">shdw5</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw6">shdw6</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw7">shdw7</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw8">shdw8</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw9">shdw9</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw10">shdw10</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw11">shdw11</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw12">shdw12</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw13">shdw13</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw14">shdw14</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw15">shdw15</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw16">shdw16</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw17">shdw17</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw18">shdw18</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw19">shdw19</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw20">shdw20</value> + </resource> + <resource name="CT_SolidColorFillProperties" resource="Properties"/> + <resource name="ST_PathShadeType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PathShadeType_shape">shape</value> + <value tokenid="ooxml:Value_drawingml_ST_PathShadeType_circle">circle</value> + <value tokenid="ooxml:Value_drawingml_ST_PathShadeType_rect">rect</value> + </resource> + <resource name="ST_TileFlipMode" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_none">none</value> + <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_x">x</value> + <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_y">y</value> + <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_xy">xy</value> + </resource> + <resource name="CT_GradientStop" resource="Properties"> + <attribute name="pos" tokenid="ooxml:CT_GradientStop_pos"/> + </resource> + <resource name="CT_TileInfoProperties" resource="Properties"> + <attribute name="tx" tokenid="ooxml:CT_TileInfoProperties_tx"/> + <attribute name="ty" tokenid="ooxml:CT_TileInfoProperties_ty"/> + <attribute name="sx" tokenid="ooxml:CT_TileInfoProperties_sx"/> + <attribute name="sy" tokenid="ooxml:CT_TileInfoProperties_sy"/> + <attribute name="flip" tokenid="ooxml:CT_TileInfoProperties_flip"/> + <attribute name="algn" tokenid="ooxml:CT_TileInfoProperties_algn"/> + </resource> + <resource name="CT_StretchInfoProperties" resource="Properties"> + <element name="fillRect" tokenid="ooxml:CT_StretchInfoProperties_fillRect"/> + </resource> + <resource name="EG_FillModeProperties" resource="Properties"> + <element name="tile" tokenid="ooxml:EG_FillModeProperties_tile"/> + <element name="stretch" tokenid="ooxml:EG_FillModeProperties_stretch"/> + </resource> + <resource name="ST_BlipCompression" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_email">email</value> + <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_screen">screen</value> + <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_print">print</value> + <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_hqprint">hqprint</value> + <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_none">none</value> + </resource> + <resource name="CT_Blip" resource="Properties"> + <element name="alphaBiLevel" tokenid="ooxml:CT_Blip_alphaBiLevel"/> + <element name="alphaCeiling" tokenid="ooxml:CT_Blip_alphaCeiling"/> + <element name="alphaFloor" tokenid="ooxml:CT_Blip_alphaFloor"/> + <element name="alphaInv" tokenid="ooxml:CT_Blip_alphaInv"/> + <element name="alphaMod" tokenid="ooxml:CT_Blip_alphaMod"/> + <element name="alphaModFix" tokenid="ooxml:CT_Blip_alphaModFix"/> + <element name="alphaRepl" tokenid="ooxml:CT_Blip_alphaRepl"/> + <element name="biLevel" tokenid="ooxml:CT_Blip_biLevel"/> + <element name="blur" tokenid="ooxml:CT_Blip_blur"/> + <element name="clrChange" tokenid="ooxml:CT_Blip_clrChange"/> + <element name="clrRepl" tokenid="ooxml:CT_Blip_clrRepl"/> + <element name="duotone" tokenid="ooxml:CT_Blip_duotone"/> + <element name="fillOverlay" tokenid="ooxml:CT_Blip_fillOverlay"/> + <element name="grayscl" tokenid="ooxml:CT_Blip_grayscl"/> + <element name="hsl" tokenid="ooxml:CT_Blip_hsl"/> + <element name="lum" tokenid="ooxml:CT_Blip_lum"/> + <element name="tint" tokenid="ooxml:CT_Blip_tint"/> + <element name="extLst" tokenid="ooxml:CT_Blip_extLst"/> + <attribute name="cstate" tokenid="ooxml:CT_Blip_cstate"/> + </resource> + <resource name="CT_BlipFillProperties" resource="Properties"> + <element name="blip" tokenid="ooxml:CT_BlipFillProperties_blip"/> + <element name="srcRect" tokenid="ooxml:CT_BlipFillProperties_srcRect"/> + <attribute name="dpi" tokenid="ooxml:CT_BlipFillProperties_dpi"/> + <attribute name="rotWithShape" tokenid="ooxml:CT_BlipFillProperties_rotWithShape"/> + </resource> + <resource name="ST_PresetPatternVal" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct5">pct5</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct10">pct10</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct20">pct20</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct25">pct25</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct30">pct30</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct40">pct40</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct50">pct50</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct60">pct60</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct70">pct70</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct75">pct75</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct80">pct80</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct90">pct90</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horz">horz</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_vert">vert</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltHorz">ltHorz</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltVert">ltVert</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkHorz">dkHorz</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkVert">dkVert</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narHorz">narHorz</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narVert">narVert</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashHorz">dashHorz</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashVert">dashVert</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_cross">cross</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dnDiag">dnDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_upDiag">upDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltDnDiag">ltDnDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltUpDiag">ltUpDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkDnDiag">dkDnDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkUpDiag">dkUpDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdDnDiag">wdDnDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdUpDiag">wdUpDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashDnDiag">dashDnDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashUpDiag">dashUpDiag</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagCross">diagCross</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smCheck">smCheck</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgCheck">lgCheck</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smGrid">smGrid</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgGrid">lgGrid</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotGrid">dotGrid</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smConfetti">smConfetti</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgConfetti">lgConfetti</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horzBrick">horzBrick</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagBrick">diagBrick</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_solidDmnd">solidDmnd</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_openDmnd">openDmnd</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotDmnd">dotDmnd</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_plaid">plaid</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_sphere">sphere</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_weave">weave</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_divot">divot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_shingle">shingle</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wave">wave</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_trellis">trellis</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_zigZag">zigZag</value> + </resource> + <resource name="ST_BlendMode" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_BlendMode_over">over</value> + <value tokenid="ooxml:Value_drawingml_ST_BlendMode_mult">mult</value> + <value tokenid="ooxml:Value_drawingml_ST_BlendMode_screen">screen</value> + <value tokenid="ooxml:Value_drawingml_ST_BlendMode_darken">darken</value> + <value tokenid="ooxml:Value_drawingml_ST_BlendMode_lighten">lighten</value> + </resource> + <resource name="EG_Effect" resource="Properties"> + <element name="cont" tokenid="ooxml:EG_Effect_cont"/> + <element name="effect" tokenid="ooxml:EG_Effect_effect"/> + <element name="alphaBiLevel" tokenid="ooxml:EG_Effect_alphaBiLevel"/> + <element name="alphaCeiling" tokenid="ooxml:EG_Effect_alphaCeiling"/> + <element name="alphaFloor" tokenid="ooxml:EG_Effect_alphaFloor"/> + <element name="alphaInv" tokenid="ooxml:EG_Effect_alphaInv"/> + <element name="alphaMod" tokenid="ooxml:EG_Effect_alphaMod"/> + <element name="alphaModFix" tokenid="ooxml:EG_Effect_alphaModFix"/> + <element name="alphaOutset" tokenid="ooxml:EG_Effect_alphaOutset"/> + <element name="alphaRepl" tokenid="ooxml:EG_Effect_alphaRepl"/> + <element name="biLevel" tokenid="ooxml:EG_Effect_biLevel"/> + <element name="blend" tokenid="ooxml:EG_Effect_blend"/> + <element name="blur" tokenid="ooxml:EG_Effect_blur"/> + <element name="clrChange" tokenid="ooxml:EG_Effect_clrChange"/> + <element name="clrRepl" tokenid="ooxml:EG_Effect_clrRepl"/> + <element name="duotone" tokenid="ooxml:EG_Effect_duotone"/> + <element name="fill" tokenid="ooxml:EG_Effect_fill"/> + <element name="fillOverlay" tokenid="ooxml:EG_Effect_fillOverlay"/> + <element name="glow" tokenid="ooxml:EG_Effect_glow"/> + <element name="grayscl" tokenid="ooxml:EG_Effect_grayscl"/> + <element name="hsl" tokenid="ooxml:EG_Effect_hsl"/> + <element name="innerShdw" tokenid="ooxml:EG_Effect_innerShdw"/> + <element name="lum" tokenid="ooxml:EG_Effect_lum"/> + <element name="outerShdw" tokenid="ooxml:EG_Effect_outerShdw"/> + <element name="prstShdw" tokenid="ooxml:EG_Effect_prstShdw"/> + <element name="reflection" tokenid="ooxml:EG_Effect_reflection"/> + <element name="relOff" tokenid="ooxml:EG_Effect_relOff"/> + <element name="softEdge" tokenid="ooxml:EG_Effect_softEdge"/> + <element name="tint" tokenid="ooxml:EG_Effect_tint"/> + <element name="xfrm" tokenid="ooxml:EG_Effect_xfrm"/> + </resource> + <resource name="ST_EffectContainerType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_EffectContainerType_sib">sib</value> + <value tokenid="ooxml:Value_drawingml_ST_EffectContainerType_tree">tree</value> + </resource> + <resource name="CT_EffectContainer" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_EffectContainer_type"/> + <attribute name="name" tokenid="ooxml:CT_EffectContainer_name"/> + </resource> + </namespace> + <namespace name="dml-shapeLineProperties"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shapeEffects"/> + <define name="ST_LineEndType"> + <choice> + <!-- None --> + <value>none</value> + <!-- Triangle Arrow Head --> + <value>triangle</value> + <!-- Stealth Arrow --> + <value>stealth</value> + <!-- Diamond --> + <value>diamond</value> + <!-- Oval --> + <value>oval</value> + <!-- Arrow Head --> + <value>arrow</value> + </choice> + </define> + <define name="ST_LineEndWidth"> + <choice> + <!-- Small --> + <value>sm</value> + <!-- Medium --> + <value>med</value> + <!-- Large --> + <value>lg</value> + </choice> + </define> + <define name="ST_LineEndLength"> + <choice> + <!-- Small --> + <value>sm</value> + <!-- Medium --> + <value>med</value> + <!-- Large --> + <value>lg</value> + </choice> + </define> + <define name="CT_LineEndProperties"> + <attribute name="type"> + <ref name="ST_LineEndType"/> + </attribute> + <attribute name="w"> + <ref name="ST_LineEndWidth"/> + </attribute> + <attribute name="len"> + <ref name="ST_LineEndLength"/> + </attribute> + </define> + <define name="EG_LineFillProperties"> + <choice> + <element name="noFill"> + <ref name="CT_NoFillProperties"/> + </element> + <element name="solidFill"> + <ref name="CT_SolidColorFillProperties"/> + </element> + <element name="gradFill"> + <ref name="CT_GradientFillProperties"/> + </element> + <element name="pattFill"> + <ref name="CT_PatternFillProperties"/> + </element> + </choice> + </define> + <define name="CT_LineJoinBevel"> + </define> + <define name="CT_LineJoinRound"> + </define> + <define name="CT_LineJoinMiterProperties"> + <attribute name="lim"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + <define name="EG_LineJoinProperties"> + <choice> + <element name="round"> + <ref name="CT_LineJoinRound"/> + </element> + <element name="bevel"> + <ref name="CT_LineJoinBevel"/> + </element> + <element name="miter"> + <ref name="CT_LineJoinMiterProperties"/> + </element> + </choice> + </define> + <define name="ST_PresetLineDashVal"> + <choice> + <!-- Solid --> + <value>solid</value> + <!-- Dot --> + <value>dot</value> + <!-- Dash --> + <value>dash</value> + <!-- Large Dash --> + <value>lgDash</value> + <!-- Dash Dot --> + <value>dashDot</value> + <!-- Large Dash Dot --> + <value>lgDashDot</value> + <!-- Large Dash Dot Dot --> + <value>lgDashDotDot</value> + <!-- System Dash --> + <value>sysDash</value> + <!-- System Dot --> + <value>sysDot</value> + <!-- System Dash Dot --> + <value>sysDashDot</value> + <!-- System Dash Dot Dot --> + <value>sysDashDotDot</value> + </choice> + </define> + <define name="CT_PresetLineDashProperties"> + <attribute name="val"> + <ref name="ST_PresetLineDashVal"/> + </attribute> + </define> + <define name="CT_DashStop"> + <attribute name="d"> + <ref name="ST_PositivePercentage"/> + </attribute> + <attribute name="sp"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + <define name="CT_DashStopList"> + <element name="ds"> + <ref name="CT_DashStop"/> + </element> + </define> + <define name="EG_LineDashProperties"> + <choice> + <element name="prstDash"> + <ref name="CT_PresetLineDashProperties"/> + </element> + <element name="custDash"> + <ref name="CT_DashStopList"/> + </element> + </choice> + </define> + <define name="ST_LineCap"> + <choice> + <!-- Round Line Cap --> + <value>rnd</value> + <!-- Square Line Cap --> + <value>sq</value> + <!-- Flat Line Cap --> + <value>flat</value> + </choice> + </define> + <define name="ST_LineWidth"> + </define> + <define name="ST_PenAlignment"> + <choice> + <!-- Center Alignment --> + <value>ctr</value> + <!-- Inset Alignment --> + <value>in</value> + </choice> + </define> + <define name="ST_CompoundLine"> + <choice> + <!-- Single Line --> + <value>sng</value> + <!-- Double Lines --> + <value>dbl</value> + <!-- Thick Thin Double Lines --> + <value>thickThin</value> + <!-- Thin Thick Double Lines --> + <value>thinThick</value> + <!-- Thin Thick Thin Triple Lines --> + <value>tri</value> + </choice> + </define> + <define name="CT_LineProperties"> + <ref name="EG_LineFillProperties"/> + <ref name="EG_LineDashProperties"/> + <ref name="EG_LineJoinProperties"/> + <element name="headEnd"> + <ref name="CT_LineEndProperties"/> + </element> + <element name="tailEnd"> + <ref name="CT_LineEndProperties"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="w"> + <ref name="ST_LineWidth"/> + </attribute> + <attribute name="cap"> + <ref name="ST_LineCap"/> + </attribute> + <attribute name="cmpd"> + <ref name="ST_CompoundLine"/> + </attribute> + <attribute name="algn"> + <ref name="ST_PenAlignment"/> + </attribute> + </define> + </grammar> + <resource name="ST_LineEndType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_LineEndType_none">none</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndType_triangle">triangle</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndType_stealth">stealth</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndType_diamond">diamond</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndType_oval">oval</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndType_arrow">arrow</value> + </resource> + <resource name="ST_LineEndWidth" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_LineEndWidth_sm">sm</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndWidth_med">med</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndWidth_lg">lg</value> + </resource> + <resource name="ST_LineEndLength" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_LineEndLength_sm">sm</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndLength_med">med</value> + <value tokenid="ooxml:Value_drawingml_ST_LineEndLength_lg">lg</value> + </resource> + <resource name="CT_LineEndProperties" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_LineEndProperties_type"/> + <attribute name="w" tokenid="ooxml:CT_LineEndProperties_w"/> + <attribute name="len" tokenid="ooxml:CT_LineEndProperties_len"/> + </resource> + <resource name="EG_LineFillProperties" resource="Properties"> + <element name="noFill" tokenid="ooxml:EG_LineFillProperties_noFill"/> + <element name="solidFill" tokenid="ooxml:EG_LineFillProperties_solidFill"/> + <element name="gradFill" tokenid="ooxml:EG_LineFillProperties_gradFill"/> + <element name="pattFill" tokenid="ooxml:EG_LineFillProperties_pattFill"/> + </resource> + <resource name="ST_PresetLineDashVal" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_solid">solid</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dot">dot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dash">dash</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDash">lgDash</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dashDot">dashDot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDot">lgDashDot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDotDot">lgDashDotDot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDash">sysDash</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDot">sysDot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDot">sysDashDot</value> + <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDotDot">sysDashDotDot</value> + </resource> + <resource name="ST_LineCap" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_LineCap_rnd">rnd</value> + <value tokenid="ooxml:Value_drawingml_ST_LineCap_sq">sq</value> + <value tokenid="ooxml:Value_drawingml_ST_LineCap_flat">flat</value> + </resource> + <resource name="ST_PenAlignment" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PenAlignment_ctr">ctr</value> + <value tokenid="ooxml:Value_drawingml_ST_PenAlignment_in">in</value> + </resource> + <resource name="ST_CompoundLine" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_sng">sng</value> + <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_dbl">dbl</value> + <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_thickThin">thickThin</value> + <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_thinThick">thinThick</value> + <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_tri">tri</value> + </resource> + <resource name="CT_LineProperties" resource="Properties"> + <element name="headEnd" tokenid="ooxml:CT_LineProperties_headEnd"/> + <element name="tailEnd" tokenid="ooxml:CT_LineProperties_tailEnd"/> + <element name="extLst" tokenid="ooxml:CT_LineProperties_extLst"/> + <attribute name="w" tokenid="ooxml:CT_LineProperties_w"/> + <attribute name="cap" tokenid="ooxml:CT_LineProperties_cap"/> + <attribute name="cmpd" tokenid="ooxml:CT_LineProperties_cmpd"/> + <attribute name="algn" tokenid="ooxml:CT_LineProperties_algn"/> + </resource> + </namespace> + <namespace name="dml-shapeProperties"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shape3DStyles"/> + <include href="dml-shape3DScene"/> + <include href="dml-shapeGeometry"/> + <include href="dml-shapeEffects"/> + <include href="dml-shapeLineProperties"/> + <define name="CT_ShapeProperties"> + <element name="xfrm"> + <ref name="CT_Transform2D"/> + </element> + <ref name="EG_Geometry"/> + <ref name="EG_FillProperties"/> + <element name="ln"> + <ref name="CT_LineProperties"/> + </element> + <ref name="EG_EffectProperties"/> + <element name="scene3d"> + <ref name="CT_Scene3D"/> + </element> + <element name="sp3d"> + <ref name="CT_Shape3D"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="bwMode"> + <ref name="ST_BlackWhiteMode"/> + </attribute> + </define> + <define name="CT_GroupShapeProperties"> + <element name="xfrm"> + <ref name="CT_GroupTransform2D"/> + </element> + <ref name="EG_FillProperties"/> + <ref name="EG_EffectProperties"/> + <element name="scene3d"> + <ref name="CT_Scene3D"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="bwMode"> + <ref name="ST_BlackWhiteMode"/> + </attribute> + </define> + </grammar> + <resource name="CT_ShapeProperties" resource="Properties"> + <element name="xfrm" tokenid="ooxml:CT_ShapeProperties_xfrm"/> + <element name="ln" tokenid="ooxml:CT_ShapeProperties_ln"/> + <element name="scene3d" tokenid="ooxml:CT_ShapeProperties_scene3d"/> + <element name="sp3d" tokenid="ooxml:CT_ShapeProperties_sp3d"/> + <element name="extLst" tokenid="ooxml:CT_ShapeProperties_extLst"/> + <attribute name="bwMode" tokenid="ooxml:CT_ShapeProperties_bwMode"/> + </resource> + </namespace> + <namespace name="dml-baseTypes"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="shared-relationshipReference"/> + <define name="CT_OfficeArtExtension"> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <attribute name="uri"> + <data type="token"/> + </attribute> + </define> + <define name="ST_Coordinate"> + <data type="long"/> + </define> + <define name="ST_PositiveCoordinate"> + <data type="long"/> + </define> + <define name="ST_Angle"> + <data type="int"/> + </define> + <define name="CT_Angle"> + <attribute name="val"> + <ref name="ST_Angle"/> + </attribute> + </define> + <define name="ST_FixedAngle"> + </define> + <define name="ST_PositiveFixedAngle"> + </define> + <define name="CT_PositiveFixedAngle"> + <attribute name="val"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + </define> + <define name="ST_Percentage"> + <data type="int"/> + </define> + <define name="CT_Percentage"> + <attribute name="val"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="ST_PositivePercentage"> + </define> + <define name="CT_PositivePercentage"> + <attribute name="val"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + <define name="ST_FixedPercentage"> + </define> + <define name="CT_FixedPercentage"> + <attribute name="val"> + <ref name="ST_FixedPercentage"/> + </attribute> + </define> + <define name="ST_PositiveFixedPercentage"> + </define> + <define name="CT_PositiveFixedPercentage"> + <attribute name="val"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_Ratio"> + <attribute name="n"> + <data type="long"/> + </attribute> + <attribute name="d"> + <data type="long"/> + </attribute> + </define> + <define name="CT_Point2D"> + <attribute name="x"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="y"> + <ref name="ST_Coordinate"/> + </attribute> + </define> + <define name="CT_PositiveSize2D"> + <attribute name="cx"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="cy"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + </define> + <define name="CT_ComplementTransform"> + </define> + <define name="CT_InverseTransform"> + </define> + <define name="CT_GrayscaleTransform"> + </define> + <define name="CT_GammaTransform"> + </define> + <define name="CT_InverseGammaTransform"> + </define> + <define name="EG_ColorTransform"> + <choice> + <element name="tint"> + <ref name="CT_PositiveFixedPercentage"/> + </element> + <element name="shade"> + <ref name="CT_PositiveFixedPercentage"/> + </element> + <element name="comp"> + <ref name="CT_ComplementTransform"/> + </element> + <element name="inv"> + <ref name="CT_InverseTransform"/> + </element> + <element name="gray"> + <ref name="CT_GrayscaleTransform"/> + </element> + <element name="alpha"> + <ref name="CT_PositiveFixedPercentage"/> + </element> + <element name="alphaOff"> + <ref name="CT_FixedPercentage"/> + </element> + <element name="alphaMod"> + <ref name="CT_PositivePercentage"/> + </element> + <element name="hue"> + <ref name="CT_PositiveFixedAngle"/> + </element> + <element name="hueOff"> + <ref name="CT_Angle"/> + </element> + <element name="hueMod"> + <ref name="CT_PositivePercentage"/> + </element> + <element name="sat"> + <ref name="CT_Percentage"/> + </element> + <element name="satOff"> + <ref name="CT_Percentage"/> + </element> + <element name="satMod"> + <ref name="CT_Percentage"/> + </element> + <element name="lum"> + <ref name="CT_Percentage"/> + </element> + <element name="lumOff"> + <ref name="CT_Percentage"/> + </element> + <element name="lumMod"> + <ref name="CT_Percentage"/> + </element> + <element name="red"> + <ref name="CT_Percentage"/> + </element> + <element name="redOff"> + <ref name="CT_Percentage"/> + </element> + <element name="redMod"> + <ref name="CT_Percentage"/> + </element> + <element name="green"> + <ref name="CT_Percentage"/> + </element> + <element name="greenOff"> + <ref name="CT_Percentage"/> + </element> + <element name="greenMod"> + <ref name="CT_Percentage"/> + </element> + <element name="blue"> + <ref name="CT_Percentage"/> + </element> + <element name="blueOff"> + <ref name="CT_Percentage"/> + </element> + <element name="blueMod"> + <ref name="CT_Percentage"/> + </element> + <element name="gamma"> + <ref name="CT_GammaTransform"/> + </element> + <element name="invGamma"> + <ref name="CT_InverseGammaTransform"/> + </element> + </choice> + </define> + <define name="CT_ScRgbColor"> + <ref name="EG_ColorTransform"/> + <attribute name="r"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="g"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="b"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="ST_HexBinary3"> + <data type="hexBinary"/> + </define> + <define name="CT_SRgbColor"> + <ref name="EG_ColorTransform"/> + <attribute name="val"> + <ref name="ST_HexBinary3"/> + </attribute> + </define> + <define name="CT_HslColor"> + <ref name="EG_ColorTransform"/> + <attribute name="hue"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="sat"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="lum"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="ST_SystemColorVal"> + <choice> + <!-- Scroll Bar System Color --> + <value>scrollBar</value> + <!-- Background System Color --> + <value>background</value> + <!-- Active Caption System Color --> + <value>activeCaption</value> + <!-- Inactive Caption System Color --> + <value>inactiveCaption</value> + <!-- Menu System Color --> + <value>menu</value> + <!-- Window System Color --> + <value>window</value> + <!-- Window Frame System Color --> + <value>windowFrame</value> + <!-- Menu Text System Color --> + <value>menuText</value> + <!-- Window Text System Color --> + <value>windowText</value> + <!-- Caption Text System Color --> + <value>captionText</value> + <!-- Active Border System Color --> + <value>activeBorder</value> + <!-- Inactive Border System Color --> + <value>inactiveBorder</value> + <!-- Application Workspace System Color --> + <value>appWorkspace</value> + <!-- Highlight System Color --> + <value>highlight</value> + <!-- Highlight Text System Color --> + <value>highlightText</value> + <!-- Button Face System Color --> + <value>btnFace</value> + <!-- Button Shadow System Color --> + <value>btnShadow</value> + <!-- Gray Text System Color --> + <value>grayText</value> + <!-- Button Text System Color --> + <value>btnText</value> + <!-- Inactive Caption Text System Color --> + <value>inactiveCaptionText</value> + <!-- Button Highlight System Color --> + <value>btnHighlight</value> + <!-- 3D Dark System Color --> + <value>3dDkShadow</value> + <!-- 3D Light System Color --> + <value>3dLight</value> + <!-- Info Text System Color --> + <value>infoText</value> + <!-- Info Back System Color --> + <value>infoBk</value> + <!-- Hot Light System Color --> + <value>hotLight</value> + <!-- Gradient Active Caption System Color --> + <value>gradientActiveCaption</value> + <!-- Gradient Inactive Caption System Color --> + <value>gradientInactiveCaption</value> + <!-- Menu Highlight System Color --> + <value>menuHighlight</value> + <!-- Menu Bar System Color --> + <value>menuBar</value> + </choice> + </define> + <define name="CT_SystemColor"> + <ref name="EG_ColorTransform"/> + <attribute name="val"> + <ref name="ST_SystemColorVal"/> + </attribute> + <attribute name="lastClr"> + <ref name="ST_HexBinary3"/> + </attribute> + </define> + <define name="ST_SchemeColorVal"> + <choice> + <!-- Background Color 1 --> + <value>bg1</value> + <!-- Text Color 1 --> + <value>tx1</value> + <!-- Background Color 2 --> + <value>bg2</value> + <!-- Text Color 2 --> + <value>tx2</value> + <!-- Accent Color 1 --> + <value>accent1</value> + <!-- Accent Color 2 --> + <value>accent2</value> + <!-- Accent Color 3 --> + <value>accent3</value> + <!-- Accent Color 4 --> + <value>accent4</value> + <!-- Accent Color 5 --> + <value>accent5</value> + <!-- Accent Color 6 --> + <value>accent6</value> + <!-- Hyperlink Color --> + <value>hlink</value> + <!-- Followed Hyperlink Color --> + <value>folHlink</value> + <!-- Style Color --> + <value>phClr</value> + <!-- Dark Color 1 --> + <value>dk1</value> + <!-- Light Color 1 --> + <value>lt1</value> + <!-- Dark Color 2 --> + <value>dk2</value> + <!-- Light Color 2 --> + <value>lt2</value> + </choice> + </define> + <define name="CT_SchemeColor"> + <ref name="EG_ColorTransform"/> + <attribute name="val"> + <ref name="ST_SchemeColorVal"/> + </attribute> + </define> + <define name="ST_PresetColorVal"> + <choice> + <!-- Alice Blue Preset Color --> + <value>aliceBlue</value> + <!-- Antique White Preset Color --> + <value>antiqueWhite</value> + <!-- Aqua Preset Color --> + <value>aqua</value> + <!-- Aquamarine Preset Color --> + <value>aquamarine</value> + <!-- Azure Preset Color --> + <value>azure</value> + <!-- Beige Preset Color --> + <value>beige</value> + <!-- Bisque Preset Color --> + <value>bisque</value> + <!-- Black Preset Color --> + <value>black</value> + <!-- Blanched Almond Preset Color --> + <value>blanchedAlmond</value> + <!-- Blue Preset Color --> + <value>blue</value> + <!-- Blue Violet Preset Color --> + <value>blueViolet</value> + <!-- Brown Preset Color --> + <value>brown</value> + <!-- Burly Wood Preset Color --> + <value>burlyWood</value> + <!-- Cadet Blue Preset Color --> + <value>cadetBlue</value> + <!-- Chartreuse Preset Color --> + <value>chartreuse</value> + <!-- Chocolate Preset Color --> + <value>chocolate</value> + <!-- Coral Preset Color --> + <value>coral</value> + <!-- Cornflower Blue Preset Color --> + <value>cornflowerBlue</value> + <!-- Cornsilk Preset Color --> + <value>cornsilk</value> + <!-- Crimson Preset Color --> + <value>crimson</value> + <!-- Cyan Preset Color --> + <value>cyan</value> + <!-- Dark Blue Preset Color --> + <value>dkBlue</value> + <!-- Dark Cyan Preset Color --> + <value>dkCyan</value> + <!-- Dark Goldenrod Preset Color --> + <value>dkGoldenrod</value> + <!-- Dark Gray Preset Color --> + <value>dkGray</value> + <!-- Dark Green Preset Color --> + <value>dkGreen</value> + <!-- Dark Khaki Preset Color --> + <value>dkKhaki</value> + <!-- Dark Magenta Preset Color --> + <value>dkMagenta</value> + <!-- Dark Olive Green Preset Color --> + <value>dkOliveGreen</value> + <!-- Dark Orange Preset Color --> + <value>dkOrange</value> + <!-- Dark Orchid Preset Color --> + <value>dkOrchid</value> + <!-- Dark Red Preset Color --> + <value>dkRed</value> + <!-- Dark Salmon Preset Color --> + <value>dkSalmon</value> + <!-- Dark Sea Green Preset Color --> + <value>dkSeaGreen</value> + <!-- Dark Slate Blue Preset Color --> + <value>dkSlateBlue</value> + <!-- Dark Slate Gray Preset Color --> + <value>dkSlateGray</value> + <!-- Dark Turquoise Preset Color --> + <value>dkTurquoise</value> + <!-- Dark Violet Preset Color --> + <value>dkViolet</value> + <!-- Deep Pink Preset Color --> + <value>deepPink</value> + <!-- Deep Sky Blue Preset Color --> + <value>deepSkyBlue</value> + <!-- Dim Gray Preset Color --> + <value>dimGray</value> + <!-- Dodger Blue Preset Color --> + <value>dodgerBlue</value> + <!-- Firebrick Preset Color --> + <value>firebrick</value> + <!-- Floral White Preset Color --> + <value>floralWhite</value> + <!-- Forest Green Preset Color --> + <value>forestGreen</value> + <!-- Fuchsia Preset Color --> + <value>fuchsia</value> + <!-- Gainsboro Preset Color --> + <value>gainsboro</value> + <!-- Ghost White Preset Color --> + <value>ghostWhite</value> + <!-- Gold Preset Color --> + <value>gold</value> + <!-- Goldenrod Preset Color --> + <value>goldenrod</value> + <!-- Gray Preset Color --> + <value>gray</value> + <!-- Green Preset Color --> + <value>green</value> + <!-- Green Yellow Preset Color --> + <value>greenYellow</value> + <!-- Honeydew Preset Color --> + <value>honeydew</value> + <!-- Hot Pink Preset Color --> + <value>hotPink</value> + <!-- Indian Red Preset Color --> + <value>indianRed</value> + <!-- Indigo Preset Color --> + <value>indigo</value> + <!-- Ivory Preset Color --> + <value>ivory</value> + <!-- Khaki Preset Color --> + <value>khaki</value> + <!-- Lavender Preset Color --> + <value>lavender</value> + <!-- Lavender Blush Preset Color --> + <value>lavenderBlush</value> + <!-- Lawn Green Preset Color --> + <value>lawnGreen</value> + <!-- Lemon Chiffon Preset Color --> + <value>lemonChiffon</value> + <!-- Light Blue Preset Color --> + <value>ltBlue</value> + <!-- Light Coral Preset Color --> + <value>ltCoral</value> + <!-- Light Cyan Preset Color --> + <value>ltCyan</value> + <!-- Light Goldenrod Yellow Preset Color --> + <value>ltGoldenrodYellow</value> + <!-- Light Gray Preset Color --> + <value>ltGray</value> + <!-- Light Green Preset Color --> + <value>ltGreen</value> + <!-- Light Pink Preset Color --> + <value>ltPink</value> + <!-- Light Salmon Preset Color --> + <value>ltSalmon</value> + <!-- Light Sea Green Preset Color --> + <value>ltSeaGreen</value> + <!-- Light Sky Blue Preset Color --> + <value>ltSkyBlue</value> + <!-- Light Slate Gray Preset Color --> + <value>ltSlateGray</value> + <!-- Light Steel Blue Preset Color --> + <value>ltSteelBlue</value> + <!-- Light Yellow Preset Color --> + <value>ltYellow</value> + <!-- Lime Preset Color --> + <value>lime</value> + <!-- Lime Green Preset Color --> + <value>limeGreen</value> + <!-- Linen Preset Color --> + <value>linen</value> + <!-- Magenta Preset Color --> + <value>magenta</value> + <!-- Maroon Preset Color --> + <value>maroon</value> + <!-- Medium Aquamarine Preset Color --> + <value>medAquamarine</value> + <!-- Medium Blue Preset Color --> + <value>medBlue</value> + <!-- Medium Orchid Preset Color --> + <value>medOrchid</value> + <!-- Medium Purple Preset Color --> + <value>medPurple</value> + <!-- Medium Sea Green Preset Color --> + <value>medSeaGreen</value> + <!-- Medium Slate Blue Preset Color --> + <value>medSlateBlue</value> + <!-- Medium Spring Green Preset Color --> + <value>medSpringGreen</value> + <!-- Medium Turquoise Preset Color --> + <value>medTurquoise</value> + <!-- Medium Violet Red Preset Color --> + <value>medVioletRed</value> + <!-- Midnight Blue Preset Color --> + <value>midnightBlue</value> + <!-- Mint Cream Preset Color --> + <value>mintCream</value> + <!-- Misty Rose Preset Color --> + <value>mistyRose</value> + <!-- Moccasin Preset Color --> + <value>moccasin</value> + <!-- Navajo White Preset Color --> + <value>navajoWhite</value> + <!-- Navy Preset Color --> + <value>navy</value> + <!-- Old Lace Preset Color --> + <value>oldLace</value> + <!-- Olive Preset Color --> + <value>olive</value> + <!-- Olive Drab Preset Color --> + <value>oliveDrab</value> + <!-- Orange Preset Color --> + <value>orange</value> + <!-- Orange Red Preset Color --> + <value>orangeRed</value> + <!-- Orchid Preset Color --> + <value>orchid</value> + <!-- Pale Goldenrod Preset Color --> + <value>paleGoldenrod</value> + <!-- Pale Green Preset Color --> + <value>paleGreen</value> + <!-- Pale Turquoise Preset Color --> + <value>paleTurquoise</value> + <!-- Pale Violet Red Preset Color --> + <value>paleVioletRed</value> + <!-- Papaya Whip Preset Color --> + <value>papayaWhip</value> + <!-- Peach Puff Preset Color --> + <value>peachPuff</value> + <!-- Peru Preset Color --> + <value>peru</value> + <!-- Pink Preset Color --> + <value>pink</value> + <!-- Plum Preset Color --> + <value>plum</value> + <!-- Powder Blue Preset Color --> + <value>powderBlue</value> + <!-- Purple Preset Color --> + <value>purple</value> + <!-- Red Preset Color --> + <value>red</value> + <!-- Rosy Brown Preset Color --> + <value>rosyBrown</value> + <!-- Royal Blue Preset Color --> + <value>royalBlue</value> + <!-- Saddle Brown Preset Color --> + <value>saddleBrown</value> + <!-- Salmon Preset Color --> + <value>salmon</value> + <!-- Sandy Brown Preset Color --> + <value>sandyBrown</value> + <!-- Sea Green Preset Color --> + <value>seaGreen</value> + <!-- Sea Shell Preset Color --> + <value>seaShell</value> + <!-- Sienna Preset Color --> + <value>sienna</value> + <!-- Silver Preset Color --> + <value>silver</value> + <!-- Sky Blue Preset Color --> + <value>skyBlue</value> + <!-- Slate Blue Preset Color --> + <value>slateBlue</value> + <!-- Slate Gray Preset Color --> + <value>slateGray</value> + <!-- Snow Preset Color --> + <value>snow</value> + <!-- Spring Green Preset Color --> + <value>springGreen</value> + <!-- Steel Blue Preset Color --> + <value>steelBlue</value> + <!-- Tan Preset Color --> + <value>tan</value> + <!-- Teal Preset Color --> + <value>teal</value> + <!-- Thistle Preset Color --> + <value>thistle</value> + <!-- Tomato Preset Color --> + <value>tomato</value> + <!-- Turquoise Preset Color --> + <value>turquoise</value> + <!-- Violet Preset Color --> + <value>violet</value> + <!-- Wheat Preset Color --> + <value>wheat</value> + <!-- White Preset Color --> + <value>white</value> + <!-- White Smoke Preset Color --> + <value>whiteSmoke</value> + <!-- Yellow Preset Color --> + <value>yellow</value> + <!-- Yellow Green Preset Color --> + <value>yellowGreen</value> + </choice> + </define> + <define name="CT_PresetColor"> + <ref name="EG_ColorTransform"/> + <attribute name="val"> + <ref name="ST_PresetColorVal"/> + </attribute> + </define> + <define name="EG_OfficeArtExtensionList"> + <element name="ext"> + <ref name="CT_OfficeArtExtension"/> + </element> + </define> + <define name="CT_OfficeArtExtensionList"> + <ref name="EG_OfficeArtExtensionList"/> + </define> + <define name="CT_Scale2D"> + <element name="sx"> + <ref name="CT_Ratio"/> + </element> + <element name="sy"> + <ref name="CT_Ratio"/> + </element> + </define> + <define name="CT_Transform2D"> + <element name="off"> + <ref name="CT_Point2D"/> + </element> + <element name="ext"> + <ref name="CT_PositiveSize2D"/> + </element> + <attribute name="rot"> + <ref name="ST_Angle"/> + </attribute> + <attribute name="flipH"> + <data type="boolean"/> + </attribute> + <attribute name="flipV"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_GroupTransform2D"> + <element name="off"> + <ref name="CT_Point2D"/> + </element> + <element name="ext"> + <ref name="CT_PositiveSize2D"/> + </element> + <element name="chOff"> + <ref name="CT_Point2D"/> + </element> + <element name="chExt"> + <ref name="CT_PositiveSize2D"/> + </element> + <attribute name="rot"> + <ref name="ST_Angle"/> + </attribute> + <attribute name="flipH"> + <data type="boolean"/> + </attribute> + <attribute name="flipV"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_Point3D"> + <attribute name="x"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="y"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="z"> + <ref name="ST_Coordinate"/> + </attribute> + </define> + <define name="CT_Vector3D"> + <attribute name="dx"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="dy"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="dz"> + <ref name="ST_Coordinate"/> + </attribute> + </define> + <define name="CT_SphereCoords"> + <attribute name="lat"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="lon"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="rev"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + </define> + <define name="CT_RelativeRect"> + <attribute name="l"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="t"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="r"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="b"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="ST_RectAlignment"> + <choice> + <!-- Rectangle Alignment Enum ( Top Left ) --> + <value>tl</value> + <!-- Rectangle Alignment Enum ( Top ) --> + <value>t</value> + <!-- Rectangle Alignment Enum ( Top Right ) --> + <value>tr</value> + <!-- Rectangle Alignment Enum ( Left ) --> + <value>l</value> + <!-- Rectangle Alignment Enum ( Center ) --> + <value>ctr</value> + <!-- Rectangle Alignment Enum ( Right ) --> + <value>r</value> + <!-- Rectangle Alignment Enum ( Bottom Left ) --> + <value>bl</value> + <!-- Rectangle Alignment Enum ( Bottom ) --> + <value>b</value> + <!-- Rectangle Alignment Enum ( Bottom Right ) --> + <value>br</value> + </choice> + </define> + <define name="EG_ColorChoice"> + <choice> + <element name="scrgbClr"> + <ref name="CT_ScRgbColor"/> + </element> + <element name="srgbClr"> + <ref name="CT_SRgbColor"/> + </element> + <element name="hslClr"> + <ref name="CT_HslColor"/> + </element> + <element name="sysClr"> + <ref name="CT_SystemColor"/> + </element> + <element name="schemeClr"> + <ref name="CT_SchemeColor"/> + </element> + <element name="prstClr"> + <ref name="CT_PresetColor"/> + </element> + </choice> + </define> + <define name="CT_Color"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_ColorMRU"> + <ref name="EG_ColorChoice"/> + </define> + <define name="ST_BlackWhiteMode"> + <choice> + <!-- Color --> + <value>clr</value> + <!-- Automatic --> + <value>auto</value> + <!-- Gray --> + <value>gray</value> + <!-- Light Gray --> + <value>ltGray</value> + <!-- Inverse Gray --> + <value>invGray</value> + <!-- Gray and White --> + <value>grayWhite</value> + <!-- Black and Gray --> + <value>blackGray</value> + <!-- Black and White --> + <value>blackWhite</value> + <!-- Black --> + <value>black</value> + <!-- White --> + <value>white</value> + <!-- Hidden --> + <value>hidden</value> + </choice> + </define> + <define name="AG_Blob"> + <attribute name="r:embed"> + <data type="string"/> + </attribute> + <attribute name="r:link"> + <data type="string"/> + </attribute> + </define> + <define name="CT_EmbeddedWAVAudioFile"> + <attribute name="r:embed"/> + <attribute name="name"> + <data type="string"/> + </attribute> + <attribute name="builtIn"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_Hyperlink"> + <element name="snd"> + <ref name="CT_EmbeddedWAVAudioFile"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="r:id"/> + <attribute name="invalidUrl"> + <data type="string"/> + </attribute> + <attribute name="action"> + <data type="string"/> + </attribute> + <attribute name="tgtFrame"> + <data type="string"/> + </attribute> + <attribute name="tooltip"> + <data type="string"/> + </attribute> + <attribute name="history"> + <data type="boolean"/> + </attribute> + <attribute name="highlightClick"> + <data type="boolean"/> + </attribute> + <attribute name="endSnd"> + <data type="boolean"/> + </attribute> + </define> + <define name="ST_DrawingElementId"> + <data type="unsignedInt"/> + </define> + </grammar> + <resource name="ST_Coordinate" resource="Integer"/> + <resource name="ST_PositiveCoordinate" resource="Integer"/> + <resource name="ST_Angle" resource="Integer"/> + <resource name="CT_Angle" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Angle_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="CT_PositiveFixedAngle" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_PositiveFixedAngle_val" action="setValue"/> + </resource> + <resource name="ST_Percentage" resource="Integer"/> + <resource name="CT_Percentage" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Percentage_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_PositivePercentage" resource="Value"> + <action name="characters" action="positivePercentage"/> + </resource> + <resource name="CT_PositivePercentage" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_PositivePercentage_val" action="setValue"/> + </resource> + <resource name="CT_FixedPercentage" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FixedPercentage_val" action="setValue"/> + </resource> + <resource name="CT_PositiveFixedPercentage" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_PositiveFixedPercentage_val" action="setValue"/> + </resource> + <resource name="CT_Point2D" resource="Properties"> + <attribute name="x" tokenid="ooxml:CT_Point2D_x"/> + <attribute name="y" tokenid="ooxml:CT_Point2D_y"/> + </resource> + <resource name="CT_PositiveSize2D" resource="Properties"> + <attribute name="cx" tokenid="ooxml:CT_PositiveSize2D_cx"/> + <attribute name="cy" tokenid="ooxml:CT_PositiveSize2D_cy"/> + </resource> + <resource name="CT_ScRgbColor" resource="Properties"> + <attribute name="r" tokenid="ooxml:CT_ScRgbColor_r"/> + <attribute name="g" tokenid="ooxml:CT_ScRgbColor_g"/> + <attribute name="b" tokenid="ooxml:CT_ScRgbColor_b"/> + </resource> + <resource name="ST_HexBinary3" resource="Hex"/> + <resource name="CT_SRgbColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SRgbColor_val"/> + </resource> + <resource name="CT_HslColor" resource="Properties"> + <attribute name="hue" tokenid="ooxml:CT_HslColor_hue"/> + <attribute name="sat" tokenid="ooxml:CT_HslColor_sat"/> + <attribute name="lum" tokenid="ooxml:CT_HslColor_lum"/> + </resource> + <resource name="ST_SystemColorVal" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_scrollBar">scrollBar</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_background">background</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeCaption">activeCaption</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaption">inactiveCaption</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menu">menu</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_window">window</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowFrame">windowFrame</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuText">menuText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowText">windowText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_captionText">captionText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeBorder">activeBorder</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveBorder">inactiveBorder</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_appWorkspace">appWorkspace</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlight">highlight</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlightText">highlightText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnFace">btnFace</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnShadow">btnShadow</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_grayText">grayText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnText">btnText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaptionText">inactiveCaptionText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnHighlight">btnHighlight</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dDkShadow">3dDkShadow</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dLight">3dLight</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoText">infoText</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoBk">infoBk</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_hotLight">hotLight</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientActiveCaption">gradientActiveCaption</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientInactiveCaption">gradientInactiveCaption</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuHighlight">menuHighlight</value> + <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuBar">menuBar</value> + </resource> + <resource name="CT_SystemColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SystemColor_val"/> + <attribute name="lastClr" tokenid="ooxml:CT_SystemColor_lastClr"/> + </resource> + <resource name="ST_SchemeColorVal" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg1">bg1</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx1">tx1</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg2">bg2</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx2">tx2</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent1">accent1</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent2">accent2</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent3">accent3</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent4">accent4</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent5">accent5</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent6">accent6</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_hlink">hlink</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_folHlink">folHlink</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_phClr">phClr</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk1">dk1</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt1">lt1</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk2">dk2</value> + <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt2">lt2</value> + </resource> + <resource name="CT_SchemeColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SchemeColor_val"/> + </resource> + <resource name="ST_PresetColorVal" resource="List"> + <value tokenid="ooxml:Value_ST_PresetColorVal_aliceBlue">aliceBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_antiqueWhite">antiqueWhite</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_aqua">aqua</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_aquamarine">aquamarine</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_azure">azure</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_beige">beige</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_bisque">bisque</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_black">black</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_blanchedAlmond">blanchedAlmond</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_blue">blue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_blueViolet">blueViolet</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_brown">brown</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_burlyWood">burlyWood</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_cadetBlue">cadetBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_chartreuse">chartreuse</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_chocolate">chocolate</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_coral">coral</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_cornflowerBlue">cornflowerBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_cornsilk">cornsilk</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_crimson">crimson</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_cyan">cyan</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_deepPink">deepPink</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_deepSkyBlue">deepSkyBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dimGray">dimGray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkBlue">dkBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkCyan">dkCyan</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkGoldenrod">dkGoldenrod</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkGray">dkGray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkGreen">dkGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkKhaki">dkKhaki</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkMagenta">dkMagenta</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkOliveGreen">dkOliveGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkOrange">dkOrange</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkOrchid">dkOrchid</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkRed">dkRed</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkSalmon">dkSalmon</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkSeaGreen">dkSeaGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkSlateBlue">dkSlateBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkSlateGray">dkSlateGray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkTurquoise">dkTurquoise</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dkViolet">dkViolet</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_dodgerBlue">dodgerBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_firebrick">firebrick</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_floralWhite">floralWhite</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_forestGreen">forestGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_fuchsia">fuchsia</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_gainsboro">gainsboro</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ghostWhite">ghostWhite</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_gold">gold</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_goldenrod">goldenrod</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_gray">gray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_green">green</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_greenYellow">greenYellow</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_honeydew">honeydew</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_hotPink">hotPink</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_indianRed">indianRed</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_indigo">indigo</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ivory">ivory</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_khaki">khaki</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_lavender">lavender</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_lavenderBlush">lavenderBlush</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_lawnGreen">lawnGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_lemonChiffon">lemonChiffon</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_lime">lime</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_limeGreen">limeGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_linen">linen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltBlue">ltBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltCoral">ltCoral</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltCyan">ltCyan</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltGoldenrodYellow">ltGoldenrodYellow</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltGray">ltGray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltGreen">ltGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltPink">ltPink</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltSalmon">ltSalmon</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltSeaGreen">ltSeaGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltSkyBlue">ltSkyBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltSlateGray">ltSlateGray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltSteelBlue">ltSteelBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_ltYellow">ltYellow</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_magenta">magenta</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_maroon">maroon</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medAquamarine">medAquamarine</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medBlue">medBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medOrchid">medOrchid</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medPurple">medPurple</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medSeaGreen">medSeaGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medSlateBlue">medSlateBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medSpringGreen">medSpringGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medTurquoise">medTurquoise</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_medVioletRed">medVioletRed</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_midnightBlue">midnightBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_mintCream">mintCream</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_mistyRose">mistyRose</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_moccasin">moccasin</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_navajoWhite">navajoWhite</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_navy">navy</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_oldLace">oldLace</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_olive">olive</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_oliveDrab">oliveDrab</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_orange">orange</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_orangeRed">orangeRed</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_orchid">orchid</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_paleGoldenrod">paleGoldenrod</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_paleGreen">paleGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_paleTurquoise">paleTurquoise</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_paleVioletRed">paleVioletRed</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_papayaWhip">papayaWhip</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_peachPuff">peachPuff</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_peru">peru</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_pink">pink</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_plum">plum</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_powderBlue">powderBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_purple">purple</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_red">red</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_rosyBrown">rosyBrown</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_royalBlue">royalBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_saddleBrown">saddleBrown</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_salmon">salmon</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_sandyBrown">sandyBrown</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_seaGreen">seaGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_seaShell">seaShell</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_sienna">sienna</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_silver">silver</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_skyBlue">skyBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_slateBlue">slateBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_slateGray">slateGray</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_snow">snow</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_springGreen">springGreen</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_steelBlue">steelBlue</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_tan">tan</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_teal">teal</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_thistle">thistle</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_tomato">tomato</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_turquoise">turquoise</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_violet">violet</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_wheat">wheat</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_white">white</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_whiteSmoke">whiteSmoke</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_yellow">yellow</value> + <value tokenid="ooxml:Value_ST_PresetColorVal_yellowGreen">yellowGreen</value> + </resource> + <resource name="CT_PresetColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_PresetColor_val"/> + </resource> + <resource name="CT_Transform2D" resource="Properties"> + <element name="off" tokenid="ooxml:CT_Transform2D_off"/> + <element name="ext" tokenid="ooxml:CT_Transform2D_ext"/> + <attribute name="rot" tokenid="ooxml:CT_Transform2D_rot"/> + <attribute name="flipH" tokenid="ooxml:CT_Transform2D_flipH"/> + <attribute name="flipV" tokenid="ooxml:CT_Transform2D_flipV"/> + </resource> + <resource name="ST_RectAlignment" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_tl">tl</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_t">t</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_tr">tr</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_l">l</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_ctr">ctr</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_r">r</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_bl">bl</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_b">b</value> + <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_br">br</value> + </resource> + <resource name="EG_ColorChoice" resource="Properties"> + <element name="scrgbClr" tokenid="ooxml:EG_ColorChoice_scrgbClr"/> + <element name="srgbClr" tokenid="ooxml:EG_ColorChoice_srgbClr"/> + <element name="hslClr" tokenid="ooxml:EG_ColorChoice_hslClr"/> + <element name="sysClr" tokenid="ooxml:EG_ColorChoice_sysClr"/> + <element name="schemeClr" tokenid="ooxml:EG_ColorChoice_schemeClr"/> + <element name="prstClr" tokenid="ooxml:EG_ColorChoice_prstClr"/> + </resource> + <resource name="CT_Color" resource="Properties"/> + <resource name="CT_ColorMRU" resource="Properties"/> + <resource name="ST_BlackWhiteMode" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_clr">clr</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_auto">auto</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_gray">gray</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_ltGray">ltGray</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_invGray">invGray</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_grayWhite">grayWhite</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackGray">blackGray</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackWhite">blackWhite</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_black">black</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_white">white</value> + <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_hidden">hidden</value> + </resource> + <resource name="AG_Blob" resource="Properties"> + <attribute name="r:embed" tokenid="ooxml:AG_Blob_r_embed"/> + <attribute name="r:link" tokenid="ooxml:AG_Blob_r_link"/> + </resource> + <resource name="ST_DrawingElementId" resource="Integer"/> + </namespace> + <namespace name="dml-documentProperties"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <include href="dml-shapeGeometry"/> + <define name="AG_Locking"> + <attribute name="noGrp"> + <data type="boolean"/> + </attribute> + <attribute name="noSelect"> + <data type="boolean"/> + </attribute> + <attribute name="noRot"> + <data type="boolean"/> + </attribute> + <attribute name="noChangeAspect"> + <data type="boolean"/> + </attribute> + <attribute name="noMove"> + <data type="boolean"/> + </attribute> + <attribute name="noResize"> + <data type="boolean"/> + </attribute> + <attribute name="noEditPoints"> + <data type="boolean"/> + </attribute> + <attribute name="noAdjustHandles"> + <data type="boolean"/> + </attribute> + <attribute name="noChangeArrowheads"> + <data type="boolean"/> + </attribute> + <attribute name="noChangeShapeType"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_ConnectorLocking"> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <ref name="AG_Locking"/> + </define> + <define name="CT_ShapeLocking"> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <ref name="AG_Locking"/> + <attribute name="noTextEdit"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_PictureLocking"> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <ref name="AG_Locking"/> + <attribute name="noCrop"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_GroupLocking"> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="noGrp"> + <data type="boolean"/> + </attribute> + <attribute name="noUngrp"> + <data type="boolean"/> + </attribute> + <attribute name="noSelect"> + <data type="boolean"/> + </attribute> + <attribute name="noRot"> + <data type="boolean"/> + </attribute> + <attribute name="noChangeAspect"> + <data type="boolean"/> + </attribute> + <attribute name="noMove"> + <data type="boolean"/> + </attribute> + <attribute name="noResize"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_GraphicalObjectFrameLocking"> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="noGrp"> + <data type="boolean"/> + </attribute> + <attribute name="noDrilldown"> + <data type="boolean"/> + </attribute> + <attribute name="noSelect"> + <data type="boolean"/> + </attribute> + <attribute name="noChangeAspect"> + <data type="boolean"/> + </attribute> + <attribute name="noMove"> + <data type="boolean"/> + </attribute> + <attribute name="noResize"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_NonVisualDrawingProps"> + <element name="a:hlinkClick"> + <ref name="CT_Hyperlink_URL"/> + </element> + <element name="hlinkHover"> + <ref name="CT_Hyperlink"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="id"> + <ref name="ST_DrawingElementId"/> + </attribute> + <attribute name="name"> + <data type="string"/> + </attribute> + <attribute name="descr"> + <data type="string"/> + </attribute> + <attribute name="hidden"> + <data type="boolean"/> + </attribute> + <attribute name="title"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Hyperlink_URL"> + <attribute name="r:id"> + <data type="string"/> + </attribute> + </define> + <define name="CT_NonVisualDrawingShapeProps"> + <element name="spLocks"> + <ref name="CT_ShapeLocking"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="txBox"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_NonVisualConnectorProperties"> + <element name="cxnSpLocks"> + <ref name="CT_ConnectorLocking"/> + </element> + <element name="stCxn"> + <ref name="CT_Connection"/> + </element> + <element name="endCxn"> + <ref name="CT_Connection"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + <define name="CT_NonVisualPictureProperties"> + <element name="picLocks"> + <ref name="CT_PictureLocking"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + <attribute name="preferRelativeResize"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_NonVisualGroupDrawingShapeProps"> + <element name="grpSpLocks"> + <ref name="CT_GroupLocking"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + <define name="CT_NonVisualGraphicFrameProperties"> + <element name="graphicFrameLocks"> + <ref name="CT_GraphicalObjectFrameLocking"/> + </element> + <element name="extLst"> + <ref name="CT_OfficeArtExtensionList"/> + </element> + </define> + </grammar> + <resource name="CT_Hyperlink_URL" resource="Properties"> + <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_URL"/> + <action name="start" action="handleHyperlinkURL"/> + </resource> + <resource name="CT_GraphicalObjectFrameLocking" resource="Properties"> + <element name="extLst" tokenid="ooxml:CT_GraphicalObjectFrameLocking_extLst"/> + <attribute name="noGrp" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noGrp"/> + <attribute name="noDrilldown" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noDrilldown"/> + <attribute name="noSelect" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noSelect"/> + <attribute name="noChangeAspect" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noChangeAspect"/> + <attribute name="noMove" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noMove"/> + <attribute name="noResize" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noResize"/> + </resource> + <resource name="CT_NonVisualDrawingProps" resource="Properties"> + <element name="a:hlinkClick" tokenid="ooxml:CT_NonVisualDrawingProps_a_hlinkClick"/> + <element name="hlinkHover" tokenid="ooxml:CT_NonVisualDrawingProps_hlinkHover"/> + <element name="extLst" tokenid="ooxml:CT_NonVisualDrawingProps_extLst"/> + <attribute name="id" tokenid="ooxml:CT_NonVisualDrawingProps_id"/> + <attribute name="name" tokenid="ooxml:CT_NonVisualDrawingProps_name"/> + <attribute name="descr" tokenid="ooxml:CT_NonVisualDrawingProps_descr"/> + <attribute name="hidden" tokenid="ooxml:CT_NonVisualDrawingProps_hidden"/> + <attribute name="title" tokenid="ooxml:CT_NonVisualDrawingProps_title"/> + </resource> + <resource name="CT_NonVisualPictureProperties" resource="Properties"> + <element name="picLocks" tokenid="ooxml:CT_NonVisualPictureProperties_picLocks"/> + <element name="extLst" tokenid="ooxml:CT_NonVisualPictureProperties_extLst"/> + <attribute name="preferRelativeResize" tokenid="ooxml:CT_NonVisualPictureProperties_preferRelativeResize"/> + </resource> + <resource name="CT_NonVisualGraphicFrameProperties" resource="Properties"> + <element name="graphicFrameLocks" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_graphicFrameLocks"/> + <element name="extLst" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_extLst"/> + </resource> + </namespace> + <namespace name="dml-graphicalObject"> + <start name="graphic"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <!-- ISO RELAX NG Schema --> + <!-- start = graphic --> + <define name="CT_GraphicalObjectData"> + <ref name="pic"/> + <ref name="relIds"/> + <ref name="lockedCanvas"/> + <ref name="chart"/> + <ref name="wsp"/> + <ref name="wgp"/> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <attribute name="uri"> + <data type="token"/> + </attribute> + </define> + <define name="CT_GraphicalObject"> + <element name="graphicData"> + <ref name="CT_GraphicalObjectData"/> + </element> + </define> + <define name="graphic"> + <element name="graphic"> + <ref name="CT_GraphicalObject"/> + </element> + </define> + </grammar> + <resource name="CT_GraphicalObjectData" resource="Properties"> + <element name="pic" tokenid="ooxml:CT_GraphicalObjectData_pic"/> + <element name="relIds" tokenid="ooxml:CT_GraphicalObjectData_relIds"/> + <element name="lockedCanvas" tokenid="ooxml:CT_GraphicalObjectData_lockedCanvas"/> + <element name="chart" tokenid="ooxml:CT_GraphicalObjectData_chart"/> + <element name="wsp" tokenid="ooxml:CT_GraphicalObjectData_wsp"/> + <element name="wgp" tokenid="ooxml:CT_GraphicalObjectData_wgp"/> + <attribute name="uri" tokenid="ooxml:CT_GraphicalObjectData_uri"/> + </resource> + <resource name="CT_GraphicalObject" resource="Properties"> + <element name="graphicData" tokenid="ooxml:CT_GraphicalObject_graphicData"/> + </resource> + <resource name="graphic" resource="Properties"> + <element name="graphic" tokenid="ooxml:graphic_graphic"/> + </resource> + </namespace> + <namespace name="wp14"> + <start name="sizeRelH"/> + <start name="sizeRelV"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing"> + <define name="ST_SizeRelFromH"> + <choice> + <value>margin</value> + <value>page</value> + <value>leftMargin</value> + <value>rightMargin</value> + <value>insideMargin</value> + <value>outsideMargin</value> + </choice> + </define> + <define name="ST_SizeRelFromV"> + <choice> + <value>margin</value> + <value>page</value> + <value>topMargin</value> + <value>bottomMargin</value> + <value>insideMargin</value> + <value>outsideMargin</value> + </choice> + </define> + <define name="CT_SizeRelH"> + <element name="pctWidth"> + <ref name="ST_PositivePercentage"/> + </element> + <attribute name="relativeFrom"> + <ref name="ST_SizeRelFromH"/> + </attribute> + </define> + <define name="CT_SizeRelV"> + <element name="pctHeight"> + <ref name="ST_PositivePercentage"/> + </element> + <attribute name="relativeFrom"> + <ref name="ST_SizeRelFromV"/> + </attribute> + </define> + <define name="sizeRelH"> + <element name="sizeRelH"> + <ref name="CT_SizeRelH"/> + </element> + </define> + <define name="sizeRelV"> + <element name="sizeRelV"> + <ref name="CT_SizeRelV"/> + </element> + </define> + </grammar> + <resource name="ST_SizeRelFromH" resource="List"> + <value tokenid="ooxml:ST_SizeRelFromH_margin">margin</value> + <value tokenid="ooxml:ST_SizeRelFromH_page">page</value> + <value tokenid="ooxml:ST_SizeRelFromH_leftMargin">leftMargin</value> + <value tokenid="ooxml:ST_SizeRelFromH_rightMargin">rightMargin</value> + <value tokenid="ooxml:ST_SizeRelFromH_insideMargin">insideMargin</value> + <value tokenid="ooxml:ST_SizeRelFromH_outsideMargin">outsideMargin</value> + </resource> + <resource name="ST_SizeRelFromV" resource="List"> + <value tokenid="ooxml:ST_SizeRelFromV_margin">margin</value> + <value tokenid="ooxml:ST_SizeRelFromV_page">page</value> + <value tokenid="ooxml:ST_SizeRelFromV_topMargin">topMargin</value> + <value tokenid="ooxml:ST_SizeRelFromV_bottomMargin">bottomMargin</value> + <value tokenid="ooxml:ST_SizeRelFromV_insideMargin">insideMargin</value> + <value tokenid="ooxml:ST_SizeRelFromV_outsideMargin">outsideMargin</value> + </resource> + <resource name="CT_SizeRelH" resource="Properties"> + <element name="pctWidth" tokenid="ooxml:CT_SizeRelH_pctWidth"/> + <attribute name="relativeFrom" tokenid="ooxml:CT_SizeRelH_relativeFrom"/> + </resource> + <resource name="CT_SizeRelV" resource="Properties"> + <element name="pctHeight" tokenid="ooxml:CT_SizeRelV_pctHeight"/> + <attribute name="relativeFrom" tokenid="ooxml:CT_SizeRelV_relativeFrom"/> + </resource> + <resource name="sizeRelH" resource="Properties"> + <element name="sizeRelH" tokenid="ooxml:sizeRelH_sizeRelH"/> + </resource> + <resource name="sizeRelV" resource="Properties"> + <element name="sizeRelV" tokenid="ooxml:sizeRelV_sizeRelV"/> + </resource> + </namespace> + <namespace name="w14"> + <start name="glow"/> + <start name="shadow"/> + <start name="reflection"/> + <start name="textOutline"/> + <start name="textFill"/> + <start name="scene3d"/> + <start name="props3d"/> + <start name="ligatures"/> + <start name="numForm"/> + <start name="numSpacing"/> + <start name="stylisticSets"/> + <start name="cntxtAlts"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/word/2010/wordml" attributeFormDefault="qualified"> + <define name="ST_SchemeColorVal"> + <choice> + <value>bg1</value> + <value>tx1</value> + <value>bg2</value> + <value>tx2</value> + <value>accent1</value> + <value>accent2</value> + <value>accent3</value> + <value>accent4</value> + <value>accent5</value> + <value>accent6</value> + <value>hlink</value> + <value>folHlink</value> + <value>dk1</value> + <value>lt1</value> + <value>dk2</value> + <value>lt2</value> + <value>phClr</value> + </choice> + </define> + <define name="ST_RectAlignment"> + <choice> + <value>none</value> + <value>tl</value> + <value>t</value> + <value>tr</value> + <value>l</value> + <value>ctr</value> + <value>r</value> + <value>bl</value> + <value>b</value> + <value>br</value> + </choice> + </define> + <define name="ST_LineCap"> + <choice> + <value>rnd</value> + <value>sq</value> + <value>flat</value> + </choice> + </define> + <define name="ST_CompoundLine"> + <choice> + <value>sng</value> + <value>dbl</value> + <value>thickThin</value> + <value>thinThick</value> + <value>tri</value> + </choice> + </define> + <define name="ST_PenAlignment"> + <choice> + <value>ctr</value> + <value>in</value> + </choice> + </define> + <define name="ST_OnOff"> + <choice> + <value>true</value> + <value>false</value> + <value>0</value> + <value>1</value> + </choice> + </define> + <define name="ST_PathShadeType"> + <choice> + <value>shape</value> + <value>circle</value> + <value>rect</value> + </choice> + </define> + <define name="ST_PresetLineDashVal"> + <choice> + <value>solid</value> + <value>dot</value> + <value>sysDot</value> + <value>dash</value> + <value>sysDash</value> + <value>lgDash</value> + <value>dashDot</value> + <value>sysDashDot</value> + <value>lgDashDot</value> + <value>lgDashDotDot</value> + <value>sysDashDotDot</value> + </choice> + </define> + <define name="ST_PresetCameraType"> + <choice> + <value>legacyObliqueTopLeft</value> + <value>legacyObliqueTop</value> + <value>legacyObliqueTopRight</value> + <value>legacyObliqueLeft</value> + <value>legacyObliqueFront</value> + <value>legacyObliqueRight</value> + <value>legacyObliqueBottomLeft</value> + <value>legacyObliqueBottom</value> + <value>legacyObliqueBottomRight</value> + <value>legacyPerspectiveTopLeft</value> + <value>legacyPerspectiveTop</value> + <value>legacyPerspectiveTopRight</value> + <value>legacyPerspectiveLeft</value> + <value>legacyPerspectiveFront</value> + <value>legacyPerspectiveRight</value> + <value>legacyPerspectiveBottomLeft</value> + <value>legacyPerspectiveBottom</value> + <value>legacyPerspectiveBottomRight</value> + <value>orthographicFront</value> + <value>isometricTopUp</value> + <value>isometricTopDown</value> + <value>isometricBottomUp</value> + <value>isometricBottomDown</value> + <value>isometricLeftUp</value> + <value>isometricLeftDown</value> + <value>isometricRightUp</value> + <value>isometricRightDown</value> + <value>isometricOffAxis1Left</value> + <value>isometricOffAxis1Right</value> + <value>isometricOffAxis1Top</value> + <value>isometricOffAxis2Left</value> + <value>isometricOffAxis2Right</value> + <value>isometricOffAxis2Top</value> + <value>isometricOffAxis3Left</value> + <value>isometricOffAxis3Right</value> + <value>isometricOffAxis3Bottom</value> + <value>isometricOffAxis4Left</value> + <value>isometricOffAxis4Right</value> + <value>isometricOffAxis4Bottom</value> + <value>obliqueTopLeft</value> + <value>obliqueTop</value> + <value>obliqueTopRight</value> + <value>obliqueLeft</value> + <value>obliqueRight</value> + <value>obliqueBottomLeft</value> + <value>obliqueBottom</value> + <value>obliqueBottomRight</value> + <value>perspectiveFront</value> + <value>perspectiveLeft</value> + <value>perspectiveRight</value> + <value>perspectiveAbove</value> + <value>perspectiveBelow</value> + <value>perspectiveAboveLeftFacing</value> + <value>perspectiveAboveRightFacing</value> + <value>perspectiveContrastingLeftFacing</value> + <value>perspectiveContrastingRightFacing</value> + <value>perspectiveHeroicLeftFacing</value> + <value>perspectiveHeroicRightFacing</value> + <value>perspectiveHeroicExtremeLeftFacing</value> + <value>perspectiveHeroicExtremeRightFacing</value> + <value>perspectiveRelaxed</value> + <value>perspectiveRelaxedModerately</value> + </choice> + </define> + <define name="ST_LightRigType"> + <choice> + <value>legacyFlat1</value> + <value>legacyFlat2</value> + <value>legacyFlat3</value> + <value>legacyFlat4</value> + <value>legacyNormal1</value> + <value>legacyNormal2</value> + <value>legacyNormal3</value> + <value>legacyNormal4</value> + <value>legacyHarsh1</value> + <value>legacyHarsh2</value> + <value>legacyHarsh3</value> + <value>legacyHarsh4</value> + <value>threePt</value> + <value>balanced</value> + <value>soft</value> + <value>harsh</value> + <value>flood</value> + <value>contrasting</value> + <value>morning</value> + <value>sunrise</value> + <value>sunset</value> + <value>chilly</value> + <value>freezing</value> + <value>flat</value> + <value>twoPt</value> + <value>glow</value> + <value>brightRoom</value> + </choice> + </define> + <define name="ST_LightRigDirection"> + <choice> + <value>tl</value> + <value>t</value> + <value>tr</value> + <value>l</value> + <value>r</value> + <value>bl</value> + <value>b</value> + <value>br</value> + </choice> + </define> + <define name="ST_BevelPresetType"> + <choice> + <value>relaxedInset</value> + <value>circle</value> + <value>slope</value> + <value>cross</value> + <value>angle</value> + <value>softRound</value> + <value>convex</value> + <value>coolSlant</value> + <value>divot</value> + <value>riblet</value> + <value>hardEdge</value> + <value>artDeco</value> + </choice> + </define> + <define name="ST_PresetMaterialType"> + <choice> + <value>legacyMatte</value> + <value>legacyPlastic</value> + <value>legacyMetal</value> + <value>legacyWireframe</value> + <value>matte</value> + <value>plastic</value> + <value>metal</value> + <value>warmMatte</value> + <value>translucentPowder</value> + <value>powder</value> + <value>dkEdge</value> + <value>softEdge</value> + <value>clear</value> + <value>flat</value> + <value>softmetal</value> + <value>none</value> + </choice> + </define> + <define name="ST_Ligatures"> + <choice> + <value>none</value> + <value>standard</value> + <value>contextual</value> + <value>historical</value> + <value>discretional</value> + <value>standardContextual</value> + <value>standardHistorical</value> + <value>contextualHistorical</value> + <value>standardDiscretional</value> + <value>contextualDiscretional</value> + <value>historicalDiscretional</value> + <value>standardContextualHistorical</value> + <value>standardContextualDiscretional</value> + <value>standardHistoricalDiscretional</value> + <value>contextualHistoricalDiscretional</value> + <value>all</value> + </choice> + </define> + <define name="ST_NumForm"> + <choice> + <value>default</value> + <value>lining</value> + <value>oldStyle</value> + </choice> + </define> + <define name="ST_NumSpacing"> + <choice> + <value>default</value> + <value>proportional</value> + <value>tabular</value> + </choice> + </define> + + <define name="ST_PositiveCoordinate"> + <data type="long"/> + </define> + <define name="ST_HexColorRGB"> + <data type="hexBinary"/> + </define> + <define name="ST_PositiveFixedPercentage"> + <data type="long"/> + </define> + <define name="ST_PositivePercentage"> + <data type="long"/> + </define> + <define name="ST_Percentage"> + <data type="long"/> + </define> + <define name="ST_PositiveFixedAngle"> + <data type="int"/> + </define> + <define name="ST_FixedAngle"> + <data type="int"/> + </define> + <define name="ST_LineWidth"> + <data type="int"/> + </define> + <define name="ST_UnsignedDecimalNumber"> + <data type="unsignedLong"/> + </define> + + <define name="EG_ColorChoice"> + <choice> + <element name="srgbClr"> + <ref name="CT_SRgbColor"/> + </element> + <element name="schemeClr"> + <ref name="CT_SchemeColor"/> + </element> + </choice> + </define> + <define name="EG_ColorTransform"> + <choice> + <element name="tint"> + <ref name="CT_PositiveFixedPercentage"/> + </element> + <element name="shade"> + <ref name="CT_PositiveFixedPercentage"/> + </element> + <element name="alpha"> + <ref name="CT_PositiveFixedPercentage"/> + </element> + <element name="hueMod"> + <ref name="CT_PositivePercentage"/> + </element> + <element name="sat"> + <ref name="CT_Percentage"/> + </element> + <element name="satOff"> + <ref name="CT_Percentage"/> + </element> + <element name="satMod"> + <ref name="CT_Percentage"/> + </element> + <element name="lum"> + <ref name="CT_Percentage"/> + </element> + <element name="lumOff"> + <ref name="CT_Percentage"/> + </element> + <element name="lumMod"> + <ref name="CT_Percentage"/> + </element> + </choice> + </define> + <define name="EG_FillProperties"> + <choice> + <element name="noFill"> + <ref name="CT_Empty"/> + </element> + <element name="solidFill"> + <ref name="CT_SolidColorFillProperties"/> + </element> + <element name="gradFill"> + <ref name="CT_GradientFillProperties"/> + </element> + </choice> + </define> + <define name="EG_ShadeProperties"> + <choice> + <element name="lin"> + <ref name="CT_LinearShadeProperties"/> + </element> + <element name="path"> + <ref name="CT_PathShadeProperties"/> + </element> + </choice> + </define> + <define name="EG_LineDashProperties"> + <choice> + <element name="prstDash"> + <ref name="CT_PresetLineDashProperties"/> + </element> + </choice> + </define> + <define name="EG_LineJoinProperties"> + <choice> + <element name="round"> + <ref name="CT_Empty"/> + </element> + <element name="bevel"> + <ref name="CT_Empty"/> + </element> + <element name="miter"> + <ref name="CT_LineJoinMiterProperties"/> + </element> + </choice> + </define> + + <define name="CT_SRgbColor"> + <ref name="EG_ColorTransform"/> + <attribute name="val"> + <ref name="ST_HexColorRGB"/> + </attribute> + </define> + <define name="CT_SchemeColor"> + <ref name="EG_ColorTransform"/> + <attribute name="val"> + <ref name="ST_SchemeColorVal"/> + </attribute> + </define> + <define name="CT_PositiveFixedPercentage"> + <attribute name="val"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_PositivePercentage"> + <attribute name="val"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + <define name="CT_Percentage"> + <attribute name="val"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="CT_Empty"> + </define> + <define name="CT_SolidColorFillProperties"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_GradientFillProperties"> + <element name="gsLst"> + <ref name="CT_GradientStopList"/> + </element> + <ref name="EG_ShadeProperties"/> + </define> + <define name="CT_LinearShadeProperties"> + <attribute name="ang"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="scaled"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="CT_PathShadeProperties"> + <element name="fillToRect"> + <ref name="CT_RelativeRect"/> + </element> + <attribute name="path"> + <ref name="ST_PathShadeType"/> + </attribute> + </define> + <define name="CT_GradientStopList"> + <element name="gs"> + <ref name="CT_GradientStop"/> + </element> + </define> + <define name="CT_GradientStop"> + <ref name="EG_ColorChoice"/> + <attribute name="pos"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + </define> + <define name="CT_RelativeRect"> + <attribute name="l"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="t"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="r"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="b"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="CT_PresetLineDashProperties"> + <attribute name="val"> + <ref name="ST_PresetLineDashVal"/> + </attribute> + </define> + <define name="CT_LineJoinMiterProperties"> + <attribute name="lim"> + <ref name="ST_PositivePercentage"/> + </attribute> + </define> + <define name="CT_Camera"> + <attribute name="prst"> + <ref name="ST_PresetCameraType"/> + </attribute> + </define> + <define name="CT_LightRig"> + <element name="rot"> + <ref name="CT_SphereCoords"/> + </element> + <attribute name="rig"> + <ref name="ST_LightRigType"/> + </attribute> + <attribute name="dir"> + <ref name="ST_LightRigDirection"/> + </attribute> + </define> + <define name="CT_SphereCoords"> + <attribute name="lat"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="lon"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="rev"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + </define> + <define name="CT_Bevel"> + <attribute name="w"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="h"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="prst"> + <ref name="ST_BevelPresetType"/> + </attribute> + </define> + <define name="CT_Color"> + <ref name="EG_ColorChoice"/> + </define> + <define name="CT_StyleSet"> + <attribute name="id"> + <ref name="ST_UnsignedDecimalNumber"/> + </attribute> + <attribute name="val"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="CT_OnOff"> + <attribute name="val"> + <ref name="ST_OnOff"/> + </attribute> + </define> + + + <!-- Main Elements--> + <define name="CT_Glow"> + <ref name="EG_ColorChoice"/> + <attribute name="rad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + </define> + <define name="CT_Shadow"> + <ref name="EG_ColorChoice"/> + <attribute name="blurRad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dist"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="sx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="sy"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="kx"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="ky"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="algn"> + <ref name="ST_RectAlignment"/> + </attribute> + </define> + <define name="CT_Reflection"> + <attribute name="blurRad"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="stA"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="stPos"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="endA"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="endPos"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="dist"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="dir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="fadeDir"> + <ref name="ST_PositiveFixedAngle"/> + </attribute> + <attribute name="sx"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="sy"> + <ref name="ST_Percentage"/> + </attribute> + <attribute name="kx"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="ky"> + <ref name="ST_FixedAngle"/> + </attribute> + <attribute name="algn"> + <ref name="ST_RectAlignment"/> + </attribute> + </define> + <define name="CT_TextOutlineEffect"> + <ref name="EG_FillProperties"/> + <ref name="EG_LineDashProperties"/> + <ref name="EG_LineJoinProperties"/> + <attribute name="w"> + <ref name="ST_LineWidth"/> + </attribute> + <attribute name="cap"> + <ref name="ST_LineCap"/> + </attribute> + <attribute name="cmpd"> + <ref name="ST_CompoundLine"/> + </attribute> + <attribute name="algn"> + <ref name="ST_PenAlignment"/> + </attribute> + </define> + <define name="CT_FillTextEffect"> + <ref name="EG_FillProperties"/> + </define> + <define name="CT_Scene3D"> + <element name="camera"> + <ref name="CT_Camera"/> + </element> + <element name="lightRig"> + <ref name="CT_LightRig"/> + </element> + </define> + <define name="CT_Props3D"> + <element name="bevelT"> + <ref name="CT_Bevel"/> + </element> + <element name="bevelB"> + <ref name="CT_Bevel"/> + </element> + <element name="extrusionClr"> + <ref name="CT_Color"/> + </element> + <element name="contourClr"> + <ref name="CT_Color"/> + </element> + <attribute name="extrusionH"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="contourW"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="prstMaterial"> + <ref name="ST_PresetMaterialType"/> + </attribute> + </define> + <define name="CT_Ligatures"> + <attribute name="val"> + <ref name="ST_Ligatures"/> + </attribute> + </define> + <define name="CT_NumForm"> + <attribute name="val"> + <ref name="ST_NumForm"/> + </attribute> + </define> + <define name="CT_NumSpacing"> + <attribute name="val"> + <ref name="ST_NumSpacing"/> + </attribute> + </define> + <define name="CT_StylisticSets"> + <element name="styleSet"> + <ref name="CT_StyleSet"/> + </element> + </define> + + <define name="glow"> + <element name="glow"> + <ref name="CT_Glow"/> + </element> + </define> + <define name="shadow"> + <element name="shadow"> + <ref name="CT_Shadow"/> + </element> + </define> + <define name="reflection"> + <element name="reflection"> + <ref name="CT_Reflection"/> + </element> + </define> + <define name="textOutline"> + <element name="textOutline"> + <ref name="CT_TextOutlineEffect"/> + </element> + </define> + <define name="textFill"> + <element name="textFill"> + <ref name="CT_FillTextEffect"/> + </element> + </define> + <define name="scene3d"> + <element name="scene3d"> + <ref name="CT_Scene3D"/> + </element> + </define> + <define name="props3d"> + <element name="props3d"> + <ref name="CT_Props3D"/> + </element> + </define> + <define name="ligatures"> + <element name="ligatures"> + <ref name="CT_Ligatures"/> + </element> + </define> + <define name="numForm"> + <element name="numForm"> + <ref name="CT_NumForm"/> + </element> + </define> + <define name="numSpacing"> + <element name="numSpacing"> + <ref name="CT_NumSpacing"/> + </element> + </define> + <define name="stylisticSets"> + <element name="stylisticSets"> + <ref name="CT_StylisticSets"/> + </element> + </define> + <define name="cntxtAlts"> + <element name="cntxtAlts"> + <ref name="CT_OnOff"/> + </element> + </define> + + <define name="ST_String"> + <data type="string"/> + </define> + <define name="CT_String"> + <attribute name="val"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_SdtCheckbox"> + <element name="checked"> + <ref name="CT_OnOff"/> + </element> + <element name="checkedState"> + <ref name="CT_String"/> + </element> + <element name="uncheckedState"> + <ref name="CT_String"/> + </element> + </define> + </grammar> + + <!-- Simple Types Resource Definitions --> + <resource name="CT_String" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_SdtCheckbox" resource="Properties"> + <element name="checked" tokenid="ooxml:CT_SdtCheckbox_checked"/> + <element name="checkedState" tokenid="ooxml:CT_SdtCheckbox_checkedState"/> + <element name="uncheckedState" tokenid="ooxml:CT_SdtCheckbox_uncheckedState"/> + </resource> + <resource name="ST_SchemeColorVal" resource="List"> + <value tokenid="ooxml:ST_SchemeColorVal_bg1">bg1</value> + <value tokenid="ooxml:ST_SchemeColorVal_tx1">tx1</value> + <value tokenid="ooxml:ST_SchemeColorVal_bg2">bg2</value> + <value tokenid="ooxml:ST_SchemeColorVal_tx2">tx2</value> + <value tokenid="ooxml:ST_SchemeColorVal_accent1">accent1</value> + <value tokenid="ooxml:ST_SchemeColorVal_accent2">accent2</value> + <value tokenid="ooxml:ST_SchemeColorVal_accent3">accent3</value> + <value tokenid="ooxml:ST_SchemeColorVal_accent4">accent4</value> + <value tokenid="ooxml:ST_SchemeColorVal_accent5">accent5</value> + <value tokenid="ooxml:ST_SchemeColorVal_accent6">accent6</value> + <value tokenid="ooxml:ST_SchemeColorVal_hlink">hlink</value> + <value tokenid="ooxml:ST_SchemeColorVal_folHlink">folHlink</value> + <value tokenid="ooxml:ST_SchemeColorVal_dk1">dk1</value> + <value tokenid="ooxml:ST_SchemeColorVal_lt1">lt1</value> + <value tokenid="ooxml:ST_SchemeColorVal_dk2">dk2</value> + <value tokenid="ooxml:ST_SchemeColorVal_lt2">lt2</value> + <value tokenid="ooxml:ST_SchemeColorVal_phClr">phClr</value> + </resource> + <resource name="ST_RectAlignment" resource="List"> + <value tokenid="ooxml:ST_RectAlignment_none">none</value> + <value tokenid="ooxml:ST_RectAlignment_tl">tl</value> + <value tokenid="ooxml:ST_RectAlignment_t">t</value> + <value tokenid="ooxml:ST_RectAlignment_tr">tr</value> + <value tokenid="ooxml:ST_RectAlignment_l">l</value> + <value tokenid="ooxml:ST_RectAlignment_ctr">ctr</value> + <value tokenid="ooxml:ST_RectAlignment_r">r</value> + <value tokenid="ooxml:ST_RectAlignment_bl">bl</value> + <value tokenid="ooxml:ST_RectAlignment_b">b</value> + <value tokenid="ooxml:ST_RectAlignment_br">br</value> + </resource> + <resource name="ST_LineCap" resource="List"> + <value tokenid="ooxml:ST_LineCap_rnd">rnd</value> + <value tokenid="ooxml:ST_LineCap_sq">sq</value> + <value tokenid="ooxml:ST_LineCap_flat">flat</value> + </resource> + <resource name="ST_CompoundLine" resource="List"> + <value tokenid="ooxml:ST_CompoundLine_sng">sng</value> + <value tokenid="ooxml:ST_CompoundLine_dbl">dbl</value> + <value tokenid="ooxml:ST_CompoundLine_thickThin">thickThin</value> + <value tokenid="ooxml:ST_CompoundLine_thinThick">thinThick</value> + <value tokenid="ooxml:ST_CompoundLine_tri">tri</value> + </resource> + <resource name="ST_PenAlignment" resource="List"> + <value tokenid="ooxml:ST_PenAlignment_ctr">ctr</value> + <value tokenid="ooxml:ST_PenAlignment_in">in</value> + </resource> + <resource name="ST_OnOff" resource="List"> + <value tokenid="ooxml:ST_OnOff_true">true</value> + <value tokenid="ooxml:ST_OnOff_false">false</value> + <value tokenid="ooxml:ST_OnOff_0">0</value> + <value tokenid="ooxml:ST_OnOff_1">1</value> + </resource> + <resource name="ST_PathShadeType" resource="List"> + <value tokenid="ooxml:ST_PathShadeType_shape">shape</value> + <value tokenid="ooxml:ST_PathShadeType_circle">circle</value> + <value tokenid="ooxml:ST_PathShadeType_rect">rect</value> + </resource> + <resource name="ST_PresetLineDashVal" resource="List"> + <value tokenid="ooxml:ST_PresetLineDashVal_solid">solid</value> + <value tokenid="ooxml:ST_PresetLineDashVal_dot">dot</value> + <value tokenid="ooxml:ST_PresetLineDashVal_sysDot">sysDot</value> + <value tokenid="ooxml:ST_PresetLineDashVal_dash">dash</value> + <value tokenid="ooxml:ST_PresetLineDashVal_sysDash">sysDash</value> + <value tokenid="ooxml:ST_PresetLineDashVal_lgDash">lgDash</value> + <value tokenid="ooxml:ST_PresetLineDashVal_dashDot">dashDot</value> + <value tokenid="ooxml:ST_PresetLineDashVal_sysDashDot">sysDashDot</value> + <value tokenid="ooxml:ST_PresetLineDashVal_lgDashDot">lgDashDot</value> + <value tokenid="ooxml:ST_PresetLineDashVal_lgDashDotDot">lgDashDotDot</value> + <value tokenid="ooxml:ST_PresetLineDashVal_sysDashDotDot">sysDashDotDot</value> + </resource> + <resource name="ST_PresetCameraType" resource="List"> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueTopLeft">legacyObliqueTopLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueTop">legacyObliqueTop</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueTopRight">legacyObliqueTopRight</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueLeft">legacyObliqueLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueFront">legacyObliqueFront</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueRight">legacyObliqueRight</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueBottomLeft">legacyObliqueBottomLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueBottom">legacyObliqueBottom</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueBottomRight">legacyObliqueBottomRight</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveTopLeft">legacyPerspectiveTopLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveTop">legacyPerspectiveTop</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveTopRight">legacyPerspectiveTopRight</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveLeft">legacyPerspectiveLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveFront">legacyPerspectiveFront</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveRight">legacyPerspectiveRight</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveBottomLeft">legacyPerspectiveBottomLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveBottom">legacyPerspectiveBottom</value> + <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveBottomRight">legacyPerspectiveBottomRight</value> + <value tokenid="ooxml:ST_PresetCameraType_orthographicFront">orthographicFront</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricTopUp">isometricTopUp</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricTopDown">isometricTopDown</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricBottomUp">isometricBottomUp</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricBottomDown">isometricBottomDown</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricLeftUp">isometricLeftUp</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricLeftDown">isometricLeftDown</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricRightUp">isometricRightUp</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricRightDown">isometricRightDown</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis1Left">isometricOffAxis1Left</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis1Right">isometricOffAxis1Right</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis1Top">isometricOffAxis1Top</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis2Left">isometricOffAxis2Left</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis2Right">isometricOffAxis2Right</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis2Top">isometricOffAxis2Top</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis3Left">isometricOffAxis3Left</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis3Right">isometricOffAxis3Right</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis3Bottom">isometricOffAxis3Bottom</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis4Left">isometricOffAxis4Left</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis4Right">isometricOffAxis4Right</value> + <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis4Bottom">isometricOffAxis4Bottom</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueTopLeft">obliqueTopLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueTop">obliqueTop</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueTopRight">obliqueTopRight</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueLeft">obliqueLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueRight">obliqueRight</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueBottomLeft">obliqueBottomLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueBottom">obliqueBottom</value> + <value tokenid="ooxml:ST_PresetCameraType_obliqueBottomRight">obliqueBottomRight</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveFront">perspectiveFront</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveLeft">perspectiveLeft</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveRight">perspectiveRight</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveAbove">perspectiveAbove</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveBelow">perspectiveBelow</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveAboveLeftFacing">perspectiveAboveLeftFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveAboveRightFacing">perspectiveAboveRightFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveContrastingLeftFacing">perspectiveContrastingLeftFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveContrastingRightFacing">perspectiveContrastingRightFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicLeftFacing">perspectiveHeroicLeftFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicRightFacing">perspectiveHeroicRightFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing">perspectiveHeroicExtremeLeftFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicExtremeRightFacing">perspectiveHeroicExtremeRightFacing</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveRelaxed">perspectiveRelaxed</value> + <value tokenid="ooxml:ST_PresetCameraType_perspectiveRelaxedModerately">perspectiveRelaxedModerately</value> + </resource> + <resource name="ST_LightRigType" resource="List"> + <value tokenid="ooxml:ST_LightRigType_legacyFlat1">legacyFlat1</value> + <value tokenid="ooxml:ST_LightRigType_legacyFlat2">legacyFlat2</value> + <value tokenid="ooxml:ST_LightRigType_legacyFlat3">legacyFlat3</value> + <value tokenid="ooxml:ST_LightRigType_legacyFlat4">legacyFlat4</value> + <value tokenid="ooxml:ST_LightRigType_legacyNormal1">legacyNormal1</value> + <value tokenid="ooxml:ST_LightRigType_legacyNormal2">legacyNormal2</value> + <value tokenid="ooxml:ST_LightRigType_legacyNormal3">legacyNormal3</value> + <value tokenid="ooxml:ST_LightRigType_legacyNormal4">legacyNormal4</value> + <value tokenid="ooxml:ST_LightRigType_legacyHarsh1">legacyHarsh1</value> + <value tokenid="ooxml:ST_LightRigType_legacyHarsh2">legacyHarsh2</value> + <value tokenid="ooxml:ST_LightRigType_legacyHarsh3">legacyHarsh3</value> + <value tokenid="ooxml:ST_LightRigType_legacyHarsh4">legacyHarsh4</value> + <value tokenid="ooxml:ST_LightRigType_threePt">threePt</value> + <value tokenid="ooxml:ST_LightRigType_balanced">balanced</value> + <value tokenid="ooxml:ST_LightRigType_soft">soft</value> + <value tokenid="ooxml:ST_LightRigType_harsh">harsh</value> + <value tokenid="ooxml:ST_LightRigType_flood">flood</value> + <value tokenid="ooxml:ST_LightRigType_contrasting">contrasting</value> + <value tokenid="ooxml:ST_LightRigType_morning">morning</value> + <value tokenid="ooxml:ST_LightRigType_sunrise">sunrise</value> + <value tokenid="ooxml:ST_LightRigType_sunset">sunset</value> + <value tokenid="ooxml:ST_LightRigType_chilly">chilly</value> + <value tokenid="ooxml:ST_LightRigType_freezing">freezing</value> + <value tokenid="ooxml:ST_LightRigType_flat">flat</value> + <value tokenid="ooxml:ST_LightRigType_twoPt">twoPt</value> + <value tokenid="ooxml:ST_LightRigType_glow">glow</value> + <value tokenid="ooxml:ST_LightRigType_brightRoom">brightRoom</value> + </resource> + <resource name="ST_LightRigDirection" resource="List"> + <value tokenid="ooxml:ST_LightRigDirection_tl">tl</value> + <value tokenid="ooxml:ST_LightRigDirection_t">t</value> + <value tokenid="ooxml:ST_LightRigDirection_tr">tr</value> + <value tokenid="ooxml:ST_LightRigDirection_l">l</value> + <value tokenid="ooxml:ST_LightRigDirection_r">r</value> + <value tokenid="ooxml:ST_LightRigDirection_bl">bl</value> + <value tokenid="ooxml:ST_LightRigDirection_b">b</value> + <value tokenid="ooxml:ST_LightRigDirection_br">br</value> + </resource> + <resource name="ST_BevelPresetType" resource="List"> + <value tokenid="ooxml:ST_BevelPresetType_relaxedInset">relaxedInset</value> + <value tokenid="ooxml:ST_BevelPresetType_circle">circle</value> + <value tokenid="ooxml:ST_BevelPresetType_slope">slope</value> + <value tokenid="ooxml:ST_BevelPresetType_cross">cross</value> + <value tokenid="ooxml:ST_BevelPresetType_angle">angle</value> + <value tokenid="ooxml:ST_BevelPresetType_softRound">softRound</value> + <value tokenid="ooxml:ST_BevelPresetType_convex">convex</value> + <value tokenid="ooxml:ST_BevelPresetType_coolSlant">coolSlant</value> + <value tokenid="ooxml:ST_BevelPresetType_divot">divot</value> + <value tokenid="ooxml:ST_BevelPresetType_riblet">riblet</value> + <value tokenid="ooxml:ST_BevelPresetType_hardEdge">hardEdge</value> + <value tokenid="ooxml:ST_BevelPresetType_artDeco">artDeco</value> + </resource> + <resource name="ST_PresetMaterialType" resource="List"> + <value tokenid="ooxml:ST_PresetMaterialType_legacyMatte">legacyMatte</value> + <value tokenid="ooxml:ST_PresetMaterialType_legacyPlastic">legacyPlastic</value> + <value tokenid="ooxml:ST_PresetMaterialType_legacyMetal">legacyMetal</value> + <value tokenid="ooxml:ST_PresetMaterialType_legacyWireframe">legacyWireframe</value> + <value tokenid="ooxml:ST_PresetMaterialType_matte">matte</value> + <value tokenid="ooxml:ST_PresetMaterialType_plastic">plastic</value> + <value tokenid="ooxml:ST_PresetMaterialType_metal">metal</value> + <value tokenid="ooxml:ST_PresetMaterialType_warmMatte">warmMatte</value> + <value tokenid="ooxml:ST_PresetMaterialType_translucentPowder">translucentPowder</value> + <value tokenid="ooxml:ST_PresetMaterialType_powder">powder</value> + <value tokenid="ooxml:ST_PresetMaterialType_dkEdge">dkEdge</value> + <value tokenid="ooxml:ST_PresetMaterialType_softEdge">softEdge</value> + <value tokenid="ooxml:ST_PresetMaterialType_clear">clear</value> + <value tokenid="ooxml:ST_PresetMaterialType_flat">flat</value> + <value tokenid="ooxml:ST_PresetMaterialType_softmetal">softmetal</value> + <value tokenid="ooxml:ST_PresetMaterialType_none">none</value> + </resource> + <resource name="ST_Ligatures" resource="List"> + <value tokenid="ooxml:ST_Ligatures_none">none</value> + <value tokenid="ooxml:ST_Ligatures_standard">standard</value> + <value tokenid="ooxml:ST_Ligatures_contextual">contextual</value> + <value tokenid="ooxml:ST_Ligatures_historical">historical</value> + <value tokenid="ooxml:ST_Ligatures_discretional">discretional</value> + <value tokenid="ooxml:ST_Ligatures_standardContextual">standardContextual</value> + <value tokenid="ooxml:ST_Ligatures_standardHistorical">standardHistorical</value> + <value tokenid="ooxml:ST_Ligatures_contextualHistorical">contextualHistorical</value> + <value tokenid="ooxml:ST_Ligatures_standardDiscretional">standardDiscretional</value> + <value tokenid="ooxml:ST_Ligatures_contextualDiscretional">contextualDiscretional</value> + <value tokenid="ooxml:ST_Ligatures_historicalDiscretional">historicalDiscretional</value> + <value tokenid="ooxml:ST_Ligatures_standardContextualHistorical">standardContextualHistorical</value> + <value tokenid="ooxml:ST_Ligatures_standardContextualDiscretional">standardContextualDiscretional</value> + <value tokenid="ooxml:ST_Ligatures_standardHistoricalDiscretional">standardHistoricalDiscretional</value> + <value tokenid="ooxml:ST_Ligatures_contextualHistoricalDiscretional">contextualHistoricalDiscretional</value> + <value tokenid="ooxml:ST_Ligatures_all">all</value> + </resource> + <resource name="ST_NumForm" resource="List"> + <value tokenid="ooxml:ST_NumForm_default">default</value> + <value tokenid="ooxml:ST_NumForm_lining">lining</value> + <value tokenid="ooxml:ST_NumForm_oldStyle">oldStyle</value> + </resource> + <resource name="ST_NumSpacing" resource="List"> + <value tokenid="ooxml:ST_NumSpacing_default">default</value> + <value tokenid="ooxml:ST_NumSpacing_proportional">proportional</value> + <value tokenid="ooxml:ST_NumSpacing_tabular">tabular</value> + </resource> + + <resource name="ST_PositiveCoordinate" resource="Integer"/> + <resource name="ST_HexColorRGB" resource="Hex"/> + <resource name="ST_PositivePercentage" resource="Integer"/> + <resource name="ST_PositiveFixedPercentage" resource="Integer"/> + <resource name="ST_Percentage" resource="Integer"/> + <resource name="ST_PositiveFixedAngle" resource="Integer"/> + <resource name="ST_FixedAngle" resource="Integer"/> + <resource name="ST_LineWidth" resource="Integer"/> + <resource name="ST_UnsignedDecimalNumber" resource="Integer"/> + + <!-- Groups Resource Definitions --> + <resource name="EG_ColorTransform" resource="Properties"> + <element name="tint" tokenid="ooxml:EG_ColorTransform_tint"/> + <element name="shade" tokenid="ooxml:EG_ColorTransform_shade"/> + <element name="alpha" tokenid="ooxml:EG_ColorTransform_alpha"/> + <element name="hueMod" tokenid="ooxml:EG_ColorTransform_hueMod"/> + <element name="sat" tokenid="ooxml:EG_ColorTransform_sat"/> + <element name="satOff" tokenid="ooxml:EG_ColorTransform_satOff"/> + <element name="satMod" tokenid="ooxml:EG_ColorTransform_satMod"/> + <element name="lum" tokenid="ooxml:EG_ColorTransform_lum"/> + <element name="lumOff" tokenid="ooxml:EG_ColorTransform_lumOff"/> + <element name="lumMod" tokenid="ooxml:EG_ColorTransform_lumMod"/> + </resource> + <resource name="EG_ColorChoice" resource="Properties"> + <element name="srgbClr" tokenid="ooxml:EG_ColorChoice_srgbClr"/> + <element name="schemeClr" tokenid="ooxml:EG_ColorChoice_schemeClr"/> + </resource> + <resource name="EG_FillProperties" resource="Properties"> + <element name="noFill" tokenid="ooxml:EG_FillProperties_noFill"/> + <element name="solidFill" tokenid="ooxml:EG_FillProperties_solidFill"/> + <element name="gradFill" tokenid="ooxml:EG_FillProperties_gradFill"/> + </resource> + <resource name="EG_ShadeProperties" resource="Properties"> + <element name="lin" tokenid="ooxml:EG_ShadeProperties_lin"/> + <element name="path" tokenid="ooxml:EG_ShadeProperties_path"/> + </resource> + <resource name="EG_LineDashProperties" resource="Properties"> + <element name="prstDash" tokenid="ooxml:EG_LineDashProperties_prstDash"/> + </resource> + <resource name="EG_LineJoinProperties" resource="Properties"> + <element name="round" tokenid="ooxml:EG_LineJoinProperties_round"/> + <element name="bevel" tokenid="ooxml:EG_LineJoinProperties_bevel"/> + <element name="miter" tokenid="ooxml:EG_LineJoinProperties_miter"/> + </resource> + + <!-- Complex Types Resource Definitions --> + <resource name="CT_Glow" resource="Properties"> + <attribute name="rad" tokenid="ooxml:CT_Glow_rad"/> + </resource> + <resource name="CT_SRgbColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SRgbColor_val"/> + </resource> + <resource name="CT_SchemeColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SchemeColor_val"/> + </resource> + <resource name="CT_PositiveFixedPercentage" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_PositiveFixedPercentage_val"/> + </resource> + <resource name="CT_PositivePercentage" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_PositivePercentage_val"/> + </resource> + <resource name="CT_Percentage" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Percentage_val"/> + </resource> + <resource name="CT_Empty" resource="Properties"/> + <resource name="CT_SolidColorFillProperties" resource="Properties"/> + <resource name="CT_GradientFillProperties" resource="Properties"> + <element name="gsLst" tokenid="ooxml:CT_GradientFillProperties_gsLst"/> + </resource> + <resource name="CT_GradientStopList" resource="Properties"> + <element name="gs" tokenid="ooxml:CT_GradientStopList_gs"/> + </resource> + <resource name="CT_GradientStop" resource="Properties"> + <attribute name="pos" tokenid="ooxml:CT_GradientStop_pos"/> + </resource> + <resource name="CT_LinearShadeProperties" resource="Properties"> + <attribute name="ang" tokenid="ooxml:CT_LinearShadeProperties_ang"/> + <attribute name="scaled" tokenid="ooxml:CT_LinearShadeProperties_scaled"/> + </resource> + <resource name="CT_PathShadeProperties" resource="Properties"> + <element name="fillToRect" tokenid="ooxml:CT_PathShadeProperties_fillToRect"/> + <attribute name="path" tokenid="ooxml:CT_PathShadeProperties_path"/> + </resource> + <resource name="CT_RelativeRect" resource="Properties"> + <attribute name="l" tokenid="ooxml:CT_RelativeRect_l"/> + <attribute name="t" tokenid="ooxml:CT_RelativeRect_t"/> + <attribute name="r" tokenid="ooxml:CT_RelativeRect_r"/> + <attribute name="b" tokenid="ooxml:CT_RelativeRect_b"/> + </resource> + <resource name="CT_PresetLineDashProperties" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_PresetLineDashProperties_val"/> + </resource> + <resource name="CT_LineJoinMiterProperties" resource="Properties"> + <attribute name="lim" tokenid="ooxml:CT_LineJoinMiterProperties_lim"/> + </resource> + <resource name="CT_Camera" resource="Properties"> + <attribute name="prst" tokenid="ooxml:CT_Camera_prst"/> + </resource> + <resource name="CT_LightRig" resource="Properties"> + <element name="rot" tokenid="ooxml:CT_LightRig_rot"/> + <attribute name="rig" tokenid="ooxml:CT_LightRig_rig"/> + <attribute name="dir" tokenid="ooxml:CT_LightRig_dir"/> + </resource> + <resource name="CT_SphereCoords" resource="Properties"> + <attribute name="lat" tokenid="ooxml:CT_SphereCoords_lat"/> + <attribute name="lon" tokenid="ooxml:CT_SphereCoords_lon"/> + <attribute name="rev" tokenid="ooxml:CT_SphereCoords_rev"/> + </resource> + <resource name="CT_Bevel" resource="Properties"> + <attribute name="w" tokenid="ooxml:CT_Bevel_w"/> + <attribute name="h" tokenid="ooxml:CT_Bevel_h"/> + <attribute name="prst" tokenid="ooxml:CT_Bevel_prst"/> + </resource> + <resource name="CT_Color" resource="Properties"/> + <resource name="CT_StyleSet" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_StyleSet_id"/> + <attribute name="val" tokenid="ooxml:CT_StyleSet_val"/> + </resource> + <resource name="CT_OnOff" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/> + <action name="start" action="setDefaultBooleanValue"/> + </resource> + + <!-- Main element content --> + <resource name="CT_Shadow" resource="Properties"> + <attribute name="blurRad" tokenid="ooxml:CT_Shadow_blurRad"/> + <attribute name="dist" tokenid="ooxml:CT_Shadow_dist"/> + <attribute name="dir" tokenid="ooxml:CT_Shadow_dir"/> + <attribute name="sx" tokenid="ooxml:CT_Shadow_sx"/> + <attribute name="sy" tokenid="ooxml:CT_Shadow_sy"/> + <attribute name="kx" tokenid="ooxml:CT_Shadow_kx"/> + <attribute name="ky" tokenid="ooxml:CT_Shadow_ky"/> + <attribute name="algn" tokenid="ooxml:CT_Shadow_algn"/> + </resource> + <resource name="CT_Reflection" resource="Properties"> + <attribute name="blurRad" tokenid="ooxml:CT_Reflection_blurRad"/> + <attribute name="stA" tokenid="ooxml:CT_Reflection_stA"/> + <attribute name="stPos" tokenid="ooxml:CT_Reflection_stPos"/> + <attribute name="endA" tokenid="ooxml:CT_Reflection_endA"/> + <attribute name="endPos" tokenid="ooxml:CT_Reflection_endPos"/> + <attribute name="dist" tokenid="ooxml:CT_Reflection_dist"/> + <attribute name="dir" tokenid="ooxml:CT_Reflection_dir"/> + <attribute name="fadeDir" tokenid="ooxml:CT_Reflection_fadeDir"/> + <attribute name="sx" tokenid="ooxml:CT_Reflection_sx"/> + <attribute name="sy" tokenid="ooxml:CT_Reflection_sy"/> + <attribute name="kx" tokenid="ooxml:CT_Reflection_kx"/> + <attribute name="ky" tokenid="ooxml:CT_Reflection_ky"/> + <attribute name="algn" tokenid="ooxml:CT_Reflection_algn"/> + </resource> + <resource name="CT_TextOutlineEffect" resource="Properties"> + <attribute name="w" tokenid="ooxml:CT_TextOutlineEffect_w"/> + <attribute name="cap" tokenid="ooxml:CT_TextOutlineEffect_cap"/> + <attribute name="cmpd" tokenid="ooxml:CT_TextOutlineEffect_cmpd"/> + <attribute name="algn" tokenid="ooxml:CT_TextOutlineEffect_algn"/> + </resource> + <resource name="CT_FillTextEffect" resource="Properties"/> + <resource name="CT_Scene3D" resource="Properties"> + <element name="camera" tokenid="ooxml:CT_Scene3D_camera"/> + <element name="lightRig" tokenid="ooxml:CT_Scene3D_lightRig"/> + </resource> + <resource name="CT_Props3D" resource="Properties"> + <element name="bevelT" tokenid="ooxml:CT_Props3D_bevelT"/> + <element name="bevelB" tokenid="ooxml:CT_Props3D_bevelB"/> + <element name="extrusionClr" tokenid="ooxml:CT_Props3D_extrusionClr"/> + <element name="contourClr" tokenid="ooxml:CT_Props3D_contourClr"/> + <attribute name="extrusionH" tokenid="ooxml:CT_Props3D_extrusionH"/> + <attribute name="contourW" tokenid="ooxml:CT_Props3D_contourW"/> + <attribute name="prstMaterial" tokenid="ooxml:CT_Props3D_prstMaterial"/> + </resource> + <resource name="CT_Ligatures" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Ligatures_val"/> + </resource> + <resource name="CT_NumForm" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_NumForm_val"/> + </resource> + <resource name="CT_NumSpacing" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_NumSpacing_val"/> + </resource> + <resource name="CT_StylisticSets" resource="Properties"> + <attribute name="styleSet" tokenid="ooxml:CT_StylisticSets_styleSet"/> + </resource> + + <resource name="glow" resource="Properties"> + <element name="glow" tokenid="ooxml:glow_glow"/> + </resource> + <resource name="shadow" resource="Properties"> + <element name="shadow" tokenid="ooxml:shadow_shadow"/> + </resource> + <resource name="reflection" resource="Properties"> + <element name="reflection" tokenid="ooxml:reflection_reflection"/> + </resource> + <resource name="textOutline" resource="Properties"> + <element name="textOutline" tokenid="ooxml:textOutline_textOutline"/> + </resource> + <resource name="textFill" resource="Properties"> + <element name="textFill" tokenid="ooxml:textFill_textFill"/> + </resource> + <resource name="scene3d" resource="Properties"> + <element name="scene3d" tokenid="ooxml:scene3d_scene3d"/> + </resource> + <resource name="props3d" resource="Properties"> + <element name="props3d" tokenid="ooxml:props3d_props3d"/> + </resource> + <resource name="ligatures" resource="Properties"> + <element name="ligatures" tokenid="ooxml:ligatures_ligatures"/> + </resource> + <resource name="numForm" resource="Properties"> + <element name="numForm" tokenid="ooxml:numForm_numForm"/> + </resource> + <resource name="numSpacing" resource="Properties"> + <element name="numSpacing" tokenid="ooxml:numSpacing_numSpacing"/> + </resource> + <resource name="stylisticSets" resource="Properties"> + <element name="stylisticSets" tokenid="ooxml:stylisticSets_stylisticSets"/> + </resource> + <resource name="cntxtAlts" resource="Properties"> + <element name="cntxtAlts" tokenid="ooxml:cntxtAlts_cntxtAlts"/> + </resource> + </namespace> + <namespace name="w15"> + <start name="commentsEx"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/word/2012/wordml" attributeFormDefault="qualified"> + <define name="commentsEx"> + <element name="commentsEx"> + <ref name="CT_CommentsEx"/> + </element> + </define> + <define name="CT_CommentsEx"> + <element name="commentEx"> + <ref name="CT_CommentEx"/> + </element> + </define> + <define name="CT_CommentEx"> + <attribute name="paraId"> + <ref name="ST_LongHexNumber"/> + </attribute> + <!-- Not yet used + <attribute name="paraIdParent"> + <ref name="ST_LongHexNumber"/> + </attribute> + --> + <attribute name="done"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_LongHexNumber"> + <data type="hexBinary"/> + </define> + <define name="ST_OnOff"> + <choice> + <value>true</value> + <value>false</value> + <value>0</value> + <value>1</value> + </choice> + </define> + </grammar> + <resource name="CT_CommentsEx" resource="Stream"> + <element name="commentEx" tokenid="ooxml:CT_CommentsEx_commentEx"/> + </resource> + <resource name="CT_CommentEx" resource="CommentEx"> + <attribute name="paraId" tokenid="ooxml:CT_CommentEx_paraId" action="att_paraId"/> + <attribute name="done" tokenid="ooxml:CT_CommentEx_done" action="att_done"/> + </resource> + <resource name="ST_LongHexNumber" resource="String"/> + <resource name="ST_OnOff" resource="Boolean"/> + </namespace> + <namespace name="a14"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/drawing/2010/main"> + <!-- Simple types --> + <define name="ST_ArtisticEffectParam10"> + <data type="integer"/> + </define> + <define name="ST_ArtisticEffectParam100"> + <data type="integer"/> + </define> + <define name="ST_ArtisticEffectParam4"> + <data type="integer"/> + </define> + <define name="ST_ArtisticEffectParam6"> + <data type="integer"/> + </define> + <define name="ST_ColorTemperature"> + <data type="integer"/> + </define> + <define name="ST_SaturationAmount"> + <data type="integer"/> + </define> + + <!-- Complex types for effects --> + <define name="CT_PictureEffectBlur"> + <attribute name="visible"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectCement"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="crackSpacing"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectChalkSketch"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="pressure"> + <ref name="ST_ArtisticEffectParam4"/> + </attribute> + </define> + <define name="CT_PictureEffectCrisscrossEtching"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="pressure"> + <ref name="ST_ArtisticEffectParam4"/> + </attribute> + </define> + <define name="CT_PictureEffectCutout"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="numberOfShades"> + <ref name="ST_ArtisticEffectParam6"/> + </attribute> + </define> + <define name="CT_PictureEffectFilmGrain"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="grainSize"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectGlass"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="scaling"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectGlowDiffused"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="intensity"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectGlowEdges"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="smoothness"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectLightScreen"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="gridSize"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectLineDrawing"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="pencilSize"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectMarker"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="size"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectMosiaicBubbles"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="pressure"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectPaintStrokes"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="intensity"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectPaintBrush"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="brushSize"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectPastelsSmooth"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="scaling"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectPencilGrayscale"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="pencilSize"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectPencilSketch"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="pressure"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectPhotocopy"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="detail"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectPlasticWrap"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="smoothness"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectTexturizer"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="scaling"> + <ref name="ST_ArtisticEffectParam100"/> + </attribute> + </define> + <define name="CT_PictureEffectWatercolorSponge"> + <attribute name="trans"> + <ref name="ST_PositiveFixedPercentage"/> + </attribute> + <attribute name="brushSize"> + <ref name="ST_ArtisticEffectParam10"/> + </attribute> + </define> + <define name="CT_PictureEffectBrightnessContrast"> + <attribute name="bright"> + <ref name="ST_FixedPercentage"/> + </attribute> + <attribute name="contrast"> + <ref name="ST_FixedPercentage"/> + </attribute> + </define> + <define name="CT_PictureEffectColorTemperature"> + <attribute name="colorTemp"> + <ref name="ST_ColorTemperature"/> + </attribute> + </define> + <define name="CT_PictureEffectSaturation"> + <attribute name="sat"> + <ref name="ST_SaturationAmount"/> + </attribute> + </define> + <define name="CT_PictureEffectSharpenSoften"> + <attribute name="amount"> + <ref name="ST_FixedPercentage"/> + </attribute> + </define> + + <!-- Complex types for containers --> + <define name="CT_PictureEffect"> + <choice> + <element name="artisticBlur"> + <ref name="CT_PictureEffectBlur"/> + </element> + <element name="artisticCement"> + <ref name="CT_PictureEffectCement"/> + </element> + <element name="artisticChalkSketch"> + <ref name="CT_PictureEffectChalkSketch"/> + </element> + <element name="artisticCrisscrossEtching"> + <ref name="CT_PictureEffectCrisscrossEtching"/> + </element> + <element name="artisticCutout"> + <ref name="CT_PictureEffectCutout"/> + </element> + <element name="artisticFilmGrain"> + <ref name="CT_PictureEffectFilmGrain"/> + </element> + <element name="artisticGlass"> + <ref name="CT_PictureEffectGlass"/> + </element> + <element name="artisticGlowDiffused"> + <ref name="CT_PictureEffectGlowDiffused"/> + </element> + <element name="artisticGlowEdges"> + <ref name="CT_PictureEffectGlowEdges"/> + </element> + <element name="artisticLightScreen"> + <ref name="CT_PictureEffectLightScreen"/> + </element> + <element name="artisticLineDrawing"> + <ref name="CT_PictureEffectLineDrawing"/> + </element> + <element name="artisticMarker"> + <ref name="CT_PictureEffectMarker"/> + </element> + <element name="artisticMosiaicBubbles"> + <ref name="CT_PictureEffectMosiaicBubbles"/> + </element> + <element name="artisticPaintStrokes"> + <ref name="CT_PictureEffectPaintStrokes"/> + </element> + <element name="artisticPaintBrush"> + <ref name="CT_PictureEffectPaintBrush"/> + </element> + <element name="artisticPastelsSmooth"> + <ref name="CT_PictureEffectPastelsSmooth"/> + </element> + <element name="artisticPencilGrayscale"> + <ref name="CT_PictureEffectPencilGrayscale"/> + </element> + <element name="artisticPencilSketch"> + <ref name="CT_PictureEffectPencilSketch"/> + </element> + <element name="artisticPhotocopy"> + <ref name="CT_PictureEffectPhotocopy"/> + </element> + <element name="artisticPlasticWrap"> + <ref name="CT_PictureEffectPlasticWrap"/> + </element> + <element name="artisticTexturizer"> + <ref name="CT_PictureEffectTexturizer"/> + </element> + <element name="artisticWatercolorSponge"> + <ref name="CT_PictureEffectWatercolorSponge"/> + </element> + <element name="brightnessContrast"> + <ref name="CT_PictureEffectBrightnessContrast"/> + </element> + <element name="colorTemperature"> + <ref name="CT_PictureEffectColorTemperature"/> + </element> + <element name="saturation"> + <ref name="CT_PictureEffectSaturation"/> + </element> + <element name="sharpenSoften"> + <ref name="CT_PictureEffectSharpenSoften"/> + </element> + </choice> + <attribute name="visible"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_PictureLayer"> + <element name="imgEffect"> + <ref name="CT_PictureEffect"/> + </element> + <attribute name="r:embed"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Photo"> + <element name="imgLayer"> + <ref name="CT_PictureLayer"/> + </element> + </define> + </grammar> + </namespace> + <namespace name="dml-shapeGeometry"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main"> + <define name="ST_ShapeType"> + <choice> + <!-- Line Shape --> + <value>line</value> + <!-- Line Inverse Shape --> + <value>lineInv</value> + <!-- Triangle Shape --> + <value>triangle</value> + <!-- Right Triangle Shape --> + <value>rtTriangle</value> + <!-- Rectangle Shape --> + <value>rect</value> + <!-- Diamond Shape --> + <value>diamond</value> + <!-- Parallelogram Shape --> + <value>parallelogram</value> + <!-- Trapezoid Shape --> + <value>trapezoid</value> + <!-- Non-Isosceles Trapezoid Shape --> + <value>nonIsoscelesTrapezoid</value> + <!-- Pentagon Shape --> + <value>pentagon</value> + <!-- Hexagon Shape --> + <value>hexagon</value> + <!-- Heptagon Shape --> + <value>heptagon</value> + <!-- Octagon Shape --> + <value>octagon</value> + <!-- Decagon Shape --> + <value>decagon</value> + <!-- Dodecagon Shape --> + <value>dodecagon</value> + <!-- Four Pointed Star Shape --> + <value>star4</value> + <!-- Five Pointed Star Shape --> + <value>star5</value> + <!-- Six Pointed Star Shape --> + <value>star6</value> + <!-- Seven Pointed Star Shape --> + <value>star7</value> + <!-- Eight Pointed Star Shape --> + <value>star8</value> + <!-- Ten Pointed Star Shape --> + <value>star10</value> + <!-- Twelve Pointed Star Shape --> + <value>star12</value> + <!-- Sixteen Pointed Star Shape --> + <value>star16</value> + <!-- Twenty Four Pointed Star Shape --> + <value>star24</value> + <!-- Thirty Two Pointed Star Shape --> + <value>star32</value> + <!-- Round Corner Rectangle Shape --> + <value>roundRect</value> + <!-- One Round Corner Rectangle Shape --> + <value>round1Rect</value> + <!-- Two Same-side Round Corner Rectangle Shape --> + <value>round2SameRect</value> + <!-- Two Diagonal Round Corner Rectangle Shape --> + <value>round2DiagRect</value> + <!-- One Snip One Round Corner Rectangle Shape --> + <value>snipRoundRect</value> + <!-- One Snip Corner Rectangle Shape --> + <value>snip1Rect</value> + <!-- Two Same-side Snip Corner Rectangle Shape --> + <value>snip2SameRect</value> + <!-- Two Diagonal Snip Corner Rectangle Shape --> + <value>snip2DiagRect</value> + <!-- Plaque Shape --> + <value>plaque</value> + <!-- Ellipse Shape --> + <value>ellipse</value> + <!-- Teardrop Shape --> + <value>teardrop</value> + <!-- Home Plate Shape --> + <value>homePlate</value> + <!-- Chevron Shape --> + <value>chevron</value> + <!-- Pie Wedge Shape --> + <value>pieWedge</value> + <!-- Pie Shape --> + <value>pie</value> + <!-- Block Arc Shape --> + <value>blockArc</value> + <!-- Donut Shape --> + <value>donut</value> + <!-- No Smoking Shape --> + <value>noSmoking</value> + <!-- Right Arrow Shape --> + <value>rightArrow</value> + <!-- Left Arrow Shape --> + <value>leftArrow</value> + <!-- Up Arrow Shape --> + <value>upArrow</value> + <!-- Down Arrow Shape --> + <value>downArrow</value> + <!-- Striped Right Arrow Shape --> + <value>stripedRightArrow</value> + <!-- Notched Right Arrow Shape --> + <value>notchedRightArrow</value> + <!-- Bent Up Arrow Shape --> + <value>bentUpArrow</value> + <!-- Left Right Arrow Shape --> + <value>leftRightArrow</value> + <!-- Up Down Arrow Shape --> + <value>upDownArrow</value> + <!-- Left Up Arrow Shape --> + <value>leftUpArrow</value> + <!-- Left Right Up Arrow Shape --> + <value>leftRightUpArrow</value> + <!-- Quad-Arrow Shape --> + <value>quadArrow</value> + <!-- Callout Left Arrow Shape --> + <value>leftArrowCallout</value> + <!-- Callout Right Arrow Shape --> + <value>rightArrowCallout</value> + <!-- Callout Up Arrow Shape --> + <value>upArrowCallout</value> + <!-- Callout Down Arrow Shape --> + <value>downArrowCallout</value> + <!-- Callout Left Right Arrow Shape --> + <value>leftRightArrowCallout</value> + <!-- Callout Up Down Arrow Shape --> + <value>upDownArrowCallout</value> + <!-- Callout Quad-Arrow Shape --> + <value>quadArrowCallout</value> + <!-- Bent Arrow Shape --> + <value>bentArrow</value> + <!-- U-Turn Arrow Shape --> + <value>uturnArrow</value> + <!-- Circular Arrow Shape --> + <value>circularArrow</value> + <!-- Left Circular Arrow Shape --> + <value>leftCircularArrow</value> + <!-- Left Right Circular Arrow Shape --> + <value>leftRightCircularArrow</value> + <!-- Curved Right Arrow Shape --> + <value>curvedRightArrow</value> + <!-- Curved Left Arrow Shape --> + <value>curvedLeftArrow</value> + <!-- Curved Up Arrow Shape --> + <value>curvedUpArrow</value> + <!-- Curved Down Arrow Shape --> + <value>curvedDownArrow</value> + <!-- Swoosh Arrow Shape --> + <value>swooshArrow</value> + <!-- Cube Shape --> + <value>cube</value> + <!-- Can Shape --> + <value>can</value> + <!-- Lightning Bolt Shape --> + <value>lightningBolt</value> + <!-- Heart Shape --> + <value>heart</value> + <!-- Sun Shape --> + <value>sun</value> + <!-- Moon Shape --> + <value>moon</value> + <!-- Smiley Face Shape --> + <value>smileyFace</value> + <!-- Irregular Seal 1 Shape --> + <value>irregularSeal1</value> + <!-- Irregular Seal 2 Shape --> + <value>irregularSeal2</value> + <!-- Folded Corner Shape --> + <value>foldedCorner</value> + <!-- Bevel Shape --> + <value>bevel</value> + <!-- Frame Shape --> + <value>frame</value> + <!-- Half Frame Shape --> + <value>halfFrame</value> + <!-- Corner Shape --> + <value>corner</value> + <!-- Diagonal Stripe Shape --> + <value>diagStripe</value> + <!-- Chord Shape --> + <value>chord</value> + <!-- Curved Arc Shape --> + <value>arc</value> + <!-- Left Bracket Shape --> + <value>leftBracket</value> + <!-- Right Bracket Shape --> + <value>rightBracket</value> + <!-- Left Brace Shape --> + <value>leftBrace</value> + <!-- Right Brace Shape --> + <value>rightBrace</value> + <!-- Bracket Pair Shape --> + <value>bracketPair</value> + <!-- Brace Pair Shape --> + <value>bracePair</value> + <!-- Straight Connector 1 Shape --> + <value>straightConnector1</value> + <!-- Bent Connector 2 Shape --> + <value>bentConnector2</value> + <!-- Bent Connector 3 Shape --> + <value>bentConnector3</value> + <!-- Bent Connector 4 Shape --> + <value>bentConnector4</value> + <!-- Bent Connector 5 Shape --> + <value>bentConnector5</value> + <!-- Curved Connector 2 Shape --> + <value>curvedConnector2</value> + <!-- Curved Connector 3 Shape --> + <value>curvedConnector3</value> + <!-- Curved Connector 4 Shape --> + <value>curvedConnector4</value> + <!-- Curved Connector 5 Shape --> + <value>curvedConnector5</value> + <!-- Callout 1 Shape --> + <value>callout1</value> + <!-- Callout 2 Shape --> + <value>callout2</value> + <!-- Callout 3 Shape --> + <value>callout3</value> + <!-- Callout 1 Shape --> + <value>accentCallout1</value> + <!-- Callout 2 Shape --> + <value>accentCallout2</value> + <!-- Callout 3 Shape --> + <value>accentCallout3</value> + <!-- Callout 1 with Border Shape --> + <value>borderCallout1</value> + <!-- Callout 2 with Border Shape --> + <value>borderCallout2</value> + <!-- Callout 3 with Border Shape --> + <value>borderCallout3</value> + <!-- Callout 1 with Border and Accent Shape --> + <value>accentBorderCallout1</value> + <!-- Callout 2 with Border and Accent Shape --> + <value>accentBorderCallout2</value> + <!-- Callout 3 with Border and Accent Shape --> + <value>accentBorderCallout3</value> + <!-- Callout Wedge Rectangle Shape --> + <value>wedgeRectCallout</value> + <!-- Callout Wedge Round Rectangle Shape --> + <value>wedgeRoundRectCallout</value> + <!-- Callout Wedge Ellipse Shape --> + <value>wedgeEllipseCallout</value> + <!-- Callout Cloud Shape --> + <value>cloudCallout</value> + <!-- Cloud Shape --> + <value>cloud</value> + <!-- Ribbon Shape --> + <value>ribbon</value> + <!-- Ribbon 2 Shape --> + <value>ribbon2</value> + <!-- Ellipse Ribbon Shape --> + <value>ellipseRibbon</value> + <!-- Ellipse Ribbon 2 Shape --> + <value>ellipseRibbon2</value> + <!-- Left Right Ribbon Shape --> + <value>leftRightRibbon</value> + <!-- Vertical Scroll Shape --> + <value>verticalScroll</value> + <!-- Horizontal Scroll Shape --> + <value>horizontalScroll</value> + <!-- Wave Shape --> + <value>wave</value> + <!-- Double Wave Shape --> + <value>doubleWave</value> + <!-- Plus Shape --> + <value>plus</value> + <!-- Process Flow Shape --> + <value>flowChartProcess</value> + <!-- Decision Flow Shape --> + <value>flowChartDecision</value> + <!-- Input Output Flow Shape --> + <value>flowChartInputOutput</value> + <!-- Predefined Process Flow Shape --> + <value>flowChartPredefinedProcess</value> + <!-- Internal Storage Flow Shape --> + <value>flowChartInternalStorage</value> + <!-- Document Flow Shape --> + <value>flowChartDocument</value> + <!-- Multi-Document Flow Shape --> + <value>flowChartMultidocument</value> + <!-- Terminator Flow Shape --> + <value>flowChartTerminator</value> + <!-- Preparation Flow Shape --> + <value>flowChartPreparation</value> + <!-- Manual Input Flow Shape --> + <value>flowChartManualInput</value> + <!-- Manual Operation Flow Shape --> + <value>flowChartManualOperation</value> + <!-- Connector Flow Shape --> + <value>flowChartConnector</value> + <!-- Punched Card Flow Shape --> + <value>flowChartPunchedCard</value> + <!-- Punched Tape Flow Shape --> + <value>flowChartPunchedTape</value> + <!-- Summing Junction Flow Shape --> + <value>flowChartSummingJunction</value> + <!-- Or Flow Shape --> + <value>flowChartOr</value> + <!-- Collate Flow Shape --> + <value>flowChartCollate</value> + <!-- Sort Flow Shape --> + <value>flowChartSort</value> + <!-- Extract Flow Shape --> + <value>flowChartExtract</value> + <!-- Merge Flow Shape --> + <value>flowChartMerge</value> + <!-- Offline Storage Flow Shape --> + <value>flowChartOfflineStorage</value> + <!-- Online Storage Flow Shape --> + <value>flowChartOnlineStorage</value> + <!-- Magnetic Tape Flow Shape --> + <value>flowChartMagneticTape</value> + <!-- Magnetic Disk Flow Shape --> + <value>flowChartMagneticDisk</value> + <!-- Magnetic Drum Flow Shape --> + <value>flowChartMagneticDrum</value> + <!-- Display Flow Shape --> + <value>flowChartDisplay</value> + <!-- Delay Flow Shape --> + <value>flowChartDelay</value> + <!-- Alternate Process Flow Shape --> + <value>flowChartAlternateProcess</value> + <!-- Off-Page Connector Flow Shape --> + <value>flowChartOffpageConnector</value> + <!-- Blank Button Shape --> + <value>actionButtonBlank</value> + <!-- Home Button Shape --> + <value>actionButtonHome</value> + <!-- Help Button Shape --> + <value>actionButtonHelp</value> + <!-- Information Button Shape --> + <value>actionButtonInformation</value> + <!-- Forward or Next Button Shape --> + <value>actionButtonForwardNext</value> + <!-- Back or Previous Button Shape --> + <value>actionButtonBackPrevious</value> + <!-- End Button Shape --> + <value>actionButtonEnd</value> + <!-- Beginning Button Shape --> + <value>actionButtonBeginning</value> + <!-- Return Button Shape --> + <value>actionButtonReturn</value> + <!-- Document Button Shape --> + <value>actionButtonDocument</value> + <!-- Sound Button Shape --> + <value>actionButtonSound</value> + <!-- Movie Button Shape --> + <value>actionButtonMovie</value> + <!-- Gear 6 Shape --> + <value>gear6</value> + <!-- Gear 9 Shape --> + <value>gear9</value> + <!-- Funnel Shape --> + <value>funnel</value> + <!-- Plus Math Shape --> + <value>mathPlus</value> + <!-- Minus Math Shape --> + <value>mathMinus</value> + <!-- Multiply Math Shape --> + <value>mathMultiply</value> + <!-- Divide Math Shape --> + <value>mathDivide</value> + <!-- Equal Math Shape --> + <value>mathEqual</value> + <!-- Not Equal Math Shape --> + <value>mathNotEqual</value> + <!-- Corner Tabs Shape --> + <value>cornerTabs</value> + <!-- Square Tabs Shape --> + <value>squareTabs</value> + <!-- Plaque Tabs Shape --> + <value>plaqueTabs</value> + <!-- Chart X Shape --> + <value>chartX</value> + <!-- Chart Star Shape --> + <value>chartStar</value> + <!-- Chart Plus Shape --> + <value>chartPlus</value> + </choice> + </define> + <define name="ST_TextShapeType"> + <choice> + <!-- No Text Shape --> + <value>textNoShape</value> + <!-- Plain Text Shape --> + <value>textPlain</value> + <!-- Stop Sign Text Shape --> + <value>textStop</value> + <!-- Triangle Text Shape --> + <value>textTriangle</value> + <!-- Inverted Triangle Text Shape --> + <value>textTriangleInverted</value> + <!-- Chevron Text Shape --> + <value>textChevron</value> + <!-- Inverted Chevron Text Shape --> + <value>textChevronInverted</value> + <!-- Inside Ring Text Shape --> + <value>textRingInside</value> + <!-- Outside Ring Text Shape --> + <value>textRingOutside</value> + <!-- Upward Arch Text Shape --> + <value>textArchUp</value> + <!-- Downward Arch Text Shape --> + <value>textArchDown</value> + <!-- Circle Text Shape --> + <value>textCircle</value> + <!-- Button Text Shape --> + <value>textButton</value> + <!-- Upward Pour Arch Text Shape --> + <value>textArchUpPour</value> + <!-- Downward Pour Arch Text Shape --> + <value>textArchDownPour</value> + <!-- Circle Pour Text Shape --> + <value>textCirclePour</value> + <!-- Button Pour Text Shape --> + <value>textButtonPour</value> + <!-- Upward Curve Text Shape --> + <value>textCurveUp</value> + <!-- Downward Curve Text Shape --> + <value>textCurveDown</value> + <!-- Upward Can Text Shape --> + <value>textCanUp</value> + <!-- Downward Can Text Shape --> + <value>textCanDown</value> + <!-- Wave 1 Text Shape --> + <value>textWave1</value> + <!-- Wave 2 Text Shape --> + <value>textWave2</value> + <!-- Double Wave 1 Text Shape --> + <value>textDoubleWave1</value> + <!-- Wave 4 Text Shape --> + <value>textWave4</value> + <!-- Inflate Text Shape --> + <value>textInflate</value> + <!-- Deflate Text Shape --> + <value>textDeflate</value> + <!-- Bottom Inflate Text Shape --> + <value>textInflateBottom</value> + <!-- Bottom Deflate Text Shape --> + <value>textDeflateBottom</value> + <!-- Top Inflate Text Shape --> + <value>textInflateTop</value> + <!-- Top Deflate Text Shape --> + <value>textDeflateTop</value> + <!-- Deflate-Inflate Text Shape --> + <value>textDeflateInflate</value> + <!-- Deflate-Inflate-Deflate Text Shape --> + <value>textDeflateInflateDeflate</value> + <!-- Right Fade Text Shape --> + <value>textFadeRight</value> + <!-- Left Fade Text Shape --> + <value>textFadeLeft</value> + <!-- Upward Fade Text Shape --> + <value>textFadeUp</value> + <!-- Downward Fade Text Shape --> + <value>textFadeDown</value> + <!-- Upward Slant Text Shape --> + <value>textSlantUp</value> + <!-- Downward Slant Text Shape --> + <value>textSlantDown</value> + <!-- Upward Cascade Text Shape --> + <value>textCascadeUp</value> + <!-- Downward Cascade Text Shape --> + <value>textCascadeDown</value> + </choice> + </define> + <define name="ST_GeomGuideName"> + <data type="token"/> + </define> + <define name="ST_GeomGuideFormula"> + <data type="string"/> + </define> + <define name="CT_GeomGuide"> + <attribute name="name"> + <ref name="ST_GeomGuideName"/> + </attribute> + <attribute name="fmla"> + <ref name="ST_GeomGuideFormula"/> + </attribute> + </define> + <define name="CT_GeomGuideList"> + <element name="gd"> + <ref name="CT_GeomGuide"/> + </element> + </define> + <define name="ST_AdjCoordinate"> + <choice> + <ref name="ST_Coordinate"/> + <ref name="ST_GeomGuideName"/> + </choice> + </define> + <!-- Union --> + <define name="ST_AdjAngle"> + <choice> + <ref name="ST_Angle"/> + <ref name="ST_GeomGuideName"/> + </choice> + </define> + <!-- Union --> + <define name="CT_AdjPoint2D"> + <attribute name="x"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="y"> + <ref name="ST_AdjCoordinate"/> + </attribute> + </define> + <define name="CT_GeomRect"> + <attribute name="l"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="t"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="r"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="b"> + <ref name="ST_AdjCoordinate"/> + </attribute> + </define> + <define name="CT_XYAdjustHandle"> + <element name="pos"> + <ref name="CT_AdjPoint2D"/> + </element> + <attribute name="gdRefX"> + <ref name="ST_GeomGuideName"/> + </attribute> + <attribute name="minX"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="maxX"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="gdRefY"> + <ref name="ST_GeomGuideName"/> + </attribute> + <attribute name="minY"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="maxY"> + <ref name="ST_AdjCoordinate"/> + </attribute> + </define> + <define name="CT_PolarAdjustHandle"> + <element name="pos"> + <ref name="CT_AdjPoint2D"/> + </element> + <attribute name="gdRefR"> + <ref name="ST_GeomGuideName"/> + </attribute> + <attribute name="minR"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="maxR"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="gdRefAng"> + <ref name="ST_GeomGuideName"/> + </attribute> + <attribute name="minAng"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="maxAng"> + <ref name="ST_AdjCoordinate"/> + </attribute> + </define> + <define name="CT_ConnectionSite"> + <element name="pos"> + <ref name="CT_AdjPoint2D"/> + </element> + <attribute name="ang"> + <ref name="ST_AdjAngle"/> + </attribute> + </define> + <define name="CT_AdjustHandleList"> + <choice> + <element name="ahXY"> + <ref name="CT_XYAdjustHandle"/> + </element> + <element name="ahPolar"> + <ref name="CT_PolarAdjustHandle"/> + </element> + </choice> + </define> + <define name="CT_ConnectionSiteList"> + <element name="cxn"> + <ref name="CT_ConnectionSite"/> + </element> + </define> + <define name="CT_Connection"> + <attribute name="id"> + <ref name="ST_DrawingElementId"/> + </attribute> + <attribute name="idx"> + <data type="unsignedInt"/> + </attribute> + </define> + <define name="CT_Path2DMoveTo"> + <element name="pt"> + <ref name="CT_AdjPoint2D"/> + </element> + </define> + <define name="CT_Path2DLineTo"> + <element name="pt"> + <ref name="CT_AdjPoint2D"/> + </element> + </define> + <define name="CT_Path2DArcTo"> + <attribute name="wR"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="hR"> + <ref name="ST_AdjCoordinate"/> + </attribute> + <attribute name="stAng"> + <ref name="ST_AdjAngle"/> + </attribute> + <attribute name="swAng"> + <ref name="ST_AdjAngle"/> + </attribute> + </define> + <define name="CT_Path2DQuadBezierTo"> + <element name="pt"> + <ref name="CT_AdjPoint2D"/> + </element> + </define> + <define name="CT_Path2DCubicBezierTo"> + <element name="pt"> + <ref name="CT_AdjPoint2D"/> + </element> + </define> + <define name="CT_Path2DClose"> + </define> + <define name="ST_PathFillMode"> + <choice> + <!-- No Path Fill --> + <value>none</value> + <!-- Normal Path Fill --> + <value>norm</value> + <!-- Lighten Path Fill --> + <value>lighten</value> + <!-- Lighten Path Fill Less --> + <value>lightenLess</value> + <!-- Darken Path Fill --> + <value>darken</value> + <!-- Darken Path Fill Less --> + <value>darkenLess</value> + </choice> + </define> + <define name="CT_Path2D"> + <choice> + <element name="close"> + <ref name="CT_Path2DClose"/> + </element> + <element name="moveTo"> + <ref name="CT_Path2DMoveTo"/> + </element> + <element name="lnTo"> + <ref name="CT_Path2DLineTo"/> + </element> + <element name="arcTo"> + <ref name="CT_Path2DArcTo"/> + </element> + <element name="quadBezTo"> + <ref name="CT_Path2DQuadBezierTo"/> + </element> + <element name="cubicBezTo"> + <ref name="CT_Path2DCubicBezierTo"/> + </element> + </choice> + <attribute name="w"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="h"> + <ref name="ST_PositiveCoordinate"/> + </attribute> + <attribute name="fill"> + <ref name="ST_PathFillMode"/> + </attribute> + <attribute name="stroke"> + <data type="boolean"/> + </attribute> + <attribute name="extrusionOk"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_Path2DList"> + <element name="path"> + <ref name="CT_Path2D"/> + </element> + </define> + <define name="CT_PresetGeometry2D"> + <element name="avLst"> + <ref name="CT_GeomGuideList"/> + </element> + <attribute name="prst"> + <ref name="ST_ShapeType"/> + </attribute> + </define> + <define name="CT_PresetTextShape"> + <element name="avLst"> + <ref name="CT_GeomGuideList"/> + </element> + <attribute name="prst"> + <ref name="ST_TextShapeType"/> + </attribute> + </define> + <define name="CT_CustomGeometry2D"> + <element name="avLst"> + <ref name="CT_GeomGuideList"/> + </element> + <element name="gdLst"> + <ref name="CT_GeomGuideList"/> + </element> + <element name="ahLst"> + <ref name="CT_AdjustHandleList"/> + </element> + <element name="cxnLst"> + <ref name="CT_ConnectionSiteList"/> + </element> + <element name="rect"> + <ref name="CT_GeomRect"/> + </element> + <element name="pathLst"> + <ref name="CT_Path2DList"/> + </element> + </define> + <define name="EG_Geometry"> + <choice> + <element name="custGeom"> + <ref name="CT_CustomGeometry2D"/> + </element> + <element name="prstGeom"> + <ref name="CT_PresetGeometry2D"/> + </element> + </choice> + </define> + <define name="EG_TextGeometry"> + <choice> + <element name="custGeom"> + <ref name="CT_CustomGeometry2D"/> + </element> + <element name="prstTxWarp"> + <ref name="CT_PresetTextShape"/> + </element> + </choice> + </define> + </grammar> + <resource name="ST_ShapeType" resource="List"> + <value tokenid="ooxml:Value_ST_ShapeType_line">line</value> + <value tokenid="ooxml:Value_ST_ShapeType_lineInv">lineInv</value> + <value tokenid="ooxml:Value_ST_ShapeType_triangle">triangle</value> + <value tokenid="ooxml:Value_ST_ShapeType_rtTriangle">rtTriangle</value> + <value tokenid="ooxml:Value_ST_ShapeType_rect">rect</value> + <value tokenid="ooxml:Value_ST_ShapeType_diamond">diamond</value> + <value tokenid="ooxml:Value_ST_ShapeType_parallelogram">parallelogram</value> + <value tokenid="ooxml:Value_ST_ShapeType_trapezoid">trapezoid</value> + <value tokenid="ooxml:Value_ST_ShapeType_nonIsoscelesTrapezoid">nonIsoscelesTrapezoid</value> + <value tokenid="ooxml:Value_ST_ShapeType_pentagon">pentagon</value> + <value tokenid="ooxml:Value_ST_ShapeType_hexagon">hexagon</value> + <value tokenid="ooxml:Value_ST_ShapeType_heptagon">heptagon</value> + <value tokenid="ooxml:Value_ST_ShapeType_octagon">octagon</value> + <value tokenid="ooxml:Value_ST_ShapeType_decagon">decagon</value> + <value tokenid="ooxml:Value_ST_ShapeType_dodecagon">dodecagon</value> + <value tokenid="ooxml:Value_ST_ShapeType_star4">star4</value> + <value tokenid="ooxml:Value_ST_ShapeType_star5">star5</value> + <value tokenid="ooxml:Value_ST_ShapeType_star6">star6</value> + <value tokenid="ooxml:Value_ST_ShapeType_star7">star7</value> + <value tokenid="ooxml:Value_ST_ShapeType_star8">star8</value> + <value tokenid="ooxml:Value_ST_ShapeType_star10">star10</value> + <value tokenid="ooxml:Value_ST_ShapeType_star12">star12</value> + <value tokenid="ooxml:Value_ST_ShapeType_star16">star16</value> + <value tokenid="ooxml:Value_ST_ShapeType_star24">star24</value> + <value tokenid="ooxml:Value_ST_ShapeType_star32">star32</value> + <value tokenid="ooxml:Value_ST_ShapeType_roundRect">roundRect</value> + <value tokenid="ooxml:Value_ST_ShapeType_round1Rect">round1Rect</value> + <value tokenid="ooxml:Value_ST_ShapeType_round2SameRect">round2SameRect</value> + <value tokenid="ooxml:Value_ST_ShapeType_round2DiagRect">round2DiagRect</value> + <value tokenid="ooxml:Value_ST_ShapeType_snipRoundRect">snipRoundRect</value> + <value tokenid="ooxml:Value_ST_ShapeType_snip1Rect">snip1Rect</value> + <value tokenid="ooxml:Value_ST_ShapeType_snip2SameRect">snip2SameRect</value> + <value tokenid="ooxml:Value_ST_ShapeType_snip2DiagRect">snip2DiagRect</value> + <value tokenid="ooxml:Value_ST_ShapeType_plaque">plaque</value> + <value tokenid="ooxml:Value_ST_ShapeType_ellipse">ellipse</value> + <value tokenid="ooxml:Value_ST_ShapeType_teardrop">teardrop</value> + <value tokenid="ooxml:Value_ST_ShapeType_homePlate">homePlate</value> + <value tokenid="ooxml:Value_ST_ShapeType_chevron">chevron</value> + <value tokenid="ooxml:Value_ST_ShapeType_pieWedge">pieWedge</value> + <value tokenid="ooxml:Value_ST_ShapeType_pie">pie</value> + <value tokenid="ooxml:Value_ST_ShapeType_blockArc">blockArc</value> + <value tokenid="ooxml:Value_ST_ShapeType_donut">donut</value> + <value tokenid="ooxml:Value_ST_ShapeType_noSmoking">noSmoking</value> + <value tokenid="ooxml:Value_ST_ShapeType_rightArrow">rightArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftArrow">leftArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_upArrow">upArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_downArrow">downArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_stripedRightArrow">stripedRightArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_notchedRightArrow">notchedRightArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_bentUpArrow">bentUpArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftRightArrow">leftRightArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_upDownArrow">upDownArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftUpArrow">leftUpArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftRightUpArrow">leftRightUpArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_quadArrow">quadArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftArrowCallout">leftArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_rightArrowCallout">rightArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_upArrowCallout">upArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_downArrowCallout">downArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftRightArrowCallout">leftRightArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_upDownArrowCallout">upDownArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_quadArrowCallout">quadArrowCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_bentArrow">bentArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_uturnArrow">uturnArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_circularArrow">circularArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftCircularArrow">leftCircularArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftRightCircularArrow">leftRightCircularArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedRightArrow">curvedRightArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedLeftArrow">curvedLeftArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedUpArrow">curvedUpArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedDownArrow">curvedDownArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_swooshArrow">swooshArrow</value> + <value tokenid="ooxml:Value_ST_ShapeType_cube">cube</value> + <value tokenid="ooxml:Value_ST_ShapeType_can">can</value> + <value tokenid="ooxml:Value_ST_ShapeType_lightningBolt">lightningBolt</value> + <value tokenid="ooxml:Value_ST_ShapeType_heart">heart</value> + <value tokenid="ooxml:Value_ST_ShapeType_sun">sun</value> + <value tokenid="ooxml:Value_ST_ShapeType_moon">moon</value> + <value tokenid="ooxml:Value_ST_ShapeType_smileyFace">smileyFace</value> + <value tokenid="ooxml:Value_ST_ShapeType_irregularSeal1">irregularSeal1</value> + <value tokenid="ooxml:Value_ST_ShapeType_irregularSeal2">irregularSeal2</value> + <value tokenid="ooxml:Value_ST_ShapeType_foldedCorner">foldedCorner</value> + <value tokenid="ooxml:Value_ST_ShapeType_bevel">bevel</value> + <value tokenid="ooxml:Value_ST_ShapeType_frame">frame</value> + <value tokenid="ooxml:Value_ST_ShapeType_halfFrame">halfFrame</value> + <value tokenid="ooxml:Value_ST_ShapeType_corner">corner</value> + <value tokenid="ooxml:Value_ST_ShapeType_diagStripe">diagStripe</value> + <value tokenid="ooxml:Value_ST_ShapeType_chord">chord</value> + <value tokenid="ooxml:Value_ST_ShapeType_arc">arc</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftBracket">leftBracket</value> + <value tokenid="ooxml:Value_ST_ShapeType_rightBracket">rightBracket</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftBrace">leftBrace</value> + <value tokenid="ooxml:Value_ST_ShapeType_rightBrace">rightBrace</value> + <value tokenid="ooxml:Value_ST_ShapeType_bracketPair">bracketPair</value> + <value tokenid="ooxml:Value_ST_ShapeType_bracePair">bracePair</value> + <value tokenid="ooxml:Value_ST_ShapeType_straightConnector1">straightConnector1</value> + <value tokenid="ooxml:Value_ST_ShapeType_bentConnector2">bentConnector2</value> + <value tokenid="ooxml:Value_ST_ShapeType_bentConnector3">bentConnector3</value> + <value tokenid="ooxml:Value_ST_ShapeType_bentConnector4">bentConnector4</value> + <value tokenid="ooxml:Value_ST_ShapeType_bentConnector5">bentConnector5</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector2">curvedConnector2</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector3">curvedConnector3</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector4">curvedConnector4</value> + <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector5">curvedConnector5</value> + <value tokenid="ooxml:Value_ST_ShapeType_callout1">callout1</value> + <value tokenid="ooxml:Value_ST_ShapeType_callout2">callout2</value> + <value tokenid="ooxml:Value_ST_ShapeType_callout3">callout3</value> + <value tokenid="ooxml:Value_ST_ShapeType_accentCallout1">accentCallout1</value> + <value tokenid="ooxml:Value_ST_ShapeType_accentCallout2">accentCallout2</value> + <value tokenid="ooxml:Value_ST_ShapeType_accentCallout3">accentCallout3</value> + <value tokenid="ooxml:Value_ST_ShapeType_borderCallout1">borderCallout1</value> + <value tokenid="ooxml:Value_ST_ShapeType_borderCallout2">borderCallout2</value> + <value tokenid="ooxml:Value_ST_ShapeType_borderCallout3">borderCallout3</value> + <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout1">accentBorderCallout1</value> + <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout2">accentBorderCallout2</value> + <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout3">accentBorderCallout3</value> + <value tokenid="ooxml:Value_ST_ShapeType_wedgeRectCallout">wedgeRectCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_wedgeRoundRectCallout">wedgeRoundRectCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_wedgeEllipseCallout">wedgeEllipseCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_cloudCallout">cloudCallout</value> + <value tokenid="ooxml:Value_ST_ShapeType_cloud">cloud</value> + <value tokenid="ooxml:Value_ST_ShapeType_ribbon">ribbon</value> + <value tokenid="ooxml:Value_ST_ShapeType_ribbon2">ribbon2</value> + <value tokenid="ooxml:Value_ST_ShapeType_ellipseRibbon">ellipseRibbon</value> + <value tokenid="ooxml:Value_ST_ShapeType_ellipseRibbon2">ellipseRibbon2</value> + <value tokenid="ooxml:Value_ST_ShapeType_leftRightRibbon">leftRightRibbon</value> + <value tokenid="ooxml:Value_ST_ShapeType_verticalScroll">verticalScroll</value> + <value tokenid="ooxml:Value_ST_ShapeType_horizontalScroll">horizontalScroll</value> + <value tokenid="ooxml:Value_ST_ShapeType_wave">wave</value> + <value tokenid="ooxml:Value_ST_ShapeType_doubleWave">doubleWave</value> + <value tokenid="ooxml:Value_ST_ShapeType_plus">plus</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartProcess">flowChartProcess</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartDecision">flowChartDecision</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartInputOutput">flowChartInputOutput</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartPredefinedProcess">flowChartPredefinedProcess</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartInternalStorage">flowChartInternalStorage</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartDocument">flowChartDocument</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartMultidocument">flowChartMultidocument</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartTerminator">flowChartTerminator</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartPreparation">flowChartPreparation</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartManualInput">flowChartManualInput</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartManualOperation">flowChartManualOperation</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartConnector">flowChartConnector</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartPunchedCard">flowChartPunchedCard</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartPunchedTape">flowChartPunchedTape</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartSummingJunction">flowChartSummingJunction</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartOr">flowChartOr</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartCollate">flowChartCollate</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartSort">flowChartSort</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartExtract">flowChartExtract</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartMerge">flowChartMerge</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartOfflineStorage">flowChartOfflineStorage</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartOnlineStorage">flowChartOnlineStorage</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticTape">flowChartMagneticTape</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticDisk">flowChartMagneticDisk</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticDrum">flowChartMagneticDrum</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartDisplay">flowChartDisplay</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartDelay">flowChartDelay</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartAlternateProcess">flowChartAlternateProcess</value> + <value tokenid="ooxml:Value_ST_ShapeType_flowChartOffpageConnector">flowChartOffpageConnector</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBlank">actionButtonBlank</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonHome">actionButtonHome</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonHelp">actionButtonHelp</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonInformation">actionButtonInformation</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonForwardNext">actionButtonForwardNext</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBackPrevious">actionButtonBackPrevious</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonEnd">actionButtonEnd</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBeginning">actionButtonBeginning</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonReturn">actionButtonReturn</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonDocument">actionButtonDocument</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonSound">actionButtonSound</value> + <value tokenid="ooxml:Value_ST_ShapeType_actionButtonMovie">actionButtonMovie</value> + <value tokenid="ooxml:Value_ST_ShapeType_gear6">gear6</value> + <value tokenid="ooxml:Value_ST_ShapeType_gear9">gear9</value> + <value tokenid="ooxml:Value_ST_ShapeType_funnel">funnel</value> + <value tokenid="ooxml:Value_ST_ShapeType_mathPlus">mathPlus</value> + <value tokenid="ooxml:Value_ST_ShapeType_mathMinus">mathMinus</value> + <value tokenid="ooxml:Value_ST_ShapeType_mathMultiply">mathMultiply</value> + <value tokenid="ooxml:Value_ST_ShapeType_mathDivide">mathDivide</value> + <value tokenid="ooxml:Value_ST_ShapeType_mathEqual">mathEqual</value> + <value tokenid="ooxml:Value_ST_ShapeType_mathNotEqual">mathNotEqual</value> + <value tokenid="ooxml:Value_ST_ShapeType_cornerTabs">cornerTabs</value> + <value tokenid="ooxml:Value_ST_ShapeType_squareTabs">squareTabs</value> + <value tokenid="ooxml:Value_ST_ShapeType_plaqueTabs">plaqueTabs</value> + <value tokenid="ooxml:Value_ST_ShapeType_chartX">chartX</value> + <value tokenid="ooxml:Value_ST_ShapeType_chartStar">chartStar</value> + <value tokenid="ooxml:Value_ST_ShapeType_chartPlus">chartPlus</value> + </resource> + <resource name="ST_TextShapeType" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textNoShape">textNoShape</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textPlain">textPlain</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textStop">textStop</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangle">textTriangle</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangleInverted">textTriangleInverted</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevron">textChevron</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevronInverted">textChevronInverted</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingInside">textRingInside</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingOutside">textRingOutside</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUp">textArchUp</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDown">textArchDown</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCircle">textCircle</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButton">textButton</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUpPour">textArchUpPour</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDownPour">textArchDownPour</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCirclePour">textCirclePour</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButtonPour">textButtonPour</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveUp">textCurveUp</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveDown">textCurveDown</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanUp">textCanUp</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanDown">textCanDown</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave1">textWave1</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave2">textWave2</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDoubleWave1">textDoubleWave1</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave4">textWave4</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflate">textInflate</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflate">textDeflate</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateBottom">textInflateBottom</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateBottom">textDeflateBottom</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateTop">textInflateTop</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateTop">textDeflateTop</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflate">textDeflateInflate</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflateDeflate">textDeflateInflateDeflate</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeRight">textFadeRight</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeLeft">textFadeLeft</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeUp">textFadeUp</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeDown">textFadeDown</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantUp">textSlantUp</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantDown">textSlantDown</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeUp">textCascadeUp</value> + <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeDown">textCascadeDown</value> + </resource> + <resource name="ST_GeomGuideName" resource="String"/> + <resource name="ST_GeomGuideFormula" resource="String"/> + <resource name="CT_GeomGuideList" resource="Properties"> + <element name="gd" tokenid="ooxml:CT_GeomGuideList_gd"/> + </resource> + <resource name="ST_PathFillMode" resource="List"> + <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_none">none</value> + <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_norm">norm</value> + <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_lighten">lighten</value> + <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_lightenLess">lightenLess</value> + <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_darken">darken</value> + <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_darkenLess">darkenLess</value> + </resource> + <resource name="CT_PresetGeometry2D" resource="Properties"> + <element name="avLst" tokenid="ooxml:CT_PresetGeometry2D_avLst"/> + <attribute name="prst" tokenid="ooxml:CT_PresetGeometry2D_prst"/> + </resource> + <resource name="CT_CustomGeometry2D" resource="Properties"> + <element name="avLst" tokenid="ooxml:CT_CustomGeometry2D_avLst"/> + <element name="gdLst" tokenid="ooxml:CT_CustomGeometry2D_gdLst"/> + <element name="ahLst" tokenid="ooxml:CT_CustomGeometry2D_ahLst"/> + <element name="cxnLst" tokenid="ooxml:CT_CustomGeometry2D_cxnLst"/> + <element name="rect" tokenid="ooxml:CT_CustomGeometry2D_rect"/> + <element name="pathLst" tokenid="ooxml:CT_CustomGeometry2D_pathLst"/> + </resource> + <resource name="EG_Geometry" resource="Properties"> + <element name="custGeom" tokenid="ooxml:EG_Geometry_custGeom"/> + <element name="prstGeom" tokenid="ooxml:EG_Geometry_prstGeom"/> + </resource> + </namespace> + <namespace name="dml-wordprocessingDrawing"> + <start name="inline"/> + <start name="anchor"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"> + <include href="dml-graphicalObject"/> + <include href="dml-documentProperties"/> + <!-- start = inline | anchor --> + <define name="ST_Coordinate"> + <data type="long"/> + </define> + <define name="CT_EffectExtent"> + <attribute name="l"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="t"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="r"> + <ref name="ST_Coordinate"/> + </attribute> + <attribute name="b"> + <ref name="ST_Coordinate"/> + </attribute> + </define> + <define name="ST_WrapDistance"> + <data type="unsignedInt"/> + </define> + <define name="ST_EditId"> + <data type="hexBinary"/> + </define> + <define name="CT_Inline"> + <element name="extent"> + <ref name="CT_PositiveSize2D"/> + </element> + <element name="effectExtent"> + <ref name="CT_EffectExtent"/> + </element> + <element name="docPr"> + <ref name="CT_NonVisualDrawingProps"/> + </element> + <element name="cNvGraphicFramePr"> + <ref name="CT_NonVisualGraphicFrameProperties"/> + </element> + <element name="a:graphic"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wp14:sizeRelH"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wp14:sizeRelV"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <attribute name="distT"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distB"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distL"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distR"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="wp14:anchorId"> + <ref name="ST_EditId"/> + </attribute> + </define> + <define name="ST_WrapText"> + <choice> + <!-- Both Sides --> + <value>bothSides</value> + <!-- Left Side Only --> + <value>left</value> + <!-- Right Side Only --> + <value>right</value> + <!-- Largest Side Only --> + <value>largest</value> + </choice> + </define> + <define name="CT_WrapPath"> + <element name="start"> + <ref name="CT_Point2D"/> + </element> + <element name="lineTo"> + <ref name="CT_Point2D"/> + </element> + <attribute name="edited"> + <data type="boolean"/> + </attribute> + </define> + <define name="CT_WrapNone"> + </define> + <define name="CT_WrapSquare"> + <element name="effectExtent"> + <ref name="CT_EffectExtent"/> + </element> + <attribute name="wrapText"> + <ref name="ST_WrapText"/> + </attribute> + <attribute name="distT"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distB"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distL"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distR"> + <ref name="ST_WrapDistance"/> + </attribute> + </define> + <define name="CT_WrapTight"> + <element name="wrapPolygon"> + <ref name="CT_WrapPath"/> + </element> + <attribute name="wrapText"> + <ref name="ST_WrapText"/> + </attribute> + <attribute name="distL"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distR"> + <ref name="ST_WrapDistance"/> + </attribute> + </define> + <define name="CT_WrapThrough"> + <element name="wrapPolygon"> + <ref name="CT_WrapPath"/> + </element> + <attribute name="wrapText"> + <ref name="ST_WrapText"/> + </attribute> + <attribute name="distL"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distR"> + <ref name="ST_WrapDistance"/> + </attribute> + </define> + <define name="CT_WrapTopBottom"> + <element name="effectExtent"> + <ref name="CT_EffectExtent"/> + </element> + <attribute name="distT"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distB"> + <ref name="ST_WrapDistance"/> + </attribute> + </define> + <define name="EG_WrapType"> + <choice> + <element name="wrapNone"> + <ref name="CT_WrapNone"/> + </element> + <element name="wrapSquare"> + <ref name="CT_WrapSquare"/> + </element> + <element name="wrapTight"> + <ref name="CT_WrapTight"/> + </element> + <element name="wrapThrough"> + <ref name="CT_WrapThrough"/> + </element> + <element name="wrapTopAndBottom"> + <ref name="CT_WrapTopBottom"/> + </element> + </choice> + </define> + <define name="ST_PositionOffset"> + <data type="int"/> + </define> + <define name="ST_AlignH"> + <choice> + <!-- Left Alignment --> + <value>left</value> + <!-- Right Alignment --> + <value>right</value> + <!-- Center Alignment --> + <value>center</value> + <!-- Inside --> + <value>inside</value> + <!-- Outside --> + <value>outside</value> + </choice> + </define> + <define name="ST_RelFromH"> + <choice> + <!-- Page Margin --> + <value>margin</value> + <!-- Page Edge --> + <value>page</value> + <!-- Column --> + <value>column</value> + <!-- Character --> + <value>character</value> + <!-- Left Margin --> + <value>leftMargin</value> + <!-- Right Margin --> + <value>rightMargin</value> + <!-- Inside Margin --> + <value>insideMargin</value> + <!-- Outside Margin --> + <value>outsideMargin</value> + </choice> + </define> + <define name="CT_PosH"> + <choice> + <element name="align"> + <ref name="ST_AlignH"/> + </element> + <element name="posOffset"> + <ref name="ST_PositionOffset"/> + </element> + </choice> + <attribute name="relativeFrom"> + <ref name="ST_RelFromH"/> + </attribute> + </define> + <define name="ST_AlignV"> + <choice> + <!-- Top --> + <value>top</value> + <!-- Bottom --> + <value>bottom</value> + <!-- Center Alignment --> + <value>center</value> + <!-- Inside --> + <value>inside</value> + <!-- Outside --> + <value>outside</value> + </choice> + </define> + <define name="ST_RelFromV"> + <choice> + <!-- Page Margin --> + <value>margin</value> + <!-- Page Edge --> + <value>page</value> + <!-- Paragraph --> + <value>paragraph</value> + <!-- Line --> + <value>line</value> + <!-- Top Margin --> + <value>topMargin</value> + <!-- Bottom Margin --> + <value>bottomMargin</value> + <!-- Inside Margin --> + <value>insideMargin</value> + <!-- Outside Margin --> + <value>outsideMargin</value> + </choice> + </define> + <define name="CT_PosV"> + <choice> + <element name="align"> + <ref name="ST_AlignV"/> + </element> + <element name="posOffset"> + <ref name="ST_PositionOffset"/> + </element> + </choice> + <attribute name="relativeFrom"> + <ref name="ST_RelFromV"/> + </attribute> + </define> + <define name="CT_Anchor"> + <element name="simplePos"> + <ref name="CT_Point2D"/> + </element> + <element name="positionH"> + <ref name="CT_PosH"/> + </element> + <element name="positionV"> + <ref name="CT_PosV"/> + </element> + <element name="extent"> + <ref name="CT_PositiveSize2D"/> + </element> + <element name="effectExtent"> + <ref name="CT_EffectExtent"/> + </element> + <ref name="EG_WrapType"/> + <element name="docPr"> + <ref name="CT_NonVisualDrawingProps"/> + </element> + <element name="cNvGraphicFramePr"> + <ref name="CT_NonVisualGraphicFrameProperties"/> + </element> + <element name="a:graphic"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wp14:sizeRelH"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wp14:sizeRelV"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <attribute name="distT"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distB"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distL"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="distR"> + <ref name="ST_WrapDistance"/> + </attribute> + <attribute name="simplePos"> + <data type="boolean"/> + </attribute> + <attribute name="relativeHeight"> + <data type="unsignedInt"/> + </attribute> + <attribute name="behindDoc"> + <data type="boolean"/> + </attribute> + <attribute name="locked"> + <data type="boolean"/> + </attribute> + <attribute name="layoutInCell"> + <data type="boolean"/> + </attribute> + <attribute name="hidden"> + <data type="boolean"/> + </attribute> + <attribute name="allowOverlap"> + <data type="boolean"/> + </attribute> + <attribute name="wp14:anchorId"> + <ref name="ST_EditId"/> + </attribute> + </define> + <define name="inline"> + <element name="inline"> + <ref name="CT_Inline"/> + </element> + </define> + <define name="anchor"> + <element name="anchor"> + <ref name="CT_Anchor"/> + </element> + </define> + </grammar> + <resource name="ST_Coordinate" resource="Integer"/> + <resource name="CT_EffectExtent" resource="Properties"> + <attribute name="l" tokenid="ooxml:CT_EffectExtent_l"/> + <attribute name="t" tokenid="ooxml:CT_EffectExtent_t"/> + <attribute name="r" tokenid="ooxml:CT_EffectExtent_r"/> + <attribute name="b" tokenid="ooxml:CT_EffectExtent_b"/> + </resource> + <resource name="ST_WrapDistance" resource="Integer"/> + <resource name="CT_Inline" resource="Properties"> + <element name="extent" tokenid="ooxml:CT_Inline_extent"/> + <element name="effectExtent" tokenid="ooxml:CT_Inline_effectExtent"/> + <element name="docPr" tokenid="ooxml:CT_Inline_docPr"/> + <element name="cNvGraphicFramePr" tokenid="ooxml:CT_Inline_cNvGraphicFramePr"/> + <element name="a:graphic" tokenid="ooxml:CT_Inline_a_graphic"/> + <element name="wp14:sizeRelH" tokenid="ooxml:CT_Inline_wp14_sizeRelH"/> + <element name="wp14:sizeRelV" tokenid="ooxml:CT_Inline_wp14_sizeRelV"/> + <attribute name="distT" tokenid="ooxml:CT_Inline_distT"/> + <attribute name="distB" tokenid="ooxml:CT_Inline_distB"/> + <attribute name="distL" tokenid="ooxml:CT_Inline_distL"/> + <attribute name="distR" tokenid="ooxml:CT_Inline_distR"/> + <attribute name="wp14:anchorId" tokenid="ooxml:CT_Inline_wp14_anchorId"/> + </resource> + <resource name="ST_WrapText" resource="List"> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_bothSides">bothSides</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_left">left</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_right">right</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_largest">largest</value> + </resource> + <resource name="CT_WrapPath" resource="Properties"> + <element name="start" tokenid="ooxml:CT_WrapPath_start"/> + <element name="lineTo" tokenid="ooxml:CT_WrapPath_lineTo"/> + <attribute name="edited" tokenid="ooxml:CT_WrapPath_edited"/> + </resource> + <resource name="CT_WrapNone" resource="Properties"/> + <resource name="CT_WrapSquare" resource="Properties"> + <element name="effectExtent" tokenid="ooxml:CT_WrapSquare_effectExtent"/> + <attribute name="wrapText" tokenid="ooxml:CT_WrapSquare_wrapText"/> + <attribute name="distT" tokenid="ooxml:CT_WrapSquare_distT"/> + <attribute name="distB" tokenid="ooxml:CT_WrapSquare_distB"/> + <attribute name="distL" tokenid="ooxml:CT_WrapSquare_distL"/> + <attribute name="distR" tokenid="ooxml:CT_WrapSquare_distR"/> + </resource> + <resource name="CT_WrapTight" resource="Properties"> + <element name="wrapPolygon" tokenid="ooxml:CT_WrapTight_wrapPolygon"/> + <attribute name="wrapText" tokenid="ooxml:CT_WrapTight_wrapText"/> + <attribute name="distL" tokenid="ooxml:CT_WrapTight_distL"/> + <attribute name="distR" tokenid="ooxml:CT_WrapTight_distR"/> + </resource> + <resource name="CT_WrapThrough" resource="Properties"> + <element name="wrapPolygon" tokenid="ooxml:CT_WrapThrough_wrapPolygon"/> + <attribute name="wrapText" tokenid="ooxml:CT_WrapThrough_wrapText"/> + <attribute name="distL" tokenid="ooxml:CT_WrapThrough_distL"/> + <attribute name="distR" tokenid="ooxml:CT_WrapThrough_distR"/> + </resource> + <resource name="CT_WrapTopBottom" resource="Properties"> + <element name="effectExtent" tokenid="ooxml:CT_WrapTopBottom_effectExtent"/> + <attribute name="distT" tokenid="ooxml:CT_WrapTopBottom_distT"/> + <attribute name="distB" tokenid="ooxml:CT_WrapTopBottom_distB"/> + </resource> + <resource name="EG_WrapType" resource="Properties"> + <element name="wrapNone" tokenid="ooxml:EG_WrapType_wrapNone"/> + <element name="wrapSquare" tokenid="ooxml:EG_WrapType_wrapSquare"/> + <element name="wrapTight" tokenid="ooxml:EG_WrapType_wrapTight"/> + <element name="wrapThrough" tokenid="ooxml:EG_WrapType_wrapThrough"/> + <element name="wrapTopAndBottom" tokenid="ooxml:EG_WrapType_wrapTopAndBottom"/> + </resource> + <resource name="ST_PositionOffset" resource="Value"> + <action name="characters" action="positionOffset"/> + </resource> + <resource name="ST_AlignH" resource="Value"> + <action name="characters" action="alignH"/> + </resource> + <resource name="ST_RelFromH" resource="List"> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_margin">margin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_page">page</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_column">column</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_character">character</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_leftMargin">leftMargin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_rightMargin">rightMargin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_insideMargin">insideMargin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_outsideMargin">outsideMargin</value> + </resource> + <resource name="CT_PosH" resource="Properties"> + <element name="align" tokenid="ooxml:CT_PosH_align"/> + <element name="posOffset" tokenid="ooxml:CT_PosH_posOffset"/> + <attribute name="relativeFrom" tokenid="ooxml:CT_PosH_relativeFrom"/> + </resource> + <resource name="ST_AlignV" resource="Value"> + <action name="characters" action="alignV"/> + </resource> + <resource name="ST_RelFromV" resource="List"> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_margin">margin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_page">page</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_paragraph">paragraph</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_line">line</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_topMargin">topMargin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_bottomMargin">bottomMargin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_insideMargin">insideMargin</value> + <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_outsideMargin">outsideMargin</value> + </resource> + <resource name="CT_PosV" resource="Properties"> + <element name="align" tokenid="ooxml:CT_PosV_align"/> + <element name="posOffset" tokenid="ooxml:CT_PosV_posOffset"/> + <attribute name="relativeFrom" tokenid="ooxml:CT_PosV_relativeFrom"/> + </resource> + <resource name="ST_EditId" resource="Hex"/> + <resource name="CT_Anchor" resource="Properties"> + <element name="simplePos" tokenid="ooxml:CT_Anchor_simplePos_elem"/> + <element name="positionH" tokenid="ooxml:CT_Anchor_positionH"/> + <element name="positionV" tokenid="ooxml:CT_Anchor_positionV"/> + <element name="extent" tokenid="ooxml:CT_Anchor_extent"/> + <element name="effectExtent" tokenid="ooxml:CT_Anchor_effectExtent"/> + <element name="docPr" tokenid="ooxml:CT_Anchor_docPr"/> + <element name="cNvGraphicFramePr" tokenid="ooxml:CT_Anchor_cNvGraphicFramePr"/> + <element name="a:graphic" tokenid="ooxml:CT_Anchor_a_graphic"/> + <element name="wp14:sizeRelV" tokenid="ooxml:CT_Anchor_wp14_sizeRelV"/> + <attribute name="distT" tokenid="ooxml:CT_Anchor_distT"/> + <attribute name="distB" tokenid="ooxml:CT_Anchor_distB"/> + <attribute name="distL" tokenid="ooxml:CT_Anchor_distL"/> + <attribute name="distR" tokenid="ooxml:CT_Anchor_distR"/> + <attribute name="simplePos" tokenid="ooxml:CT_Anchor_simplePos_attr"/> + <attribute name="relativeHeight" tokenid="ooxml:CT_Anchor_relativeHeight"/> + <attribute name="behindDoc" tokenid="ooxml:CT_Anchor_behindDoc"/> + <attribute name="locked" tokenid="ooxml:CT_Anchor_locked"/> + <attribute name="layoutInCell" tokenid="ooxml:CT_Anchor_layoutInCell"/> + <attribute name="hidden" tokenid="ooxml:CT_Anchor_hidden"/> + <attribute name="allowOverlap" tokenid="ooxml:CT_Anchor_allowOverlap"/> + <attribute name="wp14:anchorId" tokenid="ooxml:CT_Anchor_wp14_anchorId"/> + </resource> + <resource name="inline" resource="Properties"> + <element name="inline" tokenid="ooxml:inline_inline"/> + </resource> + <resource name="anchor" resource="Properties"> + <element name="anchor" tokenid="ooxml:anchor_anchor"/> + </resource> + </namespace> + <namespace name="sml-customXmlMappings"> + <start name="schemaLibrary"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/schemaLibrary/2006/main"> + <!-- ISO RELAX NG Schema --> + <!-- start = schemaLibrary --> + <define name="CT_Schema"> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="manifestLocation"> + <data type="string"/> + </attribute> + <attribute name="schemaLocation"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SchemaLibrary"> + <element name="schema"> + <ref name="CT_Schema"/> + </element> + </define> + <define name="schemaLibrary"> + <element name="schemaLibrary"> + <ref name="CT_SchemaLibrary"/> + </element> + </define> + </grammar> + </namespace> + <namespace name="shared-math"> + <start name="oMathPara"/> + <start name="oMath"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/officeDocument/2006/math" attributeFormDefault="qualified"> + <include href="wml"/> + <!-- start = mathPr | oMathPara | oMath --> + <define name="ST_Integer255"> + <data type="integer"/> + </define> + <define name="CT_Integer255"> + <attribute name="val"> + <ref name="ST_Integer255"/> + </attribute> + </define> + <define name="ST_Integer2"> + <data type="integer"/> + </define> + <define name="CT_Integer2"> + <attribute name="val"> + <ref name="ST_Integer2"/> + </attribute> + </define> + <define name="ST_SpacingRule"> + <data type="integer"/> + </define> + <define name="CT_SpacingRule"> + <attribute name="val"> + <ref name="ST_SpacingRule"/> + </attribute> + </define> + <define name="ST_UnSignedInteger"> + <data type="unsignedInt"/> + </define> + <define name="CT_UnSignedInteger"> + <attribute name="val"> + <ref name="ST_UnSignedInteger"/> + </attribute> + </define> + <define name="ST_Char"> + <data type="string"/> + </define> + <define name="CT_Char"> + <attribute name="val"> + <ref name="ST_Char"/> + </attribute> + </define> + <define name="ST_OnOff"> + <choice> + <!-- On --> + <value>on</value> + <!-- Off --> + <value>off</value> + </choice> + </define> + <define name="CT_OnOff"> + <attribute name="val"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_String"> + <data type="string"/> + </define> + <define name="CT_String"> + <attribute name="val"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="ST_XAlign"> + <choice> + <!-- Left Justification --> + <value>left</value> + <!-- Center --> + <value>center</value> + <!-- Right --> + <value>right</value> + </choice> + </define> + <define name="CT_XAlign"> + <attribute name="val"> + <ref name="ST_XAlign"/> + </attribute> + </define> + <define name="ST_YAlign"> + <choice> + <!-- Top --> + <value>top</value> + <!-- Center (Function) --> + <value>center</value> + <!-- Bottom Alignment --> + <value>bot</value> + </choice> + </define> + <define name="CT_YAlign"> + <attribute name="val"> + <ref name="ST_YAlign"/> + </attribute> + </define> + <define name="ST_Shp"> + <choice> + <!-- Centered (Delimiters) --> + <value>centered</value> + <!-- Match --> + <value>match</value> + </choice> + </define> + <define name="CT_Shp"> + <attribute name="val"> + <ref name="ST_Shp"/> + </attribute> + </define> + <define name="ST_FType"> + <choice> + <!-- Bar Fraction --> + <value>bar</value> + <!-- Skewed --> + <value>skw</value> + <!-- Linear Fraction --> + <value>lin</value> + <!-- No-Bar Fraction (Stack) --> + <value>noBar</value> + </choice> + </define> + <define name="CT_FType"> + <attribute name="val"> + <ref name="ST_FType"/> + </attribute> + </define> + <define name="ST_LimLoc"> + <choice> + <!-- Under-Over location --> + <value>undOvr</value> + <!-- Subscript-Superscript location --> + <value>subSup</value> + </choice> + </define> + <define name="CT_LimLoc"> + <attribute name="val"> + <ref name="ST_LimLoc"/> + </attribute> + </define> + <define name="ST_TopBot"> + <choice> + <!-- Top --> + <value>top</value> + <!-- Bottom Alignment --> + <value>bot</value> + </choice> + </define> + <define name="CT_TopBot"> + <attribute name="val"> + <ref name="ST_TopBot"/> + </attribute> + </define> + <define name="ST_Script"> + <choice> + <!-- Roman --> + <value>roman</value> + <!-- Script --> + <value>script</value> + <!-- Fraktur --> + <value>fraktur</value> + <!-- double-struck --> + <value>double-struck</value> + <!-- Sans-Serif --> + <value>sans-serif</value> + <!-- Monospace --> + <value>monospace</value> + </choice> + </define> + <define name="CT_Script"> + <attribute name="val"> + <ref name="ST_Script"/> + </attribute> + </define> + <define name="ST_Style"> + <choice> + <!-- Plain --> + <value>p</value> + <!-- Bold --> + <value>b</value> + <!-- Italic --> + <value>i</value> + <!-- Bold-Italic --> + <value>bi</value> + </choice> + </define> + <define name="CT_Style"> + <attribute name="val"> + <ref name="ST_Style"/> + </attribute> + </define> + <define name="CT_ManualBreak"> + <attribute name="alnAt"> + <ref name="ST_Integer255"/> + </attribute> + </define> + <define name="EG_ScriptStyle"> + <element name="scr"> + <ref name="CT_Script"/> + </element> + <element name="sty"> + <ref name="CT_Style"/> + </element> + </define> + <define name="CT_RPR"> + <element name="lit"> + <ref name="CT_OnOff"/> + </element> + <choice> + <element name="nor"> + <ref name="CT_OnOff"/> + </element> + <ref name="EG_ScriptStyle"/> + </choice> + <element name="brk"> + <ref name="CT_ManualBreak"/> + </element> + <element name="aln"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_Text"> + <ref name="ST_String"/> + <attribute name="xml:space"> + <data type="string"/> + </attribute> + </define> + <define name="CT_R"> + <element name="rPr"> + <ref name="CT_RPR"/> + </element> + <ref name="EG_RPr"/> + <choice> + <ref name="EG_RunInnerContent"/> + <element name="t"> + <ref name="CT_Text"/> + </element> + </choice> + </define> + <define name="CT_CtrlPr"> + <ref name="EG_RPrMath"/> + </define> + <define name="CT_AccPr"> + <element name="chr"> + <ref name="CT_Char"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Acc"> + <element name="accPr"> + <ref name="CT_AccPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_BarPr"> + <element name="pos"> + <ref name="CT_TopBot"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Bar"> + <element name="barPr"> + <ref name="CT_BarPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_BoxPr"> + <element name="opEmu"> + <ref name="CT_OnOff"/> + </element> + <element name="noBreak"> + <ref name="CT_OnOff"/> + </element> + <element name="diff"> + <ref name="CT_OnOff"/> + </element> + <element name="brk"> + <ref name="CT_ManualBreak"/> + </element> + <element name="aln"> + <ref name="CT_OnOff"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Box"> + <element name="boxPr"> + <ref name="CT_BoxPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_BorderBoxPr"> + <element name="hideTop"> + <ref name="CT_OnOff"/> + </element> + <element name="hideBot"> + <ref name="CT_OnOff"/> + </element> + <element name="hideLeft"> + <ref name="CT_OnOff"/> + </element> + <element name="hideRight"> + <ref name="CT_OnOff"/> + </element> + <element name="strikeH"> + <ref name="CT_OnOff"/> + </element> + <element name="strikeV"> + <ref name="CT_OnOff"/> + </element> + <element name="strikeBLTR"> + <ref name="CT_OnOff"/> + </element> + <element name="strikeTLBR"> + <ref name="CT_OnOff"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_BorderBox"> + <element name="borderBoxPr"> + <ref name="CT_BorderBoxPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_DPr"> + <element name="begChr"> + <ref name="CT_Char"/> + </element> + <element name="sepChr"> + <ref name="CT_Char"/> + </element> + <element name="endChr"> + <ref name="CT_Char"/> + </element> + <element name="grow"> + <ref name="CT_OnOff"/> + </element> + <element name="shp"> + <ref name="CT_Shp"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_D"> + <element name="dPr"> + <ref name="CT_DPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_EqArrPr"> + <element name="baseJc"> + <ref name="CT_YAlign"/> + </element> + <element name="maxDist"> + <ref name="CT_OnOff"/> + </element> + <element name="objDist"> + <ref name="CT_OnOff"/> + </element> + <element name="rSpRule"> + <ref name="CT_SpacingRule"/> + </element> + <element name="rSp"> + <ref name="CT_UnSignedInteger"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_EqArr"> + <element name="eqArrPr"> + <ref name="CT_EqArrPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_FPr"> + <element name="type"> + <ref name="CT_FType"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_F"> + <element name="fPr"> + <ref name="CT_FPr"/> + </element> + <element name="num"> + <ref name="CT_OMathArg"/> + </element> + <element name="den"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_FuncPr"> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Func"> + <element name="funcPr"> + <ref name="CT_FuncPr"/> + </element> + <element name="fName"> + <ref name="CT_OMathArg"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_GroupChrPr"> + <element name="chr"> + <ref name="CT_Char"/> + </element> + <element name="pos"> + <ref name="CT_TopBot"/> + </element> + <element name="vertJc"> + <ref name="CT_TopBot"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_GroupChr"> + <element name="groupChrPr"> + <ref name="CT_GroupChrPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_LimLowPr"> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_LimLow"> + <element name="limLowPr"> + <ref name="CT_LimLowPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + <element name="lim"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_LimUppPr"> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_LimUpp"> + <element name="limUppPr"> + <ref name="CT_LimUppPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + <element name="lim"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_MCPr"> + <element name="count"> + <ref name="CT_Integer255"/> + </element> + <element name="mcJc"> + <ref name="CT_XAlign"/> + </element> + </define> + <define name="CT_MC"> + <element name="mcPr"> + <ref name="CT_MCPr"/> + </element> + </define> + <define name="CT_MCS"> + <element name="mc"> + <ref name="CT_MC"/> + </element> + </define> + <define name="CT_MPr"> + <element name="baseJc"> + <ref name="CT_YAlign"/> + </element> + <element name="plcHide"> + <ref name="CT_OnOff"/> + </element> + <element name="rSpRule"> + <ref name="CT_SpacingRule"/> + </element> + <element name="cGpRule"> + <ref name="CT_SpacingRule"/> + </element> + <element name="rSp"> + <ref name="CT_UnSignedInteger"/> + </element> + <element name="cSp"> + <ref name="CT_UnSignedInteger"/> + </element> + <element name="cGp"> + <ref name="CT_UnSignedInteger"/> + </element> + <element name="mcs"> + <ref name="CT_MCS"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_MR"> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_M"> + <element name="mPr"> + <ref name="CT_MPr"/> + </element> + <element name="mr"> + <ref name="CT_MR"/> + </element> + </define> + <define name="CT_NaryPr"> + <element name="chr"> + <ref name="CT_Char"/> + </element> + <element name="limLoc"> + <ref name="CT_LimLoc"/> + </element> + <element name="grow"> + <ref name="CT_OnOff"/> + </element> + <element name="subHide"> + <ref name="CT_OnOff"/> + </element> + <element name="supHide"> + <ref name="CT_OnOff"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Nary"> + <element name="naryPr"> + <ref name="CT_NaryPr"/> + </element> + <element name="sub"> + <ref name="CT_OMathArg"/> + </element> + <element name="sup"> + <ref name="CT_OMathArg"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_PhantPr"> + <element name="show"> + <ref name="CT_OnOff"/> + </element> + <element name="zeroWid"> + <ref name="CT_OnOff"/> + </element> + <element name="zeroAsc"> + <ref name="CT_OnOff"/> + </element> + <element name="zeroDesc"> + <ref name="CT_OnOff"/> + </element> + <element name="transp"> + <ref name="CT_OnOff"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Phant"> + <element name="phantPr"> + <ref name="CT_PhantPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_RadPr"> + <element name="degHide"> + <ref name="CT_OnOff"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_Rad"> + <element name="radPr"> + <ref name="CT_RadPr"/> + </element> + <element name="deg"> + <ref name="CT_OMathArg"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_SPrePr"> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_SPre"> + <element name="sPrePr"> + <ref name="CT_SPrePr"/> + </element> + <element name="sub"> + <ref name="CT_OMathArg"/> + </element> + <element name="sup"> + <ref name="CT_OMathArg"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_SSubPr"> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_SSub"> + <element name="sSubPr"> + <ref name="CT_SSubPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + <element name="sub"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_SSubSupPr"> + <element name="alnScr"> + <ref name="CT_OnOff"/> + </element> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_SSubSup"> + <element name="sSubSupPr"> + <ref name="CT_SSubSupPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + <element name="sub"> + <ref name="CT_OMathArg"/> + </element> + <element name="sup"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="CT_SSupPr"> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="CT_SSup"> + <element name="sSupPr"> + <ref name="CT_SSupPr"/> + </element> + <element name="e"> + <ref name="CT_OMathArg"/> + </element> + <element name="sup"> + <ref name="CT_OMathArg"/> + </element> + </define> + <define name="EG_OMathMathElements"> + <choice> + <element name="acc"> + <ref name="CT_Acc"/> + </element> + <element name="bar"> + <ref name="CT_Bar"/> + </element> + <element name="box"> + <ref name="CT_Box"/> + </element> + <element name="borderBox"> + <ref name="CT_BorderBox"/> + </element> + <element name="d"> + <ref name="CT_D"/> + </element> + <element name="eqArr"> + <ref name="CT_EqArr"/> + </element> + <element name="f"> + <ref name="CT_F"/> + </element> + <element name="func"> + <ref name="CT_Func"/> + </element> + <element name="groupChr"> + <ref name="CT_GroupChr"/> + </element> + <element name="limLow"> + <ref name="CT_LimLow"/> + </element> + <element name="limUpp"> + <ref name="CT_LimUpp"/> + </element> + <element name="m"> + <ref name="CT_M"/> + </element> + <element name="nary"> + <ref name="CT_Nary"/> + </element> + <element name="phant"> + <ref name="CT_Phant"/> + </element> + <element name="rad"> + <ref name="CT_Rad"/> + </element> + <element name="sPre"> + <ref name="CT_SPre"/> + </element> + <element name="sSub"> + <ref name="CT_SSub"/> + </element> + <element name="sSubSup"> + <ref name="CT_SSubSup"/> + </element> + <element name="sSup"> + <ref name="CT_SSup"/> + </element> + <element name="r"> + <ref name="CT_R"/> + </element> + </choice> + </define> + <define name="EG_OMathElements"> + <choice> + <ref name="EG_OMathMathElements"/> + <ref name="EG_RunLevelElts"/> + </choice> + </define> + <define name="CT_OMathArgPr"> + <element name="argSz"> + <ref name="CT_Integer2"/> + </element> + </define> + <define name="CT_OMathArg"> + <element name="argPr"> + <ref name="CT_OMathArgPr"/> + </element> + <ref name="EG_OMathElements"/> + <element name="ctrlPr"> + <ref name="CT_CtrlPr"/> + </element> + </define> + <define name="ST_Jc"> + <choice> + <!-- Align To Leading Edge --> + <value>start</value> + <!-- Align To Trailing Edge --> + <value>end</value> + <!-- Left Justification (ecma) --> + <value>left</value> + <!-- Right (ecma) --> + <value>right</value> + <!-- Center (Equation) --> + <value>center</value> + <!-- Centered as Group (Equations) --> + <value>centerGroup</value> + </choice> + </define> + <define name="CT_OMathJc"> + <attribute name="val"> + <ref name="ST_Jc"/> + </attribute> + </define> + <define name="CT_OMathParaPr"> + <element name="jc"> + <ref name="CT_OMathJc"/> + </element> + </define> + <define name="ST_TwipsMeasure"> + <data type="unsignedInt"/> + </define> + <define name="CT_TwipsMeasure"> + <attribute name="val"> + <ref name="ST_TwipsMeasure"/> + </attribute> + </define> + <define name="ST_BreakBin"> + <choice> + <!-- Before --> + <value>before</value> + <!-- After --> + <value>after</value> + <!-- Repeat --> + <value>repeat</value> + </choice> + </define> + <define name="CT_BreakBin"> + <attribute name="val"> + <ref name="ST_BreakBin"/> + </attribute> + </define> + <define name="ST_BreakBinSub"> + <choice> + <!-- Minus Minus --> + <value>--</value> + <!-- Minus Plus --> + <value>-+</value> + <!-- Plus Minus --> + <value>+-</value> + </choice> + </define> + <define name="CT_BreakBinSub"> + <attribute name="val"> + <ref name="ST_BreakBinSub"/> + </attribute> + </define> + <define name="CT_MathPr"> + <element name="mathFont"> + <ref name="CT_String"/> + </element> + <element name="brkBin"> + <ref name="CT_BreakBin"/> + </element> + <element name="brkBinSub"> + <ref name="CT_BreakBinSub"/> + </element> + <element name="smallFrac"> + <ref name="CT_OnOff"/> + </element> + <element name="dispDef"> + <ref name="CT_OnOff"/> + </element> + <element name="lMargin"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="rMargin"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="defJc"> + <ref name="CT_OMathJc"/> + </element> + <element name="preSp"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="postSp"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="interSp"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="intraSp"> + <ref name="CT_TwipsMeasure"/> + </element> + <choice> + <element name="wrapIndent"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="wrapRight"> + <ref name="CT_OnOff"/> + </element> + </choice> + <element name="intLim"> + <ref name="CT_LimLoc"/> + </element> + <element name="naryLim"> + <ref name="CT_LimLoc"/> + </element> + </define> + <define name="mathPr"> + <element name="mathPr"> + <ref name="CT_MathPr"/> + </element> + </define> + <define name="CT_OMathPara"> + <element name="oMathParaPr"> + <ref name="CT_OMathParaPr"/> + </element> + <element name="oMath"> + <ref name="CT_OMath"/> + </element> + </define> + <define name="CT_OMath"> + <ref name="EG_OMathElements"/> + </define> + <define name="oMathPara"> + <element name="oMathPara"> + <ref name="CT_OMathPara"/> + </element> + </define> + <define name="oMath"> + <element name="oMath"> + <ref name="CT_OMath"/> + </element> + </define> + <define name="oMathParaPr"> + <element name="oMathParaPr"> + <ref name="CT_OMathParaPr"/> + </element> + </define> + </grammar> + <resource name="ST_Integer255" resource="Integer"/> + <resource name="CT_Integer255" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Integer255_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_Integer2" resource="Integer"/> + <resource name="CT_Integer2" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Integer2_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_SpacingRule" resource="Integer"/> + <resource name="CT_SpacingRule" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_SpacingRule_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_UnSignedInteger" resource="Integer"/> + <resource name="CT_UnSignedInteger" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_UnSignedInteger_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_Char" resource="String"/> + <resource name="CT_Char" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Char_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="ST_OnOff" resource="List"> + <value tokenid="ooxml:Value_math_ST_OnOff_on">on</value> + <value tokenid="ooxml:Value_math_ST_OnOff_off">off</value> + </resource> + <resource name="CT_OnOff" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/> + <action name="start" action="setDefaultBooleanValue"/> + </resource> + <resource name="ST_String" resource="String"/> + <resource name="CT_String" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="ST_XAlign" resource="List"> + <value tokenid="ooxml:Value_math_ST_XAlign_left">left</value> + <value tokenid="ooxml:Value_math_ST_XAlign_center">center</value> + <value tokenid="ooxml:Value_math_ST_XAlign_right">right</value> + </resource> + <resource name="CT_XAlign" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_XAlign_val" action="setValue"/> + </resource> + <resource name="ST_YAlign" resource="List"> + <value tokenid="ooxml:Value_math_ST_YAlign_top">top</value> + <value tokenid="ooxml:Value_math_ST_YAlign_center">center</value> + <value tokenid="ooxml:Value_math_ST_YAlign_bot">bot</value> + </resource> + <resource name="CT_YAlign" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_YAlign_val" action="setValue"/> + </resource> + <resource name="ST_Shp" resource="List"> + <value tokenid="ooxml:Value_math_ST_Shp_centered">centered</value> + <value tokenid="ooxml:Value_math_ST_Shp_match">match</value> + </resource> + <resource name="CT_Shp" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Shp_val" action="setValue"/> + </resource> + <resource name="ST_FType" resource="List"> + <value tokenid="ooxml:Value_math_ST_FType_bar">bar</value> + <value tokenid="ooxml:Value_math_ST_FType_skw">skw</value> + <value tokenid="ooxml:Value_math_ST_FType_lin">lin</value> + <value tokenid="ooxml:Value_math_ST_FType_noBar">noBar</value> + </resource> + <resource name="CT_FType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FType_val" action="setValue"/> + </resource> + <resource name="ST_LimLoc" resource="List"> + <value tokenid="ooxml:Value_math_ST_LimLoc_undOvr">undOvr</value> + <value tokenid="ooxml:Value_math_ST_LimLoc_subSup">subSup</value> + </resource> + <resource name="CT_LimLoc" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_LimLoc_val" action="setValue"/> + </resource> + <resource name="ST_TopBot" resource="List"> + <value tokenid="ooxml:Value_math_ST_TopBot_top">top</value> + <value tokenid="ooxml:Value_math_ST_TopBot_bot">bot</value> + </resource> + <resource name="CT_TopBot" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TopBot_val" action="setValue"/> + </resource> + <resource name="ST_Script" resource="List"> + <value tokenid="ooxml:Value_math_ST_Script_roman">roman</value> + <value tokenid="ooxml:Value_math_ST_Script_script">script</value> + <value tokenid="ooxml:Value_math_ST_Script_fraktur">fraktur</value> + <value tokenid="ooxml:Value_math_ST_Script_doublemstruck">double-struck</value> + <value tokenid="ooxml:Value_math_ST_Script_sansmserif">sans-serif</value> + <value tokenid="ooxml:Value_math_ST_Script_monospace">monospace</value> + </resource> + <resource name="CT_Script" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Script_val" action="setValue"/> + </resource> + <resource name="ST_Style" resource="List"> + <value tokenid="ooxml:Value_ST_Style_b">b</value> + <value tokenid="ooxml:Value_ST_Style_bi">bi</value> + <value tokenid="ooxml:Value_ST_Style_i">i</value> + <value tokenid="ooxml:Value_ST_Style_p">p</value> + </resource> + <resource name="CT_Style" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Style_val" action="setValue"/> + </resource> + <resource name="ST_Jc" resource="String"> + <value tokenid="ooxml:Value_math_ST_Jc_start">left</value> + <value tokenid="ooxml:Value_math_ST_Jc_end">right</value> + <value tokenid="ooxml:Value_math_ST_Jc_left">left</value> + <value tokenid="ooxml:Value_math_ST_Jc_right">right</value> + <value tokenid="ooxml:Value_math_ST_Jc_center">center</value> + <value tokenid="ooxml:Value_math_ST_Jc_centerGroup">centerGroup</value> + </resource> + <resource name="CT_OMathJc" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_OMathJc_val" action="setValue"/> + </resource> + <resource name="ST_TwipsMeasure" resource="TwipsMeasure_asSigned"/> + <resource name="CT_TwipsMeasure" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_BreakBin" resource="List"> + <value tokenid="ooxml:Value_math_ST_BreakBin_before">before</value> + <value tokenid="ooxml:Value_math_ST_BreakBin_after">after</value> + <value tokenid="ooxml:Value_math_ST_BreakBin_repeat">repeat</value> + </resource> + <resource name="CT_BreakBin" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_BreakBin_val" action="setValue"/> + </resource> + <resource name="ST_BreakBinSub" resource="List"> + <value tokenid="ooxml:Value_math_ST_BreakBinSub_mm">--</value> + <value tokenid="ooxml:Value_math_ST_BreakBinSub_mp">-+</value> + <value tokenid="ooxml:Value_math_ST_BreakBinSub_pm">+-</value> + </resource> + <resource name="CT_BreakBinSub" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_BreakBinSub_val" action="setValue"/> + </resource> + </namespace> + <namespace name="shared-relationshipReference"> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> + <!-- ISO RELAX NG Schema --> + <define name="id"> + <attribute name="id"> + <data type="string"/> + </attribute> + </define> + <define name="embed"> + <attribute name="embed"> + <data type="string"/> + </attribute> + </define> + <define name="link"> + <attribute name="link"/> + </define> + <define name="dm"> + <attribute name="dm"/> + </define> + <define name="lo"> + <attribute name="lo"/> + </define> + <define name="qs"> + <attribute name="qs"/> + </define> + <define name="cs"> + <attribute name="cs"/> + </define> + <define name="blip"> + <attribute name="blip"/> + </define> + <define name="pict"> + <attribute name="pict"/> + </define> + <define name="href"> + <attribute name="href"> + <data type="string"/> + </attribute> + </define> + </grammar> + </namespace> + <namespace name="dml-chartDrawing"> + <start name="pic"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/picture"> + <include href="dml-shapeProperties"/> + <include href="dml-documentProperties"/> + <!-- start = pic --> + <define name="CT_PictureNonVisual"> + <element name="cNvPr"> + <ref name="CT_NonVisualDrawingProps"/> + </element> + <element name="cNvPicPr"> + <ref name="CT_NonVisualPictureProperties"/> + </element> + </define> + <define name="CT_Picture"> + <element name="nvPicPr"> + <ref name="CT_PictureNonVisual"/> + </element> + <element name="blipFill"> + <ref name="CT_BlipFillProperties"/> + </element> + <element name="spPr"> + <ref name="CT_ShapeProperties"/> + </element> + </define> + <define name="pic"> + <element name="pic"> + <ref name="CT_Picture"/> + </element> + </define> + <define name="CT_RelIds"> + <attribute name="r:dm"> + <data type="string"/> + </attribute> + <attribute name="r:lo"> + <data type="string"/> + </attribute> + <attribute name="r:qs"> + <data type="string"/> + </attribute> + <attribute name="r:cs"> + <data type="string"/> + </attribute> + </define> + <define name="relIds"> + <element name="dgm:relIds"> + <ref name="CT_RelIds"/> + </element> + </define> + <define name="CT_GvmlGroupShape"> + <element name="nvGrpSpPr"> + <ref name="CT_NonVisualGroupDrawingShapeProps"/> + </element> + <element name="grpSpPr"> + <ref name="CT_GroupShapeProperties"/> + </element> + </define> + <define name="lockedCanvas"> + <element name="lc:lockedCanvas"> + <ref name="CT_GvmlGroupShape"/> + </element> + </define> + <define name="CT_Chart"> + <attribute name="r:id"> + <data type="string"/> + </attribute> + </define> + <define name="chart"> + <element name="c:chart"> + <ref name="CT_Chart"/> + </element> + </define> + <define name="CT_WordprocessingShape"> + <element name="cNvSpPr"> + <ref name="CT_NonVisualDrawingShapeProps"/> + </element> + <element name="spPr"> + <ref name="CT_ShapeProperties"/> + </element> + </define> + <define name="wsp"> + <element name="wps:wsp"> + <ref name="CT_WordprocessingShape"/> + </element> + </define> + <define name="CT_WordprocessingGroup"> + <element name="cNvGrpSpPr"> + <ref name="CT_NonVisualGroupDrawingShapeProps"/> + </element> + <element name="grpSpPr"> + <ref name="CT_WordprocessingGroup"/> + </element> + </define> + <define name="wgp"> + <element name="wpg:wgp"> + <ref name="CT_WordprocessingGroup"/> + </element> + </define> + </grammar> + <resource name="CT_PictureNonVisual" resource="Properties"> + <element name="cNvPr" tokenid="ooxml:CT_PictureNonVisual_cNvPr"/> + <element name="cNvPicPr" tokenid="ooxml:CT_PictureNonVisual_cNvPicPr"/> + </resource> + <resource name="CT_Picture" resource="Shape"> + <element name="nvPicPr" tokenid="ooxml:CT_Picture_nvPicPr"/> + <element name="blipFill" tokenid="ooxml:CT_Picture_blipFill"/> + <element name="spPr" tokenid="ooxml:CT_Picture_spPr"/> + </resource> + <resource name="pic" resource="Properties"> + <element name="pic" tokenid="ooxml:pic_pic"/> + </resource> + <resource name="CT_RelIds" resource="Shape"> + <attribute name="r:dm" tokenid="ooxml:CT_RelIds_dm"/> + <attribute name="r:lo" tokenid="ooxml:CT_RelIds_lo"/> + <attribute name="r:qs" tokenid="ooxml:CT_RelIds_qs"/> + <attribute name="r:cs" tokenid="ooxml:CT_RelIds_cs"/> + </resource> + <resource name="relIds" resource="Shape"> + <element name="dgm:relIds" tokenid="ooxml:dgm_relIds"/> + </resource> + <resource name="CT_GvmlGroupShape" resource="Shape"> + <element name="a:nvGrpSpPr" tokenid="ooxml:CT_GvmlGroupShape_nvGrpSpPr"/> + <element name="a:grpSpPr" tokenid="ooxml:CT_GvmlGroupShape_grpSpPr"/> + </resource> + <resource name="lockedCanvas" resource="Shape"> + <element name="lc:lockedCanvas" tokenid="ooxml:lc_lockedCanvas"/> + </resource> + <resource name="CT_Chart" resource="Shape"> + <attribute name="r:id" tokenid="ooxml:CT_RelId_chart"/> + </resource> + <resource name="chart" resource="Shape"> + <element name="c:chart" tokenid="ooxml:c_chart"/> + </resource> + <resource name="CT_WordprocessingShape" resource="Shape"> + <element name="wps:cNvSpPr" tokenid="ooxml:CT_WordprocessingShape_cNvSpPr"/> + <element name="wps:spPr" tokenid="ooxml:CT_WordprocessingShape_spPr"/> + </resource> + <resource name="wsp" resource="Shape"> + <element name="wps:wsp" tokenid="ooxml:wps_wsp"/> + </resource> + <resource name="CT_WordprocessingGroup" resource="Shape"> + <element name="wpg:cNvGrpSpPr" tokenid="ooxml:CT_WordprocessingGroup_cNvGrpSpPr"/> + <element name="wpg:grpSpPr" tokenid="ooxml:CT_WordprocessingGroup_grpSpPr"/> + </resource> + <resource name="wgp" resource="Shape"> + <element name="wpg:wgp" tokenid="ooxml:wpg_wgp"/> + </resource> + + </namespace> + <namespace name="vml-main"> + <start name="shape"/> + <start name="shapetype"/> + <start name="group"/> + <start name="background"/> + <start name="fill"/> + <start name="formulas"/> + <start name="handles"/> + <start name="imagedata"/> + <start name="path"/> + <start name="textbox"/> + <start name="shadow"/> + <start name="stroke"/> + <start name="textpath"/> + <start name="arc"/> + <start name="curve"/> + <start name="image"/> + <start name="line"/> + <start name="oval"/> + <start name="polyline"/> + <start name="rect"/> + <start name="roundrect"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:vml"> + <include href="vml-officeDrawing"/> + <include href="vml-wordprocessingDrawing"/> + <!-- start = shape | shapetype | group | background | fill | formulas | handles | imagedata | path | textbox | shadow | stroke | textpath | arc | curve | image | line | oval | polyline | rect | roundrect --> + <define name="AG_Id"> + <attribute name="id"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Style"> + <attribute name="style"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Type"> + <attribute name="type"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Adj"> + <attribute name="adj"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Path"> + <attribute name="path"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Fill"> + <attribute name="filled"> + <data type="string"/> + </attribute> + <attribute name="fillcolor"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Chromakey"> + <attribute name="chromakey"> + <data type="string"/> + </attribute> + </define> + <define name="AG_Ext"> + <attribute name="ext"> + <data type="string"/> + </attribute> + </define> + <define name="AG_CoreAttributes"> + <ref name="AG_Id"/> + <ref name="AG_Style"/> + <attribute name="href"> + <data type="string"/> + </attribute> + <attribute name="target"> + <data type="string"/> + </attribute> + <attribute name="class"> + <data type="string"/> + </attribute> + <attribute name="title"> + <data type="string"/> + </attribute> + <attribute name="alt"> + <data type="string"/> + </attribute> + <attribute name="coordsize"> + <data type="string"/> + </attribute> + <attribute name="coordorigin"> + <data type="string"/> + </attribute> + <attribute name="wrapcoords"> + <data type="string"/> + </attribute> + <attribute name="print"> + <data type="string"/> + </attribute> + </define> + <define name="AG_ShapeAttributes"> + <ref name="AG_Chromakey"/> + <ref name="AG_Fill"/> + <attribute name="opacity"> + <data type="string"/> + </attribute> + <attribute name="stroked"> + <data type="string"/> + </attribute> + <attribute name="strokecolor"> + <data type="string"/> + </attribute> + <attribute name="strokeweight"> + <data type="string"/> + </attribute> + <attribute name="insetpen"> + <data type="string"/> + </attribute> + </define> + <define name="AG_OfficeCoreAttributes"> + <attribute name="o:spid"/> + <attribute name="o:oned"/> + <attribute name="o:regroupid"/> + <attribute name="o:doubleclicknotify"/> + <attribute name="o:button"/> + <attribute name="o:userhidden"/> + <attribute name="o:bullet"/> + <attribute name="o:hr"/> + <attribute name="o:hrstd"/> + <attribute name="o:hrnoshade"/> + <attribute name="o:hrpct"/> + <attribute name="o:hralign"/> + <attribute name="o:allowincell"/> + <attribute name="o:allowoverlap"/> + <attribute name="o:userdrawn"/> + <attribute name="o:bordertopcolor"/> + <attribute name="o:borderleftcolor"/> + <attribute name="o:borderbottomcolor"/> + <attribute name="o:borderrightcolor"/> + <attribute name="o:dgmlayout"/> + <attribute name="o:dgmnodekind"/> + <attribute name="o:dgmlayoutmru"/> + <attribute name="o:insetmode"/> + </define> + <define name="AG_OfficeShapeAttributes"> + <attribute name="o:spt"/> + <attribute name="o:connectortype"/> + <attribute name="o:bwmode"/> + <attribute name="o:bwpure"/> + <attribute name="o:bwnormal"/> + <attribute name="o:forcedash"/> + <attribute name="o:oleicon"/> + <attribute name="o:ole"/> + <attribute name="o:preferrelative"/> + <attribute name="o:cliptowrap"/> + <attribute name="o:clip"/> + </define> + <define name="AG_AllCoreAttributes"> + <ref name="AG_CoreAttributes"/> + <ref name="AG_OfficeCoreAttributes"/> + </define> + <define name="AG_AllShapeAttributes"> + <ref name="AG_ShapeAttributes"/> + <ref name="AG_OfficeShapeAttributes"/> + </define> + <define name="AG_ImageAttributes"> + <attribute name="src"> + <data type="string"/> + </attribute> + <attribute name="cropleft"> + <data type="string"/> + </attribute> + <attribute name="croptop"> + <data type="string"/> + </attribute> + <attribute name="cropright"> + <data type="string"/> + </attribute> + <attribute name="cropbottom"> + <data type="string"/> + </attribute> + <attribute name="gain"> + <data type="string"/> + </attribute> + <attribute name="blacklevel"> + <data type="string"/> + </attribute> + <attribute name="gamma"> + <data type="string"/> + </attribute> + <attribute name="grayscale"> + <data type="string"/> + </attribute> + <attribute name="bilevel"> + <data type="string"/> + </attribute> + </define> + <define name="AG_StrokeAttributes"> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="weight"> + <data type="string"/> + </attribute> + <attribute name="color"> + <data type="string"/> + </attribute> + <attribute name="opacity"> + <data type="string"/> + </attribute> + <attribute name="linestyle"> + <data type="string"/> + </attribute> + <attribute name="miterlimit"> + <data type="decimal"/> + </attribute> + <attribute name="joinstyle"> + <data type="string"/> + </attribute> + <attribute name="endcap"> + <data type="string"/> + </attribute> + <attribute name="dashstyle"> + <data type="string"/> + </attribute> + <attribute name="filltype"> + <data type="string"/> + </attribute> + <attribute name="src"> + <data type="string"/> + </attribute> + <attribute name="imageaspect"> + <data type="string"/> + </attribute> + <attribute name="imagesize"> + <data type="string"/> + </attribute> + <attribute name="imagealignshape"> + <data type="string"/> + </attribute> + <attribute name="color2"> + <data type="string"/> + </attribute> + <attribute name="startarrow"> + <data type="string"/> + </attribute> + <attribute name="startarrowwidth"> + <data type="string"/> + </attribute> + <attribute name="startarrowlength"> + <data type="string"/> + </attribute> + <attribute name="endarrow"> + <data type="string"/> + </attribute> + <attribute name="endarrowwidth"> + <data type="string"/> + </attribute> + <attribute name="endarrowlength"> + <data type="string"/> + </attribute> + <attribute name="o:href"/> + <attribute name="o:althref"/> + <attribute name="o:title"/> + <attribute name="o:forcedash"/> + <attribute name="r:id"/> + <attribute name="insetpen"> + <data type="string"/> + </attribute> + <attribute name="o:relid"/> + </define> + <define name="EG_ShapeElements"> + <choice> + <ref name="path"/> + <ref name="formulas"/> + <ref name="handles"/> + <ref name="fill"/> + <ref name="stroke"/> + <ref name="shadow"/> + <ref name="textbox"/> + <ref name="textpath"/> + <ref name="imagedata"/> + <element name="o:skew"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:extrusion"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:callout"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:lock"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:clippath"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:signatureline"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wvml:wrap"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wvml:anchorlock"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wvml:bordertop"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wvml:borderbottom"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wvml:borderleft"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="wvml:borderright"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="x:ClientData"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="p:textdata"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </choice> + </define> + <define name="shape"> + <element name="shape"> + <ref name="CT_Shape"/> + </element> + </define> + <define name="shapetype"> + <element name="shapetype"> + <ref name="CT_Shapetype"/> + </element> + </define> + <define name="group"> + <element name="group"> + <ref name="CT_Group"/> + </element> + </define> + <define name="background"> + <element name="background"> + <ref name="CT_Background"/> + </element> + </define> + <define name="CT_Shape"> + <choice> + <ref name="EG_ShapeElements"/> + <element name="o:ink"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="p:iscomment"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </choice> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <ref name="AG_Type"/> + <ref name="AG_Adj"/> + <ref name="AG_Path"/> + <attribute name="o:gfxdata"/> + <attribute name="equationxml"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Shapetype"> + <ref name="EG_ShapeElements"/> + <element name="o:complex"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <ref name="AG_Adj"/> + <ref name="AG_Path"/> + <attribute name="o:master"/> + </define> + <define name="CT_Group"> + <choice> + <ref name="EG_ShapeElements"/> + <ref name="group"/> + <ref name="shape"/> + <ref name="shapetype"/> + <ref name="arc"/> + <ref name="curve"/> + <ref name="image"/> + <ref name="line"/> + <ref name="oval"/> + <ref name="polyline"/> + <ref name="rect"/> + <ref name="roundrect"/> + <element name="o:diagram"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </choice> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_Fill"/> + <attribute name="editas"> + <data type="string"/> + </attribute> + <attribute name="o:tableproperties"/> + <attribute name="o:tablelimits"/> + </define> + <define name="CT_Background"> + <ref name="fill"/> + <ref name="AG_Id"/> + <ref name="AG_Fill"/> + <attribute name="o:bwmode"/> + <attribute name="o:bwpure"/> + <attribute name="o:bwnormal"/> + <attribute name="o:targetscreensize"/> + </define> + <define name="fill"> + <element name="fill"> + <ref name="CT_Fill"/> + </element> + </define> + <define name="formulas"> + <element name="formulas"> + <ref name="CT_Formulas"/> + </element> + </define> + <define name="handles"> + <element name="handles"> + <ref name="CT_Handles"/> + </element> + </define> + <define name="imagedata"> + <element name="imagedata"> + <ref name="CT_ImageData"/> + </element> + </define> + <define name="path"> + <element name="path"> + <ref name="CT_Path"/> + </element> + </define> + <define name="textbox"> + <element name="textbox"> + <ref name="CT_Textbox"/> + </element> + </define> + <define name="shadow"> + <element name="shadow"> + <ref name="CT_Shadow"/> + </element> + </define> + <define name="stroke"> + <element name="stroke"> + <ref name="CT_Stroke"/> + </element> + </define> + <define name="textpath"> + <element name="textpath"> + <ref name="CT_TextPath"/> + </element> + </define> + <define name="CT_Fill"> + <element name="o:fill"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <ref name="AG_Id"/> + <attribute name="type"> + <data type="string"/> + </attribute> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="color"> + <data type="string"/> + </attribute> + <attribute name="opacity"> + <data type="string"/> + </attribute> + <attribute name="color2"> + <data type="string"/> + </attribute> + <attribute name="src"> + <data type="string"/> + </attribute> + <attribute name="o:href"/> + <attribute name="o:althref"/> + <attribute name="size"> + <data type="string"/> + </attribute> + <attribute name="origin"> + <data type="string"/> + </attribute> + <attribute name="position"> + <data type="string"/> + </attribute> + <attribute name="aspect"> + <data type="string"/> + </attribute> + <attribute name="colors"> + <data type="string"/> + </attribute> + <attribute name="angle"> + <data type="decimal"/> + </attribute> + <attribute name="alignshape"> + <data type="string"/> + </attribute> + <attribute name="focus"> + <data type="string"/> + </attribute> + <attribute name="focussize"> + <data type="string"/> + </attribute> + <attribute name="focusposition"> + <data type="string"/> + </attribute> + <attribute name="method"> + <data type="string"/> + </attribute> + <attribute name="o:detectmouseclick"/> + <attribute name="o:title"/> + <attribute name="o:opacity2"/> + <attribute name="recolor"> + <data type="string"/> + </attribute> + <attribute name="rotate"> + <data type="string"/> + </attribute> + <attribute name="r:id"/> + <attribute name="o:relid"/> + </define> + <define name="CT_Formulas"> + <element name="f"> + <ref name="CT_F"/> + </element> + </define> + <define name="CT_F"> + <attribute name="eqn"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Handles"> + <element name="h"> + <ref name="CT_H"/> + </element> + </define> + <define name="CT_H"> + <attribute name="position"> + <data type="string"/> + </attribute> + <attribute name="polar"> + <data type="string"/> + </attribute> + <attribute name="map"> + <data type="string"/> + </attribute> + <attribute name="invx"> + <data type="string"/> + </attribute> + <attribute name="invy"> + <data type="string"/> + </attribute> + <attribute name="switch"> + <data type="string"/> + </attribute> + <attribute name="xrange"> + <data type="string"/> + </attribute> + <attribute name="yrange"> + <data type="string"/> + </attribute> + <attribute name="radiusrange"> + <data type="string"/> + </attribute> + </define> + <define name="CT_ImageData"> + <ref name="AG_Id"/> + <ref name="AG_ImageAttributes"/> + <ref name="AG_Chromakey"/> + <attribute name="embosscolor"> + <data type="string"/> + </attribute> + <attribute name="recolortarget"> + <data type="string"/> + </attribute> + <attribute name="o:href"/> + <attribute name="o:althref"/> + <attribute name="o:title"/> + <attribute name="o:oleid"/> + <attribute name="o:detectmouseclick"/> + <attribute name="o:movie"/> + <attribute name="o:relid"/> + <attribute name="r:id"/> + <attribute name="r:pict"/> + <attribute name="r:href"/> + </define> + <define name="CT_Path"> + <ref name="AG_Id"/> + <attribute name="v"> + <data type="string"/> + </attribute> + <attribute name="limo"> + <data type="string"/> + </attribute> + <attribute name="textboxrect"> + <data type="string"/> + </attribute> + <attribute name="fillok"> + <data type="string"/> + </attribute> + <attribute name="strokeok"> + <data type="string"/> + </attribute> + <attribute name="shadowok"> + <data type="string"/> + </attribute> + <attribute name="arrowok"> + <data type="string"/> + </attribute> + <attribute name="gradientshapeok"> + <data type="string"/> + </attribute> + <attribute name="textpathok"> + <data type="string"/> + </attribute> + <attribute name="insetpenok"> + <data type="string"/> + </attribute> + <attribute name="o:connecttype"/> + <attribute name="o:connectlocs"/> + <attribute name="o:connectangles"/> + <attribute name="o:extrusionok"/> + </define> + <define name="CT_Shadow"> + <ref name="AG_Id"/> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="type"> + <data type="string"/> + </attribute> + <attribute name="obscured"> + <data type="string"/> + </attribute> + <attribute name="color"> + <data type="string"/> + </attribute> + <attribute name="opacity"> + <data type="string"/> + </attribute> + <attribute name="offset"> + <data type="string"/> + </attribute> + <attribute name="color2"> + <data type="string"/> + </attribute> + <attribute name="offset2"> + <data type="string"/> + </attribute> + <attribute name="origin"> + <data type="string"/> + </attribute> + <attribute name="matrix"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Stroke"> + <element name="o:left"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:top"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:right"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:bottom"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="o:column"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <ref name="AG_Id"/> + <ref name="AG_StrokeAttributes"/> + </define> + <define name="CT_Textbox"> + <choice> + <element name="w:txbxContent"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </choice> + <ref name="AG_Id"/> + <ref name="AG_Style"/> + <attribute name="inset"> + <data type="string"/> + </attribute> + <attribute name="o:singleclick"/> + <attribute name="o:insetmode"/> + </define> + <define name="CT_TextPath"> + <ref name="AG_Id"/> + <ref name="AG_Style"/> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="fitshape"> + <data type="string"/> + </attribute> + <attribute name="fitpath"> + <data type="string"/> + </attribute> + <attribute name="trim"> + <data type="string"/> + </attribute> + <attribute name="xscale"> + <data type="string"/> + </attribute> + <attribute name="string"> + <data type="string"/> + </attribute> + </define> + <define name="arc"> + <element name="arc"> + <ref name="CT_Arc"/> + </element> + </define> + <define name="curve"> + <element name="curve"> + <ref name="CT_Curve"/> + </element> + </define> + <define name="image"> + <element name="image"> + <ref name="CT_Image"/> + </element> + </define> + <define name="line"> + <element name="line"> + <ref name="CT_Line"/> + </element> + </define> + <define name="oval"> + <element name="oval"> + <ref name="CT_Oval"/> + </element> + </define> + <define name="polyline"> + <element name="polyline"> + <ref name="CT_PolyLine"/> + </element> + </define> + <define name="rect"> + <element name="rect"> + <ref name="CT_Rect"/> + </element> + </define> + <define name="roundrect"> + <element name="roundrect"> + <ref name="CT_RoundRect"/> + </element> + </define> + <define name="CT_Arc"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <attribute name="startAngle"> + <data type="decimal"/> + </attribute> + <attribute name="endAngle"> + <data type="decimal"/> + </attribute> + </define> + <define name="CT_Curve"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <attribute name="from"> + <data type="string"/> + </attribute> + <attribute name="control1"> + <data type="string"/> + </attribute> + <attribute name="control2"> + <data type="string"/> + </attribute> + <attribute name="to"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Image"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <ref name="AG_ImageAttributes"/> + </define> + <define name="CT_Line"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <attribute name="from"> + <data type="string"/> + </attribute> + <attribute name="to"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Oval"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + </define> + <define name="CT_PolyLine"> + <choice> + <ref name="EG_ShapeElements"/> + <element name="o:ink"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </choice> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <attribute name="points"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Rect"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + </define> + <define name="CT_RoundRect"> + <ref name="EG_ShapeElements"/> + <ref name="AG_AllCoreAttributes"/> + <ref name="AG_AllShapeAttributes"/> + <attribute name="arcsize"> + <data type="string"/> + </attribute> + </define> + <define name="ST_FillType"> + <choice> + <!-- Solid Fill --> + <value>solid</value> + <!-- Linear Gradient --> + <value>gradient</value> + <!-- Radial Gradient --> + <value>gradientRadial</value> + <!-- Tiled Image --> + <value>tile</value> + <!-- Image Pattern --> + <value>pattern</value> + <!-- Stretch Image to Fit --> + <value>frame</value> + </choice> + </define> + <define name="ST_StrokeLineStyle"> + <choice> + <!-- Single Line --> + <value>single</value> + <!-- Two Thin Lines --> + <value>thinThin</value> + <!-- Thin Line Outside Thick Line --> + <value>thinThick</value> + <!-- Thick Line Outside Thin Line --> + <value>thickThin</value> + <!-- Thick Line Between Thin Lines --> + <value>thickBetweenThin</value> + </choice> + </define> + <define name="ST_StrokeJoinStyle"> + <choice> + <!-- Round Joint --> + <value>round</value> + <!-- Bevel Joint --> + <value>bevel</value> + <!-- Miter Joint --> + <value>miter</value> + </choice> + </define> + <define name="ST_StrokeEndCap"> + <choice> + <!-- Flat End --> + <value>flat</value> + <!-- Square End --> + <value>square</value> + <!-- Round End --> + <value>round</value> + </choice> + </define> + <define name="ST_StrokeArrowLength"> + <choice> + <!-- Short Arrowhead --> + <value>short</value> + <!-- Medium Arrowhead --> + <value>medium</value> + <!-- Long Arrowhead --> + <value>long</value> + </choice> + </define> + <define name="ST_StrokeArrowWidth"> + <choice> + <!-- Narrow Arrowhead --> + <value>narrow</value> + <!-- Medium Arrowhead --> + <value>medium</value> + <!-- Wide Arrowhead --> + <value>wide</value> + </choice> + </define> + <define name="ST_StrokeArrowType"> + <choice> + <!-- No Arrowhead --> + <value>none</value> + <!-- Block Arrowhead --> + <value>block</value> + <!-- Classic Arrowhead --> + <value>classic</value> + <!-- Oval Arrowhead --> + <value>oval</value> + <!-- Diamond Arrowhead --> + <value>diamond</value> + <!-- Open Arrowhead --> + <value>open</value> + </choice> + </define> + <define name="ST_ImageAspect"> + <choice> + <!-- Ignore Aspect Ratio --> + <value>ignore</value> + <!-- At Most --> + <value>atMost</value> + <!-- At Least --> + <value>atLeast</value> + </choice> + </define> + <define name="ST_TrueFalseBlank"> + <choice> + <!-- Logical True --> + <value>t</value> + <!-- Logical False --> + <value>f</value> + <!-- Logical True --> + <value>true</value> + <!-- Logical False --> + <value>false</value> + <!-- Blank - Logical False --> + <value/> + </choice> + </define> + <define name="BUILT_IN_ANY_TYPE"> + <choice> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <data type="string"/> + </choice> + </define> + </grammar> + <resource name="ST_FillType" resource="List"> + <value tokenid="ooxml:Value_vml_ST_FillType_solid">solid</value> + <value tokenid="ooxml:Value_vml_ST_FillType_gradient">gradient</value> + <value tokenid="ooxml:Value_vml_ST_FillType_gradientRadial">gradientRadial</value> + <value tokenid="ooxml:Value_vml_ST_FillType_tile">tile</value> + <value tokenid="ooxml:Value_vml_ST_FillType_pattern">pattern</value> + <value tokenid="ooxml:Value_vml_ST_FillType_frame">frame</value> + </resource> + <resource name="ST_StrokeLineStyle" resource="List"> + <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_single">single</value> + <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThin">thinThin</value> + <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThick">thinThick</value> + <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickThin">thickThin</value> + <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickBetweenThin">thickBetweenThin</value> + </resource> + <resource name="ST_StrokeJoinStyle" resource="List"> + <value tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_round">round</value> + <value tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_bevel">bevel</value> + <value tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_miter">miter</value> + </resource> + <resource name="ST_StrokeEndCap" resource="List"> + <value tokenid="ooxml:Value_vml_ST_StrokeEndCap_flat">flat</value> + <value tokenid="ooxml:Value_vml_ST_StrokeEndCap_square">square</value> + <value tokenid="ooxml:Value_vml_ST_StrokeEndCap_round">round</value> + </resource> + <resource name="ST_StrokeArrowLength" resource="List"> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowLength_short">short</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowLength_medium">medium</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowLength_long">long</value> + </resource> + <resource name="ST_StrokeArrowWidth" resource="List"> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_narrow">narrow</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_medium">medium</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_wide">wide</value> + </resource> + <resource name="ST_StrokeArrowType" resource="List"> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_none">none</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_block">block</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_classic">classic</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_oval">oval</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_diamond">diamond</value> + <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_open">open</value> + </resource> + <resource name="ST_ImageAspect" resource="List"> + <value tokenid="ooxml:Value_vml_ST_ImageAspect_ignore">ignore</value> + <value tokenid="ooxml:Value_vml_ST_ImageAspect_atMost">atMost</value> + <value tokenid="ooxml:Value_vml_ST_ImageAspect_atLeast">atLeast</value> + </resource> + <resource name="ST_TrueFalseBlank" resource="List"> + <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_t">t</value> + <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_f">f</value> + <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_true">true</value> + <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_false">false</value> + <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_"/> + </resource> + <resource name="CT_Background" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_Background_id"/> + </resource> + <resource name="background" resource="Properties"> + <element name="background" tokenid="ooxml:background_background"/> + </resource> + </namespace> + <namespace name="vml-officeDrawing"> + <start name="shapedefaults"/> + <start name="shapelayout"/> + <start name="signatureline"/> + <start name="ink"/> + <start name="diagram"/> + <start name="skew"/> + <start name="extrusion"/> + <start name="callout"/> + <start name="lock"/> + <start name="OLEObject"/> + <start name="complex"/> + <start name="left"/> + <start name="top"/> + <start name="right"/> + <start name="bottom"/> + <start name="column"/> + <start name="clippath"/> + <start name="fill"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:office" > + <include href="vml-main"/> + <!-- External schema: http://schemas.openxmlformats.org/officeDocument/2006/relationships --> + <!-- start = shapedefaults | shapelayout | signatureline | ink | diagram | skew | extrusion | callout | lock | OLEObject | complex | left | top | right | bottom | column | clippath | fill --> + <define name="bwmode"> + <attribute name="bwmode"/> + </define> + <define name="bwpure"> + <attribute name="bwpure"/> + </define> + <define name="bwnormal"> + <attribute name="bwnormal"/> + </define> + <define name="targetscreensize"> + <attribute name="targetscreensize"/> + </define> + <define name="insetmode"> + <attribute name="insetmode"/> + </define> + <define name="spt"> + <attribute name="spt"> + <data type="float"/> + </attribute> + </define> + <define name="wrapcoords"> + <attribute name="wrapcoords"> + <data type="string"/> + </attribute> + </define> + <define name="oned"> + <attribute name="oned"/> + </define> + <define name="regroupid"> + <attribute name="regroupid"> + <data type="integer"/> + </attribute> + </define> + <define name="doubleclicknotify"> + <attribute name="doubleclicknotify"/> + </define> + <define name="connectortype"> + <attribute name="connectortype"/> + </define> + <define name="button"> + <attribute name="button"/> + </define> + <define name="userhidden"> + <attribute name="userhidden"/> + </define> + <define name="forcedash"> + <attribute name="forcedash"/> + </define> + <define name="oleicon"> + <attribute name="oleicon"/> + </define> + <define name="ole"> + <attribute name="ole"/> + </define> + <define name="preferrelative"> + <attribute name="preferrelative"/> + </define> + <define name="cliptowrap"> + <attribute name="cliptowrap"/> + </define> + <define name="clip"> + <attribute name="clip"/> + </define> + <define name="bullet"> + <attribute name="bullet"/> + </define> + <define name="hr"> + <attribute name="hr"/> + </define> + <define name="hrstd"> + <attribute name="hrstd"/> + </define> + <define name="hrnoshade"> + <attribute name="hrnoshade"/> + </define> + <define name="hrpct"> + <attribute name="hrpct"> + <data type="float"/> + </attribute> + </define> + <define name="hralign"> + <attribute name="hralign"/> + </define> + <define name="allowincell"> + <attribute name="allowincell"/> + </define> + <define name="allowoverlap"> + <attribute name="allowoverlap"/> + </define> + <define name="userdrawn"> + <attribute name="userdrawn"/> + </define> + <define name="bordertopcolor"> + <attribute name="bordertopcolor"> + <data type="string"/> + </attribute> + </define> + <define name="borderleftcolor"> + <attribute name="borderleftcolor"> + <data type="string"/> + </attribute> + </define> + <define name="borderbottomcolor"> + <attribute name="borderbottomcolor"> + <data type="string"/> + </attribute> + </define> + <define name="borderrightcolor"> + <attribute name="borderrightcolor"> + <data type="string"/> + </attribute> + </define> + <define name="connecttype"> + <attribute name="connecttype"/> + </define> + <define name="connectlocs"> + <attribute name="connectlocs"> + <data type="string"/> + </attribute> + </define> + <define name="connectangles"> + <attribute name="connectangles"> + <data type="string"/> + </attribute> + </define> + <define name="master"> + <attribute name="master"> + <data type="string"/> + </attribute> + </define> + <define name="extrusionok"> + <attribute name="extrusionok"/> + </define> + <define name="href"> + <attribute name="href"> + <data type="string"/> + </attribute> + </define> + <define name="althref"> + <attribute name="althref"> + <data type="string"/> + </attribute> + </define> + <define name="title"> + <attribute name="title"> + <data type="string"/> + </attribute> + </define> + <define name="singleclick"> + <attribute name="singleclick"/> + </define> + <define name="oleid"> + <attribute name="oleid"> + <data type="float"/> + </attribute> + </define> + <define name="detectmouseclick"> + <attribute name="detectmouseclick"/> + </define> + <define name="movie"> + <attribute name="movie"> + <data type="float"/> + </attribute> + </define> + <define name="spid"> + <attribute name="spid"> + <data type="string"/> + </attribute> + </define> + <define name="opacity2"> + <attribute name="opacity2"> + <data type="string"/> + </attribute> + </define> + <define name="relid"> + <attribute name="relid"/> + </define> + <define name="dgmlayout"> + <attribute name="dgmlayout"> + <data type="integer"/> + </attribute> + </define> + <define name="dgmnodekind"> + <attribute name="dgmnodekind"> + <data type="integer"/> + </attribute> + </define> + <define name="dgmlayoutmru"> + <attribute name="dgmlayoutmru"> + <data type="integer"/> + </attribute> + </define> + <define name="gfxdata"> + <attribute name="gfxdata"> + <data type="base64Binary"/> + </attribute> + </define> + <define name="tableproperties"> + <attribute name="tableproperties"> + <data type="string"/> + </attribute> + </define> + <define name="tablelimits"> + <attribute name="tablelimits"> + <data type="string"/> + </attribute> + </define> + <define name="shapedefaults"> + <element name="shapedefaults"> + <ref name="CT_ShapeDefaults"/> + </element> + </define> + <define name="shapelayout"> + <element name="shapelayout"> + <ref name="CT_ShapeLayout"/> + </element> + </define> + <define name="signatureline"> + <element name="signatureline"> + <ref name="CT_SignatureLine"/> + </element> + </define> + <define name="ink"> + <element name="ink"> + <ref name="CT_Ink"/> + </element> + </define> + <define name="diagram"> + <element name="diagram"> + <ref name="CT_Diagram"/> + </element> + </define> + <define name="CT_ShapeDefaults"> + <element name="v:fill"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="v:stroke"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="v:textbox"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="v:shadow"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <ref name="skew"/> + <ref name="extrusion"/> + <ref name="callout"/> + <ref name="lock"/> + <element name="colormru"> + <ref name="CT_ColorMru"/> + </element> + <element name="colormenu"> + <ref name="CT_ColorMenu"/> + </element> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="spidmax"> + <data type="integer"/> + </attribute> + <attribute name="style"> + <data type="string"/> + </attribute> + <attribute name="fill"> + <data type="string"/> + </attribute> + <attribute name="fillcolor"> + <data type="string"/> + </attribute> + <attribute name="stroke"> + <data type="string"/> + </attribute> + <attribute name="strokecolor"> + <data type="string"/> + </attribute> + <attribute name="allowincell"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Ink"> + <attribute name="i"> + <data type="base64Binary"/> + </attribute> + <attribute name="annotation"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SignatureLine"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="issignatureline"> + <data type="string"/> + </attribute> + <attribute name="id"> + <data type="string"/> + </attribute> + <attribute name="provid"> + <data type="string"/> + </attribute> + <attribute name="signinginstructionsset"> + <data type="string"/> + </attribute> + <attribute name="allowcomments"> + <data type="string"/> + </attribute> + <attribute name="showsigndate"> + <data type="string"/> + </attribute> + <attribute name="suggestedsigner"> + <data type="string"/> + </attribute> + <attribute name="suggestedsigner2"> + <data type="string"/> + </attribute> + <attribute name="suggestedsigneremail"> + <data type="string"/> + </attribute> + <attribute name="signinginstructions"> + <data type="string"/> + </attribute> + <attribute name="addlxml"> + <data type="string"/> + </attribute> + <attribute name="sigprovurl"> + <data type="string"/> + </attribute> + </define> + <define name="CT_ShapeLayout"> + <element name="idmap"> + <ref name="CT_IdMap"/> + </element> + <element name="regrouptable"> + <ref name="CT_RegroupTable"/> + </element> + <element name="rules"> + <ref name="CT_Rules"/> + </element> + <ref name="BUILT_IN_ANY_TYPE"/> + </define> + <define name="CT_IdMap"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="data"> + <data type="string"/> + </attribute> + </define> + <define name="CT_RegroupTable"> + <element name="entry"> + <ref name="CT_Entry"/> + </element> + <ref name="BUILT_IN_ANY_TYPE"/> + </define> + <define name="CT_Entry"> + <attribute name="new"> + <data type="int"/> + </attribute> + <attribute name="old"> + <data type="int"/> + </attribute> + </define> + <define name="CT_Rules"> + <element name="r"> + <ref name="CT_R"/> + </element> + <ref name="BUILT_IN_ANY_TYPE"/> + </define> + <define name="CT_R"> + <element name="proxy"> + <ref name="CT_Proxy"/> + </element> + <attribute name="id"> + <data type="string"/> + </attribute> + <attribute name="type"> + <data type="string"/> + </attribute> + <attribute name="how"> + <data type="string"/> + </attribute> + <attribute name="idref"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Proxy"> + <attribute name="start"> + <data type="string"/> + </attribute> + <attribute name="end"> + <data type="string"/> + </attribute> + <attribute name="idref"> + <data type="string"/> + </attribute> + <attribute name="connectloc"> + <data type="int"/> + </attribute> + </define> + <define name="CT_Diagram"> + <element name="relationtable"> + <ref name="CT_RelationTable"/> + </element> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="dgmstyle"> + <data type="integer"/> + </attribute> + <attribute name="autoformat"> + <data type="string"/> + </attribute> + <attribute name="reverse"> + <data type="string"/> + </attribute> + <attribute name="autolayout"> + <data type="string"/> + </attribute> + <attribute name="dgmscalex"> + <data type="integer"/> + </attribute> + <attribute name="dgmscaley"> + <data type="integer"/> + </attribute> + <attribute name="dgmfontsize"> + <data type="integer"/> + </attribute> + <attribute name="constrainbounds"> + <data type="string"/> + </attribute> + <attribute name="dgmbasetextscale"> + <data type="integer"/> + </attribute> + </define> + <define name="CT_RelationTable"> + <element name="rel"> + <ref name="CT_Relation"/> + </element> + <ref name="BUILT_IN_ANY_TYPE"/> + </define> + <define name="CT_Relation"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="idsrc"> + <data type="string"/> + </attribute> + <attribute name="iddest"> + <data type="string"/> + </attribute> + <attribute name="idcntr"> + <data type="string"/> + </attribute> + </define> + <define name="CT_ColorMru"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="colors"> + <data type="string"/> + </attribute> + </define> + <define name="CT_ColorMenu"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="strokecolor"> + <data type="string"/> + </attribute> + <attribute name="fillcolor"> + <data type="string"/> + </attribute> + <attribute name="shadowcolor"> + <data type="string"/> + </attribute> + <attribute name="extrusioncolor"> + <data type="string"/> + </attribute> + </define> + <define name="skew"> + <element name="skew"> + <ref name="CT_Skew"/> + </element> + </define> + <define name="extrusion"> + <element name="extrusion"> + <ref name="CT_Extrusion"/> + </element> + </define> + <define name="callout"> + <element name="callout"> + <ref name="CT_Callout"/> + </element> + </define> + <define name="lock"> + <element name="lock"> + <ref name="CT_Lock"/> + </element> + </define> + <define name="OLEObject"> + <element name="OLEObject"> + <ref name="CT_OLEObject"/> + </element> + </define> + <define name="complex"> + <element name="complex"> + <ref name="CT_Complex"/> + </element> + </define> + <define name="left"> + <element name="left"> + <ref name="CT_StrokeChild"/> + </element> + </define> + <define name="top"> + <element name="top"> + <ref name="CT_StrokeChild"/> + </element> + </define> + <define name="right"> + <element name="right"> + <ref name="CT_StrokeChild"/> + </element> + </define> + <define name="bottom"> + <element name="bottom"> + <ref name="CT_StrokeChild"/> + </element> + </define> + <define name="column"> + <element name="column"> + <ref name="CT_StrokeChild"/> + </element> + </define> + <define name="clippath"> + <element name="clippath"> + <ref name="CT_ClipPath"/> + </element> + </define> + <define name="fill"> + <element name="fill"> + <ref name="CT_Fill"/> + </element> + </define> + <define name="CT_Skew"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="id"> + <data type="string"/> + </attribute> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="offset"> + <data type="string"/> + </attribute> + <attribute name="origin"> + <data type="string"/> + </attribute> + <attribute name="matrix"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Extrusion"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="type"> + <data type="string"/> + </attribute> + <attribute name="render"> + <data type="string"/> + </attribute> + <attribute name="viewpointorigin"> + <data type="string"/> + </attribute> + <attribute name="viewpoint"> + <data type="string"/> + </attribute> + <attribute name="plane"> + <data type="string"/> + </attribute> + <attribute name="skewangle"> + <data type="float"/> + </attribute> + <attribute name="skewamt"> + <data type="string"/> + </attribute> + <attribute name="foredepth"> + <data type="string"/> + </attribute> + <attribute name="backdepth"> + <data type="string"/> + </attribute> + <attribute name="orientation"> + <data type="string"/> + </attribute> + <attribute name="orientationangle"> + <data type="float"/> + </attribute> + <attribute name="lockrotationcenter"> + <data type="string"/> + </attribute> + <attribute name="autorotationcenter"> + <data type="string"/> + </attribute> + <attribute name="rotationcenter"> + <data type="string"/> + </attribute> + <attribute name="rotationangle"> + <data type="string"/> + </attribute> + <attribute name="colormode"> + <data type="string"/> + </attribute> + <attribute name="color"> + <data type="string"/> + </attribute> + <attribute name="shininess"> + <data type="float"/> + </attribute> + <attribute name="specularity"> + <data type="string"/> + </attribute> + <attribute name="diffusity"> + <data type="string"/> + </attribute> + <attribute name="metal"> + <data type="string"/> + </attribute> + <attribute name="edge"> + <data type="string"/> + </attribute> + <attribute name="facet"> + <data type="string"/> + </attribute> + <attribute name="lightface"> + <data type="string"/> + </attribute> + <attribute name="brightness"> + <data type="string"/> + </attribute> + <attribute name="lightposition"> + <data type="string"/> + </attribute> + <attribute name="lightlevel"> + <data type="string"/> + </attribute> + <attribute name="lightharsh"> + <data type="string"/> + </attribute> + <attribute name="lightposition2"> + <data type="string"/> + </attribute> + <attribute name="lightlevel2"> + <data type="string"/> + </attribute> + <attribute name="lightharsh2"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Callout"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="type"> + <data type="string"/> + </attribute> + <attribute name="gap"> + <data type="string"/> + </attribute> + <attribute name="angle"> + <data type="string"/> + </attribute> + <attribute name="dropauto"> + <data type="string"/> + </attribute> + <attribute name="drop"> + <data type="string"/> + </attribute> + <attribute name="distance"> + <data type="string"/> + </attribute> + <attribute name="lengthspecified"> + <data type="string"/> + </attribute> + <attribute name="length"> + <data type="string"/> + </attribute> + <attribute name="accentbar"> + <data type="string"/> + </attribute> + <attribute name="textborder"> + <data type="string"/> + </attribute> + <attribute name="minusx"> + <data type="string"/> + </attribute> + <attribute name="minusy"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Lock"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="position"> + <data type="string"/> + </attribute> + <attribute name="selection"> + <data type="string"/> + </attribute> + <attribute name="grouping"> + <data type="string"/> + </attribute> + <attribute name="ungrouping"> + <data type="string"/> + </attribute> + <attribute name="rotation"> + <data type="string"/> + </attribute> + <attribute name="cropping"> + <data type="string"/> + </attribute> + <attribute name="verticies"> + <data type="string"/> + </attribute> + <attribute name="adjusthandles"> + <data type="string"/> + </attribute> + <attribute name="text"> + <data type="string"/> + </attribute> + <attribute name="aspectratio"> + <data type="string"/> + </attribute> + <attribute name="shapetype"> + <data type="string"/> + </attribute> + </define> + <define name="CT_OLEObject"> + <element name="LinkType"> + <ref name="ST_OLELinkType"/> + </element> + <element name="LockedField"> + <ref name="ST_TrueFalseBlank"/> + </element> + <element name="FieldCodes"> + <data type="string"/> + </element> + <attribute name="Type"> + <data type="string"/> + </attribute> + <attribute name="ProgID"> + <data type="string"/> + </attribute> + <attribute name="ShapeID"> + <data type="string"/> + </attribute> + <attribute name="DrawAspect"> + <data type="string"/> + </attribute> + <attribute name="ObjectID"> + <data type="string"/> + </attribute> + <attribute name="r:id"> + <data type="string"/> + </attribute> + <attribute name="UpdateMode"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Complex"> + <ref name="BUILT_IN_ANY_TYPE"/> + </define> + <define name="CT_StrokeChild"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="on"> + <data type="string"/> + </attribute> + <attribute name="weight"> + <data type="string"/> + </attribute> + <attribute name="color"> + <data type="string"/> + </attribute> + <attribute name="color2"> + <data type="string"/> + </attribute> + <attribute name="opacity"> + <data type="string"/> + </attribute> + <attribute name="linestyle"> + <ref name="ST_StrokeLineStyle"/> + </attribute> + <attribute name="miterlimit"> + <data type="decimal"/> + </attribute> + <attribute name="joinstyle"> + <ref name="ST_StrokeJoinStyle"/> + </attribute> + <attribute name="endcap"> + <ref name="ST_StrokeEndCap"/> + </attribute> + <attribute name="dashstyle"> + <data type="string"/> + </attribute> + <attribute name="insetpen"> + <data type="string"/> + </attribute> + <attribute name="filltype"> + <ref name="ST_FillType"/> + </attribute> + <attribute name="src"> + <data type="string"/> + </attribute> + <attribute name="imageaspect"> + <ref name="ST_ImageAspect"/> + </attribute> + <attribute name="imagesize"> + <data type="string"/> + </attribute> + <attribute name="imagealignshape"> + <data type="string"/> + </attribute> + <attribute name="startarrow"> + <ref name="ST_StrokeArrowType"/> + </attribute> + <attribute name="startarrowwidth"> + <ref name="ST_StrokeArrowWidth"/> + </attribute> + <attribute name="startarrowlength"> + <ref name="ST_StrokeArrowLength"/> + </attribute> + <attribute name="endarrow"> + <ref name="ST_StrokeArrowType"/> + </attribute> + <attribute name="endarrowwidth"> + <ref name="ST_StrokeArrowWidth"/> + </attribute> + <attribute name="endarrowlength"> + <ref name="ST_StrokeArrowLength"/> + </attribute> + <ref name="href"/> + <ref name="althref"/> + <ref name="title"/> + <ref name="forcedash"/> + </define> + <define name="CT_ClipPath"> + <attribute name="v"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Fill"> + <ref name="BUILT_IN_ANY_TYPE"/> + <attribute name="type"> + <data type="string"/> + </attribute> + </define> + <define name="ST_Angle"> + <choice> + <!-- Any Angle --> + <value>any</value> + <!-- 30 degrees --> + <value>30</value> + <!-- 45 degrees --> + <value>45</value> + <!-- 60 degrees --> + <value>60</value> + <!-- 90 degrees --> + <value>90</value> + <!-- Automatic Angle --> + <value>auto</value> + </choice> + </define> + <define name="ST_OLELinkType"> + <choice> + <!-- Other Image --> + <value>Picture</value> + <!-- Bitmap Image --> + <value>Bitmap</value> + <!-- Enhanced Metafile Image --> + <value>EnhancedMetaFile</value> + </choice> + </define> + <define name="ST_TrueFalseBlank"> + <choice> + <!-- Blank - Logical False --> + <value/> + <!-- Logical True --> + <value>t</value> + <!-- Logical False --> + <value>f</value> + <!-- Logical True --> + <value>true</value> + <!-- Logical False --> + <value>false</value> + </choice> + </define> + <define name="ST_FillType"> + <choice> + <!-- Centered Radial Gradient --> + <value>gradientCenter</value> + <!-- Solid Fill --> + <value>solid</value> + <!-- Image Pattern --> + <value>pattern</value> + <!-- Tiled Image --> + <value>tile</value> + <!-- Stretch Image to Fit --> + <value>frame</value> + <!-- Unscaled Gradient --> + <value>gradientUnscaled</value> + <!-- Radial Gradient --> + <value>gradientRadial</value> + <!-- Linear Gradient --> + <value>gradient</value> + <!-- Use Background Fill --> + <value>background</value> + </choice> + </define> + <define name="BUILT_IN_ANY_TYPE"> + <choice> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <data type="string"/> + </choice> + </define> + </grammar> + <resource name="OLEObject" resource="Properties"> + <element name="OLEObject" tokenid="ooxml:OLEObject_OLEObject"/> + </resource> + <resource name="CT_OLEObject" resource="Properties"> + <element name="LinkType" tokenid="ooxml:CT_OLEObject_LinkType"/> + <element name="LockedField" tokenid="ooxml:CT_OLEObject_LockedField"/> + <element name="FieldCodes" tokenid="ooxml:CT_OLEObject_FieldCodes"/> + <attribute name="Type" tokenid="ooxml:CT_OLEObject_Type"/> + <attribute name="ProgID" tokenid="ooxml:CT_OLEObject_ProgID"/> + <attribute name="ShapeID" tokenid="ooxml:CT_OLEObject_ShapeID"/> + <attribute name="DrawAspect" tokenid="ooxml:CT_OLEObject_DrawAspect"/> + <attribute name="ObjectID" tokenid="ooxml:CT_OLEObject_ObjectID"/> + <attribute name="r:id" tokenid="ooxml:CT_OLEObject_r_id"/> + <attribute name="UpdateMode" tokenid="ooxml:CT_OLEObject_UpdateMode"/> + <action name="end" action="handleOLE"/> + </resource> + <resource name="ST_Angle" resource="List"> + <value tokenid="ooxml:Value_vmlOffice_ST_Angle_any">any</value> + <value tokenid="ooxml:Value_vmlOffice_ST_Angle_30">30</value> + <value tokenid="ooxml:Value_vmlOffice_ST_Angle_45">45</value> + <value tokenid="ooxml:Value_vmlOffice_ST_Angle_60">60</value> + <value tokenid="ooxml:Value_vmlOffice_ST_Angle_90">90</value> + <value tokenid="ooxml:Value_vmlOffice_ST_Angle_auto">auto</value> + </resource> + <resource name="ST_OLELinkType" resource="List"> + <value tokenid="ooxml:Value_vmlOffice_ST_OLELinkType_Picture">Picture</value> + <value tokenid="ooxml:Value_vmlOffice_ST_OLELinkType_Bitmap">Bitmap</value> + <value tokenid="ooxml:Value_vmlOffice_ST_OLELinkType_EnhancedMetaFile">EnhancedMetaFile</value> + </resource> + <resource name="ST_TrueFalseBlank" resource="List"> + <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_"/> + <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_t">t</value> + <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_f">f</value> + <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_true">true</value> + <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_false">false</value> + </resource> + <resource name="ST_FillType" resource="List"> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradientCenter">gradientCenter</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_solid">solid</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_pattern">pattern</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_tile">tile</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_frame">frame</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradientUnscaled">gradientUnscaled</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradientRadial">gradientRadial</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradient">gradient</value> + <value tokenid="ooxml:Value_vmlOffice_ST_FillType_background">background</value> + </resource> + </namespace> + <namespace name="vml-wordprocessingDrawing"> + <start name="bordertop"/> + <start name="borderleft"/> + <start name="borderright"/> + <start name="borderbottom"/> + <start name="wrap"/> + <start name="anchorlock"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:word"> + <!-- ISO RELAX NG Schema --> + <!-- start = bordertop | borderleft | borderright | borderbottom | wrap | anchorlock --> + <define name="bordertop"> + <element name="bordertop"> + <ref name="CT_Border"/> + </element> + </define> + <define name="borderleft"> + <element name="borderleft"> + <ref name="CT_Border"/> + </element> + </define> + <define name="borderright"> + <element name="borderright"> + <ref name="CT_Border"/> + </element> + </define> + <define name="borderbottom"> + <element name="borderbottom"> + <ref name="CT_Border"/> + </element> + </define> + <define name="CT_Border"> + <attribute name="type"> + <data type="string"/> + </attribute> + <attribute name="width"> + <data type="positiveInteger"/> + </attribute> + <attribute name="shadow"> + <data type="string"/> + </attribute> + </define> + <define name="wrap"> + <element name="wrap"> + <ref name="CT_Wrap"/> + </element> + </define> + <define name="CT_Wrap"> + <attribute name="type"> + <ref name="ST_WrapType"/> + </attribute> + <attribute name="side"> + <ref name="ST_WrapSide"/> + </attribute> + <attribute name="anchorx"> + <ref name="ST_HorizontalAnchor"/> + </attribute> + <attribute name="anchory"> + <ref name="ST_VerticalAnchor"/> + </attribute> + </define> + <define name="anchorlock"> + <element name="anchorlock"> + <ref name="CT_AnchorLock"/> + </element> + </define> + <define name="CT_AnchorLock"> + </define> + <define name="ST_WrapType"> + <choice> + <!-- Top and bottom wrapping --> + <value>topAndBottom</value> + <!-- Square wrapping --> + <value>square</value> + <!-- No wrapping --> + <value>none</value> + <!-- Tight wrapping --> + <value>tight</value> + <!-- Through wrapping --> + <value>through</value> + </choice> + </define> + <define name="ST_WrapSide"> + <choice> + <!-- Both sides --> + <value>both</value> + <!-- Left side --> + <value>left</value> + <!-- Right side --> + <value>right</value> + <!-- Largest side --> + <value>largest</value> + </choice> + </define> + <define name="ST_HorizontalAnchor"> + <choice> + <!-- Margin --> + <value>margin</value> + <!-- Page --> + <value>page</value> + <!-- Text --> + <value>text</value> + <!-- Character --> + <value>char</value> + </choice> + </define> + <define name="ST_VerticalAnchor"> + <choice> + <!-- Margin --> + <value>margin</value> + <!-- Page --> + <value>page</value> + <!-- Text --> + <value>text</value> + <!-- Line --> + <value>line</value> + </choice> + </define> + </grammar> + <resource name="wrap" resource="Properties"> + <element name="wrap" tokenid="ooxml:wrap_wrap"/> + </resource> + <resource name="CT_Wrap" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_Wrap_type"/> + <attribute name="side" tokenid="ooxml:CT_Wrap_side"/> + <attribute name="anchorx" tokenid="ooxml:CT_Wrap_anchorx"/> + <attribute name="anchory" tokenid="ooxml:CT_Wrap_anchory"/> + </resource> + <resource name="ST_WrapType" resource="List"> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom">topAndBottom</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_square">square</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_none">none</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_tight">tight</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_through">through</value> + </resource> + <resource name="ST_WrapSide" resource="List"> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_both">both</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_left">left</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_right">right</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_largest">largest</value> + </resource> + <resource name="ST_HorizontalAnchor" resource="List"> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_margin">margin</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_page">page</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_text">text</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_char">char</value> + </resource> + <resource name="ST_VerticalAnchor" resource="List"> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_margin">margin</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_page">page</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_text">text</value> + <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_line">line</value> + </resource> + </namespace> + <namespace name="wml"> + <start name="recipients"/> + <start name="txbxContent"/> + <start name="comments"/> + <start name="footnotes"/> + <start name="endnotes"/> + <start name="hdr"/> + <start name="ftr"/> + <start name="settings"/> + <start name="webSettings"/> + <start name="fonts"/> + <start name="numbering"/> + <start name="styles"/> + <start name="document"/> + <start name="glossaryDocument"/> + <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/wordprocessingml/2006/main" attributeFormDefault="qualified"> + <include href="shared-math"/> + <include href="dml-wordprocessingDrawing"/> + <include href="shared-relationshipReference"/> + <!-- start = recipients | txbxContent | comments | footnotes | endnotes | hdr | ftr | settings | webSettings | fonts | numbering | styles | document | glossaryDocument --> + <define name="CT_Empty"> + </define> + <define name="ST_OnOff"> + <choice> + <!-- True --> + <value>true</value> + <!-- False --> + <value>false</value> + <!-- True --> + <value>on</value> + <!-- False --> + <value>off</value> + <!-- False --> + <value>0</value> + <!-- True --> + <value>1</value> + </choice> + </define> + <define name="CT_OnOff"> + <attribute name="val"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_LongHexNumber"> + <data type="hexBinary"/> + </define> + <define name="CT_LongHexNumber"> + <attribute name="val"> + <ref name="ST_LongHexNumber"/> + </attribute> + </define> + <define name="ST_ShortHexNumber"> + <data type="hexBinary"/> + </define> + <define name="CT_ShortHexNumber"> + <attribute name="val"> + <ref name="ST_ShortHexNumber"/> + </attribute> + </define> + <define name="ST_UcharHexNumber"> + <data type="hexBinary"/> + </define> + <define name="CT_UcharHexNumber"> + <attribute name="val"> + <ref name="ST_UcharHexNumber"/> + </attribute> + </define> + <define name="ST_DecimalNumber"> + <data type="integer"/> + </define> + <define name="CT_DecimalNumber"> + <attribute name="val"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="ST_UnsignedDecimalNumber"> + <data type="unsignedLong"/> + </define> +<!-- MS documentation states that TwipsMeasure is a positive value + but it doesn't indicate how to handle an invalid negative + value. So, ST_TwipsMeasure matches the documented type, + and the extension (_asSigned, _asZero, or perhaps _asAbsolute) + indicates how MS handles it in practice. + + Historically, LO has treated TwipsMeasure as signed, + i.e. that negative numbers are allowed and treated as negative, + so that is the default handling. +--> + <define name="ST_TwipsMeasure"> + <data type="unsignedLong"/> + </define> + <define name="ST_TwipsMeasure_asSigned"> + <data type="unsignedLong"/> + </define> + <define name="ST_TwipsMeasure_asZero"> + <data type="unsignedLong"/> + </define> + <define name="CT_TwipsMeasure"> + <attribute name="val"> + <ref name="ST_TwipsMeasure"/> + </attribute> + </define> + <define name="ST_SignedTwipsMeasure"> + <data type="integer"/> + </define> + <define name="CT_SignedTwipsMeasure"> + <attribute name="val"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + </define> + <define name="ST_PixelsMeasure"> + <data type="unsignedLong"/> + </define> + <define name="CT_PixelsMeasure"> + <attribute name="val"> + <ref name="ST_PixelsMeasure"/> + </attribute> + </define> + <define name="ST_HpsMeasure"> + <data type="unsignedLong"/> + </define> + <define name="CT_HpsMeasure"> + <attribute name="val"> + <ref name="ST_HpsMeasure"/> + </attribute> + </define> + <define name="ST_SignedHpsMeasure"> + <data type="integer"/> + </define> + <define name="CT_SignedHpsMeasure"> + <attribute name="val"> + <ref name="ST_SignedHpsMeasure"/> + </attribute> + </define> + <define name="ST_DateTime"> + <data type="dateTime"/> + </define> + <define name="CT_MacroName"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="ST_EighthPointMeasure"> + <data type="unsignedLong"/> + </define> + <define name="ST_PointMeasure"> + <data type="unsignedLong"/> + </define> + <define name="ST_String"> + <data type="string"/> + </define> + <define name="CT_String"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="ST_TextScale"> + <data type="integer"/> + </define> + <define name="CT_TextScale"> + <attribute name="val"> + <ref name="ST_TextScale"/> + </attribute> + </define> + <define name="ST_HighlightColor"> + <choice> + <!-- Black Highlighting Color --> + <value>black</value> + <!-- Blue Highlighting Color --> + <value>blue</value> + <!-- Cyan Highlighting Color --> + <value>cyan</value> + <!-- Green Highlighting Color --> + <value>green</value> + <!-- Magenta Highlighting Color --> + <value>magenta</value> + <!-- Red Highlighting Color --> + <value>red</value> + <!-- Yellow Highlighting Color --> + <value>yellow</value> + <!-- White Highlighting Color --> + <value>white</value> + <!-- Dark Blue Highlighting Color --> + <value>darkBlue</value> + <!-- Dark Cyan Highlighting Color --> + <value>darkCyan</value> + <!-- Dark Green Highlighting Color --> + <value>darkGreen</value> + <!-- Dark Magenta Highlighting Color --> + <value>darkMagenta</value> + <!-- Dark Red Highlighting Color --> + <value>darkRed</value> + <!-- Dark Yellow Highlighting Color --> + <value>darkYellow</value> + <!-- Dark Gray Highlighting Color --> + <value>darkGray</value> + <!-- Light Gray Highlighting Color --> + <value>lightGray</value> + <!-- No Text Highlighting --> + <value>none</value> + </choice> + </define> + <define name="CT_Highlight"> + <attribute name="val"> + <ref name="ST_HighlightColor"/> + </attribute> + </define> + <define name="ST_HexColorAuto"> + <choice> + <!-- Automatically Determined Color --> + <value>auto</value> + </choice> + </define> + <define name="ST_HexColorRGB"> + <data type="hexBinary"/> + </define> + <define name="ST_HexColor"> + <choice> + <ref name="ST_HexColorAuto"/> + <ref name="ST_HexColorRGB"/> + </choice> + </define> + <!-- Union --> + <define name="CT_Color"> + <attribute name="val"> + <ref name="ST_HexColor"/> + </attribute> + <attribute name="themeColor"> + <ref name="ST_ThemeColor"/> + </attribute> + <attribute name="themeTint"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="themeShade"> + <ref name="ST_UcharHexNumber"/> + </attribute> + </define> + <define name="ST_LangCode"> + <data type="hexBinary"/> + </define> + <define name="ST_Lang"> + <choice> + <ref name="ST_LangCode"/> + <ref name="ST_String"/> + </choice> + </define> + <!-- Union --> + <define name="CT_Lang"> + <attribute name="val"> + <ref name="ST_Lang"/> + </attribute> + </define> + <define name="CT_Guid"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="ST_Underline"> + <choice> + <!-- Single Underline --> + <value>single</value> + <!-- Underline Non-Space Characters Only --> + <value>words</value> + <!-- Double Underline --> + <value>double</value> + <!-- Thick Underline --> + <value>thick</value> + <!-- Dotted Underline --> + <value>dotted</value> + <!-- Thick Dotted Underline --> + <value>dottedHeavy</value> + <!-- Dashed Underline --> + <value>dash</value> + <!-- Thick Dashed Underline --> + <value>dashedHeavy</value> + <!-- Long Dashed Underline --> + <value>dashLong</value> + <!-- Thick Long Dashed Underline --> + <value>dashLongHeavy</value> + <!-- Dash-Dot Underline --> + <value>dotDash</value> + <!-- Thick Dash-Dot Underline --> + <value>dashDotHeavy</value> + <!-- Dash-Dot-Dot Underline --> + <value>dotDotDash</value> + <!-- Thick Dash-Dot-Dot Underline --> + <value>dashDotDotHeavy</value> + <!-- Wave Underline --> + <value>wave</value> + <!-- Heavy Wave Underline --> + <value>wavyHeavy</value> + <!-- Double Wave Underline --> + <value>wavyDouble</value> + <!-- No Underline --> + <value>none</value> + </choice> + </define> + <define name="CT_Underline"> + <attribute name="val"> + <ref name="ST_Underline"/> + </attribute> + <attribute name="color"> + <ref name="ST_HexColor"/> + </attribute> + <attribute name="themeColor"> + <data type="string"/> + </attribute> + <attribute name="themeTint"> + <data type="string"/> + </attribute> + <attribute name="themeShade"> + <data type="string"/> + </attribute> + </define> + <define name="ST_TextEffect"> + <choice> + <!-- Blinking Background Animation --> + <value>blinkBackground</value> + <!-- Colored Lights Animation --> + <value>lights</value> + <!-- Black Dashed Line Animation --> + <value>antsBlack</value> + <!-- Marching Red Ants --> + <value>antsRed</value> + <!-- Shimmer Animation --> + <value>shimmer</value> + <!-- Sparkling Lights Animation --> + <value>sparkle</value> + <!-- No Animation --> + <value>none</value> + </choice> + </define> + <define name="CT_TextEffect"> + <attribute name="val"> + <ref name="ST_TextEffect"/> + </attribute> + </define> + <define name="ST_Border"> + <choice> + <!-- No Border --> + <value>nil</value> + <!-- No Border --> + <value>none</value> + <!-- Single Line Border --> + <value>single</value> + <!-- Single Line Border --> + <value>thick</value> + <!-- Double Line Border --> + <value>double</value> + <!-- Dotted Line Border --> + <value>dotted</value> + <!-- Dashed Line Border --> + <value>dashed</value> + <!-- Dot Dash Line Border --> + <value>dotDash</value> + <!-- Dot Dot Dash Line Border --> + <value>dotDotDash</value> + <!-- Triple Line Border --> + <value>triple</value> + <!-- Thin, Thick Line Border --> + <value>thinThickSmallGap</value> + <!-- Thick, Thin Line Border --> + <value>thickThinSmallGap</value> + <!-- Thin, Thick, Thin Line Border --> + <value>thinThickThinSmallGap</value> + <!-- Thin, Thick Line Border --> + <value>thinThickMediumGap</value> + <!-- Thick, Thin Line Border --> + <value>thickThinMediumGap</value> + <!-- Thin, Thick, Thin Line Border --> + <value>thinThickThinMediumGap</value> + <!-- Thin, Thick Line Border --> + <value>thinThickLargeGap</value> + <!-- Thick, Thin Line Border --> + <value>thickThinLargeGap</value> + <!-- Thin, Thick, Thin Line Border --> + <value>thinThickThinLargeGap</value> + <!-- Wavy Line Border --> + <value>wave</value> + <!-- Double Wave Line Border --> + <value>doubleWave</value> + <!-- Dashed Line Border --> + <value>dashSmallGap</value> + <!-- Dash Dot Strokes Line Border --> + <value>dashDotStroked</value> + <!-- 3D Embossed Line Border --> + <value>threeDEmboss</value> + <!-- 3D Engraved Line Border --> + <value>threeDEngrave</value> + <!-- Outset Line Border --> + <value>outset</value> + <!-- Inset Line Border --> + <value>inset</value> + <!-- Apples Art Border --> + <value>apples</value> + <!-- Arched Scallops Art Border --> + <value>archedScallops</value> + <!-- Baby Pacifier Art Border --> + <value>babyPacifier</value> + <!-- Baby Rattle Art Border --> + <value>babyRattle</value> + <!-- Three Color Balloons Art Border --> + <value>balloons3Colors</value> + <!-- Hot Air Balloons Art Border --> + <value>balloonsHotAir</value> + <!-- Black Dash Art Border --> + <value>basicBlackDashes</value> + <!-- Black Dot Art Border --> + <value>basicBlackDots</value> + <!-- Black Square Art Border --> + <value>basicBlackSquares</value> + <!-- Thin Line Art Border --> + <value>basicThinLines</value> + <!-- White Dash Art Border --> + <value>basicWhiteDashes</value> + <!-- White Dot Art Border --> + <value>basicWhiteDots</value> + <!-- White Square Art Border --> + <value>basicWhiteSquares</value> + <!-- Wide Inline Art Border --> + <value>basicWideInline</value> + <!-- Wide Midline Art Border --> + <value>basicWideMidline</value> + <!-- Wide Outline Art Border --> + <value>basicWideOutline</value> + <!-- Bats Art Border --> + <value>bats</value> + <!-- Birds Art Border --> + <value>birds</value> + <!-- Birds Flying Art Border --> + <value>birdsFlight</value> + <!-- Cabin Art Border --> + <value>cabins</value> + <!-- Cake Art Border --> + <value>cakeSlice</value> + <!-- Candy Corn Art Border --> + <value>candyCorn</value> + <!-- Knot Work Art Border --> + <value>celticKnotwork</value> + <!-- Certificate Banner Art Border --> + <value>certificateBanner</value> + <!-- Chain Link Art Border --> + <value>chainLink</value> + <!-- Champagne Bottle Art Border --> + <value>champagneBottle</value> + <!-- Black and White Bar Art Border --> + <value>checkedBarBlack</value> + <!-- Color Checked Bar Art Border --> + <value>checkedBarColor</value> + <!-- Checkerboard Art Border --> + <value>checkered</value> + <!-- Christmas Tree Art Border --> + <value>christmasTree</value> + <!-- Circles And Lines Art Border --> + <value>circlesLines</value> + <!-- Circles and Rectangles Art Border --> + <value>circlesRectangles</value> + <!-- Wave Art Border --> + <value>classicalWave</value> + <!-- Clocks Art Border --> + <value>clocks</value> + <!-- Compass Art Border --> + <value>compass</value> + <!-- Confetti Art Border --> + <value>confetti</value> + <!-- Confetti Art Border --> + <value>confettiGrays</value> + <!-- Confetti Art Border --> + <value>confettiOutline</value> + <!-- Confetti Streamers Art Border --> + <value>confettiStreamers</value> + <!-- Confetti Art Border --> + <value>confettiWhite</value> + <!-- Corner Triangle Art Border --> + <value>cornerTriangles</value> + <!-- Dashed Line Art Border --> + <value>couponCutoutDashes</value> + <!-- Dotted Line Art Border --> + <value>couponCutoutDots</value> + <!-- Maze Art Border --> + <value>crazyMaze</value> + <!-- Butterfly Art Border --> + <value>creaturesButterfly</value> + <!-- Fish Art Border --> + <value>creaturesFish</value> + <!-- Insects Art Border --> + <value>creaturesInsects</value> + <!-- Ladybug Art Border --> + <value>creaturesLadyBug</value> + <!-- Cross-stitch Art Border --> + <value>crossStitch</value> + <!-- Cupid Art Border --> + <value>cup</value> + <!-- Archway Art Border --> + <value>decoArch</value> + <!-- Color Archway Art Border --> + <value>decoArchColor</value> + <!-- Blocks Art Border --> + <value>decoBlocks</value> + <!-- Gray Diamond Art Border --> + <value>diamondsGray</value> + <!-- Double D Art Border --> + <value>doubleD</value> + <!-- Diamond Art Border --> + <value>doubleDiamonds</value> + <!-- Earth Art Border --> + <value>earth1</value> + <!-- Earth Art Border --> + <value>earth2</value> + <!-- Shadowed Square Art Border --> + <value>eclipsingSquares1</value> + <!-- Shadowed Square Art Border --> + <value>eclipsingSquares2</value> + <!-- Painted Egg Art Border --> + <value>eggsBlack</value> + <!-- Fans Art Border --> + <value>fans</value> + <!-- Film Reel Art Border --> + <value>film</value> + <!-- Firecracker Art Border --> + <value>firecrackers</value> + <!-- Flowers Art Border --> + <value>flowersBlockPrint</value> + <!-- Daisy Art Border --> + <value>flowersDaisies</value> + <!-- Flowers Art Border --> + <value>flowersModern1</value> + <!-- Flowers Art Border --> + <value>flowersModern2</value> + <!-- Pansy Art Border --> + <value>flowersPansy</value> + <!-- Red Rose Art Border --> + <value>flowersRedRose</value> + <!-- Roses Art Border --> + <value>flowersRoses</value> + <!-- Flowers in a Teacup Art Border --> + <value>flowersTeacup</value> + <!-- Small Flower Art Border --> + <value>flowersTiny</value> + <!-- Gems Art Border --> + <value>gems</value> + <!-- Gingerbread Man Art Border --> + <value>gingerbreadMan</value> + <!-- Triangle Gradient Art Border --> + <value>gradient</value> + <!-- Handmade Art Border --> + <value>handmade1</value> + <!-- Handmade Art Border --> + <value>handmade2</value> + <!-- Heart-Shaped Balloon Art Border --> + <value>heartBalloon</value> + <!-- Gray Heart Art Border --> + <value>heartGray</value> + <!-- Hearts Art Border --> + <value>hearts</value> + <!-- Pattern Art Border --> + <value>heebieJeebies</value> + <!-- Holly Art Border --> + <value>holly</value> + <!-- House Art Border --> + <value>houseFunky</value> + <!-- Circular Art Border --> + <value>hypnotic</value> + <!-- Ice Cream Cone Art Border --> + <value>iceCreamCones</value> + <!-- Light Bulb Art Border --> + <value>lightBulb</value> + <!-- Lightning Art Border --> + <value>lightning1</value> + <!-- Lightning Art Border --> + <value>lightning2</value> + <!-- Map Pins Art Border --> + <value>mapPins</value> + <!-- Maple Leaf Art Border --> + <value>mapleLeaf</value> + <!-- Muffin Art Border --> + <value>mapleMuffins</value> + <!-- Marquee Art Border --> + <value>marquee</value> + <!-- Marquee Art Border --> + <value>marqueeToothed</value> + <!-- Moon Art Border --> + <value>moons</value> + <!-- Mosaic Art Border --> + <value>mosaic</value> + <!-- Musical Note Art Border --> + <value>musicNotes</value> + <!-- Patterned Art Border --> + <value>northwest</value> + <!-- Oval Art Border --> + <value>ovals</value> + <!-- Package Art Border --> + <value>packages</value> + <!-- Black Palm Tree Art Border --> + <value>palmsBlack</value> + <!-- Color Palm Tree Art Border --> + <value>palmsColor</value> + <!-- Paper Clip Art Border --> + <value>paperClips</value> + <!-- Papyrus Art Border --> + <value>papyrus</value> + <!-- Party Favor Art Border --> + <value>partyFavor</value> + <!-- Party Glass Art Border --> + <value>partyGlass</value> + <!-- Pencils Art Border --> + <value>pencils</value> + <!-- Character Art Border --> + <value>people</value> + <!-- Waving Character Border --> + <value>peopleWaving</value> + <!-- Character With Hat Art Border --> + <value>peopleHats</value> + <!-- Poinsettia Art Border --> + <value>poinsettias</value> + <!-- Postage Stamp Art Border --> + <value>postageStamp</value> + <!-- Pumpkin Art Border --> + <value>pumpkin1</value> + <!-- Push Pin Art Border --> + <value>pushPinNote2</value> + <!-- Push Pin Art Border --> + <value>pushPinNote1</value> + <!-- Pyramid Art Border --> + <value>pyramids</value> + <!-- Pyramid Art Border --> + <value>pyramidsAbove</value> + <!-- Quadrants Art Border --> + <value>quadrants</value> + <!-- Rings Art Border --> + <value>rings</value> + <!-- Safari Art Border --> + <value>safari</value> + <!-- Saw tooth Art Border --> + <value>sawtooth</value> + <!-- Gray Saw tooth Art Border --> + <value>sawtoothGray</value> + <!-- Scared Cat Art Border --> + <value>scaredCat</value> + <!-- Umbrella Art Border --> + <value>seattle</value> + <!-- Shadowed Squares Art Border --> + <value>shadowedSquares</value> + <!-- Shark Tooth Art Border --> + <value>sharksTeeth</value> + <!-- Bird Tracks Art Border --> + <value>shorebirdTracks</value> + <!-- Rocket Art Border --> + <value>skyrocket</value> + <!-- Snowflake Art Border --> + <value>snowflakeFancy</value> + <!-- Snowflake Art Border --> + <value>snowflakes</value> + <!-- Sombrero Art Border --> + <value>sombrero</value> + <!-- Southwest-themed Art Border --> + <value>southwest</value> + <!-- Stars Art Border --> + <value>stars</value> + <!-- Stars On Top Art Border --> + <value>starsTop</value> + <!-- 3-D Stars Art Border --> + <value>stars3d</value> + <!-- Stars Art Border --> + <value>starsBlack</value> + <!-- Stars With Shadows Art Border --> + <value>starsShadowed</value> + <!-- Sun Art Border --> + <value>sun</value> + <!-- Whirligig Art Border --> + <value>swirligig</value> + <!-- Torn Paper Art Border --> + <value>tornPaper</value> + <!-- Black Torn Paper Art Border --> + <value>tornPaperBlack</value> + <!-- Tree Art Border --> + <value>trees</value> + <!-- Triangle Art Border --> + <value>triangleParty</value> + <!-- Triangles Art Border --> + <value>triangles</value> + <!-- Tribal Art Border One --> + <value>tribal1</value> + <!-- Tribal Art Border Two --> + <value>tribal2</value> + <!-- Tribal Art Border Three --> + <value>tribal3</value> + <!-- Tribal Art Border Four --> + <value>tribal4</value> + <!-- Tribal Art Border Five --> + <value>tribal5</value> + <!-- Tribal Art Border Six --> + <value>tribal6</value> + <!-- Twisted Lines Art Border --> + <value>twistedLines1</value> + <!-- Twisted Lines Art Border --> + <value>twistedLines2</value> + <!-- Vine Art Border --> + <value>vine</value> + <!-- Wavy Line Art Border --> + <value>waveline</value> + <!-- Weaving Angles Art Border --> + <value>weavingAngles</value> + <!-- Weaving Braid Art Border --> + <value>weavingBraid</value> + <!-- Weaving Ribbon Art Border --> + <value>weavingRibbon</value> + <!-- Weaving Strips Art Border --> + <value>weavingStrips</value> + <!-- White Flowers Art Border --> + <value>whiteFlowers</value> + <!-- Woodwork Art Border --> + <value>woodwork</value> + <!-- Crisscross Art Border --> + <value>xIllusions</value> + <!-- Triangle Art Border --> + <value>zanyTriangles</value> + <!-- Zigzag Art Border --> + <value>zigZag</value> + <!-- Zigzag stitch --> + <value>zigZagStitch</value> + </choice> + </define> + <define name="CT_Border"> + <attribute name="val"> + <ref name="ST_Border"/> + </attribute> + <attribute name="color"> + <ref name="ST_HexColor"/> + </attribute> + <attribute name="themeColor"> + <ref name="ST_ThemeColor"/> + </attribute> + <attribute name="themeTint"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="themeShade"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="sz"> + <ref name="ST_EighthPointMeasure"/> + </attribute> + <attribute name="space"> + <ref name="ST_PointMeasure"/> + </attribute> + <attribute name="shadow"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="frame"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_Shd"> + <choice> + <!-- No Pattern --> + <value>nil</value> + <!-- No Pattern --> + <value>clear</value> + <!-- 100% Fill Pattern --> + <value>solid</value> + <!-- Horizontal Stripe Pattern --> + <value>horzStripe</value> + <!-- Vertical Stripe Pattern --> + <value>vertStripe</value> + <!-- Reverse Diagonal Stripe Pattern --> + <value>reverseDiagStripe</value> + <!-- Diagonal Stripe Pattern --> + <value>diagStripe</value> + <!-- Horizontal Cross Pattern --> + <value>horzCross</value> + <!-- Diagonal Cross Pattern --> + <value>diagCross</value> + <!-- Thin Horizontal Stripe Pattern --> + <value>thinHorzStripe</value> + <!-- Thin Vertical Stripe Pattern --> + <value>thinVertStripe</value> + <!-- Thin Reverse Diagonal Stripe Pattern --> + <value>thinReverseDiagStripe</value> + <!-- Thin Diagonal Stripe Pattern --> + <value>thinDiagStripe</value> + <!-- Thin Horizontal Cross Pattern --> + <value>thinHorzCross</value> + <!-- Thin Diagonal Cross Pattern --> + <value>thinDiagCross</value> + <!-- 5% Fill Pattern --> + <value>pct5</value> + <!-- 10% Fill Pattern --> + <value>pct10</value> + <!-- 12.5% Fill Pattern --> + <value>pct12</value> + <!-- 15% Fill Pattern --> + <value>pct15</value> + <!-- 20% Fill Pattern --> + <value>pct20</value> + <!-- 25% Fill Pattern --> + <value>pct25</value> + <!-- 30% Fill Pattern --> + <value>pct30</value> + <!-- 35% Fill Pattern --> + <value>pct35</value> + <!-- 37.5% Fill Pattern --> + <value>pct37</value> + <!-- 40% Fill Pattern --> + <value>pct40</value> + <!-- 45% Fill Pattern --> + <value>pct45</value> + <!-- 50% Fill Pattern --> + <value>pct50</value> + <!-- 55% Fill Pattern --> + <value>pct55</value> + <!-- 60% Fill Pattern --> + <value>pct60</value> + <!-- 62.5% Fill Pattern --> + <value>pct62</value> + <!-- 65% Fill Pattern --> + <value>pct65</value> + <!-- 70% Fill Pattern --> + <value>pct70</value> + <!-- 75% Fill Pattern --> + <value>pct75</value> + <!-- 80% Fill Pattern --> + <value>pct80</value> + <!-- 85% Fill Pattern --> + <value>pct85</value> + <!-- 87.5% Fill Pattern --> + <value>pct87</value> + <!-- 90% Fill Pattern --> + <value>pct90</value> + <!-- 95% Fill Pattern --> + <value>pct95</value> + </choice> + </define> + <define name="CT_Shd"> + <attribute name="val"> + <ref name="ST_Shd"/> + </attribute> + <attribute name="color"> + <ref name="ST_HexColor"/> + </attribute> + <attribute name="themeColor"> + <ref name="ST_ThemeColor"/> + </attribute> + <attribute name="themeTint"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="themeShade"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="fill"> + <ref name="ST_HexColor"/> + </attribute> + <attribute name="themeFill"> + <ref name="ST_ThemeColor"/> + </attribute> + <attribute name="themeFillTint"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="themeFillShade"> + <ref name="ST_UcharHexNumber"/> + </attribute> + </define> + <define name="CT_VerticalAlignRun"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FitText"> + <attribute name="val"> + <data type="string"/> + </attribute> + <attribute name="id"> + <data type="string"/> + </attribute> + </define> + <define name="ST_Em"> + <choice> + <!-- No Emphasis Mark --> + <value>none</value> + <!-- Dot Emphasis Mark Above Characters --> + <value>dot</value> + <!-- Comma Emphasis Mark Above Characters --> + <value>comma</value> + <!-- Circle Emphasis Mark Above Characters --> + <value>circle</value> + <!-- Dot Emphasis Mark Below Characters --> + <value>underDot</value> + </choice> + </define> + <define name="CT_Em"> + <attribute name="val"> + <ref name="ST_Em"/> + </attribute> + </define> + <define name="CT_Language"> + <attribute name="val"> + <ref name="ST_Lang"/> + </attribute> + <attribute name="eastAsia"> + <ref name="ST_Lang"/> + </attribute> + <attribute name="bidi"> + <ref name="ST_Lang"/> + </attribute> + </define> + <define name="ST_CombineBrackets"> + <choice> + <!-- No Enclosing Brackets --> + <value>none</value> + <!-- Round Brackets --> + <value>round</value> + <!-- Square Brackets --> + <value>square</value> + <!-- Angle Brackets --> + <value>angle</value> + <!-- Curly Brackets --> + <value>curly</value> + </choice> + </define> + <define name="CT_EastAsianLayout"> + <attribute name="id"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="combine"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="combineBrackets"> + <ref name="ST_CombineBrackets"/> + </attribute> + <attribute name="vert"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="vertCompress"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_XAlign"> + <choice> + <!-- Left Aligned Horizontally --> + <value>left</value> + <!-- Centered Horizontally --> + <value>center</value> + <!-- Right Aligned Horizontally --> + <value>right</value> + <!-- Inside --> + <value>inside</value> + <!-- Outside --> + <value>outside</value> + </choice> + </define> + <define name="ST_YAlign"> + <choice> + <!-- In line With Text --> + <value>inline</value> + <!-- Top --> + <value>top</value> + <!-- Centered Vertically --> + <value>center</value> + <!-- Bottom --> + <value>bottom</value> + <!-- Inside Anchor Extents --> + <value>inside</value> + <!-- Outside Anchor Extents --> + <value>outside</value> + </choice> + </define> + <define name="ST_HeightRule"> + <choice> + <!-- Determine Height Based On Contents --> + <value>auto</value> + <!-- Exact Height --> + <value>exact</value> + <!-- Minimum Height --> + <value>atLeast</value> + </choice> + </define> + <define name="ST_Wrap"> + <choice> + <!-- Default Text Wrapping Around Frame --> + <value>auto</value> + <!-- No Text Wrapping Beside Frame --> + <value>notBeside</value> + <!-- Allow Text Wrapping Around Frame --> + <value>around</value> + <!-- Tight Text Wrapping Around Frame --> + <value>tight</value> + <!-- Through Text Wrapping Around Frame --> + <value>through</value> + <!-- No Text Wrapping Around Frame --> + <value>none</value> + </choice> + </define> + <define name="ST_VAnchor"> + <choice> + <!-- Relative To Vertical Text Extents --> + <value>text</value> + <!-- Relative To Margin --> + <value>margin</value> + <!-- Relative To Page --> + <value>page</value> + </choice> + </define> + <define name="ST_HAnchor"> + <choice> + <!-- Relative to Text Extents --> + <value>text</value> + <!-- Relative To Margin --> + <value>margin</value> + <!-- Relative to Page --> + <value>page</value> + </choice> + </define> + <define name="ST_DropCap"> + <choice> + <!-- Not Drop Cap --> + <value>none</value> + <!-- Drop Cap Inside Margin --> + <value>drop</value> + <!-- Drop Cap Outside Margin --> + <value>margin</value> + </choice> + </define> + <define name="CT_FramePr"> + <attribute name="dropCap"> + <ref name="ST_DropCap"/> + </attribute> + <attribute name="lines"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="w"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="h"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="vSpace"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="hSpace"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="wrap"> + <ref name="ST_Wrap"/> + </attribute> + <attribute name="hAnchor"> + <ref name="ST_HAnchor"/> + </attribute> + <attribute name="vAnchor"> + <ref name="ST_VAnchor"/> + </attribute> + <attribute name="x"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="xAlign"> + <ref name="ST_XAlign"/> + </attribute> + <attribute name="y"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="yAlign"> + <ref name="ST_YAlign"/> + </attribute> + <attribute name="hRule"> + <ref name="ST_HeightRule"/> + </attribute> + <attribute name="anchorLock"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_TabJc"> + <choice> + <!-- No Tab Stop --> + <value>clear</value> + <!-- Leading Tab --> + <value>start</value> + <!-- Left Tab (ecma) --> + <value>left</value> + <!-- Centered Tab --> + <value>center</value> + <!-- Trailing Tab --> + <value>end</value> + <!-- Right Tab (ecma) --> + <value>right</value> + <!-- Decimal Tab --> + <value>decimal</value> + <!-- Bar Tab --> + <value>bar</value> + <!-- List Tab --> + <value>num</value> + </choice> + </define> + <define name="ST_TabTlc"> + <choice> + <!-- No tab stop leader --> + <value>none</value> + <!-- Dotted leader line --> + <value>dot</value> + <!-- Dashed tab stop leader line --> + <value>hyphen</value> + <!-- Solid leader line --> + <value>underscore</value> + <!-- Heavy solid leader line --> + <value>heavy</value> + <!-- Middle dot leader line --> + <value>middleDot</value> + </choice> + </define> + <define name="CT_TabStop"> + <attribute name="val"> + <ref name="ST_TabJc"/> + </attribute> + <attribute name="leader"> + <ref name="ST_TabTlc"/> + </attribute> + <attribute name="pos"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + </define> + <define name="ST_LineSpacingRule"> + <choice> + <!-- Automatically Determined Line Height --> + <value>auto</value> + <!-- Exact Line Height --> + <value>exact</value> + <!-- Minimum Line Height --> + <value>atLeast</value> + </choice> + </define> + <define name="CT_Spacing"> + <attribute name="before"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="beforeLines"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="beforeAutospacing"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="after"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="afterLines"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="afterAutospacing"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="line"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="lineRule"> + <ref name="ST_LineSpacingRule"/> + </attribute> + </define> + <define name="CT_Ind"> + <attribute name="end"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="endChars"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="start"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="startChars"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="left"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="leftChars"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="right"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="rightChars"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="hanging"> + <ref name="ST_TwipsMeasure_asSigned"/> + </attribute> + <attribute name="hangingChars"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="firstLine"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="firstLineChars"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="ST_Jc"> + <choice> + <!-- Align To Leading Edge --> + <value>start</value> + <!-- Align To Trailing Edge --> + <value>end</value> + <!-- Align Left (ecma) --> + <value>left</value> + <!-- Align Center --> + <value>center</value> + <!-- Align Right (ecma) --> + <value>right</value> + <!-- Justified --> + <value>both</value> + <!-- Medium Kashida Length --> + <value>mediumKashida</value> + <!-- Distribute All Characters Equally --> + <value>distribute</value> + <!-- Align to List Tab --> + <value>numTab</value> + <!-- Widest Kashida Length --> + <value>highKashida</value> + <!-- Low Kashida Length --> + <value>lowKashida</value> + <!-- Thai Language Justification --> + <value>thaiDistribute</value> + </choice> + </define> + <define name="CT_Jc"> + <attribute name="val"> + <ref name="ST_Jc"/> + </attribute> + </define> + <define name="ST_View"> + <choice> + <!-- Default View --> + <value>none</value> + <!-- Print Layout View --> + <value>print</value> + <!-- Outline View --> + <value>outline</value> + <!-- Master Document View --> + <value>masterPages</value> + <!-- Draft View --> + <value>normal</value> + <!-- Web Page View --> + <value>web</value> + </choice> + </define> + <define name="CT_View"> + <attribute name="val"> + <ref name="ST_View"/> + </attribute> + </define> + <define name="ST_Zoom"> + <choice> + <!-- No Preset Magnification --> + <value>none</value> + <!-- Display One Full Page --> + <value>fullPage</value> + <!-- Display Page Width --> + <value>bestFit</value> + <!-- Display Text Width --> + <value>textFit</value> + </choice> + </define> + <define name="ST_Percentage"> + <data type="int"/> + </define> + <define name="CT_Zoom"> + <attribute name="val"> + <ref name="ST_Zoom"/> + </attribute> + <attribute name="percent"> + <ref name="ST_Percentage"/> + </attribute> + </define> + <define name="CT_WritingStyle"> + <attribute name="lang"> + <data type="string"/> + </attribute> + <attribute name="vendorID"> + <data type="string"/> + </attribute> + <attribute name="dllVersion"> + <data type="string"/> + </attribute> + <attribute name="nlCheck"> + <data type="string"/> + </attribute> + <attribute name="checkStyle"> + <data type="string"/> + </attribute> + <attribute name="appName"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Proof"> + <attribute name="spelling"> + <data type="string"/> + </attribute> + <attribute name="grammar"> + <data type="string"/> + </attribute> + </define> + <define name="ST_DocType"> + <choice> + <!-- Default Document --> + <value>notSpecified</value> + <!-- Letter --> + <value>letter</value> + <!-- E-Mail Message --> + <value>eMail</value> + </choice> + </define> + <define name="CT_DocType"> + <attribute name="val"> + <ref name="ST_DocType"/> + </attribute> + </define> + <define name="ST_DocProtect"> + <choice> + <!-- No Editing Restrictions --> + <value>none</value> + <!-- Allow No Editing --> + <value>readOnly</value> + <!-- Allow Editing of Comments --> + <value>comments</value> + <!-- Allow Editing With Revision Tracking --> + <value>trackedChanges</value> + <!-- Allow Editing of Form Fields --> + <value>forms</value> + </choice> + </define> + <define name="ST_CryptProv"> + <choice> + <!-- AES Provider --> + <value>rsaAES</value> + <!-- Any Provider --> + <value>rsaFull</value> + </choice> + </define> + <define name="ST_AlgClass"> + <choice> + <!-- Hashing --> + <value>hash</value> + </choice> + </define> + <define name="ST_AlgType"> + <choice> + <!-- Any Type --> + <value>typeAny</value> + </choice> + </define> + <define name="AG_Password"> + <attribute name="cryptProviderType"> + <ref name="ST_CryptProv"/> + </attribute> + <attribute name="cryptAlgorithmClass"> + <ref name="ST_AlgClass"/> + </attribute> + <attribute name="cryptAlgorithmType"> + <ref name="ST_AlgType"/> + </attribute> + <attribute name="cryptAlgorithmSid"> + <data type="string"/> + </attribute> + <attribute name="cryptSpinCount"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="cryptProvider"> + <data type="string"/> + </attribute> + <attribute name="algIdExt"> + <data type="string"/> + </attribute> + <attribute name="algIdExtSource"> + <data type="string"/> + </attribute> + <attribute name="cryptProviderTypeExt"> + <data type="string"/> + </attribute> + <attribute name="cryptProviderTypeExtSource"> + <data type="string"/> + </attribute> + <attribute name="hash"> + <data type="base64Binary"/> + </attribute> + <attribute name="salt"> + <data type="base64Binary"/> + </attribute> + </define> + <define name="CT_DocProtect"> + <attribute name="edit"> + <ref name="ST_DocProtect"/> + </attribute> + <attribute name="formatting"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="enforcement"> + <ref name="ST_OnOff"/> + </attribute> + <ref name="AG_Password"/> + </define> + <define name="CT_MailMergeDocType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_MailMergeDataType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_MailMergeDest"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_MailMergeOdsoFMDFieldType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_TrackChangesView"> + <attribute name="markup"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="comments"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="insDel"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="formatting"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="inkAnnotations"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="CT_Kinsoku"> + <attribute name="lang"> + <ref name="ST_Lang"/> + </attribute> + <attribute name="val"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="ST_TextDirection"> + <choice> + <!-- Left to Right, Top to Bottom --> + <value>lrTb</value> + <!-- Top to Bottom, Right to Left --> + <value>tbRl</value> + <!-- Bottom to Top, Left to Right --> + <value>btLr</value> + <!-- Left to Right, Top to Bottom Rotated --> + <value>lrTbV</value> + <!-- Top to Bottom, Right to Left Rotated --> + <value>tbRlV</value> + <!-- Top to Bottom, Left to Right Rotated --> + <value>tbLrV</value> + </choice> + </define> + <define name="CT_TextDirection"> + <attribute name="val"> + <ref name="ST_TextDirection"/> + </attribute> + </define> + <define name="ST_TextAlignment"> + <choice> + <!-- Align Text at Top --> + <value>top</value> + <!-- Align Text at Center --> + <value>center</value> + <!-- Align Text at Baseline --> + <value>baseline</value> + <!-- Align Text at Bottom --> + <value>bottom</value> + <!-- Automatically Determine Alignment --> + <value>auto</value> + </choice> + </define> + <define name="CT_TextAlignment"> + <attribute name="val"> + <ref name="ST_TextAlignment"/> + </attribute> + </define> + <define name="ST_DisplacedByCustomXml"> + <choice> + <!-- Displaced by Next Custom XML Markup Tag --> + <value>next</value> + <!-- Displaced by Previous Custom XML Markup Tag --> + <value>prev</value> + </choice> + </define> + <define name="ST_AnnotationVMerge"> + <choice> + <!-- Vertically Merged Cell --> + <value>cont</value> + <!-- Vertically Split Cell --> + <value>rest</value> + </choice> + </define> + <define name="CT_Markup"> + <attribute name="id"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_TrackChange"> + <ref name="CT_Markup"/> + <attribute name="author"> + <ref name="ST_String"/> + </attribute> + <attribute name="date"> + <ref name="ST_DateTime"/> + </attribute> + </define> + <define name="CT_CellMergeTrackChange"> + <ref name="CT_TrackChange"/> + <attribute name="vMerge"> + <ref name="ST_AnnotationVMerge"/> + </attribute> + <attribute name="vMergeOrig"> + <ref name="ST_AnnotationVMerge"/> + </attribute> + </define> + <define name="CT_TrackChangeRange"> + <ref name="CT_TrackChange"/> + <attribute name="displacedByCustomXml"> + <ref name="ST_DisplacedByCustomXml"/> + </attribute> + </define> + <define name="CT_MarkupRange"> + <ref name="CT_Markup"/> + <attribute name="displacedByCustomXml"> + <ref name="ST_DisplacedByCustomXml"/> + </attribute> + </define> + <define name="CT_MarkupRangeBookmark"> + <attribute name="id"> + <data type="string"/> + </attribute> + <ref name="CT_MarkupRange"/> + </define> + <define name="CT_MarkupRangePerm"> + <ref name="CT_MarkupRange"/> + </define> + <define name="CT_MarkupRangeCommentStart"> + <ref name="CT_Markup"/> + </define> + <define name="CT_MarkupRangeCommentEnd"> + <ref name="CT_Markup"/> + </define> + <define name="CT_BookmarkRange"> + <ref name="CT_MarkupRangeBookmark"/> + <attribute name="colFirst"> + <data type="string"/> + </attribute> + <attribute name="colLast"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Bookmark"> + <ref name="CT_BookmarkRange"/> + <attribute name="name"> + <data type="string"/> + </attribute> + </define> + <define name="CT_MoveBookmark"> + <ref name="CT_Bookmark"/> + <attribute name="author"> + <data type="string"/> + </attribute> + <attribute name="date"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Comment"> + <attribute name="id"> + <ref name="ST_DecimalNumber"/> + </attribute> + <ref name="CT_TrackChange"/> + <ref name="EG_BlockLevelElts"/> + <attribute name="initials"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_PermStart"> + <ref name="CT_MarkupRangePerm"/> + <attribute name="ed"> + <data type="string"/> + </attribute> + <attribute name="edGrp"> + <data type="string"/> + </attribute> + <attribute name="colFirst"> + <data type="ST_DecimalNumber"/> + </attribute> + <attribute name="colLast"> + <data type="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_PermEnd"> + <ref name="CT_MarkupRangePerm"/> + </define> + <define name="CT_TrackChangeNumbering"> + <ref name="CT_TrackChange"/> + <attribute name="original"> + <data type="string"/> + </attribute> + </define> + <define name="CT_TblPrExChange"> + <ref name="CT_TrackChange"/> + <element name="tblPrEx"> + <ref name="CT_TblPrExBase"/> + </element> + </define> + <define name="CT_TcPrChange"> + <ref name="CT_TrackChange"/> + <element name="tcPr"> + <ref name="CT_TcPrInner"/> + </element> + </define> + <define name="CT_TrPrChange"> + <ref name="CT_TrackChange"/> + <element name="trPr"> + <ref name="CT_TrPrBase"/> + </element> + </define> + <define name="CT_TblGridChange"> + <ref name="CT_Markup"/> + <element name="tblGrid"> + <ref name="CT_TblGridBase"/> + </element> + </define> + <define name="CT_TblPrChange"> + <ref name="CT_TrackChange"/> + <element name="tblPr"> + <ref name="CT_TblPrBase"/> + </element> + </define> + <define name="CT_SectPrChange"> + <ref name="CT_TrackChange"/> + <element name="sectPr"> + <ref name="CT_SectPrBase"/> + </element> + </define> + <define name="CT_PPrChange"> + <ref name="CT_TrackChange"/> + <element name="pPr"> + <ref name="CT_PPrBase"/> + </element> + </define> + <define name="CT_RPrChange"> + <ref name="CT_TrackChange"/> + <element name="rPr"> + <ref name="CT_RPrOriginal"/> + </element> + </define> + <define name="CT_ParaRPrChange"> + <ref name="CT_TrackChange"/> + <element name="rPr"> + <ref name="CT_ParaRPrOriginal"/> + </element> + </define> + <define name="CT_RunTrackChange"> + <ref name="CT_TrackChange"/> + <choice> + <ref name="EG_ContentRunContent"/> + <ref name="EG_OMathMathElements"/> + </choice> + </define> + <define name="EG_CellMarkupElements"> + <choice> + <element name="cellIns"> + <ref name="CT_TrackChange"/> + </element> + <element name="cellDel"> + <ref name="CT_TrackChange"/> + </element> + <element name="cellMerge"> + <ref name="CT_CellMergeTrackChange"/> + </element> + </choice> + </define> + <define name="EG_RangeMarkupElements"> + <choice> + <element name="bookmarkStart"> + <ref name="CT_Bookmark"/> + </element> + <element name="bookmarkEnd"> + <ref name="CT_MarkupRangeBookmark"/> + </element> + <element name="permStart"> + <ref name="CT_PermStart"/> + </element> + <element name="permEnd"> + <ref name="CT_PermEnd"/> + </element> + <element name="moveFromRangeStart"> + <ref name="CT_MoveBookmark"/> + </element> + <element name="moveFromRangeEnd"> + <ref name="CT_MarkupRangeBookmark"/> + </element> + <element name="moveToRangeStart"> + <ref name="CT_MoveBookmark"/> + </element> + <element name="moveToRangeEnd"> + <ref name="CT_MarkupRangeBookmark"/> + </element> + <element name="commentRangeStart"> + <ref name="CT_MarkupRangeCommentStart"/> + </element> + <element name="commentRangeEnd"> + <ref name="CT_MarkupRangeCommentEnd"/> + </element> + <element name="customXmlInsRangeStart"> + <ref name="CT_TrackChange"/> + </element> + <element name="customXmlInsRangeEnd"> + <ref name="CT_Markup"/> + </element> + <element name="customXmlDelRangeStart"> + <ref name="CT_TrackChange"/> + </element> + <element name="customXmlDelRangeEnd"> + <ref name="CT_Markup"/> + </element> + <element name="customXmlMoveFromRangeStart"> + <ref name="CT_TrackChange"/> + </element> + <element name="customXmlMoveFromRangeEnd"> + <ref name="CT_Markup"/> + </element> + <element name="customXmlMoveToRangeStart"> + <ref name="CT_TrackChange"/> + </element> + <element name="customXmlMoveToRangeEnd"> + <ref name="CT_Markup"/> + </element> + </choice> + </define> + <define name="CT_NumPr"> + <element name="ilvl"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="numId"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="numberingChange"> + <ref name="CT_TrackChangeNumbering"/> + </element> + <element name="ins"> + <ref name="CT_TrackChange"/> + </element> + </define> + <define name="CT_PBdr"> + <element name="top"> + <ref name="CT_Border"/> + </element> + <element name="left"> + <ref name="CT_Border"/> + </element> + <element name="bottom"> + <ref name="CT_Border"/> + </element> + <element name="right"> + <ref name="CT_Border"/> + </element> + <element name="between"> + <ref name="CT_Border"/> + </element> + <element name="bar"> + <ref name="CT_Border"/> + </element> + </define> + <define name="CT_Tabs"> + <element name="tab"> + <ref name="CT_TabStop"/> + </element> + </define> + <define name="CT_TextboxTightWrap"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_PPrBase"> + <element name="pStyle"> + <ref name="CT_String"/> + </element> + <element name="keepNext"> + <ref name="CT_OnOff"/> + </element> + <element name="keepLines"> + <ref name="CT_OnOff"/> + </element> + <element name="pageBreakBefore"> + <ref name="CT_OnOff"/> + </element> + <element name="framePr"> + <ref name="CT_FramePr"/> + </element> + <element name="widowControl"> + <ref name="CT_OnOff"/> + </element> + <element name="numPr"> + <ref name="CT_NumPr"/> + </element> + <element name="suppressLineNumbers"> + <ref name="CT_OnOff"/> + </element> + <element name="pBdr"> + <ref name="CT_PBdr"/> + </element> + <element name="shd"> + <ref name="CT_Shd"/> + </element> + <element name="tabs"> + <ref name="CT_Tabs"/> + </element> + <element name="suppressAutoHyphens"> + <ref name="CT_OnOff"/> + </element> + <element name="kinsoku"> + <ref name="CT_OnOff"/> + </element> + <element name="wordWrap"> + <ref name="CT_OnOff"/> + </element> + <element name="overflowPunct"> + <ref name="CT_OnOff"/> + </element> + <element name="topLinePunct"> + <ref name="CT_OnOff"/> + </element> + <element name="autoSpaceDE"> + <ref name="CT_OnOff"/> + </element> + <element name="autoSpaceDN"> + <ref name="CT_OnOff"/> + </element> + <element name="bidi"> + <ref name="CT_OnOff"/> + </element> + <element name="adjustRightInd"> + <ref name="CT_OnOff"/> + </element> + <element name="snapToGrid"> + <ref name="CT_OnOff"/> + </element> + <element name="spacing"> + <ref name="CT_Spacing"/> + </element> + <element name="ind"> + <ref name="CT_Ind"/> + </element> + <element name="contextualSpacing"> + <ref name="CT_OnOff"/> + </element> + <element name="mirrorIndents"> + <ref name="CT_OnOff"/> + </element> + <element name="suppressOverlap"> + <ref name="CT_OnOff"/> + </element> + <element name="jc"> + <ref name="CT_Jc"/> + </element> + <element name="textDirection"> + <ref name="CT_TextDirection"/> + </element> + <element name="textAlignment"> + <ref name="CT_TextAlignment"/> + </element> + <element name="textboxTightWrap"> + <ref name="CT_TextboxTightWrap"/> + </element> + <element name="outlineLvl"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="divId"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="cnfStyle"> + <ref name="CT_Cnf"/> + </element> + </define> + <define name="CT_PPr"> + <ref name="CT_PPrBase"/> + <element name="rPr"> + <ref name="CT_ParaRPr"/> + </element> + <element name="sectPr"> + <ref name="CT_SectPr"/> + </element> + <element name="pPrChange"> + <ref name="CT_PPrChange"/> + </element> + </define> + <define name="CT_Background"> + <ref name="CT_PictureBase"/> + <attribute name="color"> + <ref name="ST_HexColor"/> + </attribute> + <attribute name="themeColor"> + <data type="string"/> + </attribute> + <attribute name="themeTint"> + <data type="string"/> + </attribute> + <attribute name="themeShade"> + <data type="string"/> + </attribute> + <element name="v:background"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </define> + <define name="CT_Rel"> + <attribute name="r:id"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_PictureBase"> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </define> + <define name="CT_Object"> + <ref name="CT_PictureBase"/> + <attribute name="dxaOrig"> + <data type="string"/> + </attribute> + <attribute name="dyaOrig"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Picture"> + <ref name="CT_PictureBase"/> + <element name="movie"> + <ref name="CT_Rel"/> + </element> + </define> + <define name="CT_Drawing"> + <choice> + <ref name="anchor"/> + <ref name="inline"/> + </choice> + </define> + <define name="CT_SimpleField"> + <element name="fldData"> + <ref name="CT_FLDData"/> + </element> + <ref name="EG_PContent"/> + <attribute name="instr"> + <data type="string"/> + </attribute> + <attribute name="fldLock"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="dirty"> + <data type="string"/> + </attribute> + </define> + <define name="ST_FldCharType"> + <choice> + <!-- Start Character --> + <value>begin</value> + <!-- Separator Character --> + <value>separate</value> + <!-- End Character --> + <value>end</value> + </choice> + </define> + <define name="ST_InfoTextType"> + <choice> + <!-- Literal Text --> + <value>text</value> + <!-- Glossary Document Entry --> + <value>autoText</value> + </choice> + </define> + <define name="ST_FFName"> + <data type="string"/> + </define> + <define name="CT_FFTextType"> + <attribute name="val"> + <ref name="ST_FFName"/> + </attribute> + </define> + <define name="CT_FFName"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FldChar"> + <choice> + <element name="fldData"> + <ref name="CT_FLDData"/> + </element> + <element name="ffData"> + <ref name="CT_FFData"/> + </element> + <element name="numberingChange"> + <ref name="CT_TrackChangeNumbering"/> + </element> + </choice> + <attribute name="fldCharType"> + <ref name="ST_FldCharType"/> + </attribute> + <attribute name="fldLock"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="dirty"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Hyperlink"> + <ref name="EG_PContent"/> + <attribute name="tgtFrame"> + <data type="string"/> + </attribute> + <attribute name="tooltip"> + <data type="string"/> + </attribute> + <attribute name="docLocation"> + <data type="string"/> + </attribute> + <attribute name="history"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="anchor"> + <data type="string"/> + </attribute> + <attribute name="r:id"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_FLDData"> + <ref name="ST_String"/> + </define> + <define name="CT_FFData"> + <choice> + <element name="name"> + <ref name="CT_FFName"/> + </element> + <element name="enabled"> + <ref name="CT_OnOff"/> + </element> + <element name="calcOnExit"> + <ref name="CT_OnOff"/> + </element> + <element name="entryMacro"> + <ref name="CT_MacroName"/> + </element> + <element name="exitMacro"> + <ref name="CT_MacroName"/> + </element> + <element name="helpText"> + <ref name="CT_FFHelpText"/> + </element> + <element name="statusText"> + <ref name="CT_FFStatusText"/> + </element> + <element name="checkBox"> + <ref name="CT_FFCheckBox"/> + </element> + <element name="ddList"> + <ref name="CT_FFDDList"/> + </element> + <element name="textInput"> + <ref name="CT_FFTextInput"/> + </element> + </choice> + </define> + <define name="CT_FFHelpText"> + <attribute name="type"> + <ref name="ST_InfoTextType"/> + </attribute> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FFStatusText"> + <attribute name="type"> + <ref name="ST_InfoTextType"/> + </attribute> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FFCheckBox"> + <choice> + <element name="size"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="sizeAuto"> + <ref name="CT_OnOff"/> + </element> + </choice> + <element name="default"> + <ref name="CT_OnOff"/> + </element> + <element name="checked"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_FFDDList"> + <element name="result"> + <ref name="CT_String"/> + </element> + <element name="default"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="listEntry"> + <ref name="CT_String"/> + </element> + </define> + <define name="CT_FFTextInput"> + <element name="type"> + <ref name="CT_FFTextType"/> + </element> + <element name="default"> + <ref name="CT_String"/> + </element> + <element name="maxLength"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="format"> + <ref name="CT_String"/> + </element> + </define> + <define name="ST_SectionMark"> + <choice> + <!-- Next Page Section Break --> + <value>nextPage</value> + <!-- Column Section Break --> + <value>nextColumn</value> + <!-- Continuous Section Break --> + <value>continuous</value> + <!-- Even Page Section Break --> + <value>evenPage</value> + <!-- Odd Page Section Break --> + <value>oddPage</value> + </choice> + </define> + <define name="CT_SectType"> + <attribute name="val"> + <ref name="ST_SectionMark"/> + </attribute> + </define> + <define name="CT_PaperSource"> + <attribute name="first"> + <data type="string"/> + </attribute> + <attribute name="other"> + <data type="string"/> + </attribute> + </define> + <define name="ST_NumberFormat"> + <choice> + <!-- Decimal Numbers --> + <value>decimal</value> + <!-- Uppercase Roman Numerals --> + <value>upperRoman</value> + <!-- Lowercase Roman Numerals --> + <value>lowerRoman</value> + <!-- Uppercase Latin Alphabet --> + <value>upperLetter</value> + <!-- Lowercase Latin Alphabet --> + <value>lowerLetter</value> + <!-- Ordinal --> + <value>ordinal</value> + <!-- Cardinal Text --> + <value>cardinalText</value> + <!-- Ordinal Text --> + <value>ordinalText</value> + <!-- Hexadecimal Numbering --> + <value>hex</value> + <!-- Chicago Manual of Style --> + <value>chicago</value> + <!-- Ideographs --> + <value>ideographDigital</value> + <!-- Japanese Counting System --> + <value>japaneseCounting</value> + <!-- AIUEO Order Hiragana --> + <value>aiueo</value> + <!-- Iroha Ordered Katakana --> + <value>iroha</value> + <!-- Double Byte Arabic Numerals --> + <value>decimalFullWidth</value> + <!-- Single Byte Arabic Numerals --> + <value>decimalHalfWidth</value> + <!-- Japanese Legal Numbering --> + <value>japaneseLegal</value> + <!-- Japanese Digital Ten Thousand Counting System --> + <value>japaneseDigitalTenThousand</value> + <!-- Decimal Numbers Enclosed in a Circle --> + <value>decimalEnclosedCircle</value> + <!-- Double Byte Arabic Numerals Alternate --> + <value>decimalFullWidth2</value> + <!-- Full-Width AIUEO Order Hiragana --> + <value>aiueoFullWidth</value> + <!-- Full-Width Iroha Ordered Katakana --> + <value>irohaFullWidth</value> + <!-- Initial Zero Arabic Numerals --> + <value>decimalZero</value> + <!-- Bullet --> + <value>bullet</value> + <!-- Korean Ganada Numbering --> + <value>ganada</value> + <!-- Korean Chosung Numbering --> + <value>chosung</value> + <!-- Decimal Numbers Followed by a Period --> + <value>decimalEnclosedFullstop</value> + <!-- Decimal Numbers Enclosed in Parenthesis --> + <value>decimalEnclosedParen</value> + <!-- Decimal Numbers Enclosed in a Circle --> + <value>decimalEnclosedCircleChinese</value> + <!-- Ideographs Enclosed in a Circle --> + <value>ideographEnclosedCircle</value> + <!-- Traditional Ideograph Format --> + <value>ideographTraditional</value> + <!-- Zodiac Ideograph Format --> + <value>ideographZodiac</value> + <!-- Traditional Zodiac Ideograph Format --> + <value>ideographZodiacTraditional</value> + <!-- Taiwanese Counting System --> + <value>taiwaneseCounting</value> + <!-- Traditional Legal Ideograph Format --> + <value>ideographLegalTraditional</value> + <!-- Taiwanese Counting Thousand System --> + <value>taiwaneseCountingThousand</value> + <!-- Taiwanese Digital Counting System --> + <value>taiwaneseDigital</value> + <!-- Chinese Counting System --> + <value>chineseCounting</value> + <!-- Chinese Legal Simplified Format --> + <value>chineseLegalSimplified</value> + <!-- Chinese Counting Thousand System --> + <value>chineseCountingThousand</value> + <!-- Korean Digital Counting System --> + <value>koreanDigital</value> + <!-- Korean Counting System --> + <value>koreanCounting</value> + <!-- Korean Legal Numbering --> + <value>koreanLegal</value> + <!-- Korean Digital Counting System Alternate --> + <value>koreanDigital2</value> + <!-- Vietnamese Numerals --> + <value>vietnameseCounting</value> + <!-- Lowercase Russian Alphabet --> + <value>russianLower</value> + <!-- Uppercase Russian Alphabet --> + <value>russianUpper</value> + <!-- No Numbering --> + <value>none</value> + <!-- Number With Dashes --> + <value>numberInDash</value> + <!-- Hebrew Numerals --> + <value>hebrew1</value> + <!-- Hebrew Alphabet --> + <value>hebrew2</value> + <!-- Arabic Alphabet --> + <value>arabicAlpha</value> + <!-- Arabic Abjad Numerals --> + <value>arabicAbjad</value> + <!-- Hindi Vowels --> + <value>hindiVowels</value> + <!-- Hindi Consonants --> + <value>hindiConsonants</value> + <!-- Hindi Numbers --> + <value>hindiNumbers</value> + <!-- Hindi Counting System --> + <value>hindiCounting</value> + <!-- Thai Letters --> + <value>thaiLetters</value> + <!-- Thai Numerals --> + <value>thaiNumbers</value> + <!-- Thai Counting System --> + <value>thaiCounting</value> + <value>custom</value> + </choice> + </define> + <define name="ST_PageOrientation"> + <choice> + <!-- Portrait Mode --> + <value>portrait</value> + <!-- Landscape Mode --> + <value>landscape</value> + </choice> + </define> + <define name="CT_PageSz"> + <attribute name="w"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="h"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="orient"> + <ref name="ST_PageOrientation"/> + </attribute> + <attribute name="code"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_PageMar"> + <attribute name="top"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="right"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="bottom"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="left"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="header"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="footer"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="gutter"> + <ref name="ST_TwipsMeasure"/> + </attribute> + </define> + <define name="ST_PageBorderZOrder"> + <choice> + <!-- Page Border Ahead of Text --> + <value>front</value> + <!-- Page Border Behind Text --> + <value>back</value> + </choice> + </define> + <define name="ST_PageBorderDisplay"> + <choice> + <!-- Display Page Border on All Pages --> + <value>allPages</value> + <!-- Display Page Border on First Page --> + <value>firstPage</value> + <!-- Display Page Border on All Pages Except First --> + <value>notFirstPage</value> + </choice> + </define> + <define name="ST_PageBorderOffset"> + <choice> + <!-- Page Border Is Positioned Relative to Page Edges --> + <value>page</value> + <!-- Page Border Is Positioned Relative to Text Extents --> + <value>text</value> + </choice> + </define> + <define name="CT_PageBorders"> + <element name="top"> + <ref name="CT_Border"/> + </element> + <element name="left"> + <ref name="CT_Border"/> + </element> + <element name="bottom"> + <ref name="CT_Border"/> + </element> + <element name="right"> + <ref name="CT_Border"/> + </element> + <attribute name="zOrder"> + <ref name="ST_PageBorderZOrder"/> + </attribute> + <attribute name="display"> + <ref name="ST_PageBorderDisplay"/> + </attribute> + <attribute name="offsetFrom"> + <ref name="ST_PageBorderOffset"/> + </attribute> + </define> + <define name="ST_ChapterSep"> + <choice> + <!-- Hyphen Chapter Separator --> + <value>hyphen</value> + <!-- Period Chapter Separator --> + <value>period</value> + <!-- Colon Chapter Separator --> + <value>colon</value> + <!-- Em Dash Chapter Separator --> + <value>emDash</value> + <!-- En Dash Chapter Separator --> + <value>enDash</value> + </choice> + </define> + <define name="ST_LineNumberRestart"> + <choice> + <!-- Restart Line Numbering on Each Page --> + <value>newPage</value> + <!-- Restart Line Numbering for Each Section --> + <value>newSection</value> + <!-- Continue Line Numbering From Previous Section --> + <value>continuous</value> + </choice> + </define> + <define name="CT_LineNumber"> + <attribute name="countBy"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="start"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="distance"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="restart"> + <ref name="ST_LineNumberRestart"/> + </attribute> + </define> + <define name="CT_PageNumber"> + <attribute name="fmt"> + <ref name="ST_NumberFormat"/> + </attribute> + <attribute name="start"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="chapStyle"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="chapSep"> + <ref name="ST_ChapterSep"/> + </attribute> + </define> + <define name="CT_Column"> + <attribute name="w"> + <ref name="ST_TwipsMeasure_asZero"/> + </attribute> + <attribute name="space"> + <ref name="ST_TwipsMeasure_asZero"/> + </attribute> + </define> + <define name="CT_Columns"> + <element name="col"> + <ref name="CT_Column"/> + </element> + <attribute name="equalWidth"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="space"> + <ref name="ST_TwipsMeasure"/> + </attribute> + <attribute name="num"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="sep"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="ST_VerticalJc"> + <choice> + <!-- Align Top --> + <value>top</value> + <!-- Align Center --> + <value>center</value> + <!-- Vertical Justification --> + <value>both</value> + <!-- Align Bottom --> + <value>bottom</value> + </choice> + </define> + <define name="CT_VerticalJc"> + <attribute name="val"> + <ref name="ST_VerticalJc"/> + </attribute> + </define> + <define name="ST_DocGrid"> + <choice> + <!-- No Document Grid --> + <value>default</value> + <!-- Line Grid Only --> + <value>lines</value> + <!-- Line and Character Grid --> + <value>linesAndChars</value> + <!-- Character Grid Only --> + <value>snapToChars</value> + </choice> + </define> + <define name="CT_DocGrid"> + <attribute name="type"> + <ref name="ST_DocGrid"/> + </attribute> + <attribute name="linePitch"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="charSpace"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="ST_HdrFtr"> + <choice> + <!-- Even Numbered Pages Only --> + <value>even</value> + <!-- Default Header or Footer --> + <value>default</value> + <!-- First Page Only --> + <value>first</value> + </choice> + </define> + <define name="ST_FtnEdn"> + <choice> + <!-- Normal Footnote/Endnote --> + <value>normal</value> + <!-- Separator --> + <value>separator</value> + <!-- Continuation Separator --> + <value>continuationSeparator</value> + <!-- Continuation Notice Separator --> + <value>continuationNotice</value> + </choice> + </define> + <define name="CT_HdrFtrRef"> + <attribute name="type"> + <ref name="ST_HdrFtr"/> + </attribute> + <attribute name="r:id"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="EG_HdrFtrReferences"> + <choice> + <element name="headerReference"> + <ref name="CT_HdrFtrRef"/> + </element> + <element name="footerReference"> + <ref name="CT_HdrFtrRef"/> + </element> + </choice> + </define> + <define name="CT_HdrFtr"> + <ref name="EG_BlockLevelElts"/> + </define> + <define name="EG_SectPrContents"> + <element name="footnotePr"> + <ref name="CT_FtnProps"/> + </element> + <element name="endnotePr"> + <ref name="CT_EdnProps"/> + </element> + <element name="type"> + <ref name="CT_SectType"/> + </element> + <element name="pgSz"> + <ref name="CT_PageSz"/> + </element> + <element name="pgMar"> + <ref name="CT_PageMar"/> + </element> + <element name="paperSrc"> + <ref name="CT_PaperSource"/> + </element> + <element name="pgBorders"> + <ref name="CT_PageBorders"/> + </element> + <element name="lnNumType"> + <ref name="CT_LineNumber"/> + </element> + <element name="pgNumType"> + <ref name="CT_PageNumber"/> + </element> + <element name="cols"> + <ref name="CT_Columns"/> + </element> + <element name="formProt"> + <ref name="CT_OnOff"/> + </element> + <element name="vAlign"> + <ref name="CT_VerticalJc"/> + </element> + <element name="noEndnote"> + <ref name="CT_OnOff"/> + </element> + <element name="titlePg"> + <ref name="CT_OnOff"/> + </element> + <element name="textDirection"> + <ref name="CT_TextDirection"/> + </element> + <element name="bidi"> + <ref name="CT_OnOff"/> + </element> + <element name="rtlGutter"> + <ref name="CT_OnOff"/> + </element> + <element name="docGrid"> + <ref name="CT_DocGrid"/> + </element> + <element name="printerSettings"> + <ref name="CT_Rel"/> + </element> + </define> + <define name="AG_SectPrAttributes"> + <attribute name="rsidRPr"> + <data type="string"/> + </attribute> + <attribute name="rsidDel"> + <data type="string"/> + </attribute> + <attribute name="rsidR"> + <data type="string"/> + </attribute> + <attribute name="rsidSect"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SectPrBase"> + <ref name="EG_SectPrContents"/> + <ref name="AG_SectPrAttributes"/> + </define> + <define name="CT_SectPr"> + <ref name="EG_HdrFtrReferences"/> + <ref name="EG_SectPrContents"/> + <element name="sectPrChange"> + <ref name="CT_SectPrChange"/> + </element> + <ref name="AG_SectPrAttributes"/> + </define> + <define name="CT_finalSectPr"> + <ref name="EG_HdrFtrReferences"/> + <ref name="EG_SectPrContents"/> + <element name="sectPrChange"> + <ref name="CT_SectPrChange"/> + </element> + <ref name="AG_SectPrAttributes"/> + </define> + <define name="ST_BrType"> + <choice> + <!-- Page Break --> + <value>page</value> + <!-- Column Break --> + <value>column</value> + <!-- Line Break --> + <value>textWrapping</value> + </choice> + </define> + <define name="ST_BrClear"> + <choice> + <!-- Restart On Next Line --> + <value>none</value> + <!-- Restart In Next Text Region When In Leftmost Position --> + <value>left</value> + <!-- Restart In Next Text Region When In Rightmost Position --> + <value>right</value> + <!-- Restart On Next Full Line --> + <value>all</value> + </choice> + </define> + <define name="CT_Br"> + <attribute name="type"> + <ref name="ST_BrType"/> + </attribute> + <attribute name="clear"> + <ref name="ST_BrClear"/> + </attribute> + </define> + <define name="CT_Br_OutOfOrder"> + <attribute name="type"> + <ref name="ST_BrType"/> + </attribute> + <attribute name="clear"> + <ref name="ST_BrClear"/> + </attribute> + </define> + <define name="ST_PTabAlignment"> + <choice> + <!-- Left --> + <value>left</value> + <!-- Center --> + <value>center</value> + <!-- Right --> + <value>right</value> + </choice> + </define> + <define name="ST_PTabRelativeTo"> + <choice> + <!-- Relative To Text Margins --> + <value>margin</value> + <!-- Relative To Indents --> + <value>indent</value> + </choice> + </define> + <define name="ST_PTabLeader"> + <choice> + <!-- No Leader Character --> + <value>none</value> + <!-- Dot Leader Character --> + <value>dot</value> + <!-- Hyphen Leader Character --> + <value>hyphen</value> + <!-- Underscore Leader Character --> + <value>underscore</value> + <!-- Centered Dot Leader Character --> + <value>middleDot</value> + </choice> + </define> + <define name="CT_PTab"> + <attribute name="alignment"> + <ref name="ST_PTabAlignment"/> + </attribute> + <attribute name="relativeTo"> + <ref name="ST_PTabRelativeTo"/> + </attribute> + <attribute name="leader"> + <ref name="ST_PTabLeader"/> + </attribute> + </define> + <define name="CT_Sym"> + <attribute name="font"> + <data type="string"/> + </attribute> + <attribute name="char"> + <ref name="ST_ShortHexNumber"/> + </attribute> + </define> + <define name="CT_ProofErr"> + <attribute name="type"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Text"> + <ref name="ST_String"/> + <attribute name="xml:space"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FtnEdnRefChar"> + </define> + <define name="CT_FtnEdnSep"> + </define> + <define name="CT_FtnEdnCont"> + </define> + <define name="CT_PgNum"> + </define> + <define name="CT_Cr"> + </define> + <define name="CT_Tab"> + </define> + <define name="EG_RunInnerContent"> + <choice> + <element name="br"> + <ref name="CT_Br"/> + </element> + <element name="t"> + <ref name="CT_Text"/> + </element> + <element name="delText"> + <ref name="CT_Text"/> + </element> + <element name="instrText"> + <ref name="CT_Text"/> + </element> + <element name="delInstrText"> + <ref name="CT_Text"/> + </element> + <element name="noBreakHyphen"> + <ref name="CT_Empty"/> + </element> + <element name="softHyphen"> + <ref name="CT_Empty"/> + </element> + <element name="dayShort"> + <ref name="CT_Empty"/> + </element> + <element name="monthShort"> + <ref name="CT_Empty"/> + </element> + <element name="yearShort"> + <ref name="CT_Empty"/> + </element> + <element name="dayLong"> + <ref name="CT_Empty"/> + </element> + <element name="monthLong"> + <ref name="CT_Empty"/> + </element> + <element name="yearLong"> + <ref name="CT_Empty"/> + </element> + <element name="annotationRef"> + <ref name="CT_Empty"/> + </element> + <element name="footnoteRef"> + <ref name="CT_FtnEdnRefChar"/> + </element> + <element name="endnoteRef"> + <ref name="CT_FtnEdnRefChar"/> + </element> + <element name="separator"> + <ref name="CT_FtnEdnSep"/> + </element> + <element name="continuationSeparator"> + <ref name="CT_FtnEdnCont"/> + </element> + <element name="sym"> + <ref name="CT_Sym"/> + </element> + <element name="pgNum"> + <ref name="CT_PgNum"/> + </element> + <element name="cr"> + <ref name="CT_Cr"/> + </element> + <element name="tab"> + <ref name="CT_Tab"/> + </element> + <element name="object"> + <ref name="CT_Object"/> + </element> + <element name="pict"> + <ref name="CT_Picture"/> + </element> + <element name="fldChar"> + <ref name="CT_FldChar"/> + </element> + <element name="ruby"> + <ref name="CT_Ruby"/> + </element> + <element name="footnoteReference"> + <ref name="CT_FtnEdnRef"/> + </element> + <element name="endnoteReference"> + <ref name="CT_FtnEdnRef"/> + </element> + <element name="commentReference"> + <ref name="CT_CommentRef"/> + </element> + <element name="drawing"> + <ref name="CT_Drawing"/> + </element> + <element name="ptab"> + <ref name="CT_PTab"/> + </element> + <element name="lastRenderedPageBreak"> + <ref name="CT_Empty"/> + </element> + </choice> + </define> + <define name="CT_R"> + <ref name="EG_RPr"/> + <ref name="EG_RunInnerContent"/> + <attribute name="rsidRPr"> + <data type="string"/> + </attribute> + <attribute name="rsidDel"> + <data type="string"/> + </attribute> + <attribute name="rsidR"> + <data type="string"/> + </attribute> + </define> + <define name="ST_Hint"> + <choice> + <!-- High ANSI Font --> + <value>default</value> + <!-- East Asian Font --> + <value>eastAsia</value> + <!-- Complex Script Font --> + <value>cs</value> + </choice> + </define> + <define name="ST_Theme"> + <choice> + <!-- Major East Asian Theme Font --> + <value>majorEastAsia</value> + <!-- Major Complex Script Theme Font --> + <value>majorBidi</value> + <!-- Major ASCII Theme Font --> + <value>majorAscii</value> + <!-- Major High ANSI Theme Font --> + <value>majorHAnsi</value> + <!-- Minor East Asian Theme Font --> + <value>minorEastAsia</value> + <!-- Minor Complex Script Theme Font --> + <value>minorBidi</value> + <!-- Minor ASCII Theme Font --> + <value>minorAscii</value> + <!-- Minor High ANSI Theme Font --> + <value>minorHAnsi</value> + </choice> + </define> + <define name="CT_Fonts"> + <attribute name="hint"> + <ref name="ST_Hint"/> + </attribute> + <attribute name="ascii"> + <ref name="ST_String"/> + </attribute> + <attribute name="hAnsi"> + <ref name="ST_String"/> + </attribute> + <attribute name="eastAsia"> + <ref name="ST_String"/> + </attribute> + <attribute name="cs"> + <ref name="ST_String"/> + </attribute> + <attribute name="asciiTheme"> + <ref name="ST_Theme"/> + </attribute> + <attribute name="hAnsiTheme"> + <ref name="ST_Theme"/> + </attribute> + <attribute name="eastAsiaTheme"> + <ref name="ST_Theme"/> + </attribute> + <attribute name="cstheme"> + <ref name="ST_Theme"/> + </attribute> + </define> + <define name="EG_RPrBase"> + <element name="rStyle"> + <ref name="CT_String"/> + </element> + <element name="rFonts"> + <ref name="CT_Fonts"/> + </element> + <element name="b"> + <ref name="CT_OnOff"/> + </element> + <element name="bCs"> + <ref name="CT_OnOff"/> + </element> + <element name="i"> + <ref name="CT_OnOff"/> + </element> + <element name="iCs"> + <ref name="CT_OnOff"/> + </element> + <element name="caps"> + <ref name="CT_OnOff"/> + </element> + <element name="smallCaps"> + <ref name="CT_OnOff"/> + </element> + <element name="strike"> + <ref name="CT_OnOff"/> + </element> + <element name="dstrike"> + <ref name="CT_OnOff"/> + </element> + <element name="outline"> + <ref name="CT_OnOff"/> + </element> + <element name="shadow"> + <ref name="CT_OnOff"/> + </element> + <element name="emboss"> + <ref name="CT_OnOff"/> + </element> + <element name="imprint"> + <ref name="CT_OnOff"/> + </element> + <element name="noProof"> + <ref name="CT_OnOff"/> + </element> + <element name="snapToGrid"> + <ref name="CT_OnOff"/> + </element> + <element name="vanish"> + <ref name="CT_OnOff"/> + </element> + <element name="webHidden"> + <ref name="CT_OnOff"/> + </element> + <element name="color"> + <ref name="CT_Color"/> + </element> + <element name="spacing"> + <ref name="CT_SignedTwipsMeasure"/> + </element> + <element name="w"> + <ref name="CT_TextScale"/> + </element> + <element name="kern"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="position"> + <ref name="CT_SignedHpsMeasure"/> + </element> + <element name="sz"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="szCs"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="highlight"> + <ref name="CT_Highlight"/> + </element> + <element name="u"> + <ref name="CT_Underline"/> + </element> + <element name="effect"> + <ref name="CT_TextEffect"/> + </element> + <element name="bdr"> + <ref name="CT_Border"/> + </element> + <element name="shd"> + <ref name="CT_Shd"/> + </element> + <element name="fitText"> + <ref name="CT_FitText"/> + </element> + <element name="vertAlign"> + <ref name="CT_VerticalAlignRun"/> + </element> + <element name="rtl"> + <ref name="CT_OnOff"/> + </element> + <element name="cs"> + <ref name="CT_OnOff"/> + </element> + <element name="em"> + <ref name="CT_Em"/> + </element> + <element name="lang"> + <ref name="CT_Language"/> + </element> + <element name="eastAsianLayout"> + <ref name="CT_EastAsianLayout"/> + </element> + <element name="specVanish"> + <ref name="CT_OnOff"/> + </element> + <element name="oMath"> + <ref name="CT_OnOff"/> + </element> + <element name="w14:glow"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:shadow"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:reflection"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:textOutline"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:textFill"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:scene3d"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:props3d"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:ligatures"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:numForm"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:numSpacing"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:stylisticSets"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <element name="w14:cntxtAlts"> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </define> + <define name="EG_RPrContent"> + <ref name="EG_RPrBase"/> + <element name="rPrChange"> + <ref name="CT_RPrChange"/> + </element> + </define> + <define name="CT_RPr"> + <ref name="EG_RPrContent"/> + </define> + <define name="EG_RPr"> + <element name="rPr"> + <ref name="CT_RPr"/> + </element> + </define> + <define name="EG_RPrMath"> + <choice> + <ref name="EG_RPr"/> + <element name="ins"> + <ref name="CT_RPrChange"/> + </element> + <element name="del"> + <ref name="CT_RPrChange"/> + </element> + </choice> + </define> + <define name="CT_RPrOriginal"> + <ref name="EG_RPrBase"/> + </define> + <define name="CT_ParaRPrOriginal"> + <ref name="EG_ParaRPrTrackChanges"/> + <ref name="EG_RPrBase"/> + </define> + <define name="CT_ParaRPr"> + <ref name="EG_ParaRPrTrackChanges"/> + <ref name="EG_RPrBase"/> + <element name="rPrChange"> + <ref name="CT_ParaRPrChange"/> + </element> + </define> + <define name="CT_ParaTrackChange"> + <ref name="CT_TrackChange"/> + </define> + <define name="EG_ParaRPrTrackChanges"> + <element name="ins"> + <ref name="CT_ParaTrackChange"/> + </element> + <element name="del"> + <ref name="CT_ParaTrackChange"/> + </element> + <element name="moveFrom"> + <ref name="CT_TrackChange"/> + </element> + <element name="moveTo"> + <ref name="CT_TrackChange"/> + </element> + </define> + <define name="CT_AltChunk"> + <element name="altChunkPr"> + <ref name="CT_AltChunkPr"/> + </element> + <attribute name="r:id"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_AltChunkPr"> + <element name="matchSrc"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="ST_RubyAlign"> + <choice> + <value>center</value> + <value>distributeLetter</value> + <value>distributeSpace</value> + <value>left</value> + <value>right</value> + <value>rightVertical</value> + </choice> + </define> + <define name="CT_RubyAlign"> + <attribute name="val"> + <ref name="ST_RubyAlign"/> + </attribute> + </define> + <define name="CT_RubyPr"> + <element name="rubyAlign"> + <ref name="CT_RubyAlign"/> + </element> + <element name="hps"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="hpsRaise"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="hpsBaseText"> + <ref name="CT_HpsMeasure"/> + </element> + <element name="lid"> + <ref name="CT_Lang"/> + </element> + <element name="dirty"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="EG_RubyContent"> + <choice> + <element name="r"> + <ref name="CT_R"/> + </element> + <ref name="EG_RunLevelElts"/> + </choice> + </define> + <define name="CT_RubyContent"> + <ref name="EG_RubyContent"/> + </define> + <define name="CT_Ruby"> + <element name="rubyPr"> + <ref name="CT_RubyPr"/> + </element> + <element name="rt"> + <ref name="CT_RubyContent"/> + </element> + <element name="rubyBase"> + <ref name="CT_RubyContent"/> + </element> + </define> + <define name="CT_Lock"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtListItem"> + <attribute name="displayText"> + <data type="string"/> + </attribute> + <attribute name="value"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtDateMappingType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_CalendarType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtDate"> + <element name="dateFormat"> + <ref name="CT_String"/> + </element> + <element name="lid"> + <ref name="CT_Lang"/> + </element> + <element name="storeMappedDataAs"> + <ref name="CT_SdtDateMappingType"/> + </element> + <element name="calendar"> + <ref name="CT_CalendarType"/> + </element> + <attribute name="fullDate"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtDocPart"> + <element name="docPartGallery"> + <ref name="CT_String"/> + </element> + <element name="docPartCategory"> + <ref name="CT_String"/> + </element> + <element name="docPartUnique"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_SdtDropDownList"> + <element name="listItem"> + <ref name="CT_SdtListItem"/> + </element> + <attribute name="lastValue"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtPlaceholderDocPart"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtPlaceholder"> + <element name="docPart"> + <ref name="CT_SdtPlaceholderDocPart"/> + </element> + </define> + <define name="CT_SdtText"> + <attribute name="multiLine"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DataBinding"> + <attribute name="prefixMappings"> + <data type="string"/> + </attribute> + <attribute name="xpath"> + <data type="string"/> + </attribute> + <attribute name="storeItemID"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtColor"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SdtPr"> + <choice> + <element name="rPr"> + <ref name="CT_RPr"/> + </element> + <element name="alias"> + <ref name="CT_String"/> + </element> + <element name="lock"> + <ref name="CT_Lock"/> + </element> + <element name="placeholder"> + <ref name="CT_SdtPlaceholder"/> + </element> + <element name="showingPlcHdr"> + <ref name="CT_OnOff"/> + </element> + <element name="dataBinding"> + <ref name="CT_DataBinding"/> + </element> + <element name="temporary"> + <ref name="CT_OnOff"/> + </element> + <element name="id"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="tag"> + <ref name="CT_String"/> + </element> + <element name="equation"> + <ref name="CT_OnOff"/> + </element> + <element name="comboBox"> + <ref name="CT_SdtDropDownList"/> + </element> + <element name="w14:checkbox"> + <ref name="CT_SdtCheckbox"/> + </element> + <element name="date"> + <ref name="CT_SdtDate"/> + </element> + <element name="docPartObj"> + <ref name="CT_SdtDocPart"/> + </element> + <element name="docPartList"> + <ref name="CT_SdtDocPart"/> + </element> + <element name="dropDownList"> + <ref name="CT_SdtDropDownList"/> + </element> + <element name="picture"> + <ref name="CT_OnOff"/> + </element> + <element name="richText"> + <ref name="CT_Empty"/> + </element> + <element name="text"> + <ref name="CT_SdtText"/> + </element> + <element name="citation"> + <ref name="CT_OnOff"/> + </element> + <element name="group"> + <ref name="CT_OnOff"/> + </element> + <element name="bibliography"> + <ref name="CT_Empty"/> + </element> + <element name="w15:color"> + <ref name="CT_SdtColor"/> + </element> + </choice> + </define> + <define name="CT_SdtEndPr"> + <element name="rPr"> + <ref name="CT_RPr"/> + </element> + </define> + <define name="EG_ContentRunContent"> + <choice> + <element name="customXml"> + <ref name="CT_CustomXmlRun"/> + </element> + <element name="smartTag"> + <ref name="CT_SmartTagRun"/> + </element> + <element name="sdt"> + <ref name="CT_SdtRun"/> + </element> + <element name="dir"> + <ref name="CT_DirContentRun"/> + </element> + <element name="r"> + <ref name="CT_R"/> + </element> + <ref name="EG_RunLevelElts"/> + </choice> + </define> + <define name="CT_DirContentRun"> + <ref name="EG_PContent"/> + <attribute name="val"> + <ref name="ST_Direction"/> + </attribute> + </define> + <define name="ST_Direction"> + <choice> + <value>ltr</value> + <value>rtl</value> + </choice> + </define> + <define name="CT_SdtContentRun"> + <ref name="EG_PContent"/> + </define> + <define name="EG_ContentBlockContent"> + <choice> + <element name="customXml"> + <ref name="CT_CustomXmlBlock"/> + </element> + <element name="sdt"> + <ref name="CT_SdtBlock"/> + </element> + <element name="p"> + <ref name="CT_P"/> + </element> + <element name="tbl"> + <ref name="CT_Tbl"/> + </element> + <!-- tdf#108714 : allow <w:br> at block level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word --> + <element name="br"> + <ref name="CT_Br_OutOfOrder"/> + </element> + <!-- end tdf#108714 --> + <ref name="EG_RunLevelElts"/> + </choice> + </define> + <define name="CT_SdtContentBlock"> + <ref name="EG_ContentBlockContent"/> + </define> + <define name="EG_ContentRowContent"> + <choice> + <element name="tr"> + <ref name="CT_Row"/> + </element> + <element name="customXml"> + <ref name="CT_CustomXmlRow"/> + </element> + <element name="sdt"> + <ref name="CT_SdtRow"/> + </element> + <ref name="EG_RunLevelElts"/> + </choice> + </define> + <define name="CT_SdtContentRow"> + <ref name="EG_ContentRowContent"/> + </define> + <define name="EG_ContentCellContent"> + <choice> + <element name="tc"> + <ref name="CT_Tc"/> + </element> + <element name="customXml"> + <ref name="CT_CustomXmlCell"/> + </element> + <element name="sdt"> + <ref name="CT_SdtCell"/> + </element> + <ref name="EG_RunLevelElts"/> + </choice> + </define> + <define name="CT_SdtContentCell"> + <ref name="EG_ContentCellContent"/> + </define> + <define name="CT_SdtBlock"> + <element name="sdtPr"> + <ref name="CT_SdtPr"/> + </element> + <element name="sdtEndPr"> + <ref name="CT_SdtEndPr"/> + </element> + <element name="sdtContent"> + <ref name="CT_SdtContentBlock"/> + </element> + </define> + <define name="CT_SdtRun"> + <element name="sdtPr"> + <ref name="CT_SdtPr"/> + </element> + <element name="sdtEndPr"> + <ref name="CT_SdtEndPr"/> + </element> + <element name="sdtContent"> + <ref name="CT_SdtContentRun"/> + </element> + </define> + <define name="CT_SdtCell"> + <element name="sdtPr"> + <ref name="CT_SdtPr"/> + </element> + <element name="sdtEndPr"> + <ref name="CT_SdtEndPr"/> + </element> + <element name="sdtContent"> + <ref name="CT_SdtContentCell"/> + </element> + </define> + <define name="CT_SdtRow"> + <element name="sdtPr"> + <ref name="CT_SdtPr"/> + </element> + <element name="sdtEndPr"> + <ref name="CT_SdtEndPr"/> + </element> + <element name="sdtContent"> + <ref name="CT_SdtContentRow"/> + </element> + </define> + <define name="CT_Attr"> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="name"> + <data type="string"/> + </attribute> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_CustomXmlRun"> + <element name="customXmlPr"> + <ref name="CT_CustomXmlPr"/> + </element> + <ref name="EG_PContent"/> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="element"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SmartTagRun"> + <element name="smartTagPr"> + <ref name="CT_SmartTagPr"/> + </element> + <ref name="EG_PContent"/> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="element"> + <data type="string"/> + </attribute> + </define> + <define name="CT_CustomXmlBlock"> + <element name="customXmlPr"> + <ref name="CT_CustomXmlPr"/> + </element> + <ref name="EG_ContentBlockContent"/> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="element"> + <data type="string"/> + </attribute> + </define> + <define name="CT_CustomXmlPr"> + <element name="placeholder"> + <ref name="CT_String"/> + </element> + <element name="attr"> + <ref name="CT_Attr"/> + </element> + </define> + <define name="CT_CustomXmlRow"> + <element name="customXmlPr"> + <ref name="CT_CustomXmlPr"/> + </element> + <ref name="EG_ContentRowContent"/> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="element"> + <data type="string"/> + </attribute> + </define> + <define name="CT_CustomXmlCell"> + <element name="customXmlPr"> + <ref name="CT_CustomXmlPr"/> + </element> + <ref name="EG_ContentCellContent"/> + <attribute name="uri"> + <data type="string"/> + </attribute> + <attribute name="element"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SmartTagPr"> + <element name="attr"> + <ref name="CT_Attr"/> + </element> + </define> + <define name="EG_PContent"> + <choice> + <ref name="EG_ContentRunContent"/> + <element name="fldSimple"> + <ref name="CT_SimpleField"/> + </element> + <element name="hyperlink"> + <ref name="CT_Hyperlink"/> + </element> + <element name="subDoc"> + <ref name="CT_Rel"/> + </element> + </choice> + </define> + <!-- [MS-DOCX] sect. 2.2.4 "p and tr Extensions" --> + <!-- Should rather be in w14 namespace, but I don't see how to reference things from there --> + <define name="AG_Parids"> + <attribute name="w14:paraId"> + <data type="string"/> + </attribute> + <!-- Not yet used + <attribute name="textId"> + <ref name="ST_LongHexNumber"/> + </attribute> + --> + </define> + <define name="CT_P"> + <element name="pPr"> + <ref name="CT_PPr"/> + </element> + <ref name="EG_PContent"/> + <attribute name="rsidRPr"> + <data type="string"/> + </attribute> + <attribute name="rsidR"> + <data type="string"/> + </attribute> + <attribute name="rsidDel"> + <data type="string"/> + </attribute> + <attribute name="rsidP"> + <data type="string"/> + </attribute> + <attribute name="rsidRDefault"> + <data type="string"/> + </attribute> + <ref name="AG_Parids"/> + <!-- tdf#108714 : allow <w:br> at paragraph level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word --> + <element name="br"> + <ref name="CT_Br_OutOfOrder"/> + </element> + <!-- end tdf#108714 --> + <!-- tdf#111550 : allow <w:tbl> at paragraph level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word --> + <element name="tbl"> + <ref name="CT_P_Tbl"/> + </element> + </define> + <define name="ST_TblWidth"> + <choice> + <!-- No Width --> + <value>nil</value> + <!-- Width in Fiftieths of a Percent --> + <value>pct</value> + <!-- Width in Twentieths of a Point --> + <value>dxa</value> + <!-- Automatically Determined Width --> + <value>auto</value> + </choice> + </define> + <define name="ST_MeasurementOrPercent"> + <data type="string"/> + </define> + <define name="CT_Height"> + <attribute name="val"> + <data type="string"/> + </attribute> + <attribute name="hRule"> + <data type="string"/> + </attribute> + </define> + <define name="CT_TblWidth"> + <attribute name="w"> + <ref name="ST_MeasurementOrPercent"/> + </attribute> + <attribute name="type"> + <ref name="ST_TblWidth"/> + </attribute> + </define> + <define name="CT_TblGridCol"> + <attribute name="w"> + <ref name="ST_TwipsMeasure"/> + </attribute> + </define> + <define name="CT_TblGridBase"> + <element name="gridCol"> + <ref name="CT_TblGridCol"/> + </element> + </define> + <define name="CT_TblGrid"> + <ref name="CT_TblGridBase"/> + <element name="tblGridChange"> + <ref name="CT_TblGridChange"/> + </element> + </define> + <define name="CT_TcBorders"> + <element name="top"> + <ref name="CT_Border"/> + </element> + <element name="start"> + <ref name="CT_Border"/> + </element> + <element name="left"> + <ref name="CT_Border"/> + </element> + <element name="bottom"> + <ref name="CT_Border"/> + </element> + <element name="end"> + <ref name="CT_Border"/> + </element> + <element name="right"> + <ref name="CT_Border"/> + </element> + <element name="insideH"> + <ref name="CT_Border"/> + </element> + <element name="insideV"> + <ref name="CT_Border"/> + </element> + <element name="tl2br"> + <ref name="CT_Border"/> + </element> + <element name="tr2bl"> + <ref name="CT_Border"/> + </element> + </define> + <define name="CT_TcMar"> + <element name="top"> + <ref name="CT_TblWidth"/> + </element> + <element name="start"> + <ref name="CT_TblWidth"/> + </element> + <element name="left"> + <ref name="CT_TblWidth"/> + </element> + <element name="bottom"> + <ref name="CT_TblWidth"/> + </element> + <element name="right"> + <ref name="CT_TblWidth"/> + </element> + <element name="end"> + <ref name="CT_TblWidth"/> + </element> + </define> + <define name="ST_Merge"> + <choice> + <!-- Continue Merged Region --> + <value>continue</value> + <!-- Start/Restart Merged Region --> + <value>restart</value> + </choice> + </define> + <define name="CT_VMerge"> + <attribute name="val"> + <ref name="ST_Merge"/> + </attribute> + </define> + <define name="CT_HMerge"> + <attribute name="val"> + <ref name="ST_Merge"/> + </attribute> + </define> + <define name="CT_TcPrBase"> + <element name="cnfStyle"> + <ref name="CT_Cnf"/> + </element> + <element name="tcW"> + <ref name="CT_TblWidth"/> + </element> + <element name="gridSpan"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="hMerge"> + <ref name="CT_HMerge"/> + </element> + <element name="vMerge"> + <ref name="CT_VMerge"/> + </element> + <element name="tcBorders"> + <ref name="CT_TcBorders"/> + </element> + <element name="shd"> + <ref name="CT_Shd"/> + </element> + <element name="noWrap"> + <ref name="CT_OnOff"/> + </element> + <element name="tcMar"> + <ref name="CT_TcMar"/> + </element> + <element name="textDirection"> + <ref name="CT_TextDirection"/> + </element> + <element name="tcFitText"> + <ref name="CT_OnOff"/> + </element> + <element name="vAlign"> + <ref name="CT_VerticalJc"/> + </element> + <element name="hideMark"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_TcPr"> + <ref name="CT_TcPrInner"/> + <element name="tcPrChange"> + <ref name="CT_TcPrChange"/> + </element> + </define> + <define name="CT_TcPrInner"> + <ref name="CT_TcPrBase"/> + <ref name="EG_CellMarkupElements"/> + </define> + <define name="CT_Tc"> + <element name="tcPr"> + <ref name="CT_TcPr"/> + </element> + <ref name="EG_BlockLevelElts"/> + </define> + <define name="ST_Cnf"> + <data type="string"/> + </define> + <define name="CT_Cnf"> + <attribute name="val"> + <ref name="ST_Cnf"/> + </attribute> + <attribute name="firstRow"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="lastRow"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="firstColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="lastColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="oddVBand"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="evenVBand"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="oddHBand"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="evenHBand"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="firstRowFirstColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="firstRowLastColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="lastRowFirstColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="lastRowLastColumn"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="CT_TrPrBase"> + <choice> + <element name="cnfStyle"> + <ref name="CT_Cnf"/> + </element> + <element name="divId"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="gridBefore"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="gridAfter"> + <ref name="CT_TrPrBaseGridAfter"/> + </element> + <element name="wBefore"> + <ref name="CT_TblWidth"/> + </element> + <element name="wAfter"> + <ref name="CT_TblWidth"/> + </element> + <element name="cantSplit"> + <ref name="CT_OnOff"/> + </element> + <element name="trHeight"> + <ref name="CT_Height"/> + </element> + <element name="tblHeader"> + <ref name="CT_OnOff"/> + </element> + <element name="tblCellSpacing"> + <ref name="CT_TblWidth"/> + </element> + <element name="jc"> + <ref name="CT_Jc"/> + </element> + <element name="hidden"> + <ref name="CT_OnOff"/> + </element> + </choice> + </define> + <define name="CT_TrPrBaseGridAfter"> + <attribute name="val"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_TrPr"> + <ref name="CT_TrPrBase"/> + <element name="ins"> + <ref name="CT_TrackChange"/> + </element> + <element name="del"> + <ref name="CT_TrackChange"/> + </element> + <element name="trPrChange"> + <ref name="CT_TrPrChange"/> + </element> + </define> + <define name="CT_Row"> + <element name="tblPrEx"> + <ref name="CT_TblPrEx"/> + </element> + <element name="trPr"> + <ref name="CT_TrPr"/> + </element> + <ref name="EG_ContentCellContent"/> + <attribute name="rsidRPr"> + <data type="string"/> + </attribute> + <attribute name="rsidR"> + <data type="string"/> + </attribute> + <attribute name="rsidDel"> + <data type="string"/> + </attribute> + <attribute name="rsidTr"> + <data type="string"/> + </attribute> + <ref name="AG_Parids"/> + </define> + <define name="ST_TblLayout"> + <choice> + <!-- Fixed Width Table Layout --> + <value>fixed</value> + <!-- AutoFit Table Layout --> + <value>autofit</value> + </choice> + </define> + <define name="CT_TblLayoutType"> + <attribute name="type"> + <ref name="ST_TblLayout"/> + </attribute> + </define> + <define name="ST_TblOverlap"> + <choice> + <!-- Floating Table Cannot Overlap --> + <value>never</value> + <!-- Floating Table Can Overlap --> + <value>overlap</value> + </choice> + </define> + <define name="CT_TblOverlap"> + <attribute name="val"> + <ref name="ST_TblOverlap"/> + </attribute> + </define> + <define name="CT_TblPPr"> + <attribute name="leftFromText"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="rightFromText"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="topFromText"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="bottomFromText"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="vertAnchor"> + <data type="string"/> + </attribute> + <attribute name="horzAnchor"> + <data type="string"/> + </attribute> + <attribute name="tblpXSpec"> + <data type="string"/> + </attribute> + <attribute name="tblpX"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + <attribute name="tblpYSpec"> + <data type="string"/> + </attribute> + <attribute name="tblpY"> + <ref name="ST_SignedTwipsMeasure"/> + </attribute> + </define> + <define name="CT_TblCellMar"> + <element name="top"> + <ref name="CT_TblWidth"/> + </element> + <element name="start"> + <ref name="CT_TblWidth"/> + </element> + <element name="left"> + <ref name="CT_TblWidth"/> + </element> + <element name="bottom"> + <ref name="CT_TblWidth"/> + </element> + <element name="right"> + <ref name="CT_TblWidth"/> + </element> + <element name="end"> + <ref name="CT_TblWidth"/> + </element> + </define> + <define name="CT_TblBorders"> + <element name="top"> + <ref name="CT_Border"/> + </element> + <element name="start"> + <ref name="CT_Border"/> + </element> + <element name="left"> + <ref name="CT_Border"/> + </element> + <element name="bottom"> + <ref name="CT_Border"/> + </element> + <element name="end"> + <ref name="CT_Border"/> + </element> + <element name="right"> + <ref name="CT_Border"/> + </element> + <element name="insideH"> + <ref name="CT_Border"/> + </element> + <element name="insideV"> + <ref name="CT_Border"/> + </element> + </define> + <define name="CT_TblPrBase"> + <element name="tblStyle"> + <ref name="CT_String"/> + </element> + <element name="tblpPr"> + <ref name="CT_TblPPr"/> + </element> + <element name="tblOverlap"> + <ref name="CT_TblOverlap"/> + </element> + <element name="bidiVisual"> + <ref name="CT_OnOff"/> + </element> + <element name="tblStyleRowBandSize"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="tblStyleColBandSize"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="tblW"> + <ref name="CT_TblWidth"/> + </element> + <element name="jc"> + <ref name="CT_Jc"/> + </element> + <element name="tblCellSpacing"> + <ref name="CT_TblWidth"/> + </element> + <element name="tblInd"> + <ref name="CT_TblWidth"/> + </element> + <element name="tblBorders"> + <ref name="CT_TblBorders"/> + </element> + <element name="shd"> + <ref name="CT_Shd"/> + </element> + <element name="tblLayout"> + <ref name="CT_TblLayoutType"/> + </element> + <element name="tblCellMar"> + <ref name="CT_TblCellMar"/> + </element> + <element name="tblLook"> + <ref name="CT_TblLook"/> + </element> + <element name="tblCaption"> + <ref name="CT_String"/> + </element> + <element name="tblDescription"> + <ref name="CT_String"/> + </element> + </define> + <define name="CT_TblPr"> + <ref name="CT_TblPrBase"/> + <element name="tblPrChange"> + <ref name="CT_TblPrChange"/> + </element> + </define> + <define name="CT_TblPrExBase"> + <element name="tblW"> + <ref name="CT_TblWidth"/> + </element> + <element name="jc"> + <ref name="CT_Jc"/> + </element> + <element name="tblCellSpacing"> + <ref name="CT_TblWidth"/> + </element> + <element name="tblInd"> + <ref name="CT_TblWidth"/> + </element> + <element name="tblBorders"> + <ref name="CT_TblBorders"/> + </element> + <element name="shd"> + <ref name="CT_Shd"/> + </element> + <element name="tblLayout"> + <ref name="CT_TblLayoutType"/> + </element> + <element name="tblCellMar"> + <ref name="CT_TblCellMar"/> + </element> + <element name="tblLook"> + <ref name="CT_TblLook"/> + </element> + <element name="tblCaption"> + <ref name="CT_String"/> + </element> + <element name="tblDescription"> + <ref name="CT_String"/> + </element> + </define> + <define name="CT_TblPrEx"> + <ref name="CT_TblPrExBase"/> + <element name="tblPrExChange"> + <ref name="CT_TblPrExChange"/> + </element> + </define> + <define name="CT_Tbl"> + <ref name="EG_RangeMarkupElements"/> + <element name="tblPr"> + <ref name="CT_TblPr"/> + </element> + <element name="tblGrid"> + <ref name="CT_TblGrid"/> + </element> + <ref name="EG_ContentRowContent"/> + </define> + <!-- tdf#111550 : Special element - copy of usual CT_Tbl, but only used as direct child of CT_P --> + <define name="CT_P_Tbl"> + <ref name="EG_RangeMarkupElements"/> + <element name="tblPr"> + <ref name="CT_TblPr"/> + </element> + <element name="tblGrid"> + <ref name="CT_TblGrid"/> + </element> + <ref name="EG_ContentRowContent"/> + </define> + <define name="CT_TblLook"> + <attribute name="firstRow"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="lastRow"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="firstColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="lastColumn"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="noHBand"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="noVBand"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="val"> + <ref name="ST_ShortHexNumber"/> + </attribute> + </define> + <define name="ST_FtnPos"> + <choice> + <!-- Footnotes Positioned at Page Bottom --> + <value>pageBottom</value> + <!-- Footnotes Positioned Beneath Text --> + <value>beneathText</value> + <!-- Footnotes Positioned At End of Section --> + <value>sectEnd</value> + <!-- Footnotes Positioned At End of Document --> + <value>docEnd</value> + </choice> + </define> + <define name="CT_FtnPos"> + <attribute name="val"> + <ref name="ST_FtnPos"/> + </attribute> + </define> + <define name="ST_EdnPos"> + <choice> + <!-- Endnotes Positioned at End of Section --> + <value>sectEnd</value> + <!-- Endnotes Positioned at End of Document --> + <value>docEnd</value> + </choice> + </define> + <define name="CT_EdnPos"> + <attribute name="val"> + <ref name="ST_EdnPos"/> + </attribute> + </define> + <define name="CT_NumFmt"> + <attribute name="format"> + <data type="string"/> + </attribute> + <attribute name="val"> + <ref name="ST_NumberFormat"/> + </attribute> + </define> + <define name="ST_RestartNumber"> + <choice> + <!-- Continue Numbering From Previous Section --> + <value>continuous</value> + <!-- Restart Numbering For Each Section --> + <value>eachSect</value> + <!-- Restart Numbering On Each Page --> + <value>eachPage</value> + </choice> + </define> + <define name="CT_NumRestart"> + <attribute name="val"> + <ref name="ST_RestartNumber"/> + </attribute> + </define> + <define name="CT_FtnEdnRef"> + <attribute name="customMarkFollows"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="id"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_FtnEdnSepRef"> + <attribute name="id"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_FtnEdn"> + <ref name="EG_BlockLevelElts"/> + <attribute name="type"> + <ref name="ST_FtnEdn"/> + </attribute> + <attribute name="id"> + <ref name="ST_DecimalNumber"/> + </attribute> + </define> + <define name="CT_CommentRef"> + <ref name="CT_Markup"/> + </define> + <define name="EG_FtnEdnNumProps"> + <element name="numStart"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="numRestart"> + <ref name="CT_NumRestart"/> + </element> + </define> + <define name="CT_FtnProps"> + <element name="pos"> + <ref name="CT_FtnPos"/> + </element> + <element name="numFmt"> + <ref name="CT_NumFmt"/> + </element> + <ref name="EG_FtnEdnNumProps"/> + </define> + <define name="CT_EdnProps"> + <element name="pos"> + <ref name="CT_EdnPos"/> + </element> + <element name="numFmt"> + <ref name="CT_NumFmt"/> + </element> + <ref name="EG_FtnEdnNumProps"/> + </define> + <define name="CT_FtnDocProps"> + <ref name="CT_FtnProps"/> + <element name="footnote"> + <ref name="CT_FtnEdnSepRef"/> + </element> + </define> + <define name="CT_EdnDocProps"> + <ref name="CT_EdnProps"/> + <element name="endnote"> + <ref name="CT_FtnEdnSepRef"/> + </element> + </define> + <define name="CT_RecipientData"> + <element name="active"> + <ref name="CT_OnOff"/> + </element> + <element name="column"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="uniqueTag"> + <data type="base64Binary"/> + </element> + </define> + <define name="CT_Recipients"> + <element name="recipientData"> + <ref name="CT_RecipientData"/> + </element> + </define> + <define name="recipients"> + <element name="recipients"> + <ref name="CT_Recipients"/> + </element> + </define> + <define name="CT_OdsoFieldMapData"> + <element name="type"> + <ref name="CT_MailMergeOdsoFMDFieldType"/> + </element> + <element name="name"> + <ref name="CT_String"/> + </element> + <element name="mappedName"> + <ref name="CT_String"/> + </element> + <element name="column"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="lid"> + <ref name="CT_Lang"/> + </element> + <element name="dynamicAddress"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_MailMergeSourceType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Odso"> + <element name="udl"> + <ref name="CT_String"/> + </element> + <element name="table"> + <ref name="CT_String"/> + </element> + <element name="src"> + <ref name="CT_Rel"/> + </element> + <element name="colDelim"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="type"> + <ref name="CT_MailMergeSourceType"/> + </element> + <element name="fHdr"> + <ref name="CT_OnOff"/> + </element> + <element name="fieldMapData"> + <ref name="CT_OdsoFieldMapData"/> + </element> + <element name="recipientData"> + <ref name="CT_Rel"/> + </element> + </define> + <define name="CT_MailMerge"> + <element name="mainDocumentType"> + <ref name="CT_MailMergeDocType"/> + </element> + <element name="linkToQuery"> + <ref name="CT_OnOff"/> + </element> + <element name="dataType"> + <ref name="CT_MailMergeDataType"/> + </element> + <element name="connectString"> + <ref name="CT_String"/> + </element> + <element name="query"> + <ref name="CT_String"/> + </element> + <element name="dataSource"> + <ref name="CT_Rel"/> + </element> + <element name="headerSource"> + <ref name="CT_Rel"/> + </element> + <element name="doNotSuppressBlankLines"> + <ref name="CT_OnOff"/> + </element> + <element name="destination"> + <ref name="CT_MailMergeDest"/> + </element> + <element name="addressFieldName"> + <ref name="CT_String"/> + </element> + <element name="mailSubject"> + <ref name="CT_String"/> + </element> + <element name="mailAsAttachment"> + <ref name="CT_OnOff"/> + </element> + <element name="viewMergedData"> + <ref name="CT_OnOff"/> + </element> + <element name="activeRecord"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="checkErrors"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="odso"> + <ref name="CT_Odso"/> + </element> + </define> + <define name="CT_TargetScreenSz"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Compat"> + <element name="useSingleBorderforContiguousCells"> + <ref name="CT_OnOff"/> + </element> + <element name="wpJustification"> + <ref name="CT_OnOff"/> + </element> + <element name="noTabHangInd"> + <ref name="CT_OnOff"/> + </element> + <element name="noLeading"> + <ref name="CT_OnOff"/> + </element> + <element name="spaceForUL"> + <ref name="CT_OnOff"/> + </element> + <element name="noColumnBalance"> + <ref name="CT_OnOff"/> + </element> + <element name="balanceSingleByteDoubleByteWidth"> + <ref name="CT_OnOff"/> + </element> + <element name="noExtraLineSpacing"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotLeaveBackslashAlone"> + <ref name="CT_OnOff"/> + </element> + <element name="ulTrailSpace"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotExpandShiftReturn"> + <ref name="CT_OnOff"/> + </element> + <element name="spacingInWholePoints"> + <ref name="CT_OnOff"/> + </element> + <element name="lineWrapLikeWord6"> + <ref name="CT_OnOff"/> + </element> + <element name="printBodyTextBeforeHeader"> + <ref name="CT_OnOff"/> + </element> + <element name="printColBlack"> + <ref name="CT_OnOff"/> + </element> + <element name="wpSpaceWidth"> + <ref name="CT_OnOff"/> + </element> + <element name="showBreaksInFrames"> + <ref name="CT_OnOff"/> + </element> + <element name="subFontBySize"> + <ref name="CT_OnOff"/> + </element> + <element name="suppressBottomSpacing"> + <ref name="CT_OnOff"/> + </element> + <element name="suppressTopSpacing"> + <ref name="CT_OnOff"/> + </element> + <element name="suppressSpacingAtTopOfPage"> + <ref name="CT_OnOff"/> + </element> + <element name="suppressTopSpacingWP"> + <ref name="CT_OnOff"/> + </element> + <element name="suppressSpBfAfterPgBrk"> + <ref name="CT_OnOff"/> + </element> + <element name="swapBordersFacingPages"> + <ref name="CT_OnOff"/> + </element> + <element name="convMailMergeEsc"> + <ref name="CT_OnOff"/> + </element> + <element name="truncateFontHeightsLikeWP6"> + <ref name="CT_OnOff"/> + </element> + <element name="mwSmallCaps"> + <ref name="CT_OnOff"/> + </element> + <element name="usePrinterMetrics"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotSuppressParagraphBorders"> + <ref name="CT_OnOff"/> + </element> + <element name="wrapTrailSpaces"> + <ref name="CT_OnOff"/> + </element> + <element name="footnoteLayoutLikeWW8"> + <ref name="CT_OnOff"/> + </element> + <element name="shapeLayoutLikeWW8"> + <ref name="CT_OnOff"/> + </element> + <element name="alignTablesRowByRow"> + <ref name="CT_OnOff"/> + </element> + <element name="forgetLastTabAlignment"> + <ref name="CT_OnOff"/> + </element> + <element name="adjustLineHeightInTable"> + <ref name="CT_OnOff"/> + </element> + <element name="autoSpaceLikeWord95"> + <ref name="CT_OnOff"/> + </element> + <element name="noSpaceRaiseLower"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotUseHTMLParagraphAutoSpacing"> + <ref name="CT_OnOff"/> + </element> + <element name="layoutRawTableWidth"> + <ref name="CT_OnOff"/> + </element> + <element name="layoutTableRowsApart"> + <ref name="CT_OnOff"/> + </element> + <element name="useWord97LineBreakRules"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotBreakWrappedTables"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotSnapToGridInCell"> + <ref name="CT_OnOff"/> + </element> + <element name="selectFldWithFirstOrLastChar"> + <ref name="CT_OnOff"/> + </element> + <element name="applyBreakingRules"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotWrapTextWithPunct"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotUseEastAsianBreakRules"> + <ref name="CT_OnOff"/> + </element> + <element name="useWord2002TableStyleRules"> + <ref name="CT_OnOff"/> + </element> + <element name="growAutofit"> + <ref name="CT_OnOff"/> + </element> + <element name="useFELayout"> + <ref name="CT_OnOff"/> + </element> + <element name="useNormalStyleForList"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotUseIndentAsNumberingTabStop"> + <ref name="CT_OnOff"/> + </element> + <element name="useAltKinsokuLineBreakRules"> + <ref name="CT_OnOff"/> + </element> + <element name="allowSpaceOfSameStyleInTable"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotSuppressIndentation"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotAutofitConstrainedTables"> + <ref name="CT_OnOff"/> + </element> + <element name="autofitToFirstFixedWidthCell"> + <ref name="CT_OnOff"/> + </element> + <element name="underlineTabInNumList"> + <ref name="CT_OnOff"/> + </element> + <element name="displayHangulFixedWidth"> + <ref name="CT_OnOff"/> + </element> + <element name="splitPgBreakAndParaMark"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotVertAlignCellWithSp"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotBreakConstrainedForcedTable"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotVertAlignInTxbx"> + <ref name="CT_OnOff"/> + </element> + <element name="useAnsiKerningPairs"> + <ref name="CT_OnOff"/> + </element> + <element name="cachedColBalance"> + <ref name="CT_OnOff"/> + </element> + <element name="compatSetting"> + <ref name="CT_CompatSetting"/> + </element> + </define> + <define name="CT_CompatSetting"> + <attribute name="name"> + <ref name="ST_String"/> + </attribute> + <attribute name="uri"> + <ref name="ST_String"/> + </attribute> + <attribute name="val"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_DocVar"> + <attribute name="name"> + <data type="string"/> + </attribute> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DocVars"> + <element name="docVar"> + <ref name="CT_DocVar"/> + </element> + </define> + <define name="CT_DocRsids"> + <element name="rsidRoot"> + <ref name="CT_LongHexNumber"/> + </element> + <element name="rsid"> + <ref name="CT_LongHexNumber"/> + </element> + </define> + <define name="CT_CharacterSpacing"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_SaveThroughXslt"> + <attribute name="r:id"> + <ref name="ST_String"/> + </attribute> + <attribute name="solutionID"> + <data type="string"/> + </attribute> + </define> + <define name="CT_RPrDefault"> + <element name="rPr"> + <ref name="CT_RPr"/> + </element> + </define> + <define name="CT_PPrDefault"> + <element name="pPr"> + <ref name="CT_PPr"/> + </element> + </define> + <define name="CT_DocDefaults"> + <element name="rPrDefault"> + <ref name="CT_RPrDefault"/> + </element> + <element name="pPrDefault"> + <ref name="CT_PPrDefault"/> + </element> + </define> + <define name="ST_ColorSchemeIndex"> + <choice> + <!-- Dark 1 Theme Color Reference --> + <value>dark1</value> + <!-- Light 1 Theme Color Reference --> + <value>light1</value> + <!-- Dark 2 Theme Color Reference --> + <value>dark2</value> + <!-- Light 2 Theme Color Reference --> + <value>light2</value> + <!-- Accent 1 Theme Color Reference --> + <value>accent1</value> + <!-- Accent 2 Theme Color Reference --> + <value>accent2</value> + <!-- Accent 3 Theme Color Reference --> + <value>accent3</value> + <!-- Accent4 Theme Color Reference --> + <value>accent4</value> + <!-- Accent5 Theme Color Reference --> + <value>accent5</value> + <!-- Accent 6 Theme Color Reference --> + <value>accent6</value> + <!-- Hyperlink Theme Color Reference --> + <value>hyperlink</value> + <!-- Followed Hyperlink Theme Color Reference --> + <value>followedHyperlink</value> + </choice> + </define> + <define name="CT_ColorSchemeMapping"> + <attribute name="bg1"> + <data type="string"/> + </attribute> + <attribute name="t1"> + <data type="string"/> + </attribute> + <attribute name="bg2"> + <data type="string"/> + </attribute> + <attribute name="t2"> + <data type="string"/> + </attribute> + <attribute name="accent1"> + <data type="string"/> + </attribute> + <attribute name="accent2"> + <data type="string"/> + </attribute> + <attribute name="accent3"> + <data type="string"/> + </attribute> + <attribute name="accent4"> + <data type="string"/> + </attribute> + <attribute name="accent5"> + <data type="string"/> + </attribute> + <attribute name="accent6"> + <data type="string"/> + </attribute> + <attribute name="hyperlink"> + <data type="string"/> + </attribute> + <attribute name="followedHyperlink"> + <data type="string"/> + </attribute> + </define> + <define name="CT_ReadingModeInkLockDown"> + <attribute name="actualPg"> + <data type="string"/> + </attribute> + <attribute name="w"> + <data type="string"/> + </attribute> + <attribute name="h"> + <data type="string"/> + </attribute> + <attribute name="fontSz"> + <data type="string"/> + </attribute> + </define> + <define name="CT_WriteProtection"> + <attribute name="recommended"> + <ref name="ST_OnOff"/> + </attribute> + <ref name="AG_Password"/> + </define> + <define name="CT_Settings"> + <element name="writeProtection"> + <ref name="CT_WriteProtection"/> + </element> + <element name="view"> + <ref name="CT_View"/> + </element> + <element name="zoom"> + <ref name="CT_Zoom"/> + </element> + <element name="linkStyles"> + <ref name="CT_OnOff"/> + </element> + <element name="removePersonalInformation"> + <ref name="CT_OnOff"/> + </element> + <element name="removeDateAndTime"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotDisplayPageBoundaries"> + <ref name="CT_OnOff"/> + </element> + <element name="displayBackgroundShape"> + <ref name="CT_OnOff"/> + </element> + <element name="printPostScriptOverText"> + <ref name="CT_OnOff"/> + </element> + <element name="printFractionalCharacterWidth"> + <ref name="CT_OnOff"/> + </element> + <element name="printFormsData"> + <ref name="CT_OnOff"/> + </element> + <element name="embedTrueTypeFonts"> + <ref name="CT_OnOff"/> + </element> + <element name="embedSystemFonts"> + <ref name="CT_OnOff"/> + </element> + <element name="saveSubsetFonts"> + <ref name="CT_OnOff"/> + </element> + <element name="saveFormsData"> + <ref name="CT_OnOff"/> + </element> + <element name="mirrorMargins"> + <ref name="CT_OnOff"/> + </element> + <element name="alignBordersAndEdges"> + <ref name="CT_OnOff"/> + </element> + <element name="bordersDoNotSurroundHeader"> + <ref name="CT_OnOff"/> + </element> + <element name="bordersDoNotSurroundFooter"> + <ref name="CT_OnOff"/> + </element> + <element name="gutterAtTop"> + <ref name="CT_OnOff"/> + </element> + <element name="hideSpellingErrors"> + <ref name="CT_OnOff"/> + </element> + <element name="hideGrammaticalErrors"> + <ref name="CT_OnOff"/> + </element> + <element name="activeWritingStyle"> + <ref name="CT_WritingStyle"/> + </element> + <element name="proofState"> + <ref name="CT_Proof"/> + </element> + <element name="formsDesign"> + <ref name="CT_OnOff"/> + </element> + <element name="attachedTemplate"> + <ref name="CT_Rel"/> + </element> + <element name="linkStyles"> + <ref name="CT_OnOff"/> + </element> + <element name="stylePaneFormatFilter"> + <ref name="CT_ShortHexNumber"/> + </element> + <element name="stylePaneSortMethod"> + <ref name="CT_ShortHexNumber"/> + </element> + <element name="documentType"> + <ref name="CT_DocType"/> + </element> + <element name="mailMerge"> + <ref name="CT_MailMerge"/> + </element> + <element name="revisionView"> + <ref name="CT_TrackChangesView"/> + </element> + <element name="trackRevisions"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotTrackMoves"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotTrackFormatting"> + <ref name="CT_OnOff"/> + </element> + <element name="documentProtection"> + <ref name="CT_DocProtect"/> + </element> + <element name="autoFormatOverride"> + <ref name="CT_OnOff"/> + </element> + <element name="styleLockTheme"> + <ref name="CT_OnOff"/> + </element> + <element name="styleLockQFSet"> + <ref name="CT_OnOff"/> + </element> + <element name="defaultTabStop"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="autoHyphenation"> + <ref name="CT_OnOff"/> + </element> + <element name="consecutiveHyphenLimit"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="hyphenationZone"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="doNotHyphenateCaps"> + <ref name="CT_OnOff"/> + </element> + <element name="showEnvelope"> + <ref name="CT_OnOff"/> + </element> + <element name="summaryLength"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="clickAndTypeStyle"> + <ref name="CT_String"/> + </element> + <element name="defaultTableStyle"> + <ref name="CT_String"/> + </element> + <element name="evenAndOddHeaders"> + <ref name="CT_OnOff"/> + </element> + <element name="bookFoldRevPrinting"> + <ref name="CT_OnOff"/> + </element> + <element name="bookFoldPrinting"> + <ref name="CT_OnOff"/> + </element> + <element name="bookFoldPrintingSheets"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="drawingGridHorizontalSpacing"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="drawingGridVerticalSpacing"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="displayHorizontalDrawingGridEvery"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="displayVerticalDrawingGridEvery"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="doNotUseMarginsForDrawingGridOrigin"> + <ref name="CT_OnOff"/> + </element> + <element name="drawingGridHorizontalOrigin"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="drawingGridVerticalOrigin"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="doNotShadeFormData"> + <ref name="CT_OnOff"/> + </element> + <element name="noPunctuationKerning"> + <ref name="CT_OnOff"/> + </element> + <element name="characterSpacingControl"> + <ref name="CT_CharacterSpacing"/> + </element> + <element name="printTwoOnOne"> + <ref name="CT_OnOff"/> + </element> + <element name="strictFirstAndLastChars"> + <ref name="CT_OnOff"/> + </element> + <element name="noLineBreaksAfter"> + <ref name="CT_Kinsoku"/> + </element> + <element name="noLineBreaksBefore"> + <ref name="CT_Kinsoku"/> + </element> + <element name="savePreviewPicture"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotValidateAgainstSchema"> + <ref name="CT_OnOff"/> + </element> + <element name="saveInvalidXml"> + <ref name="CT_OnOff"/> + </element> + <element name="ignoreMixedContent"> + <ref name="CT_OnOff"/> + </element> + <element name="alwaysShowPlaceholderText"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotDemarcateInvalidXml"> + <ref name="CT_OnOff"/> + </element> + <element name="saveXmlDataOnly"> + <ref name="CT_OnOff"/> + </element> + <element name="useXSLTWhenSaving"> + <ref name="CT_OnOff"/> + </element> + <element name="saveThroughXslt"> + <ref name="CT_SaveThroughXslt"/> + </element> + <element name="showXMLTags"> + <ref name="CT_OnOff"/> + </element> + <element name="alwaysMergeEmptyNamespace"> + <ref name="CT_OnOff"/> + </element> + <element name="updateFields"> + <ref name="CT_OnOff"/> + </element> + <element name="hdrShapeDefaults"> + <ref name="CT_ShapeDefaults"/> + </element> + <element name="footnotePr"> + <ref name="CT_FtnDocProps"/> + </element> + <element name="endnotePr"> + <ref name="CT_EdnDocProps"/> + </element> + <element name="compat"> + <ref name="CT_Compat"/> + </element> + <element name="docVars"> + <ref name="CT_DocVars"/> + </element> + <element name="rsids"> + <ref name="CT_DocRsids"/> + </element> + <ref name="mathPr"/> + <element name="uiCompat97To2003"> + <ref name="CT_OnOff"/> + </element> + <element name="attachedSchema"> + <ref name="CT_String"/> + </element> + <element name="themeFontLang"> + <ref name="CT_Language"/> + </element> + <element name="clrSchemeMapping"> + <ref name="CT_ColorSchemeMapping"/> + </element> + <element name="doNotIncludeSubdocsInStats"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotAutoCompressPictures"> + <ref name="CT_OnOff"/> + </element> + <element name="forceUpgrade"> + <ref name="CT_Empty"/> + </element> + <element name="captions"> + <ref name="CT_Captions"/> + </element> + <element name="readModeInkLockDown"> + <ref name="CT_ReadingModeInkLockDown"/> + </element> + <element name="smartTagType"> + <ref name="CT_SmartTagType"/> + </element> + <ref name="schemaLibrary"/> + <element name="shapeDefaults"> + <ref name="CT_ShapeDefaults"/> + </element> + <element name="doNotEmbedSmartTags"> + <ref name="CT_OnOff"/> + </element> + <element name="decimalSymbol"> + <ref name="CT_String"/> + </element> + <element name="listSeparator"> + <ref name="CT_String"/> + </element> + </define> + <define name="CT_WebSettings"> + <element name="frameset"> + <ref name="CT_Frameset"/> + </element> + <element name="divs"> + <ref name="CT_Divs"/> + </element> + <element name="encoding"> + <ref name="CT_String"/> + </element> + <element name="optimizeForBrowser"> + <ref name="CT_OnOff"/> + </element> + <element name="relyOnVML"> + <ref name="CT_OnOff"/> + </element> + <element name="allowPNG"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotRelyOnCSS"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotSaveAsSingleFile"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotOrganizeInFolder"> + <ref name="CT_OnOff"/> + </element> + <element name="doNotUseLongFileNames"> + <ref name="CT_OnOff"/> + </element> + <element name="pixelsPerInch"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="targetScreenSz"> + <ref name="CT_TargetScreenSz"/> + </element> + <element name="saveSmartTagsAsXml"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_FrameScrollbar"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Frame"> + <element name="sz"> + <ref name="CT_String"/> + </element> + <element name="name"> + <ref name="CT_String"/> + </element> + <element name="sourceFileName"> + <ref name="CT_Rel"/> + </element> + <element name="marW"> + <ref name="CT_PixelsMeasure"/> + </element> + <element name="marH"> + <ref name="CT_PixelsMeasure"/> + </element> + <element name="scrollbar"> + <ref name="CT_FrameScrollbar"/> + </element> + <element name="noResizeAllowed"> + <ref name="CT_OnOff"/> + </element> + <element name="linkedToFile"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_FrameLayout"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FramesetSplitbar"> + <element name="w"> + <ref name="CT_TwipsMeasure"/> + </element> + <element name="color"> + <ref name="CT_Color"/> + </element> + <element name="noBorder"> + <ref name="CT_OnOff"/> + </element> + <element name="flatBorders"> + <ref name="CT_OnOff"/> + </element> + </define> + <define name="CT_Frameset"> + <element name="sz"> + <ref name="CT_String"/> + </element> + <element name="framesetSplitbar"> + <ref name="CT_FramesetSplitbar"/> + </element> + <element name="frameLayout"> + <ref name="CT_FrameLayout"/> + </element> + <choice> + <element name="frameset"> + <ref name="CT_Frameset"/> + </element> + <element name="frame"> + <ref name="CT_Frame"/> + </element> + </choice> + </define> + <define name="CT_NumPicBullet"> + <element name="pict"> + <ref name="CT_Picture"/> + </element> + <attribute name="numPicBulletId"> + <data type="string"/> + </attribute> + </define> + <define name="CT_LevelSuffix"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_LevelText"> + <attribute name="val"> + <data type="string"/> + </attribute> + <attribute name="null"> + <data type="string"/> + </attribute> + </define> + <define name="CT_LvlLegacy"> + <attribute name="legacy"> + <data type="string"/> + </attribute> + <attribute name="legacySpace"> + <data type="string"/> + </attribute> + <attribute name="legacyIndent"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Lvl"> + <element name="start"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="numFmt"> + <ref name="CT_NumFmt"/> + </element> + <element name="lvlRestart"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="pStyle"> + <ref name="CT_String"/> + </element> + <element name="isLgl"> + <ref name="CT_OnOff"/> + </element> + <element name="suff"> + <ref name="CT_LevelSuffix"/> + </element> + <element name="lvlText"> + <ref name="CT_LevelText"/> + </element> + <element name="lvlPicBulletId"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="legacy"> + <ref name="CT_LvlLegacy"/> + </element> + <element name="lvlJc"> + <ref name="CT_Jc"/> + </element> + <element name="pPr"> + <ref name="CT_PPr"/> + </element> + <element name="rPr"> + <ref name="CT_RPr"/> + </element> + <attribute name="ilvl"> + <data type="string"/> + </attribute> + <attribute name="tplc"> + <data type="string"/> + </attribute> + <attribute name="tentative"> + <data type="string"/> + </attribute> + </define> + <define name="ST_MultiLevelType"> + <choice> + <!-- Single Level Numbering Definition --> + <value>singleLevel</value> + <!-- Multilevel Numbering Definition --> + <value>multilevel</value> + <!-- Hybrid Multilevel Numbering Definition --> + <value>hybridMultilevel</value> + </choice> + </define> + <define name="CT_MultiLevelType"> + <attribute name="val"> + <ref name="ST_MultiLevelType"/> + </attribute> + </define> + <define name="CT_AbstractNum"> + <element name="nsid"> + <ref name="CT_LongHexNumber"/> + </element> + <element name="multiLevelType"> + <ref name="CT_MultiLevelType"/> + </element> + <element name="tmpl"> + <ref name="CT_LongHexNumber"/> + </element> + <element name="name"> + <ref name="CT_String"/> + </element> + <element name="styleLink"> + <ref name="CT_String"/> + </element> + <element name="numStyleLink"> + <ref name="CT_String"/> + </element> + <element name="lvl"> + <ref name="CT_Lvl"/> + </element> + <attribute name="abstractNumId"> + <data type="string"/> + </attribute> + </define> + <define name="CT_NumLvl"> + <element name="startOverride"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="lvl"> + <ref name="CT_Lvl"/> + </element> + <attribute name="ilvl"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Num"> + <element name="abstractNumId"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="lvlOverride"> + <ref name="CT_NumLvl"/> + </element> + <attribute name="numId"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Numbering"> + <element name="numPicBullet"> + <ref name="CT_NumPicBullet"/> + </element> + <element name="abstractNum"> + <ref name="CT_AbstractNum"/> + </element> + <element name="num"> + <ref name="CT_Num"/> + </element> + <element name="numIdMacAtCleanup"> + <ref name="CT_DecimalNumber"/> + </element> + </define> + <define name="ST_TblStyleOverrideType"> + <choice> + <!-- Whole table formatting --> + <value>wholeTable</value> + <!-- First Row Conditional Formatting --> + <value>firstRow</value> + <!-- Last table row formatting --> + <value>lastRow</value> + <!-- First Column Conditional Formatting --> + <value>firstCol</value> + <!-- Last table column formatting --> + <value>lastCol</value> + <!-- Banded Column Conditional Formatting --> + <value>band1Vert</value> + <!-- Even Column Stripe Conditional Formatting --> + <value>band2Vert</value> + <!-- Banded Row Conditional Formatting --> + <value>band1Horz</value> + <!-- Even Row Stripe Conditional Formatting --> + <value>band2Horz</value> + <!-- Top right table cell formatting --> + <value>neCell</value> + <!-- Top left table cell formatting --> + <value>nwCell</value> + <!-- Bottom right table cell formatting --> + <value>seCell</value> + <!-- Bottom left table cell formatting --> + <value>swCell</value> + </choice> + </define> + <define name="CT_Style_tblStylePr"> + <element name="pPr"> + <ref name="CT_PPrBase"/> + </element> + <element name="rPr"> + <ref name="EG_RPrBase"/> + </element> + <element name="tblPr"> + <ref name="CT_TblPrBase"/> + </element> + <element name="trPr"> + <ref name="CT_TrPrBase"/> + </element> + <element name="tcPr"> + <ref name="CT_TcPrBase"/> + </element> + <attribute name="type"> + <ref name="ST_TblStyleOverrideType"/> + </attribute> + </define> + <define name="CT_Style_TblPr"> + <ref name="CT_TblPrBase"/> + </define> + <define name="CT_Style_TrPr"> + <ref name="CT_TrPrBase"/> + </define> + <define name="CT_Style_TcPr"> + <ref name="CT_TcPrBase"/> + </define> + <define name="ST_StyleType"> + <choice> + <!-- Paragraph Style --> + <value>paragraph</value> + <!-- Character Style --> + <value>character</value> + <!-- Table Style --> + <value>table</value> + <!-- Numbering Style --> + <value>numbering</value> + </choice> + </define> + <define name="CT_Style"> + <element name="name"> + <ref name="CT_String"/> + </element> + <element name="aliases"> + <ref name="CT_String"/> + </element> + <element name="basedOn"> + <ref name="CT_String"/> + </element> + <element name="next"> + <ref name="CT_String"/> + </element> + <element name="link"> + <ref name="CT_String"/> + </element> + <element name="autoRedefine"> + <ref name="CT_OnOff"/> + </element> + <element name="hidden"> + <ref name="CT_OnOff"/> + </element> + <element name="uiPriority"> + <ref name="CT_DecimalNumber"/> + </element> + <element name="semiHidden"> + <ref name="CT_OnOff"/> + </element> + <element name="unhideWhenUsed"> + <ref name="CT_OnOff"/> + </element> + <element name="qFormat"> + <ref name="CT_OnOff"/> + </element> + <element name="locked"> + <ref name="CT_OnOff"/> + </element> + <element name="personal"> + <ref name="CT_OnOff"/> + </element> + <element name="personalCompose"> + <ref name="CT_OnOff"/> + </element> + <element name="personalReply"> + <ref name="CT_OnOff"/> + </element> + <element name="rsid"> + <ref name="CT_LongHexNumber"/> + </element> + <element name="pPr"> + <ref name="CT_PPrBase"/> + </element> + <element name="rPr"> + <ref name="EG_RPrBase"/> + </element> + <element name="tblPr"> + <ref name="CT_TblPrBase"/> + </element> + <element name="trPr"> + <ref name="CT_TrPrBase"/> + </element> + <element name="tcPr"> + <ref name="CT_TcPrBase"/> + </element> + <element name="tblStylePr"> + <ref name="CT_Style_tblStylePr"/> + </element> + <attribute name="type"> + <ref name="ST_StyleType"/> + </attribute> + <attribute name="styleId"> + <ref name="ST_String"/> + </attribute> + <attribute name="default"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="customStyle"> + <ref name="ST_OnOff"/> + </attribute> + </define> + <define name="CT_LsdException"> + <attribute name="name"> + <data type="string"/> + </attribute> + <attribute name="locked"> + <data type="string"/> + </attribute> + <attribute name="uiPriority"> + <data type="string"/> + </attribute> + <attribute name="semiHidden"> + <data type="string"/> + </attribute> + <attribute name="unhideWhenUsed"> + <data type="string"/> + </attribute> + <attribute name="qFormat"> + <data type="string"/> + </attribute> + </define> + <define name="CT_LatentStyles"> + <element name="lsdException"> + <ref name="CT_LsdException"/> + </element> + <attribute name="defLockedState"> + <data type="string"/> + </attribute> + <attribute name="defUIPriority"> + <data type="string"/> + </attribute> + <attribute name="defSemiHidden"> + <data type="string"/> + </attribute> + <attribute name="defUnhideWhenUsed"> + <data type="string"/> + </attribute> + <attribute name="defQFormat"> + <data type="string"/> + </attribute> + <attribute name="count"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Styles"> + <element name="docDefaults"> + <ref name="CT_DocDefaults"/> + </element> + <element name="latentStyles"> + <ref name="CT_LatentStyles"/> + </element> + <element name="style"> + <ref name="CT_Style"/> + </element> + </define> + <define name="ST_Panose"> + <data type="hexBinary"/> + </define> + <define name="CT_Panose"> + <attribute name="val"> + <ref name="ST_Panose"/> + </attribute> + </define> + <define name="ST_FontFamily"> + <choice> + <!-- Novelty Font --> + <value>decorative</value> + <!-- Monospace Font --> + <value>modern</value> + <!-- Proportional Font With Serifs --> + <value>roman</value> + <!-- Script Font --> + <value>script</value> + <!-- Proportional Font Without Serifs --> + <value>swiss</value> + <!-- No Font Family --> + <value>auto</value> + </choice> + </define> + <define name="CT_FontFamily"> + <attribute name="val"> + <ref name="ST_FontFamily"/> + </attribute> + </define> + <define name="ST_Pitch"> + <choice> + <!-- Fixed Width --> + <value>fixed</value> + <!-- Proportional Width --> + <value>variable</value> + <!-- Default --> + <value>default</value> + </choice> + </define> + <define name="CT_Pitch"> + <attribute name="val"> + <ref name="ST_Pitch"/> + </attribute> + </define> + <define name="CT_FontSig"> + <attribute name="usb0"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="usb1"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="usb2"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="usb3"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="csb0"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="csb1"> + <ref name="ST_UcharHexNumber"/> + </attribute> + </define> + <define name="CT_FontRel"> + <ref name="CT_Rel"/> + <attribute name="fontKey"> + <data type="string"/> + </attribute> + <attribute name="subsetted"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Font"> + <element name="altName"> + <ref name="CT_String"/> + </element> + <element name="panose1"> + <ref name="CT_Panose"/> + </element> + <element name="charset"> + <ref name="CT_Charset"/> + </element> + <element name="characterSet"> + <ref name="CT_String"/> + </element> + <element name="family"> + <ref name="CT_FontFamily"/> + </element> + <element name="notTrueType"> + <ref name="CT_OnOff"/> + </element> + <element name="pitch"> + <ref name="CT_Pitch"/> + </element> + <element name="sig"> + <ref name="CT_FontSig"/> + </element> + <element name="embedRegular"> + <ref name="CT_FontRel"/> + </element> + <element name="embedBold"> + <ref name="CT_FontRel"/> + </element> + <element name="embedItalic"> + <ref name="CT_FontRel"/> + </element> + <element name="embedBoldItalic"> + <ref name="CT_FontRel"/> + </element> + <attribute name="name"> + <data type="string"/> + </attribute> + </define> + <define name="CT_FontsList"> + <element name="font"> + <ref name="CT_Font"/> + </element> + </define> + <define name="CT_Charset"> + <attribute name="val"> + <ref name="ST_UcharHexNumber"/> + </attribute> + <attribute name="characterSet"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_DivBdr"> + <element name="top"> + <ref name="CT_Border"/> + </element> + <element name="left"> + <ref name="CT_Border"/> + </element> + <element name="bottom"> + <ref name="CT_Border"/> + </element> + <element name="right"> + <ref name="CT_Border"/> + </element> + </define> + <define name="CT_Div"> + <element name="blockQuote"> + <ref name="CT_OnOff"/> + </element> + <element name="bodyDiv"> + <ref name="CT_OnOff"/> + </element> + <element name="marLeft"> + <ref name="CT_SignedTwipsMeasure"/> + </element> + <element name="marRight"> + <ref name="CT_SignedTwipsMeasure"/> + </element> + <element name="marTop"> + <ref name="CT_SignedTwipsMeasure"/> + </element> + <element name="marBottom"> + <ref name="CT_SignedTwipsMeasure"/> + </element> + <element name="divBdr"> + <ref name="CT_DivBdr"/> + </element> + <element name="divsChild"> + <ref name="CT_Divs"/> + </element> + <attribute name="id"> + <data type="string"/> + </attribute> + </define> + <define name="CT_Divs"> + <element name="div"> + <ref name="CT_Div"/> + </element> + </define> + <define name="CT_TxbxContent"> + <ref name="EG_BlockLevelElts"/> + </define> + <define name="txbxContent"> + <element name="txbxContent"> + <ref name="CT_TxbxContent"/> + </element> + </define> + <define name="EG_MathContent"> + <choice> + <ref name="oMathPara"/> + <ref name="oMath"/> + </choice> + </define> + <define name="EG_BlockLevelChunkElts"> + <ref name="EG_ContentBlockContent"/> + </define> + <define name="EG_BlockLevelElts"> + <choice> + <ref name="EG_BlockLevelChunkElts"/> + <element name="altChunk"> + <ref name="CT_AltChunk"/> + </element> + </choice> + </define> + <define name="EG_RunLevelElts"> + <choice> + <element name="proofErr"> + <ref name="CT_ProofErr"/> + </element> + <ref name="EG_RangeMarkupElements"/> + <element name="ins"> + <ref name="CT_RunTrackChange"/> + </element> + <element name="del"> + <ref name="CT_RunTrackChange"/> + </element> + <element name="moveFrom"> + <ref name="CT_RunTrackChange"/> + </element> + <element name="moveTo"> + <ref name="CT_RunTrackChange"/> + </element> + <ref name="EG_MathContent"/> + </choice> + </define> + <define name="CT_Body"> + <ref name="EG_BlockLevelElts"/> + <element name="sectPr"> + <ref name="CT_finalSectPr"/> + </element> + </define> + <define name="CT_ShapeDefaults"> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + </define> + <define name="CT_Comments"> + <element name="comment"> + <ref name="CT_Comment"/> + </element> + </define> + <define name="comments"> + <element name="comments"> + <ref name="CT_Comments"/> + </element> + </define> + <define name="CT_Footnotes"> + <element name="footnote"> + <ref name="CT_FtnEdn"/> + </element> + </define> + <define name="footnotes"> + <element name="footnotes"> + <ref name="CT_Footnotes"/> + </element> + </define> + <define name="CT_Endnotes"> + <element name="endnote"> + <ref name="CT_FtnEdn"/> + </element> + </define> + <define name="endnotes"> + <element name="endnotes"> + <ref name="CT_Endnotes"/> + </element> + </define> + <define name="hdr"> + <element name="hdr"> + <ref name="CT_HdrFtr"/> + </element> + </define> + <define name="ftr"> + <element name="ftr"> + <ref name="CT_HdrFtr"/> + </element> + </define> + <define name="CT_SmartTagType"> + <attribute name="namespaceuri"> + <data type="string"/> + </attribute> + <attribute name="name"> + <data type="string"/> + </attribute> + <attribute name="url"> + <data type="string"/> + </attribute> + </define> + <define name="ST_ThemeColor"> + <choice> + <!-- Dark 1 Theme Color --> + <value>dark1</value> + <!-- Light 1 Theme Color --> + <value>light1</value> + <!-- Dark 2 Theme Color --> + <value>dark2</value> + <!-- Light 2 Theme Color --> + <value>light2</value> + <!-- Accent 1 Theme Color --> + <value>accent1</value> + <!-- Accent 2 Theme Color --> + <value>accent2</value> + <!-- Accent 3 Theme Color --> + <value>accent3</value> + <!-- Accent 4 Theme Color --> + <value>accent4</value> + <!-- Accent 5 Theme Color --> + <value>accent5</value> + <!-- Accent 6 Theme Color --> + <value>accent6</value> + <!-- Hyperlink Theme Color --> + <value>hyperlink</value> + <!-- Followed Hyperlink Theme Color --> + <value>followedHyperlink</value> + <!-- No Theme Color --> + <value>none</value> + <!-- Background 1 Theme Color --> + <value>background1</value> + <!-- Text 1 Theme Color --> + <value>text1</value> + <!-- Background 2 Theme Color --> + <value>background2</value> + <!-- Text 2 Theme Color --> + <value>text2</value> + </choice> + </define> + <define name="CT_DocPartBehavior"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DocPartBehaviors"> + <element name="behavior"> + <ref name="CT_DocPartBehavior"/> + </element> + </define> + <define name="CT_DocPartType"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DocPartTypes"> + <element name="type"> + <ref name="CT_DocPartType"/> + </element> + <attribute name="all"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DocPartGallery"> + <attribute name="val"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DocPartCategory"> + <element name="name"> + <ref name="CT_String"/> + </element> + <element name="gallery"> + <ref name="CT_DocPartGallery"/> + </element> + </define> + <define name="CT_DocPartName"> + <attribute name="val"> + <data type="string"/> + </attribute> + <attribute name="decorated"> + <data type="string"/> + </attribute> + </define> + <define name="CT_DocPartPr"> + <choice> + <element name="name"> + <ref name="CT_DocPartName"/> + </element> + <element name="style"> + <ref name="CT_String"/> + </element> + <element name="category"> + <ref name="CT_DocPartCategory"/> + </element> + <element name="types"> + <ref name="CT_DocPartTypes"/> + </element> + <element name="behaviors"> + <ref name="CT_DocPartBehaviors"/> + </element> + <element name="description"> + <ref name="CT_String"/> + </element> + <element name="guid"> + <ref name="CT_Guid"/> + </element> + </choice> + </define> + <define name="CT_DocPart"> + <element name="docPartPr"> + <ref name="CT_DocPartPr"/> + </element> + <element name="docPartBody"> + <ref name="CT_Body"/> + </element> + </define> + <define name="CT_DocParts"> + <element name="docPart"> + <ref name="CT_DocPart"/> + </element> + </define> + <define name="settings"> + <element name="settings"> + <ref name="CT_Settings"/> + </element> + </define> + <define name="webSettings"> + <element name="webSettings"> + <ref name="CT_WebSettings"/> + </element> + </define> + <define name="fonts"> + <element name="fonts"> + <ref name="CT_FontsList"/> + </element> + </define> + <define name="numbering"> + <element name="numbering"> + <ref name="CT_Numbering"/> + </element> + </define> + <define name="styles"> + <element name="styles"> + <ref name="CT_Styles"/> + </element> + </define> + <define name="ST_CaptionPos"> + <choice> + <!-- Position Caption Above Object --> + <value>above</value> + <!-- Position Caption Below Object --> + <value>below</value> + <!-- Position Caption Left Of Object --> + <value>left</value> + <!-- Position Caption Right Of Object --> + <value>right</value> + </choice> + </define> + <define name="CT_Caption"> + <attribute name="name"> + <ref name="ST_String"/> + </attribute> + <attribute name="pos"> + <ref name="ST_CaptionPos"/> + </attribute> + <attribute name="chapNum"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="heading"> + <ref name="ST_DecimalNumber"/> + </attribute> + <attribute name="noLabel"> + <ref name="ST_OnOff"/> + </attribute> + <attribute name="numFmt"> + <ref name="ST_NumberFormat"/> + </attribute> + <attribute name="sep"> + <ref name="ST_ChapterSep"/> + </attribute> + </define> + <define name="CT_AutoCaption"> + <attribute name="name"> + <ref name="ST_String"/> + </attribute> + <attribute name="caption"> + <ref name="ST_String"/> + </attribute> + </define> + <define name="CT_AutoCaptions"> + <element name="autoCaption"> + <ref name="CT_AutoCaption"/> + </element> + </define> + <define name="CT_Captions"> + <element name="caption"> + <ref name="CT_Caption"/> + </element> + <element name="autoCaptions"> + <ref name="CT_AutoCaptions"/> + </element> + </define> + <define name="CT_DocumentBase"> + <element name="background"> + <ref name="CT_Background"/> + </element> + </define> + <define name="CT_Document"> + <ref name="CT_DocumentBase"/> + <element name="body"> + <ref name="CT_Body"/> + </element> + </define> + <define name="CT_GlossaryDocument"> + <ref name="CT_DocumentBase"/> + <element name="docParts"> + <ref name="CT_DocParts"/> + </element> + </define> + <define name="document"> + <element name="document"> + <ref name="CT_Document"/> + </element> + </define> + <define name="glossaryDocument"> + <element name="glossaryDocument"> + <ref name="CT_GlossaryDocument"/> + </element> + </define> + <define name="BUILT_IN_ANY_TYPE"> + <choice> + <element> + <ref name="BUILT_IN_ANY_TYPE"/> + </element> + <data type="string"/> + </choice> + </define> + </grammar> + <resource name="CT_Empty" resource="Stream"> + <action name="end" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen" action="noBreakHyphen"/> + <action name="end" tokenid="ooxml:EG_RunInnerContent_softHyphen" action="softHyphen"/> + <action name="end" tokenid="ooxml:EG_RunInnerContent_cr" action="cr"/> + </resource> + <resource name="ST_OnOff" resource="Boolean"/> + <resource name="CT_OnOff" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/> + <action name="start" action="setDefaultBooleanValue"/> + </resource> + <resource name="ST_LongHexNumber" resource="Hex"/> + <resource name="CT_LongHexNumber" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_LongHexNumber_val" action="setValue"/> + <action name="start" action="setDefaultHexValue"/> + </resource> + <resource name="ST_ShortHexNumber" resource="Hex"/> + <resource name="CT_ShortHexNumber" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_ShortHexNumber_val" action="setValue"/> + <action name="start" action="setDefaultHexValue"/> + </resource> + <resource name="ST_UcharHexNumber" resource="Hex"/> + <resource name="CT_UcharHexNumber" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_UcharHexNumber_val" action="setValue"/> + <action name="start" action="setDefaultHexValue"/> + </resource> + <resource name="ST_DecimalNumber" resource="Integer"/> + <resource name="CT_DecimalNumber" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_DecimalNumber_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_UnsignedDecimalNumber" resource="Integer"/> +<!-- + Historically, LO has treated TwipsMeasure as signed, + i.e. that negative numbers are allowed and treated as negative, + so that is the default handling. +--> + <resource name="ST_TwipsMeasure" resource="TwipsMeasure_asSigned"/> + <resource name="ST_TwipsMeasure_asSigned" resource="TwipsMeasure_asSigned"/> + <resource name="ST_TwipsMeasure_asZero" resource="TwipsMeasure_asZero"/> + <resource name="CT_TwipsMeasure" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_SignedTwipsMeasure" resource="TwipsMeasure_asSigned"/> + <resource name="CT_SignedTwipsMeasure" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_SignedTwipsMeasure_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_PixelsMeasure" resource="Integer"/> + <resource name="CT_PixelsMeasure" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_PixelsMeasure_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_HpsMeasure" resource="HpsMeasure"/> + <resource name="CT_HpsMeasure" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_HpsMeasure_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_SignedHpsMeasure" resource="Integer"/> + <resource name="CT_SignedHpsMeasure" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_SignedHpsMeasure_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_MeasurementOrPercent" resource="MeasurementOrPercent"/> + <resource name="ST_DateTime" resource="String"/> + <resource name="CT_MacroName" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MacroName_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="ST_EighthPointMeasure" resource="Integer"/> + <resource name="ST_PointMeasure" resource="Integer"/> + <resource name="ST_String" resource="String"/> + <resource name="CT_String" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="ST_TextScale" resource="Integer"/> + <resource name="CT_TextScale" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TextScale_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="ST_HighlightColor" resource="List"> + <value tokenid="ooxml:Value_ST_HighlightColor_black">black</value> + <value tokenid="ooxml:Value_ST_HighlightColor_blue">blue</value> + <value tokenid="ooxml:Value_ST_HighlightColor_cyan">cyan</value> + <value tokenid="ooxml:Value_ST_HighlightColor_green">green</value> + <value tokenid="ooxml:Value_ST_HighlightColor_magenta">magenta</value> + <value tokenid="ooxml:Value_ST_HighlightColor_red">red</value> + <value tokenid="ooxml:Value_ST_HighlightColor_yellow">yellow</value> + <value tokenid="ooxml:Value_ST_HighlightColor_white">white</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkBlue">darkBlue</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkCyan">darkCyan</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkGreen">darkGreen</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkMagenta">darkMagenta</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkRed">darkRed</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkYellow">darkYellow</value> + <value tokenid="ooxml:Value_ST_HighlightColor_darkGray">darkGray</value> + <value tokenid="ooxml:Value_ST_HighlightColor_lightGray">lightGray</value> + <value tokenid="ooxml:Value_ST_HighlightColor_none">none</value> + </resource> + <resource name="CT_Highlight" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Highlight_val" action="setValue"/> + </resource> + <resource name="ST_HexColorAuto" resource="List"> + <value tokenid="ooxml:Value_ST_HexColorAuto_auto">auto</value> + </resource> + <resource name="ST_HexColorRGB" resource="Hex"/> + <resource name="ST_HexColor" resource="HexColor"/> + <resource name="CT_Color" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Color_val"/> + <attribute name="themeColor" tokenid="ooxml:CT_Color_themeColor"/> + <attribute name="themeTint" tokenid="ooxml:CT_Color_themeTint"/> + <attribute name="themeShade" tokenid="ooxml:CT_Color_themeShade"/> + </resource> + <resource name="ST_LangCode" resource="Hex"/> + <resource name="ST_Lang" resource="String"/> + <resource name="CT_Lang" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Lang_val" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="CT_Guid" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Guid_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="ST_Underline" resource="List"> + <value tokenid="ooxml:Value_ST_Underline_single">single</value> + <value tokenid="ooxml:Value_ST_Underline_words">words</value> + <value tokenid="ooxml:Value_ST_Underline_double">double</value> + <value tokenid="ooxml:Value_ST_Underline_thick">thick</value> + <value tokenid="ooxml:Value_ST_Underline_dotted">dotted</value> + <value tokenid="ooxml:Value_ST_Underline_dottedHeavy">dottedHeavy</value> + <value tokenid="ooxml:Value_ST_Underline_dash">dash</value> + <value tokenid="ooxml:Value_ST_Underline_dashedHeavy">dashedHeavy</value> + <value tokenid="ooxml:Value_ST_Underline_dashLong">dashLong</value> + <value tokenid="ooxml:Value_ST_Underline_dashLongHeavy">dashLongHeavy</value> + <value tokenid="ooxml:Value_ST_Underline_dotDash">dotDash</value> + <value tokenid="ooxml:Value_ST_Underline_dashDotHeavy">dashDotHeavy</value> + <value tokenid="ooxml:Value_ST_Underline_dotDotDash">dotDotDash</value> + <value tokenid="ooxml:Value_ST_Underline_dashDotDotHeavy">dashDotDotHeavy</value> + <value tokenid="ooxml:Value_ST_Underline_wave">wave</value> + <value tokenid="ooxml:Value_ST_Underline_wavyHeavy">wavyHeavy</value> + <value tokenid="ooxml:Value_ST_Underline_wavyDouble">wavyDouble</value> + <value tokenid="ooxml:Value_ST_Underline_none">none</value> + </resource> + <resource name="CT_Underline" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Underline_val"/> + <attribute name="color" tokenid="ooxml:CT_Underline_color"/> + <attribute name="themeColor" tokenid="ooxml:CT_Underline_themeColor"/> + <attribute name="themeTint" tokenid="ooxml:CT_Underline_themeTint"/> + <attribute name="themeShade" tokenid="ooxml:CT_Underline_themeShade"/> + </resource> + <resource name="ST_TextEffect" resource="List"> + <value tokenid="ooxml:Value_ST_TextEffect_none">none</value> + <value tokenid="ooxml:Value_ST_TextEffect_lights">lights</value> + <value tokenid="ooxml:Value_ST_TextEffect_blinkBackground">blinkBackground</value> + <value tokenid="ooxml:Value_ST_TextEffect_sparkle">sparkle</value> + <value tokenid="ooxml:Value_ST_TextEffect_antsBlack">antsBlack</value> + <value tokenid="ooxml:Value_ST_TextEffect_antsRed">antsRed</value> + <value tokenid="ooxml:Value_ST_TextEffect_shimmer">shimmer</value> + </resource> + <resource name="CT_TextEffect" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TextEffect_val" action="setValue"/> + </resource> + <resource name="ST_Border" resource="List"> + <value tokenid="ooxml:Value_ST_Border_nil">nil</value> + <value tokenid="ooxml:Value_ST_Border_none">none</value> + <value tokenid="ooxml:Value_ST_Border_single">single</value> + <value tokenid="ooxml:Value_ST_Border_thick">thick</value> + <value tokenid="ooxml:Value_ST_Border_double">double</value> + <value tokenid="ooxml:Value_ST_Border_dotted">dotted</value> + <value tokenid="ooxml:Value_ST_Border_dashed">dashed</value> + <value tokenid="ooxml:Value_ST_Border_dotDash">dotDash</value> + <value tokenid="ooxml:Value_ST_Border_dotDotDash">dotDotDash</value> + <value tokenid="ooxml:Value_ST_Border_triple">triple</value> + <value tokenid="ooxml:Value_ST_Border_thinThickSmallGap">thinThickSmallGap</value> + <value tokenid="ooxml:Value_ST_Border_thickThinSmallGap">thickThinSmallGap</value> + <value tokenid="ooxml:Value_ST_Border_thinThickThinSmallGap">thinThickThinSmallGap</value> + <value tokenid="ooxml:Value_ST_Border_thinThickMediumGap">thinThickMediumGap</value> + <value tokenid="ooxml:Value_ST_Border_thickThinMediumGap">thickThinMediumGap</value> + <value tokenid="ooxml:Value_ST_Border_thinThickThinMediumGap">thinThickThinMediumGap</value> + <value tokenid="ooxml:Value_ST_Border_thinThickLargeGap">thinThickLargeGap</value> + <value tokenid="ooxml:Value_ST_Border_thickThinLargeGap">thickThinLargeGap</value> + <value tokenid="ooxml:Value_ST_Border_thinThickThinLargeGap">thinThickThinLargeGap</value> + <value tokenid="ooxml:Value_ST_Border_wave">wave</value> + <value tokenid="ooxml:Value_ST_Border_doubleWave">doubleWave</value> + <value tokenid="ooxml:Value_ST_Border_dashSmallGap">dashSmallGap</value> + <value tokenid="ooxml:Value_ST_Border_dashDotStroked">dashDotStroked</value> + <value tokenid="ooxml:Value_ST_Border_threeDEmboss">threeDEmboss</value> + <value tokenid="ooxml:Value_ST_Border_threeDEngrave">threeDEngrave</value> + <value tokenid="ooxml:Value_ST_Border_outset">outset</value> + <value tokenid="ooxml:Value_ST_Border_inset">inset</value> + <value tokenid="ooxml:Value_ST_Border_apples">apples</value> + <value tokenid="ooxml:Value_ST_Border_archedScallops">archedScallops</value> + <value tokenid="ooxml:Value_ST_Border_babyPacifier">babyPacifier</value> + <value tokenid="ooxml:Value_ST_Border_babyRattle">babyRattle</value> + <value tokenid="ooxml:Value_ST_Border_balloons3Colors">balloons3Colors</value> + <value tokenid="ooxml:Value_ST_Border_balloonsHotAir">balloonsHotAir</value> + <value tokenid="ooxml:Value_ST_Border_basicBlackDashes">basicBlackDashes</value> + <value tokenid="ooxml:Value_ST_Border_basicBlackDots">basicBlackDots</value> + <value tokenid="ooxml:Value_ST_Border_basicBlackSquares">basicBlackSquares</value> + <value tokenid="ooxml:Value_ST_Border_basicThinLines">basicThinLines</value> + <value tokenid="ooxml:Value_ST_Border_basicWhiteDashes">basicWhiteDashes</value> + <value tokenid="ooxml:Value_ST_Border_basicWhiteDots">basicWhiteDots</value> + <value tokenid="ooxml:Value_ST_Border_basicWhiteSquares">basicWhiteSquares</value> + <value tokenid="ooxml:Value_ST_Border_basicWideInline">basicWideInline</value> + <value tokenid="ooxml:Value_ST_Border_basicWideMidline">basicWideMidline</value> + <value tokenid="ooxml:Value_ST_Border_basicWideOutline">basicWideOutline</value> + <value tokenid="ooxml:Value_ST_Border_bats">bats</value> + <value tokenid="ooxml:Value_ST_Border_birds">birds</value> + <value tokenid="ooxml:Value_ST_Border_birdsFlight">birdsFlight</value> + <value tokenid="ooxml:Value_ST_Border_cabins">cabins</value> + <value tokenid="ooxml:Value_ST_Border_cakeSlice">cakeSlice</value> + <value tokenid="ooxml:Value_ST_Border_candyCorn">candyCorn</value> + <value tokenid="ooxml:Value_ST_Border_celticKnotwork">celticKnotwork</value> + <value tokenid="ooxml:Value_ST_Border_certificateBanner">certificateBanner</value> + <value tokenid="ooxml:Value_ST_Border_chainLink">chainLink</value> + <value tokenid="ooxml:Value_ST_Border_champagneBottle">champagneBottle</value> + <value tokenid="ooxml:Value_ST_Border_checkedBarBlack">checkedBarBlack</value> + <value tokenid="ooxml:Value_ST_Border_checkedBarColor">checkedBarColor</value> + <value tokenid="ooxml:Value_ST_Border_checkered">checkered</value> + <value tokenid="ooxml:Value_ST_Border_christmasTree">christmasTree</value> + <value tokenid="ooxml:Value_ST_Border_circlesLines">circlesLines</value> + <value tokenid="ooxml:Value_ST_Border_circlesRectangles">circlesRectangles</value> + <value tokenid="ooxml:Value_ST_Border_classicalWave">classicalWave</value> + <value tokenid="ooxml:Value_ST_Border_clocks">clocks</value> + <value tokenid="ooxml:Value_ST_Border_compass">compass</value> + <value tokenid="ooxml:Value_ST_Border_confetti">confetti</value> + <value tokenid="ooxml:Value_ST_Border_confettiGrays">confettiGrays</value> + <value tokenid="ooxml:Value_ST_Border_confettiOutline">confettiOutline</value> + <value tokenid="ooxml:Value_ST_Border_confettiStreamers">confettiStreamers</value> + <value tokenid="ooxml:Value_ST_Border_confettiWhite">confettiWhite</value> + <value tokenid="ooxml:Value_ST_Border_cornerTriangles">cornerTriangles</value> + <value tokenid="ooxml:Value_ST_Border_couponCutoutDashes">couponCutoutDashes</value> + <value tokenid="ooxml:Value_ST_Border_couponCutoutDots">couponCutoutDots</value> + <value tokenid="ooxml:Value_ST_Border_crazyMaze">crazyMaze</value> + <value tokenid="ooxml:Value_ST_Border_creaturesButterfly">creaturesButterfly</value> + <value tokenid="ooxml:Value_ST_Border_creaturesFish">creaturesFish</value> + <value tokenid="ooxml:Value_ST_Border_creaturesInsects">creaturesInsects</value> + <value tokenid="ooxml:Value_ST_Border_creaturesLadyBug">creaturesLadyBug</value> + <value tokenid="ooxml:Value_ST_Border_crossStitch">crossStitch</value> + <value tokenid="ooxml:Value_ST_Border_cup">cup</value> + <value tokenid="ooxml:Value_ST_Border_decoArch">decoArch</value> + <value tokenid="ooxml:Value_ST_Border_decoArchColor">decoArchColor</value> + <value tokenid="ooxml:Value_ST_Border_decoBlocks">decoBlocks</value> + <value tokenid="ooxml:Value_ST_Border_diamondsGray">diamondsGray</value> + <value tokenid="ooxml:Value_ST_Border_doubleD">doubleD</value> + <value tokenid="ooxml:Value_ST_Border_doubleDiamonds">doubleDiamonds</value> + <value tokenid="ooxml:Value_ST_Border_earth1">earth1</value> + <value tokenid="ooxml:Value_ST_Border_earth2">earth2</value> + <value tokenid="ooxml:Value_ST_Border_eclipsingSquares1">eclipsingSquares1</value> + <value tokenid="ooxml:Value_ST_Border_eclipsingSquares2">eclipsingSquares2</value> + <value tokenid="ooxml:Value_ST_Border_eggsBlack">eggsBlack</value> + <value tokenid="ooxml:Value_ST_Border_fans">fans</value> + <value tokenid="ooxml:Value_ST_Border_film">film</value> + <value tokenid="ooxml:Value_ST_Border_firecrackers">firecrackers</value> + <value tokenid="ooxml:Value_ST_Border_flowersBlockPrint">flowersBlockPrint</value> + <value tokenid="ooxml:Value_ST_Border_flowersDaisies">flowersDaisies</value> + <value tokenid="ooxml:Value_ST_Border_flowersModern1">flowersModern1</value> + <value tokenid="ooxml:Value_ST_Border_flowersModern2">flowersModern2</value> + <value tokenid="ooxml:Value_ST_Border_flowersPansy">flowersPansy</value> + <value tokenid="ooxml:Value_ST_Border_flowersRedRose">flowersRedRose</value> + <value tokenid="ooxml:Value_ST_Border_flowersRoses">flowersRoses</value> + <value tokenid="ooxml:Value_ST_Border_flowersTeacup">flowersTeacup</value> + <value tokenid="ooxml:Value_ST_Border_flowersTiny">flowersTiny</value> + <value tokenid="ooxml:Value_ST_Border_gems">gems</value> + <value tokenid="ooxml:Value_ST_Border_gingerbreadMan">gingerbreadMan</value> + <value tokenid="ooxml:Value_ST_Border_gradient">gradient</value> + <value tokenid="ooxml:Value_ST_Border_handmade1">handmade1</value> + <value tokenid="ooxml:Value_ST_Border_handmade2">handmade2</value> + <value tokenid="ooxml:Value_ST_Border_heartBalloon">heartBalloon</value> + <value tokenid="ooxml:Value_ST_Border_heartGray">heartGray</value> + <value tokenid="ooxml:Value_ST_Border_hearts">hearts</value> + <value tokenid="ooxml:Value_ST_Border_heebieJeebies">heebieJeebies</value> + <value tokenid="ooxml:Value_ST_Border_holly">holly</value> + <value tokenid="ooxml:Value_ST_Border_houseFunky">houseFunky</value> + <value tokenid="ooxml:Value_ST_Border_hypnotic">hypnotic</value> + <value tokenid="ooxml:Value_ST_Border_iceCreamCones">iceCreamCones</value> + <value tokenid="ooxml:Value_ST_Border_lightBulb">lightBulb</value> + <value tokenid="ooxml:Value_ST_Border_lightning1">lightning1</value> + <value tokenid="ooxml:Value_ST_Border_lightning2">lightning2</value> + <value tokenid="ooxml:Value_ST_Border_mapPins">mapPins</value> + <value tokenid="ooxml:Value_ST_Border_mapleLeaf">mapleLeaf</value> + <value tokenid="ooxml:Value_ST_Border_mapleMuffins">mapleMuffins</value> + <value tokenid="ooxml:Value_ST_Border_marquee">marquee</value> + <value tokenid="ooxml:Value_ST_Border_marqueeToothed">marqueeToothed</value> + <value tokenid="ooxml:Value_ST_Border_moons">moons</value> + <value tokenid="ooxml:Value_ST_Border_mosaic">mosaic</value> + <value tokenid="ooxml:Value_ST_Border_musicNotes">musicNotes</value> + <value tokenid="ooxml:Value_ST_Border_northwest">northwest</value> + <value tokenid="ooxml:Value_ST_Border_ovals">ovals</value> + <value tokenid="ooxml:Value_ST_Border_packages">packages</value> + <value tokenid="ooxml:Value_ST_Border_palmsBlack">palmsBlack</value> + <value tokenid="ooxml:Value_ST_Border_palmsColor">palmsColor</value> + <value tokenid="ooxml:Value_ST_Border_paperClips">paperClips</value> + <value tokenid="ooxml:Value_ST_Border_papyrus">papyrus</value> + <value tokenid="ooxml:Value_ST_Border_partyFavor">partyFavor</value> + <value tokenid="ooxml:Value_ST_Border_partyGlass">partyGlass</value> + <value tokenid="ooxml:Value_ST_Border_pencils">pencils</value> + <value tokenid="ooxml:Value_ST_Border_people">people</value> + <value tokenid="ooxml:Value_ST_Border_peopleWaving">peopleWaving</value> + <value tokenid="ooxml:Value_ST_Border_peopleHats">peopleHats</value> + <value tokenid="ooxml:Value_ST_Border_poinsettias">poinsettias</value> + <value tokenid="ooxml:Value_ST_Border_postageStamp">postageStamp</value> + <value tokenid="ooxml:Value_ST_Border_pumpkin1">pumpkin1</value> + <value tokenid="ooxml:Value_ST_Border_pushPinNote2">pushPinNote2</value> + <value tokenid="ooxml:Value_ST_Border_pushPinNote1">pushPinNote1</value> + <value tokenid="ooxml:Value_ST_Border_pyramids">pyramids</value> + <value tokenid="ooxml:Value_ST_Border_pyramidsAbove">pyramidsAbove</value> + <value tokenid="ooxml:Value_ST_Border_quadrants">quadrants</value> + <value tokenid="ooxml:Value_ST_Border_rings">rings</value> + <value tokenid="ooxml:Value_ST_Border_safari">safari</value> + <value tokenid="ooxml:Value_ST_Border_sawtooth">sawtooth</value> + <value tokenid="ooxml:Value_ST_Border_sawtoothGray">sawtoothGray</value> + <value tokenid="ooxml:Value_ST_Border_scaredCat">scaredCat</value> + <value tokenid="ooxml:Value_ST_Border_seattle">seattle</value> + <value tokenid="ooxml:Value_ST_Border_shadowedSquares">shadowedSquares</value> + <value tokenid="ooxml:Value_ST_Border_sharksTeeth">sharksTeeth</value> + <value tokenid="ooxml:Value_ST_Border_shorebirdTracks">shorebirdTracks</value> + <value tokenid="ooxml:Value_ST_Border_skyrocket">skyrocket</value> + <value tokenid="ooxml:Value_ST_Border_snowflakeFancy">snowflakeFancy</value> + <value tokenid="ooxml:Value_ST_Border_snowflakes">snowflakes</value> + <value tokenid="ooxml:Value_ST_Border_sombrero">sombrero</value> + <value tokenid="ooxml:Value_ST_Border_southwest">southwest</value> + <value tokenid="ooxml:Value_ST_Border_stars">stars</value> + <value tokenid="ooxml:Value_ST_Border_starsTop">starsTop</value> + <value tokenid="ooxml:Value_ST_Border_stars3d">stars3d</value> + <value tokenid="ooxml:Value_ST_Border_starsBlack">starsBlack</value> + <value tokenid="ooxml:Value_ST_Border_starsShadowed">starsShadowed</value> + <value tokenid="ooxml:Value_ST_Border_sun">sun</value> + <value tokenid="ooxml:Value_ST_Border_swirligig">swirligig</value> + <value tokenid="ooxml:Value_ST_Border_tornPaper">tornPaper</value> + <value tokenid="ooxml:Value_ST_Border_tornPaperBlack">tornPaperBlack</value> + <value tokenid="ooxml:Value_ST_Border_trees">trees</value> + <value tokenid="ooxml:Value_ST_Border_triangleParty">triangleParty</value> + <value tokenid="ooxml:Value_ST_Border_triangles">triangles</value> + <value tokenid="ooxml:Value_ST_Border_tribal1">tribal1</value> + <value tokenid="ooxml:Value_ST_Border_tribal2">tribal2</value> + <value tokenid="ooxml:Value_ST_Border_tribal3">tribal3</value> + <value tokenid="ooxml:Value_ST_Border_tribal4">tribal4</value> + <value tokenid="ooxml:Value_ST_Border_tribal5">tribal5</value> + <value tokenid="ooxml:Value_ST_Border_tribal6">tribal6</value> + <value tokenid="ooxml:Value_ST_Border_twistedLines1">twistedLines1</value> + <value tokenid="ooxml:Value_ST_Border_twistedLines2">twistedLines2</value> + <value tokenid="ooxml:Value_ST_Border_vine">vine</value> + <value tokenid="ooxml:Value_ST_Border_waveline">waveline</value> + <value tokenid="ooxml:Value_ST_Border_weavingAngles">weavingAngles</value> + <value tokenid="ooxml:Value_ST_Border_weavingBraid">weavingBraid</value> + <value tokenid="ooxml:Value_ST_Border_weavingRibbon">weavingRibbon</value> + <value tokenid="ooxml:Value_ST_Border_weavingStrips">weavingStrips</value> + <value tokenid="ooxml:Value_ST_Border_whiteFlowers">whiteFlowers</value> + <value tokenid="ooxml:Value_ST_Border_woodwork">woodwork</value> + <value tokenid="ooxml:Value_ST_Border_xIllusions">xIllusions</value> + <value tokenid="ooxml:Value_ST_Border_zanyTriangles">zanyTriangles</value> + <value tokenid="ooxml:Value_ST_Border_zigZag">zigZag</value> + <value tokenid="ooxml:Value_ST_Border_zigZagStitch">zigZagStitch</value> + </resource> + <resource name="CT_Border" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Border_val"/> + <attribute name="color" tokenid="ooxml:CT_Border_color"/> + <attribute name="themeColor" tokenid="ooxml:CT_Border_themeColor"/> + <attribute name="themeTint" tokenid="ooxml:CT_Border_themeTint"/> + <attribute name="themeShade" tokenid="ooxml:CT_Border_themeShade"/> + <attribute name="sz" tokenid="ooxml:CT_Border_sz"/> + <attribute name="space" tokenid="ooxml:CT_Border_space"/> + <attribute name="shadow" tokenid="ooxml:CT_Border_shadow"/> + <attribute name="frame" tokenid="ooxml:CT_Border_frame"/> + </resource> + <!-- This DOCX values will be mapped to match the 'DOC' values that are defined here: --> + <!-- http://msdn.microsoft.com/en-us/library/dd945712(v=office.12).aspx --> + <resource name="ST_Shd" resource="List"> + <value tokenid="ooxml:Value_ST_Shd_clear">clear</value> + <value tokenid="ooxml:Value_ST_Shd_solid">solid</value> + <value tokenid="ooxml:Value_ST_Shd_pct5">pct5</value> + <value tokenid="ooxml:Value_ST_Shd_pct10">pct10</value> + <value tokenid="ooxml:Value_ST_Shd_pct20">pct20</value> + <value tokenid="ooxml:Value_ST_Shd_pct25">pct25</value> + <value tokenid="ooxml:Value_ST_Shd_pct30">pct30</value> + <value tokenid="ooxml:Value_ST_Shd_pct40">pct40</value> + <value tokenid="ooxml:Value_ST_Shd_pct50">pct50</value> + <value tokenid="ooxml:Value_ST_Shd_pct60">pct60</value> + <value tokenid="ooxml:Value_ST_Shd_pct70">pct70</value> + <value tokenid="ooxml:Value_ST_Shd_pct75">pct75</value> + <value tokenid="ooxml:Value_ST_Shd_pct80">pct80</value> + <value tokenid="ooxml:Value_ST_Shd_pct90">pct90</value> + <value tokenid="ooxml:Value_ST_Shd_horzStripe">horzStripe</value> + <value tokenid="ooxml:Value_ST_Shd_vertStripe">vertStripe</value> + <value tokenid="ooxml:Value_ST_Shd_reverseDiagStripe">reverseDiagStripe</value> + <value tokenid="ooxml:Value_ST_Shd_diagStripe">diagStripe</value> + <value tokenid="ooxml:Value_ST_Shd_horzCross">horzCross</value> + <value tokenid="ooxml:Value_ST_Shd_diagCross">diagCross</value> + <value tokenid="ooxml:Value_ST_Shd_thinHorzStripe">thinHorzStripe</value> + <value tokenid="ooxml:Value_ST_Shd_thinVertStripe">thinVertStripe</value> + <value tokenid="ooxml:Value_ST_Shd_thinReverseDiagStripe">thinReverseDiagStripe</value> + <value tokenid="ooxml:Value_ST_Shd_thinDiagStripe">thinDiagStripe</value> + <value tokenid="ooxml:Value_ST_Shd_thinHorzCross">thinHorzCross</value> + <value tokenid="ooxml:Value_ST_Shd_thinDiagCross">thinDiagCross</value> + <value tokenid="ooxml:Value_ST_Shd_pct12">pct12</value> + <value tokenid="ooxml:Value_ST_Shd_pct15">pct15</value> + <value tokenid="ooxml:Value_ST_Shd_pct35">pct35</value> + <value tokenid="ooxml:Value_ST_Shd_pct37">pct37</value> + <value tokenid="ooxml:Value_ST_Shd_pct45">pct45</value> + <value tokenid="ooxml:Value_ST_Shd_pct55">pct55</value> + <value tokenid="ooxml:Value_ST_Shd_pct62">pct62</value> + <value tokenid="ooxml:Value_ST_Shd_pct65">pct65</value> + <value tokenid="ooxml:Value_ST_Shd_pct85">pct85</value> + <value tokenid="ooxml:Value_ST_Shd_pct87">pct87</value> + <value tokenid="ooxml:Value_ST_Shd_pct95">pct95</value> + <value tokenid="ooxml:Value_ST_Shd_nil">nil</value> + </resource> + <resource name="CT_Shd" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Shd_val"/> + <attribute name="color" tokenid="ooxml:CT_Shd_color"/> + <attribute name="themeColor" tokenid="ooxml:CT_Shd_themeColor"/> + <attribute name="themeTint" tokenid="ooxml:CT_Shd_themeTint"/> + <attribute name="themeShade" tokenid="ooxml:CT_Shd_themeShade"/> + <attribute name="fill" tokenid="ooxml:CT_Shd_fill"/> + <attribute name="themeFill" tokenid="ooxml:CT_Shd_themeFill"/> + <attribute name="themeFillTint" tokenid="ooxml:CT_Shd_themeFillTint"/> + <attribute name="themeFillShade" tokenid="ooxml:CT_Shd_themeFillShade"/> + </resource> + <resource name="CT_VerticalAlignRun" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_VerticalAlignRun_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_FitText" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_FitText_val"/> + <attribute name="id" tokenid="ooxml:CT_FitText_id"/> + </resource> + <resource name="ST_Em" resource="List"> + <value tokenid="ooxml:Value_ST_Em_none">none</value> + <value tokenid="ooxml:Value_ST_Em_dot">dot</value> + <value tokenid="ooxml:Value_ST_Em_comma">comma</value> + <value tokenid="ooxml:Value_ST_Em_circle">circle</value> + <value tokenid="ooxml:Value_ST_Em_underDot">underDot</value> + </resource> + <resource name="CT_Em" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Em_val" action="setValue"/> + </resource> + <resource name="CT_Language" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Language_val"/> + <attribute name="eastAsia" tokenid="ooxml:CT_Language_eastAsia"/> + <attribute name="bidi" tokenid="ooxml:CT_Language_bidi"/> + </resource> + <resource name="ST_CombineBrackets" resource="List"> + <value tokenid="ooxml:Value_ST_CombineBrackets_none">none</value> + <value tokenid="ooxml:Value_ST_CombineBrackets_round">round</value> + <value tokenid="ooxml:Value_ST_CombineBrackets_square">square</value> + <value tokenid="ooxml:Value_ST_CombineBrackets_angle">angle</value> + <value tokenid="ooxml:Value_ST_CombineBrackets_curly">curly</value> + </resource> + <resource name="CT_EastAsianLayout" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_EastAsianLayout_id"/> + <attribute name="combine" tokenid="ooxml:CT_EastAsianLayout_combine"/> + <attribute name="combineBrackets" tokenid="ooxml:CT_EastAsianLayout_combineBrackets"/> + <attribute name="vert" tokenid="ooxml:CT_EastAsianLayout_vert"/> + <attribute name="vertCompress" tokenid="ooxml:CT_EastAsianLayout_vertCompress"/> + </resource> + <resource name="ST_XAlign" resource="List"> + <value tokenid="ooxml:Value_doc_ST_XAlign_left">left</value> + <value tokenid="ooxml:Value_doc_ST_XAlign_center">center</value> + <value tokenid="ooxml:Value_doc_ST_XAlign_right">right</value> + <value tokenid="ooxml:Value_doc_ST_XAlign_inside">inside</value> + <value tokenid="ooxml:Value_doc_ST_XAlign_outside">outside</value> + </resource> + <resource name="ST_YAlign" resource="List"> + <value tokenid="ooxml:Value_doc_ST_YAlign_inline">inline</value> + <value tokenid="ooxml:Value_doc_ST_YAlign_top">top</value> + <value tokenid="ooxml:Value_doc_ST_YAlign_center">center</value> + <value tokenid="ooxml:Value_doc_ST_YAlign_bottom">bottom</value> + <value tokenid="ooxml:Value_doc_ST_YAlign_inside">inside</value> + <value tokenid="ooxml:Value_doc_ST_YAlign_outside">outside</value> + </resource> + <resource name="ST_HeightRule" resource="List"> + <value tokenid="ooxml:Value_doc_ST_HeightRule_auto">auto</value> + <value tokenid="ooxml:Value_doc_ST_HeightRule_exact">exact</value> + <value tokenid="ooxml:Value_doc_ST_HeightRule_atLeast">atLeast</value> + </resource> + <resource name="ST_Wrap" resource="List"> + <value tokenid="ooxml:Value_doc_ST_Wrap_auto">auto</value> + <value tokenid="ooxml:Value_doc_ST_Wrap_notBeside">notBeside</value> + <value tokenid="ooxml:Value_doc_ST_Wrap_around">around</value> + <value tokenid="ooxml:Value_doc_ST_Wrap_tight">tight</value> + <value tokenid="ooxml:Value_doc_ST_Wrap_through">through</value> + <value tokenid="ooxml:Value_doc_ST_Wrap_none">none</value> + </resource> + <resource name="ST_VAnchor" resource="List"> + <value tokenid="ooxml:Value_doc_ST_VAnchor_text">text</value> + <value tokenid="ooxml:Value_doc_ST_VAnchor_margin">margin</value> + <value tokenid="ooxml:Value_doc_ST_VAnchor_page">page</value> + </resource> + <resource name="ST_HAnchor" resource="List"> + <value tokenid="ooxml:Value_doc_ST_HAnchor_text">text</value> + <value tokenid="ooxml:Value_doc_ST_HAnchor_margin">margin</value> + <value tokenid="ooxml:Value_doc_ST_HAnchor_page">page</value> + </resource> + <resource name="ST_DropCap" resource="List"> + <value tokenid="ooxml:Value_doc_ST_DropCap_none">none</value> + <value tokenid="ooxml:Value_doc_ST_DropCap_drop">drop</value> + <value tokenid="ooxml:Value_doc_ST_DropCap_margin">margin</value> + </resource> + <resource name="CT_FramePr" resource="Properties"> + <attribute name="dropCap" tokenid="ooxml:CT_FramePr_dropCap"/> + <attribute name="lines" tokenid="ooxml:CT_FramePr_lines"/> + <attribute name="w" tokenid="ooxml:CT_FramePr_w"/> + <attribute name="h" tokenid="ooxml:CT_FramePr_h"/> + <attribute name="vSpace" tokenid="ooxml:CT_FramePr_vSpace"/> + <attribute name="hSpace" tokenid="ooxml:CT_FramePr_hSpace"/> + <attribute name="wrap" tokenid="ooxml:CT_FramePr_wrap"/> + <attribute name="hAnchor" tokenid="ooxml:CT_FramePr_hAnchor"/> + <attribute name="vAnchor" tokenid="ooxml:CT_FramePr_vAnchor"/> + <attribute name="x" tokenid="ooxml:CT_FramePr_x"/> + <attribute name="xAlign" tokenid="ooxml:CT_FramePr_xAlign"/> + <attribute name="y" tokenid="ooxml:CT_FramePr_y"/> + <attribute name="yAlign" tokenid="ooxml:CT_FramePr_yAlign"/> + <attribute name="hRule" tokenid="ooxml:CT_FramePr_hRule"/> + <attribute name="anchorLock" tokenid="ooxml:CT_FramePr_anchorLock"/> + </resource> + <resource name="ST_TabJc" resource="List"> + <value tokenid="ooxml:Value_ST_TabJc_clear">clear</value> + <value tokenid="ooxml:Value_ST_TabJc_start">start</value> + <value tokenid="ooxml:Value_ST_TabJc_left">left</value> + <value tokenid="ooxml:Value_ST_TabJc_center">center</value> + <value tokenid="ooxml:Value_ST_TabJc_end">end</value> + <value tokenid="ooxml:Value_ST_TabJc_right">right</value> + <value tokenid="ooxml:Value_ST_TabJc_decimal">decimal</value> + <value tokenid="ooxml:Value_ST_TabJc_bar">bar</value> + <value tokenid="ooxml:Value_ST_TabJc_num">num</value> + </resource> + <resource name="ST_TabTlc" resource="List"> + <value tokenid="ooxml:Value_ST_TabTlc_none">none</value> + <value tokenid="ooxml:Value_ST_TabTlc_dot">dot</value> + <value tokenid="ooxml:Value_ST_TabTlc_hyphen">hyphen</value> + <value tokenid="ooxml:Value_ST_TabTlc_underscore">underscore</value> + <value tokenid="ooxml:Value_ST_TabTlc_heavy">heavy</value> + <value tokenid="ooxml:Value_ST_TabTlc_middleDot">middleDot</value> + </resource> + <resource name="CT_TabStop" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_TabStop_val"/> + <attribute name="leader" tokenid="ooxml:CT_TabStop_leader"/> + <attribute name="pos" tokenid="ooxml:CT_TabStop_pos"/> + </resource> + <resource name="ST_LineSpacingRule" resource="List"> + <value tokenid="ooxml:Value_doc_ST_LineSpacingRule_auto">auto</value> + <value tokenid="ooxml:Value_doc_ST_LineSpacingRule_exact">exact</value> + <value tokenid="ooxml:Value_doc_ST_LineSpacingRule_atLeast">atLeast</value> + </resource> + <resource name="CT_Spacing" resource="Properties"> + <attribute name="before" tokenid="ooxml:CT_Spacing_before"/> + <attribute name="beforeLines" tokenid="ooxml:CT_Spacing_beforeLines"/> + <attribute name="beforeAutospacing" tokenid="ooxml:CT_Spacing_beforeAutospacing"/> + <attribute name="after" tokenid="ooxml:CT_Spacing_after"/> + <attribute name="afterLines" tokenid="ooxml:CT_Spacing_afterLines"/> + <attribute name="afterAutospacing" tokenid="ooxml:CT_Spacing_afterAutospacing"/> + <attribute name="line" tokenid="ooxml:CT_Spacing_line"/> + <attribute name="lineRule" tokenid="ooxml:CT_Spacing_lineRule"/> + </resource> + <resource name="CT_Ind" resource="Properties"> + <attribute name="end" tokenid="ooxml:CT_Ind_end"/> + <attribute name="endChars" tokenid="ooxml:CT_Ind_endChars"/> + <attribute name="start" tokenid="ooxml:CT_Ind_start"/> + <attribute name="startChars" tokenid="ooxml:CT_Ind_startChars"/> + <attribute name="hanging" tokenid="ooxml:CT_Ind_hanging"/> + <attribute name="hangingChars" tokenid="ooxml:CT_Ind_hangingChars"/> + <attribute name="firstLine" tokenid="ooxml:CT_Ind_firstLine"/> + <attribute name="firstLineChars" tokenid="ooxml:CT_Ind_firstLineChars"/> + <!-- ECMA 1st version --> + <attribute name="left" tokenid="ooxml:CT_Ind_left"/> + <attribute name="leftChars" tokenid="ooxml:CT_Ind_leftChars"/> + <attribute name="right" tokenid="ooxml:CT_Ind_right"/> + <attribute name="rightChars" tokenid="ooxml:CT_Ind_rightChars"/> + </resource> + <resource name="ST_Jc" resource="List"> + <value tokenid="ooxml:Value_ST_Jc_left">left</value> + <value tokenid="ooxml:Value_ST_Jc_right">right</value> + <value tokenid="ooxml:Value_ST_Jc_start">start</value> + <value tokenid="ooxml:Value_ST_Jc_center">center</value> + <value tokenid="ooxml:Value_ST_Jc_end">end</value> + <value tokenid="ooxml:Value_ST_Jc_both">both</value> + <value tokenid="ooxml:Value_ST_Jc_mediumKashida">mediumKashida</value> + <value tokenid="ooxml:Value_ST_Jc_distribute">distribute</value> + <value tokenid="ooxml:Value_ST_Jc_numTab">numTab</value> + <value tokenid="ooxml:Value_ST_Jc_highKashida">highKashida</value> + <value tokenid="ooxml:Value_ST_Jc_lowKashida">lowKashida</value> + <value tokenid="ooxml:Value_ST_Jc_thaiDistribute">thaiDistribute</value> + </resource> + <resource name="CT_Jc" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Jc_val" action="setValue"/> + </resource> + <resource name="ST_View" resource="List"> + <value tokenid="ooxml:Value_doc_ST_View_none">none</value> + <value tokenid="ooxml:Value_doc_ST_View_print">print</value> + <value tokenid="ooxml:Value_doc_ST_View_outline">outline</value> + <value tokenid="ooxml:Value_doc_ST_View_masterPages">masterPages</value> + <value tokenid="ooxml:Value_doc_ST_View_normal">normal</value> + <value tokenid="ooxml:Value_doc_ST_View_web">web</value> + </resource> + <resource name="CT_View" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_View_val"/> + </resource> + <resource name="ST_Zoom" resource="List"> + <value tokenid="ooxml:Value_doc_ST_Zoom_none">none</value> + <value tokenid="ooxml:Value_doc_ST_Zoom_fullPage">fullPage</value> + <value tokenid="ooxml:Value_doc_ST_Zoom_bestFit">bestFit</value> + <value tokenid="ooxml:Value_doc_ST_Zoom_textFit">textFit</value> + </resource> + <resource name="ST_Percentage" resource="Integer"/> + <resource name="CT_Zoom" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Zoom_val"/> + <attribute name="percent" tokenid="ooxml:CT_Zoom_percent"/> + </resource> + <resource name="CT_WritingStyle" resource="Properties"> + <attribute name="lang" tokenid="ooxml:CT_WritingStyle_lang"/> + <attribute name="vendorID" tokenid="ooxml:CT_WritingStyle_vendorID"/> + <attribute name="dllVersion" tokenid="ooxml:CT_WritingStyle_dllVersion"/> + <attribute name="nlCheck" tokenid="ooxml:CT_WritingStyle_nlCheck"/> + <attribute name="checkStyle" tokenid="ooxml:CT_WritingStyle_checkStyle"/> + <attribute name="appName" tokenid="ooxml:CT_WritingStyle_appName"/> + </resource> + <resource name="CT_Proof" resource="Properties"> + <attribute name="spelling" tokenid="ooxml:CT_Proof_spelling"/> + <attribute name="grammar" tokenid="ooxml:CT_Proof_grammar"/> + </resource> + <resource name="ST_DocType" resource="List"> + <value tokenid="ooxml:Value_doc_ST_DocType_notSpecified">notSpecified</value> + <value tokenid="ooxml:Value_doc_ST_DocType_letter">letter</value> + <value tokenid="ooxml:Value_doc_ST_DocType_eMail">eMail</value> + </resource> + <resource name="CT_DocType" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_DocType_val"/> + </resource> + <resource name="ST_DocProtect" resource="List"> + <value tokenid="ooxml:Value_doc_ST_DocProtect_none">none</value> + <value tokenid="ooxml:Value_doc_ST_DocProtect_readOnly">readOnly</value> + <value tokenid="ooxml:Value_doc_ST_DocProtect_comments">comments</value> + <value tokenid="ooxml:Value_doc_ST_DocProtect_trackedChanges">trackedChanges</value> + <value tokenid="ooxml:Value_doc_ST_DocProtect_forms">forms</value> + </resource> + <resource name="ST_CryptProv" resource="List"> + <value tokenid="ooxml:Value_doc_ST_CryptProv_rsaAES">rsaAES</value> + <value tokenid="ooxml:Value_doc_ST_CryptProv_rsaFull">rsaFull</value> + </resource> + <resource name="ST_AlgClass" resource="List"> + <value tokenid="ooxml:Value_doc_ST_AlgClass_hash">hash</value> + </resource> + <resource name="ST_AlgType" resource="List"> + <value tokenid="ooxml:Value_doc_ST_AlgType_typeAny">typeAny</value> + </resource> + <resource name="AG_Password" resource="Properties"> + <attribute name="cryptProviderType" tokenid="ooxml:AG_Password_cryptProviderType"/> + <attribute name="cryptAlgorithmClass" tokenid="ooxml:AG_Password_cryptAlgorithmClass"/> + <attribute name="cryptAlgorithmType" tokenid="ooxml:AG_Password_cryptAlgorithmType"/> + <attribute name="cryptAlgorithmSid" tokenid="ooxml:AG_Password_cryptAlgorithmSid"/> + <attribute name="cryptSpinCount" tokenid="ooxml:AG_Password_cryptSpinCount"/> + <attribute name="cryptProvider" tokenid="ooxml:AG_Password_cryptProvider"/> + <attribute name="algIdExt" tokenid="ooxml:AG_Password_algIdExt"/> + <attribute name="algIdExtSource" tokenid="ooxml:AG_Password_algIdExtSource"/> + <attribute name="cryptProviderTypeExt" tokenid="ooxml:AG_Password_cryptProviderTypeExt"/> + <attribute name="cryptProviderTypeExtSource" tokenid="ooxml:AG_Password_cryptProviderTypeExtSource"/> + <attribute name="hash" tokenid="ooxml:AG_Password_hash"/> + <attribute name="salt" tokenid="ooxml:AG_Password_salt"/> + </resource> + <resource name="CT_DocProtect" resource="Properties"> + <attribute name="edit" tokenid="ooxml:CT_DocProtect_edit"/> + <attribute name="formatting" tokenid="ooxml:CT_DocProtect_formatting"/> + <attribute name="enforcement" tokenid="ooxml:CT_DocProtect_enforcement"/> + </resource> + <resource name="CT_MailMergeDocType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MailMergeDocType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_MailMergeDataType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MailMergeDataType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_MailMergeDest" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MailMergeDest_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_MailMergeOdsoFMDFieldType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MailMergeOdsoFMDFieldType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_TrackChangesView" resource="Properties"> + <attribute name="markup" tokenid="ooxml:CT_TrackChangesView_markup"/> + <attribute name="comments" tokenid="ooxml:CT_TrackChangesView_comments"/> + <attribute name="insDel" tokenid="ooxml:CT_TrackChangesView_insDel"/> + <attribute name="formatting" tokenid="ooxml:CT_TrackChangesView_formatting"/> + <attribute name="inkAnnotations" tokenid="ooxml:CT_TrackChangesView_inkAnnotations"/> + </resource> + <resource name="CT_Kinsoku" resource="Properties"> + <attribute name="lang" tokenid="ooxml:CT_Kinsoku_lang"/> + <attribute name="val" tokenid="ooxml:CT_Kinsoku_val"/> + </resource> + <resource name="ST_TextDirection" resource="List"> + <value tokenid="ooxml:Value_ST_TextDirection_lrTb">lrTb</value> + <value tokenid="ooxml:Value_ST_TextDirection_tbRl">tbRl</value> + <value tokenid="ooxml:Value_ST_TextDirection_btLr">btLr</value> + <value tokenid="ooxml:Value_ST_TextDirection_lrTbV">lrTbV</value> + <value tokenid="ooxml:Value_ST_TextDirection_tbRlV">tbRlV</value> + <value tokenid="ooxml:Value_ST_TextDirection_tbLrV">tbLrV</value> + </resource> + <resource name="CT_TextDirection" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TextDirection_val" action="setValue"/> + </resource> + <resource name="ST_TextAlignment" resource="List"> + <value tokenid="ooxml:Value_doc_ST_TextAlignment_top">top</value> + <value tokenid="ooxml:Value_doc_ST_TextAlignment_center">center</value> + <value tokenid="ooxml:Value_doc_ST_TextAlignment_baseline">baseline</value> + <value tokenid="ooxml:Value_doc_ST_TextAlignment_bottom">bottom</value> + <value tokenid="ooxml:Value_doc_ST_TextAlignment_auto">auto</value> + </resource> + <resource name="CT_TextAlignment" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TextAlignment_val" action="setValue"/> + </resource> + <resource name="ST_DisplacedByCustomXml" resource="List"> + <value tokenid="ooxml:Value_doc_ST_DisplacedByCustomXml_next">next</value> + <value tokenid="ooxml:Value_doc_ST_DisplacedByCustomXml_prev">prev</value> + </resource> + <resource name="ST_AnnotationVMerge" resource="List"> + <value tokenid="ooxml:Value_doc_ST_AnnotationVMerge_cont">cont</value> + <value tokenid="ooxml:Value_doc_ST_AnnotationVMerge_rest">rest</value> + </resource> + <resource name="CT_Markup" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_Markup_id"/> + </resource> + <resource name="CT_TrackChange" resource="Properties"> + <attribute name="author" tokenid="ooxml:CT_TrackChange_author"/> + <attribute name="date" tokenid="ooxml:CT_TrackChange_date"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd" action="clearProps"/> + </resource> + <resource name="CT_CellMergeTrackChange" resource="Properties"> + <attribute name="vMerge" tokenid="ooxml:CT_CellMergeTrackChange_vMerge"/> + <attribute name="vMergeOrig" tokenid="ooxml:CT_CellMergeTrackChange_vMergeOrig"/> + </resource> + <resource name="CT_TrackChangeRange" resource="Properties"> + <attribute name="displacedByCustomXml" tokenid="ooxml:CT_TrackChangeRange_displacedByCustomXml"/> + </resource> + <resource name="CT_MarkupRange" resource="Properties"> + <attribute name="displacedByCustomXml" tokenid="ooxml:CT_MarkupRange_displacedByCustomXml"/> + </resource> + <resource name="CT_MarkupRangeBookmark" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_MarkupRangeBookmark_id"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_moveFromRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_moveToRangeEnd"/> + </resource> + <resource name="CT_PermStart" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_PermStart_id"/> + <attribute name="colFirst" tokenid="ooxml:CT_PermStart_colFirst"/> + <attribute name="colLast" tokenid="ooxml:CT_PermStart_colLast"/> + <attribute name="ed" tokenid="ooxml:CT_PermStart_ed"/> + <attribute name="edGrp" tokenid="ooxml:CT_PermStart_edGrp"/> + <attribute name="displacedByCustomXml" tokenid="ooxml:CT_PermStart_displacedByCustomXml"/> + </resource> + <resource name="CT_PermEnd" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_PermEnd_id"/> + <attribute name="displacedByCustomXml" tokenid="ooxml:CT_PermEnd_displacedByCustomXml"/> + </resource> + <resource name="CT_MarkupRangeCommentStart" resource="Properties"> + <attribute name="id" tokenid="ooxml:EG_RangeMarkupElements_commentRangeStart"/> + </resource> + <resource name="CT_MarkupRangeCommentEnd" resource="Properties"> + <attribute name="id" tokenid="ooxml:EG_RangeMarkupElements_commentRangeEnd"/> + </resource> + <resource name="CT_BookmarkRange" resource="Properties"> + <attribute name="colFirst" tokenid="ooxml:CT_BookmarkRange_colFirst"/> + <attribute name="colLast" tokenid="ooxml:CT_BookmarkRange_colLast"/> + </resource> + <resource name="CT_Bookmark" resource="Properties"> + <attribute name="name" tokenid="ooxml:CT_Bookmark_name"/> + </resource> + <resource name="CT_MoveBookmark" resource="Properties"> + <attribute name="author" tokenid="ooxml:CT_MoveBookmark_author"/> + <attribute name="date" tokenid="ooxml:CT_MoveBookmark_date"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_moveToRangeStart"/> + </resource> + <resource name="CT_Comment" resource="XNote"> + <attribute name="id" action="checkId"/> + <attribute name="initials" tokenid="ooxml:CT_Comment_initials"/> + </resource> + <resource name="CT_TrackChangeNumbering" resource="Properties"> + <attribute name="original" tokenid="ooxml:CT_TrackChangeNumbering_original"/> + </resource> + <resource name="CT_TblPrExChange" resource="Properties"> + <element name="tblPrEx" tokenid="ooxml:CT_TblPrExChange_tblPrEx"/> + </resource> + <resource name="CT_TcPrChange" resource="Properties"> + <element name="tcPr" tokenid="ooxml:CT_TcPrChange_tcPr"/> + </resource> + <resource name="CT_TrPrChange" resource="Properties"> + <element name="trPr" tokenid="ooxml:CT_TrPrChange_trPr"/> + </resource> + <resource name="CT_TblGridChange" resource="Properties"> + <element name="tblGrid" tokenid="ooxml:CT_TblGridChange_tblGrid"/> + </resource> + <resource name="CT_TblPrChange" resource="Properties"> + <element name="tblPr" tokenid="ooxml:CT_TblPrChange_tblPr"/> + </resource> + <resource name="CT_SectPrChange" resource="Properties"> + <element name="sectPr" tokenid="ooxml:CT_SectPrChange_sectPr"/> + </resource> + <resource name="CT_PPrChange" resource="Properties"> + <element name="pPr" tokenid="ooxml:CT_PPrChange_pPr"/> + </resource> + <resource name="CT_RPrChange" resource="Properties"> + <element name="rPr" tokenid="ooxml:CT_RPrChange_rPr"/> + </resource> + <resource name="CT_ParaRPrChange" resource="Properties"> + <element name="rPr" tokenid="ooxml:CT_ParaRPrChange_rPr"/> + </resource> + <resource name="CT_RunTrackChange" resource="Stream"> + <action name="start" action="tokenproperty"/> + <action name="start" action="sendPropertiesWithId" sendtokenid="ooxml:trackchange"/> + <action name="start" action="clearProps"/> + <action name="end" action="tokenproperty"/> + <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:endtrackchange"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="EG_RangeMarkupElements" resource="Properties"> + <element name="bookmarkStart" tokenid="ooxml:EG_RangeMarkupElements_bookmarkStart"/> + <element name="bookmarkEnd" tokenid="ooxml:EG_RangeMarkupElements_bookmarkEnd"/> + <element name="permStart" tokenid="ooxml:EG_RangeMarkupElements_PermStart"/> + <element name="permEnd" tokenid="ooxml:EG_RangeMarkupElements_PermEnd"/> + <element name="moveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart"/> + <element name="moveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeEnd"/> + <element name="moveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeStart"/> + <element name="moveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeEnd"/> + <element name="commentRangeStart" tokenid="ooxml:EG_RangeMarkupElements_commentRangeStart"/> + <element name="commentRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_commentRangeEnd"/> + <element name="customXmlInsRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/> + <element name="customXmlInsRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/> + <element name="customXmlDelRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/> + <element name="customXmlDelRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/> + <element name="customXmlMoveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/> + <element name="customXmlMoveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/> + <element name="customXmlMoveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/> + <element name="customXmlMoveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/> + </resource> + <resource name="CT_NumPr" resource="Properties"> + <element name="ilvl" tokenid="ooxml:CT_NumPr_ilvl"/> + <element name="numId" tokenid="ooxml:CT_NumPr_numId"/> + <element name="numberingChange" tokenid="ooxml:CT_NumPr_numberingChange"/> + <element name="ins" tokenid="ooxml:CT_NumPr_ins"/> + </resource> + <resource name="CT_PBdr" resource="Properties"> + <element name="top" tokenid="ooxml:CT_PBdr_top"/> + <element name="left" tokenid="ooxml:CT_PBdr_left"/> + <element name="bottom" tokenid="ooxml:CT_PBdr_bottom"/> + <element name="right" tokenid="ooxml:CT_PBdr_right"/> + <element name="between" tokenid="ooxml:CT_PBdr_between"/> + <element name="bar" tokenid="ooxml:CT_PBdr_bar"/> + </resource> + <resource name="CT_Tabs" resource="Properties"> + <element name="tab" tokenid="ooxml:CT_Tabs_tab"/> + </resource> + <resource name="CT_TextboxTightWrap" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TextboxTightWrap_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_PPrBase" resource="Properties"> + <element name="pStyle" tokenid="ooxml:CT_PPrBase_pStyle"/> + <element name="keepNext" tokenid="ooxml:CT_PPrBase_keepNext"/> + <element name="keepLines" tokenid="ooxml:CT_PPrBase_keepLines"/> + <element name="pageBreakBefore" tokenid="ooxml:CT_PPrBase_pageBreakBefore"/> + <element name="framePr" tokenid="ooxml:CT_PPrBase_framePr"/> + <element name="widowControl" tokenid="ooxml:CT_PPrBase_widowControl"/> + <element name="numPr" tokenid="ooxml:CT_PPrBase_numPr"/> + <element name="suppressLineNumbers" tokenid="ooxml:CT_PPrBase_suppressLineNumbers"/> + <element name="pBdr" tokenid="ooxml:CT_PrBase_pBdr"/> + <element name="shd" tokenid="ooxml:CT_PrBase_shd"/> + <element name="tabs" tokenid="ooxml:CT_PPrBase_tabs"/> + <element name="suppressAutoHyphens" tokenid="ooxml:CT_PPrBase_suppressAutoHyphens"/> + <element name="kinsoku" tokenid="ooxml:CT_PPrBase_kinsoku"/> + <element name="wordWrap" tokenid="ooxml:CT_PPrBase_wordWrap"/> + <element name="overflowPunct" tokenid="ooxml:CT_PPrBase_overflowPunct"/> + <element name="topLinePunct" tokenid="ooxml:CT_PPrBase_topLinePunct"/> + <element name="autoSpaceDE" tokenid="ooxml:CT_PPrBase_autoSpaceDE"/> + <element name="autoSpaceDN" tokenid="ooxml:CT_PPrBase_autoSpaceDN"/> + <element name="bidi" tokenid="ooxml:CT_PPrBase_bidi"/> + <element name="adjustRightInd" tokenid="ooxml:CT_PPrBase_adjustRightInd"/> + <element name="snapToGrid" tokenid="ooxml:CT_PPrBase_snapToGrid"/> + <element name="spacing" tokenid="ooxml:CT_PPrBase_spacing"/> + <element name="ind" tokenid="ooxml:CT_PPrBase_ind"/> + <element name="contextualSpacing" tokenid="ooxml:CT_PPrBase_contextualSpacing"/> + <element name="mirrorIndents" tokenid="ooxml:CT_PPrBase_mirrorIndents"/> + <element name="suppressOverlap" tokenid="ooxml:CT_PPrBase_suppressOverlap"/> + <element name="jc" tokenid="ooxml:CT_PPrBase_jc"/> + <element name="textDirection" tokenid="ooxml:CT_PPrBase_textDirection"/> + <element name="textAlignment" tokenid="ooxml:CT_PPrBase_textAlignment"/> + <element name="textboxTightWrap" tokenid="ooxml:CT_PPrBase_textboxTightWrap"/> + <element name="outlineLvl" tokenid="ooxml:CT_PPrBase_outlineLvl"/> + <element name="divId" tokenid="ooxml:CT_PPrBase_divId"/> + <element name="cnfStyle" tokenid="ooxml:CT_PPrBase_cnfStyle"/> + </resource> + <resource name="CT_PPr" resource="Properties"> + <element name="rPr" tokenid="ooxml:CT_PPr_rPr"/> + <element name="sectPr" tokenid="ooxml:CT_PPr_sectPr"/> + <element name="pPrChange" tokenid="ooxml:CT_PPr_pPrChange"/> + </resource> + <resource name="CT_Background" resource="Properties"> + <attribute name="color" tokenid="ooxml:CT_Background_color"/> + <attribute name="themeColor" tokenid="ooxml:CT_Background_themeColor"/> + <attribute name="themeTint" tokenid="ooxml:CT_Background_themeTint"/> + <attribute name="themeShade" tokenid="ooxml:CT_Background_themeShade"/> + <element name="v:background" tokenid="ooxml:CT_Background_v_background"/> + </resource> + <resource name="CT_Rel" resource="Properties"> + <attribute name="r:id" tokenid="ooxml:CT_Rel_id"/> + </resource> + <resource name="CT_PictureBase" resource="Properties"/> + <resource name="CT_Object" resource="Shape"> + <attribute name="dxaOrig" tokenid="ooxml:CT_Object_dxaOrig"/> + <attribute name="dyaOrig" tokenid="ooxml:CT_Object_dyaOrig"/> + <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:object"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_Picture" resource="Shape"> + <element name="movie" tokenid="ooxml:CT_Picture_movie"/> + <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:object"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_Drawing" resource="Properties"> + <action name="end" action="handlePicture"/> + </resource> + <resource name="CT_SimpleField" resource="Stream"> + <element name="fldData" tokenid="ooxml:CT_SimpleField_fldData"/> + <attribute name="instr" tokenid="ooxml:CT_SimpleField_instr"/> + <attribute name="fldLock" tokenid="ooxml:CT_SimpleField_fldLock"/> + <attribute name="dirty" tokenid="ooxml:CT_SimpleField_dirty"/> + <action name="start" action="fieldstart"/> + <action name="start" action="startCharacterGroup"/> + <action name="start" action="printproperty" sendtokenid="ooxml:CT_SimpleField_instr"/> + <action name="start" action="endCharacterGroup"/> + <action name="start" action="fieldlock_simple"/> + <action name="start" action="fieldsep"/> + <action name="end" action="fieldend"/> + </resource> + <resource name="ST_FldCharType" resource="List"> + <value tokenid="ooxml:Value_ST_FldCharType_begin">begin</value> + <value tokenid="ooxml:Value_ST_FldCharType_separate">separate</value> + <value tokenid="ooxml:Value_ST_FldCharType_end">end</value> + </resource> + <resource name="ST_InfoTextType" resource="List"> + <value tokenid="ooxml:Value_doc_ST_InfoTextType_text">text</value> + <value tokenid="ooxml:Value_doc_ST_InfoTextType_autoText">autoText</value> + </resource> + <resource name="ST_FFName" resource="String"/> + <resource name="CT_FFTextType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FFTextType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_FFName" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FFName_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_FldChar" resource="Stream"> + <element name="fldData" tokenid="ooxml:CT_FldChar_fldData"/> + <element name="ffData" tokenid="ooxml:CT_FldChar_ffData"/> + <element name="numberingChange" tokenid="ooxml:CT_FldChar_numberingChange"/> + <attribute name="fldCharType" tokenid="ooxml:CT_FldChar_fldCharType"/> + <attribute name="fldLock" tokenid="ooxml:CT_FldChar_fldLock"/> + <attribute name="dirty" tokenid="ooxml:CT_FldChar_dirty"/> + <action name="start" action="fieldstart"> + <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_begin"/> + </action> + <action name="start" action="fieldsep"> + <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_separate"/> + </action> + <action name="start" action="fieldend"> + <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_end"/> + </action> + <action name="start" action="fieldlock"/> + </resource> + <resource name="CT_Hyperlink" resource="Stream"> + <attribute name="tgtFrame" tokenid="ooxml:CT_Hyperlink_tgtFrame"/> + <attribute name="tooltip" tokenid="ooxml:CT_Hyperlink_tooltip"/> + <attribute name="docLocation" tokenid="ooxml:CT_Hyperlink_docLocation"/> + <attribute name="history" tokenid="ooxml:CT_Hyperlink_history"/> + <attribute name="anchor" tokenid="ooxml:CT_Hyperlink_anchor"/> + <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_r_id"/> + <action name="start" action="fieldstart"/> + <action name="start" action="handleHyperlink"/> + <action name="start" action="fieldsep"/> + <action name="end" action="fieldend"/> + </resource> + <resource name="CT_FLDData" resource="Stream"> + <action name="characters" action="ignore"/> + </resource> + <resource name="CT_FFData" resource="Properties"> + <element name="name" tokenid="ooxml:CT_FFData_name"/> + <element name="enabled" tokenid="ooxml:CT_FFData_enabled"/> + <element name="calcOnExit" tokenid="ooxml:CT_FFData_calcOnExit"/> + <element name="entryMacro" tokenid="ooxml:CT_FFData_entryMacro"/> + <element name="exitMacro" tokenid="ooxml:CT_FFData_exitMacro"/> + <element name="helpText" tokenid="ooxml:CT_FFData_helpText"/> + <element name="statusText" tokenid="ooxml:CT_FFData_statusText"/> + <element name="checkBox" tokenid="ooxml:CT_FFData_checkBox"/> + <element name="ddList" tokenid="ooxml:CT_FFData_ddList"/> + <element name="textInput" tokenid="ooxml:CT_FFData_textInput"/> + <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:ffdata"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_FFHelpText" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_FFHelpText_type"/> + <attribute name="val" tokenid="ooxml:CT_FFHelpText_val"/> + </resource> + <resource name="CT_FFStatusText" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_FFStatusText_type"/> + <attribute name="val" tokenid="ooxml:CT_FFStatusText_val"/> + </resource> + <resource name="CT_FFCheckBox" resource="Properties"> + <element name="size" tokenid="ooxml:CT_FFCheckBox_size"/> + <element name="sizeAuto" tokenid="ooxml:CT_FFCheckBox_sizeAuto"/> + <element name="default" tokenid="ooxml:CT_FFCheckBox_default"/> + <element name="checked" tokenid="ooxml:CT_FFCheckBox_checked"/> + </resource> + <resource name="CT_FFDDList" resource="Properties"> + <element name="result" tokenid="ooxml:CT_FFDDList_result"/> + <element name="default" tokenid="ooxml:CT_FFDDList_default"/> + <element name="listEntry" tokenid="ooxml:CT_FFDDList_listEntry"/> + </resource> + <resource name="CT_FFTextInput" resource="Properties"> + <element name="type" tokenid="ooxml:CT_FFTextInput_type"/> + <element name="default" tokenid="ooxml:CT_FFTextInput_default"/> + <element name="maxLength" tokenid="ooxml:CT_FFTextInput_maxLength"/> + <element name="format" tokenid="ooxml:CT_FFTextInput_format"/> + </resource> + <resource name="ST_SectionMark" resource="List"> + <value tokenid="ooxml:Value_ST_SectionMark_continuous">continuous</value> + <value tokenid="ooxml:Value_ST_SectionMark_nextColumn">nextColumn</value> + <value tokenid="ooxml:Value_ST_SectionMark_nextPage">nextPage</value> + <value tokenid="ooxml:Value_ST_SectionMark_evenPage">evenPage</value> + <value tokenid="ooxml:Value_ST_SectionMark_oddPage">oddPage</value> + </resource> + <resource name="CT_SectType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_SectType_val" action="setValue"/> + </resource> + <resource name="ST_NumberFormat" resource="List"> + <value tokenid="ooxml:Value_ST_NumberFormat_decimal">decimal</value> + <value tokenid="ooxml:Value_ST_NumberFormat_upperRoman">upperRoman</value> + <value tokenid="ooxml:Value_ST_NumberFormat_lowerRoman">lowerRoman</value> + <value tokenid="ooxml:Value_ST_NumberFormat_upperLetter">upperLetter</value> + <value tokenid="ooxml:Value_ST_NumberFormat_lowerLetter">lowerLetter</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ordinal">ordinal</value> + <value tokenid="ooxml:Value_ST_NumberFormat_cardinalText">cardinalText</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ordinalText">ordinalText</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hex">hex</value> + <value tokenid="ooxml:Value_ST_NumberFormat_chicago">chicago</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ideographDigital">ideographDigital</value> + <value tokenid="ooxml:Value_ST_NumberFormat_japaneseCounting">japaneseCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_aiueo">aiueo</value> + <value tokenid="ooxml:Value_ST_NumberFormat_iroha">iroha</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalFullWidth">decimalFullWidth</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalHalfWidth">decimalHalfWidth</value> + <value tokenid="ooxml:Value_ST_NumberFormat_japaneseLegal">japaneseLegal</value> + <value tokenid="ooxml:Value_ST_NumberFormat_japaneseDigitalTenThousand">japaneseDigitalTenThousand</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedCircle">decimalEnclosedCircle</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalFullWidth2">decimalFullWidth2</value> + <value tokenid="ooxml:Value_ST_NumberFormat_aiueoFullWidth">aiueoFullWidth</value> + <value tokenid="ooxml:Value_ST_NumberFormat_irohaFullWidth">irohaFullWidth</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalZero">decimalZero</value> + <value tokenid="ooxml:Value_ST_NumberFormat_bullet">bullet</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ganada">ganada</value> + <value tokenid="ooxml:Value_ST_NumberFormat_chosung">chosung</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedFullstop">decimalEnclosedFullstop</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedParen">decimalEnclosedParen</value> + <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedCircleChinese">decimalEnclosedCircleChinese</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ideographEnclosedCircle">ideographEnclosedCircle</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ideographTraditional">ideographTraditional</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ideographZodiac">ideographZodiac</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ideographZodiacTraditional">ideographZodiacTraditional</value> + <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseCounting">taiwaneseCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_ideographLegalTraditional">ideographLegalTraditional</value> + <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseCountingThousand">taiwaneseCountingThousand</value> + <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseDigital">taiwaneseDigital</value> + <value tokenid="ooxml:Value_ST_NumberFormat_chineseCounting">chineseCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_chineseLegalSimplified">chineseLegalSimplified</value> + <value tokenid="ooxml:Value_ST_NumberFormat_chineseCountingThousand">chineseCountingThousand</value> + <value tokenid="ooxml:Value_ST_NumberFormat_koreanDigital">koreanDigital</value> + <value tokenid="ooxml:Value_ST_NumberFormat_koreanCounting">koreanCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_koreanLegal">koreanLegal</value> + <value tokenid="ooxml:Value_ST_NumberFormat_koreanDigital2">koreanDigital2</value> + <value tokenid="ooxml:Value_ST_NumberFormat_vietnameseCounting">vietnameseCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_russianLower">russianLower</value> + <value tokenid="ooxml:Value_ST_NumberFormat_russianUpper">russianUpper</value> + <value tokenid="ooxml:Value_ST_NumberFormat_none">none</value> + <value tokenid="ooxml:Value_ST_NumberFormat_numberInDash">numberInDash</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hebrew1">hebrew1</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hebrew2">hebrew2</value> + <value tokenid="ooxml:Value_ST_NumberFormat_arabicAlpha">arabicAlpha</value> + <value tokenid="ooxml:Value_ST_NumberFormat_arabicAbjad">arabicAbjad</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hindiVowels">hindiVowels</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hindiConsonants">hindiConsonants</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hindiNumbers">hindiNumbers</value> + <value tokenid="ooxml:Value_ST_NumberFormat_hindiCounting">hindiCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_thaiLetters">thaiLetters</value> + <value tokenid="ooxml:Value_ST_NumberFormat_thaiNumbers">thaiNumbers</value> + <value tokenid="ooxml:Value_ST_NumberFormat_thaiCounting">thaiCounting</value> + <value tokenid="ooxml:Value_ST_NumberFormat_custom">custom</value> + </resource> + <resource name="ST_PageOrientation" resource="List"> + <value tokenid="ooxml:Value_ST_PageOrientation_portrait">portrait</value> + <value tokenid="ooxml:Value_ST_PageOrientation_landscape">landscape</value> + </resource> + <resource name="CT_PageSz" resource="Properties"> + <attribute name="w" tokenid="ooxml:CT_PageSz_w"/> + <attribute name="h" tokenid="ooxml:CT_PageSz_h"/> + <attribute name="orient" tokenid="ooxml:CT_PageSz_orient"/> + <attribute name="code" tokenid="ooxml:CT_PageSz_code"/> + </resource> + <resource name="CT_PageMar" resource="Properties"> + <attribute name="top" tokenid="ooxml:CT_PageMar_top"/> + <attribute name="right" tokenid="ooxml:CT_PageMar_right"/> + <attribute name="bottom" tokenid="ooxml:CT_PageMar_bottom"/> + <attribute name="left" tokenid="ooxml:CT_PageMar_left"/> + <attribute name="header" tokenid="ooxml:CT_PageMar_header"/> + <attribute name="footer" tokenid="ooxml:CT_PageMar_footer"/> + <attribute name="gutter" tokenid="ooxml:CT_PageMar_gutter"/> + </resource> + <resource name="ST_PageBorderZOrder" resource="List"> + <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_front">front</value> + <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_back">back</value> + </resource> + <resource name="ST_PageBorderDisplay" resource="List"> + <value tokenid="ooxml:Value_doc_ST_PageBorderDisplay_allPages">allPages</value> + <value tokenid="ooxml:Value_doc_ST_PageBorderDisplay_firstPage">firstPage</value> + <value tokenid="ooxml:Value_doc_ST_PageBorderDisplay_notFirstPage">notFirstPage</value> + </resource> + <resource name="ST_PageBorderOffset" resource="List"> + <value tokenid="ooxml:Value_doc_ST_PageBorderOffset_page">page</value> + <value tokenid="ooxml:Value_doc_ST_PageBorderOffset_text">text</value> + </resource> + <resource name="CT_PageBorders" resource="Properties"> + <element name="top" tokenid="ooxml:CT_PageBorders_top"/> + <element name="left" tokenid="ooxml:CT_PageBorders_left"/> + <element name="bottom" tokenid="ooxml:CT_PageBorders_bottom"/> + <element name="right" tokenid="ooxml:CT_PageBorders_right"/> + <attribute name="zOrder" tokenid="ooxml:CT_PageBorders_zOrder"/> + <attribute name="display" tokenid="ooxml:CT_PageBorders_display"/> + <attribute name="offsetFrom" tokenid="ooxml:CT_PageBorders_offsetFrom"/> + </resource> + <resource name="ST_ChapterSep" resource="List"> + <value tokenid="ooxml:Value_ST_ChapterSep_hyphen">hyphen</value> + <value tokenid="ooxml:Value_ST_ChapterSep_period">period</value> + <value tokenid="ooxml:Value_ST_ChapterSep_colon">colon</value> + <value tokenid="ooxml:Value_ST_ChapterSep_emDash">emDash</value> + <value tokenid="ooxml:Value_ST_ChapterSep_enDash">enDash</value> + </resource> + <resource name="ST_LineNumberRestart" resource="List"> + <value tokenid="ooxml:Value_ST_LineNumberRestart_newPage">newPage</value> + <value tokenid="ooxml:Value_ST_LineNumberRestart_newSection">newSection</value> + <value tokenid="ooxml:Value_ST_LineNumberRestart_continuous">continuous</value> + </resource> + <resource name="CT_LineNumber" resource="Properties"> + <attribute name="countBy" tokenid="ooxml:CT_LineNumber_countBy"/> + <attribute name="start" tokenid="ooxml:CT_LineNumber_start"/> + <attribute name="distance" tokenid="ooxml:CT_LineNumber_distance"/> + <attribute name="restart" tokenid="ooxml:CT_LineNumber_restart"/> + </resource> + <resource name="CT_PageNumber" resource="Properties"> + <attribute name="fmt" tokenid="ooxml:CT_PageNumber_fmt"/> + <attribute name="start" tokenid="ooxml:CT_PageNumber_start"/> + <attribute name="chapStyle" tokenid="ooxml:CT_PageNumber_chapStyle"/> + <attribute name="chapSep" tokenid="ooxml:CT_PageNumber_chapSep"/> + </resource> + <resource name="CT_Column" resource="Properties"> + <attribute name="space" tokenid="ooxml:CT_Column_space"/> + <attribute name="w" tokenid="ooxml:CT_Column_w"/> + </resource> + <resource name="CT_Columns" resource="Properties"> + <attribute name="equalWidth" tokenid="ooxml:CT_Columns_equalWidth"/> + <attribute name="space" tokenid="ooxml:CT_Columns_space"/> + <attribute name="num" tokenid="ooxml:CT_Columns_num"/> + <attribute name="sep" tokenid="ooxml:CT_Columns_sep"/> + <element name="col" tokenid="ooxml:CT_Columns_col"/> + </resource> + <resource name="ST_VerticalJc" resource="List"> + <value tokenid="ooxml:Value_ST_VerticalJc_top">top</value> + <value tokenid="ooxml:Value_ST_VerticalJc_center">center</value> + <value tokenid="ooxml:Value_ST_VerticalJc_both">both</value> + <value tokenid="ooxml:Value_ST_VerticalJc_bottom">bottom</value> + </resource> + <resource name="CT_VerticalJc" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_VerticalJc_val" action="setValue"/> + </resource> + <resource name="ST_DocGrid" resource="List"> + <value tokenid="ooxml:Value_doc_ST_DocGrid_default">default</value> + <value tokenid="ooxml:Value_doc_ST_DocGrid_lines">lines</value> + <value tokenid="ooxml:Value_doc_ST_DocGrid_linesAndChars">linesAndChars</value> + <value tokenid="ooxml:Value_doc_ST_DocGrid_snapToChars">snapToChars</value> + </resource> + <resource name="CT_DocGrid" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_DocGrid_type"/> + <attribute name="linePitch" tokenid="ooxml:CT_DocGrid_linePitch"/> + <attribute name="charSpace" tokenid="ooxml:CT_DocGrid_charSpace"/> + </resource> + <resource name="ST_HdrFtr" resource="List"> + <value tokenid="ooxml:Value_ST_HdrFtr_even">even</value> + <value tokenid="ooxml:Value_ST_HdrFtr_default">default</value> + <value tokenid="ooxml:Value_ST_HdrFtr_first">first</value> + </resource> + <resource name="ST_FtnEdn" resource="List"> + <value tokenid="ooxml:Value_doc_ST_FtnEdn_normal">normal</value> + <value tokenid="ooxml:Value_doc_ST_FtnEdn_separator">separator</value> + <value tokenid="ooxml:Value_doc_ST_FtnEdn_continuationSeparator">continuationSeparator</value> + <value tokenid="ooxml:Value_doc_ST_FtnEdn_continuationNotice">continuationNotice</value> + </resource> + <resource name="CT_HdrFtrRef" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_HdrFtrRef_type"/> + <attribute name="r:id" tokenid="ooxml:CT_HdrFtrRef_id"/> + <action name="end" action="handleHdrFtr"/> + </resource> + <resource name="EG_HdrFtrReferences" resource="Properties"> + <element name="headerReference" tokenid="ooxml:EG_HdrFtrReferences_headerReference"/> + <element name="footerReference" tokenid="ooxml:EG_HdrFtrReferences_footerReference"/> + </resource> + <resource name="CT_HdrFtr" resource="Stream"> + <action name="end" action="endParagraphGroup"/> + </resource> + <resource name="EG_SectPrContents" resource="Properties"> + <element name="bidi" tokenid="ooxml:EG_SectPrContents_bidi"/> + <element name="cols" tokenid="ooxml:EG_SectPrContents_cols"/> + <element name="docGrid" tokenid="ooxml:EG_SectPrContents_docGrid"/> + <element name="endnotePr" tokenid="ooxml:EG_SectPrContents_endnotePr"/> + <element name="footnotePr" tokenid="ooxml:EG_SectPrContents_footnotePr"/> + <element name="formProt" tokenid="ooxml:EG_SectPrContents_formProt"/> + <element name="lnNumType" tokenid="ooxml:EG_SectPrContents_lnNumType"/> + <element name="noEndnote" tokenid="ooxml:EG_SectPrContents_noEndnote"/> + <element name="paperSrc" tokenid="ooxml:EG_SectPrContents_paperSrc"/> + <element name="pgBorders" tokenid="ooxml:EG_SectPrContents_pgBorders"/> + <element name="pgMar" tokenid="ooxml:EG_SectPrContents_pgMar"/> + <element name="pgNumType" tokenid="ooxml:EG_SectPrContents_pgNumType"/> + <element name="pgSz" tokenid="ooxml:EG_SectPrContents_pgSz"/> + <element name="printerSettings" tokenid="ooxml:EG_SectPrContents_printerSettings"/> + <element name="rtlGutter" tokenid="ooxml:EG_SectPrContents_rtlGutter"/> + <element name="textDirection" tokenid="ooxml:EG_SectPrContents_textDirection"/> + <element name="titlePg" tokenid="ooxml:EG_SectPrContents_titlePg"/> + <element name="type" tokenid="ooxml:EG_SectPrContents_type"/> + <element name="vAlign" tokenid="ooxml:EG_SectPrContents_vAlign"/> + </resource> + <resource name="CT_SectPrBase" resource="Properties"/> + <resource name="CT_SectPr" resource="Properties"> + <action name="start" action="handleLastParagraphInSection"/> + <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/> + <action name="start" action="setLastParagraphInSection"/> + </resource> + <resource name="CT_finalSectPr" resource="Properties"> + <action name="start" action="handleLastParagraphInSection"/> + <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/> + </resource> + <resource name="ST_BrType" resource="List"> + <value tokenid="ooxml:Value_ST_BrType_column">column</value> + <value tokenid="ooxml:Value_ST_BrType_page">page</value> + <value tokenid="ooxml:Value_ST_BrType_textWrapping">textWrapping</value> + </resource> + <resource name="ST_BrClear" resource="List"> + <value tokenid="ooxml:Value_ST_BrClear_none">none</value> + <value tokenid="ooxml:Value_ST_BrClear_left">left</value> + <value tokenid="ooxml:Value_ST_BrClear_right">right</value> + <value tokenid="ooxml:Value_ST_BrClear_all">all</value> + </resource> + <resource name="CT_Br" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_Br_type"/> + <attribute name="clear" tokenid="ooxml:CT_Br_clear"/> + <action name="end" action="handleBreak"/> + </resource> + <resource name="CT_Br_OutOfOrder" resource="Properties"> + <attribute name="type" tokenid="ooxml:CT_Br_type"/> + <attribute name="clear" tokenid="ooxml:CT_Br_clear"/> + <action name="end" action="handleOutOfOrderBreak"/> + </resource> + <resource name="ST_PTabAlignment" resource="List"> + <value tokenid="ooxml:Value_ST_PTabAlignment_left">left</value> + <value tokenid="ooxml:Value_ST_PTabAlignment_center">center</value> + <value tokenid="ooxml:Value_ST_PTabAlignment_right">right</value> + </resource> + <resource name="ST_PTabRelativeTo" resource="List"> + <value tokenid="ooxml:Value_ST_PTabRelativeTo_margin">margin</value> + <value tokenid="ooxml:Value_ST_PTabRelativeTo_indent">indent</value> + </resource> + <resource name="ST_PTabLeader" resource="List"> + <value tokenid="ooxml:Value_ST_PTabLeader_none">none</value> + <value tokenid="ooxml:Value_ST_PTabLeader_dot">dot</value> + <value tokenid="ooxml:Value_ST_PTabLeader_hyphen">hyphen</value> + <value tokenid="ooxml:Value_ST_PTabLeader_underscore">underscore</value> + <value tokenid="ooxml:Value_ST_PTabLeader_middleDot">middleDot</value> + </resource> + <resource name="CT_PTab" resource="Properties"> + <attribute name="alignment" tokenid="ooxml:CT_PTab_alignment"/> + <attribute name="relativeTo" tokenid="ooxml:CT_PTab_relativeTo"/> + <attribute name="leader" tokenid="ooxml:CT_PTab_leader"/> + <action name="end" action="tab"/> + </resource> + <resource name="CT_Sym" resource="Properties"> + <attribute name="font" tokenid="ooxml:CT_Sym_font"/> + <attribute name="char" tokenid="ooxml:CT_Sym_char"/> + <action name="end" action="symbol"/> + </resource> + <resource name="CT_Text" resource="Stream"> + <attribute name="xml:space" tokenid="ooxml:CT_Text_space"/> + <action name="characters" action="text"/> + </resource> + <resource name="CT_FtnEdnRefChar" resource="Stream"> + <action name="end" action="ftnednref"/> + </resource> + <resource name="CT_FtnEdnSep" resource="Stream"> + <action name="end" action="ftnednsep"/> + </resource> + <resource name="CT_FtnEdnCont" resource="Stream"> + <action name="end" action="ftnedncont"/> + </resource> + <resource name="CT_PgNum" resource="Stream"> + <action name="end" action="pgNum"/> + </resource> + <resource name="CT_Cr" resource="Properties"> + <action name="end" action="handleBreak"/> + </resource> + <resource name="CT_Tab" resource="Stream"> + <action name="end" action="tab"/> + </resource> + <resource name="EG_RunInnerContent" resource="Stream"> + <element name="br" tokenid="ooxml:EG_RunInnerContent_br"/> + <element name="t" tokenid="ooxml:EG_RunInnerContent_t"/> + <element name="delText" tokenid="ooxml:EG_RunInnerContent_delText"/> + <element name="instrText" tokenid="ooxml:EG_RunInnerContent_instrText"/> + <element name="delInstrText" tokenid="ooxml:EG_RunInnerContent_delInstrText"/> + <element name="noBreakHyphen" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen"/> + <element name="softHyphen" tokenid="ooxml:EG_RunInnerContent_softHyphen"/> + <element name="dayShort" tokenid="ooxml:EG_RunInnerContent_dayShort"/> + <element name="monthShort" tokenid="ooxml:EG_RunInnerContent_monthShort"/> + <element name="yearShort" tokenid="ooxml:EG_RunInnerContent_yearShort"/> + <element name="dayLong" tokenid="ooxml:EG_RunInnerContent_dayLong"/> + <element name="monthLong" tokenid="ooxml:EG_RunInnerContent_monthLong"/> + <element name="yearLong" tokenid="ooxml:EG_RunInnerContent_yearLong"/> + <element name="annotationRef" tokenid="ooxml:EG_RunInnerContent_annotationRef"/> + <element name="footnoteRef" tokenid="ooxml:EG_RunInnerContent_footnoteRef"/> + <element name="endnoteRef" tokenid="ooxml:EG_RunInnerContent_endnoteRef"/> + <element name="separator" tokenid="ooxml:EG_RunInnerContent_separator"/> + <element name="continuationSeparator" tokenid="ooxml:EG_RunInnerContent_continuationSeparator"/> + <element name="sym" tokenid="ooxml:EG_RunInnerContent_sym"/> + <element name="pgNum" tokenid="ooxml:EG_RunInnerContent_pgNum"/> + <element name="cr" tokenid="ooxml:EG_RunInnerContent_cr"/> + <element name="tab" tokenid="ooxml:EG_RunInnerContent_tab"/> + <element name="object" tokenid="ooxml:EG_RunInnerContent_object"/> + <element name="pict" tokenid="ooxml:EG_RunInnerContent_pict"/> + <element name="fldChar" tokenid="ooxml:EG_RunInnerContent_fldChar"/> + <element name="ruby" tokenid="ooxml:EG_RunInnerContent_ruby"/> + <element name="footnoteReference" tokenid="ooxml:EG_RunInnerContent_footnoteReference"/> + <element name="endnoteReference" tokenid="ooxml:EG_RunInnerContent_endnoteReference"/> + <element name="commentReference" tokenid="ooxml:EG_RunInnerContent_commentReference"/> + <element name="drawing" tokenid="ooxml:EG_RunInnerContent_drawing"/> + <element name="ptab" tokenid="ooxml:EG_RunInnerContent_ptab"/> + <element name="lastRenderedPageBreak" tokenid="ooxml:EG_RunInnerContent_lastRenderedPageBreak"/> + </resource> + <resource name="CT_R" resource="Stream"> + <action name="start" action="startCharacterGroup"/> + <action name="start" action="sendPropertiesWithId" tokenid="ooxml:EG_RubyContent_r" sendtokenid="ooxml:EG_RubyContent_r"/> + </resource> + <resource name="ST_Hint" resource="List"> + <value tokenid="ooxml:Value_ST_Hint_default">default</value> + <value tokenid="ooxml:Value_ST_Hint_eastAsia">eastAsia</value> + <value tokenid="ooxml:Value_ST_Hint_cs">cs</value> + </resource> + <resource name="ST_Theme" resource="List"> + <value tokenid="ooxml:Value_ST_Theme_majorEastAsia">majorEastAsia</value> + <value tokenid="ooxml:Value_ST_Theme_majorBidi">majorBidi</value> + <value tokenid="ooxml:Value_ST_Theme_majorAscii">majorAscii</value> + <value tokenid="ooxml:Value_ST_Theme_majorHAnsi">majorHAnsi</value> + <value tokenid="ooxml:Value_ST_Theme_minorEastAsia">minorEastAsia</value> + <value tokenid="ooxml:Value_ST_Theme_minorBidi">minorBidi</value> + <value tokenid="ooxml:Value_ST_Theme_minorAscii">minorAscii</value> + <value tokenid="ooxml:Value_ST_Theme_minorHAnsi">minorHAnsi</value> + </resource> + <resource name="CT_Fonts" resource="Properties"> + <attribute name="hint" tokenid="ooxml:CT_Fonts_hint"/> + <attribute name="ascii" tokenid="ooxml:CT_Fonts_ascii"/> + <attribute name="hAnsi" tokenid="ooxml:CT_Fonts_hAnsi"/> + <attribute name="eastAsia" tokenid="ooxml:CT_Fonts_eastAsia"/> + <attribute name="cs" tokenid="ooxml:CT_Fonts_cs"/> + <attribute name="asciiTheme" tokenid="ooxml:CT_Fonts_asciiTheme"/> + <attribute name="hAnsiTheme" tokenid="ooxml:CT_Fonts_hAnsiTheme"/> + <attribute name="eastAsiaTheme" tokenid="ooxml:CT_Fonts_eastAsiaTheme"/> + <attribute name="cstheme" tokenid="ooxml:CT_Fonts_cstheme"/> + </resource> + <resource name="EG_RPrBase" resource="Properties"> + <element name="rStyle" tokenid="ooxml:EG_RPrBase_rStyle"/> + <element name="rFonts" tokenid="ooxml:EG_RPrBase_rFonts"/> + <element name="b" tokenid="ooxml:EG_RPrBase_b"/> + <element name="bCs" tokenid="ooxml:EG_RPrBase_bCs"/> + <element name="i" tokenid="ooxml:EG_RPrBase_i"/> + <element name="iCs" tokenid="ooxml:EG_RPrBase_iCs"/> + <element name="caps" tokenid="ooxml:EG_RPrBase_caps"/> + <element name="smallCaps" tokenid="ooxml:EG_RPrBase_smallCaps"/> + <element name="strike" tokenid="ooxml:EG_RPrBase_strike"/> + <element name="dstrike" tokenid="ooxml:EG_RPrBase_dstrike"/> + <element name="outline" tokenid="ooxml:EG_RPrBase_outline"/> + <element name="shadow" tokenid="ooxml:EG_RPrBase_shadow"/> + <element name="emboss" tokenid="ooxml:EG_RPrBase_emboss"/> + <element name="imprint" tokenid="ooxml:EG_RPrBase_imprint"/> + <element name="noProof" tokenid="ooxml:EG_RPrBase_noProof"/> + <element name="snapToGrid" tokenid="ooxml:EG_RPrBase_snapToGrid"/> + <element name="vanish" tokenid="ooxml:EG_RPrBase_vanish"/> + <element name="webHidden" tokenid="ooxml:EG_RPrBase_webHidden"/> + <element name="color" tokenid="ooxml:EG_RPrBase_color"/> + <element name="spacing" tokenid="ooxml:EG_RPrBase_spacing"/> + <element name="w" tokenid="ooxml:EG_RPrBase_w"/> + <element name="kern" tokenid="ooxml:EG_RPrBase_kern"/> + <element name="position" tokenid="ooxml:EG_RPrBase_position"/> + <element name="sz" tokenid="ooxml:EG_RPrBase_sz"/> + <element name="szCs" tokenid="ooxml:EG_RPrBase_szCs"/> + <element name="highlight" tokenid="ooxml:EG_RPrBase_highlight"/> + <element name="u" tokenid="ooxml:EG_RPrBase_u"/> + <element name="effect" tokenid="ooxml:EG_RPrBase_effect"/> + <element name="bdr" tokenid="ooxml:EG_RPrBase_bdr"/> + <element name="shd" tokenid="ooxml:EG_RPrBase_shd"/> + <element name="fitText" tokenid="ooxml:EG_RPrBase_fitText"/> + <element name="vertAlign" tokenid="ooxml:EG_RPrBase_vertAlign"/> + <element name="rtl" tokenid="ooxml:EG_RPrBase_rtl"/> + <element name="cs" tokenid="ooxml:EG_RPrBase_cs"/> + <element name="em" tokenid="ooxml:EG_RPrBase_em"/> + <element name="lang" tokenid="ooxml:EG_RPrBase_lang"/> + <element name="eastAsianLayout" tokenid="ooxml:EG_RPrBase_eastAsianLayout"/> + <element name="specVanish" tokenid="ooxml:EG_RPrBase_specVanish"/> + <element name="oMath" tokenid="ooxml:EG_RPrBase_oMath"/> + <element name="w14:glow" tokenid="ooxml:EG_RPrBase_w14_glow"/> + <element name="w14:shadow" tokenid="ooxml:EG_RPrBase_w14_shadow"/> + <element name="w14:reflection" tokenid="ooxml:EG_RPrBase_w14_reflection"/> + <element name="w14:textOutline" tokenid="ooxml:EG_RPrBase_w14_textOutline"/> + <element name="w14:textFill" tokenid="ooxml:EG_RPrBase_w14_textFill"/> + <element name="w14:scene3d" tokenid="ooxml:EG_RPrBase_w14_scene3d"/> + <element name="w14:props3d" tokenid="ooxml:EG_RPrBase_w14_props3d"/> + <element name="w14:ligatures" tokenid="ooxml:EG_RPrBase_w14_ligatures"/> + <element name="w14:numForm" tokenid="ooxml:EG_RPrBase_w14_numForm"/> + <element name="w14:numSpacing" tokenid="ooxml:EG_RPrBase_w14_numSpacing"/> + <element name="w14:stylisticSets" tokenid="ooxml:EG_RPrBase_w14_stylisticSets"/> + <element name="w14:cntxtAlts" tokenid="ooxml:EG_RPrBase_w14_cntxtAlts"/> + </resource> + <resource name="EG_RPrContent" resource="Properties"> + <element name="rPrChange" tokenid="ooxml:EG_RPrContent_rPrChange"/> + </resource> + <resource name="CT_RPr" resource="Properties"> + </resource> + <resource name="CT_RPrOriginal" resource="Properties"/> + <resource name="CT_ParaRPrOriginal" resource="Properties"/> + <resource name="CT_ParaRPr" resource="Properties"> + <element name="ins" tokenid="ooxml:CT_ParaRPr_ins"/> + <element name="del" tokenid="ooxml:CT_ParaRPr_del"/> + <element name="moveFrom" tokenid="ooxml:CT_ParaRPr_moveFrom"/> + <element name="moveTo" tokenid="ooxml:CT_ParaRPr_moveTo"/> + <element name="rPrChange" tokenid="ooxml:CT_ParaRPr_rPrChange"/> + </resource> + <resource name="CT_ParaTrackChange" resource="Properties"> + <action name="start" action="tokenproperty"/> + <action name="start" action="sendPropertiesWithId" sendtokenid="ooxml:paratrackchange"/> + <action name="start" action="clearProps"/> + </resource> + <resource name="CT_AltChunk" resource="Properties"> + <attribute name="r:id" tokenid="ooxml:CT_AltChunk"/> + <action name="start" action="handleAltChunk"/> + </resource> + <resource name="ST_RubyAlign" resource="List"> + <value tokenid="ooxml:Value_ST_RubyAlign_center">center</value> + <value tokenid="ooxml:Value_ST_RubyAlign_distributeLetter">distributeLetter</value> + <value tokenid="ooxml:Value_ST_RubyAlign_distributeSpace">distributeSpace</value> + <value tokenid="ooxml:Value_ST_RubyAlign_left">left</value> + <value tokenid="ooxml:Value_ST_RubyAlign_right">right</value> + <value tokenid="ooxml:Value_ST_RubyAlign_rightVertical">rightVertical</value> + </resource> + <resource name="CT_RubyAlign" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_RubyAlign_val" action="setValue"/> + </resource> + <resource name="CT_RubyPr" resource="Properties"> + <element name="rubyAlign" tokenid="ooxml:CT_RubyPr_rubyAlign"/> + <element name="hps" tokenid="ooxml:CT_RubyPr_hps"/> + <element name="hpsRaise" tokenid="ooxml:CT_RubyPr_hpsRaise"/> + <element name="hpsBaseText" tokenid="ooxml:CT_RubyPr_hpsBaseText"/> + <element name="lid" tokenid="ooxml:CT_RubyPr_lid"/> + <element name="dirty" tokenid="ooxml:CT_RubyPr_dirty"/> + <action name="start" action="sendPropertiesWithId" tokenid="ooxml:CT_RubyPr" sendtokenid="ooxml:CT_RubyPr"/> + </resource> + <resource name="CT_Ruby" resource="Stream"> + <element name="rubyPr" tokenid="ooxml:CT_RubyPr"/> + <element name="rt" tokenid="ooxml:CT_Ruby_rt"/> + <element name="rubyBase" tokenid="ooxml:CT_Ruby_rubyBase"/> + <action name="start" action="sendPropertiesWithId" tokenid="ooxml:EG_RunInnerContent_ruby" sendtokenid="ooxml:EG_RunInnerContent_ruby"/> + </resource> + <resource name="CT_RubyContent" resource="Stream"> + <action name="start" action="sendPropertiesWithId" tokenid="ooxml:CT_Ruby_rt" sendtokenid="ooxml:CT_Ruby_rt"/> + <action name="start" action="sendPropertiesWithId" tokenid="ooxml:CT_Ruby_rubyBase" sendtokenid="ooxml:CT_Ruby_rubyBase"/> + </resource> + <resource name="EG_RubyContent" resource="Stream"> + <element name="r" tokenid="ooxml:EG_RubyContent_r"/> + </resource> + <resource name="CT_Lock" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Lock_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_SdtDateMappingType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_SdtDateMappingType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_CalendarType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_CalendarType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_SdtText" resource="Properties"> + <attribute name="multiLine" tokenid="ooxml:CT_SdtText_multiLine"/> + </resource> + <resource name="CT_SdtPlaceholder" resource="Properties"> + <attribute name="docPart" tokenid="ooxml:CT_SdtPlaceholder_docPart"/> + </resource> + <resource name="CT_DataBinding" resource="Properties"> + <attribute name="prefixMappings" tokenid="ooxml:CT_DataBinding_prefixMappings"/> + <attribute name="xpath" tokenid="ooxml:CT_DataBinding_xpath"/> + <attribute name="storeItemID" tokenid="ooxml:CT_DataBinding_storeItemID"/> + </resource> + <resource name="CT_SdtColor" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SdtColor_val"/> + </resource> + <resource name="CT_SdtPr" resource="Properties"> + <element name="rPr" tokenid="ooxml:CT_SdtPr_rPr"/> + <element name="alias" tokenid="ooxml:CT_SdtPr_alias"/> + <element name="lock" tokenid="ooxml:CT_SdtPr_lock"/> + <element name="placeholder" tokenid="ooxml:CT_SdtPr_placeholder"/> + <element name="showingPlcHdr" tokenid="ooxml:CT_SdtPr_showingPlcHdr"/> + <element name="dataBinding" tokenid="ooxml:CT_SdtPr_dataBinding"/> + <element name="temporary" tokenid="ooxml:CT_SdtPr_temporary"/> + <element name="id" tokenid="ooxml:CT_SdtPr_id"/> + <element name="tag" tokenid="ooxml:CT_SdtPr_tag"/> + <element name="equation" tokenid="ooxml:CT_SdtPr_equation"/> + <element name="comboBox" tokenid="ooxml:CT_SdtPr_comboBox"/> + <element name="w14:checkbox" tokenid="ooxml:CT_SdtPr_checkbox"/> + <element name="date" tokenid="ooxml:CT_SdtPr_date"/> + <element name="docPartObj" tokenid="ooxml:CT_SdtPr_docPartObj"/> + <element name="docPartList" tokenid="ooxml:CT_SdtPr_docPartList"/> + <element name="dropDownList" tokenid="ooxml:CT_SdtPr_dropDownList"/> + <element name="picture" tokenid="ooxml:CT_SdtPr_picture"/> + <element name="richText" tokenid="ooxml:CT_SdtPr_richText"/> + <element name="text" tokenid="ooxml:CT_SdtPr_text"/> + <element name="citation" tokenid="ooxml:CT_SdtPr_citation"/> + <element name="group" tokenid="ooxml:CT_SdtPr_group"/> + <element name="bibliography" tokenid="ooxml:CT_SdtPr_bibliography"/> + <element name="w15:color" tokenid="ooxml:CT_SdtPr_color"/> + </resource> + <resource name="CT_SdtEndPr" resource="Properties"> + <element name="rPr" tokenid="ooxml:CT_SdtEndPr_rPr"/> + </resource> + <resource name="CT_DirContentRun" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_DirContentRun_val" action="setValue"/> + <action name="start" action="pushBiDiEmbedLevel"/> + <action name="end" action="popBiDiEmbedLevel"/> + </resource> + <resource name="ST_Direction" resource="List"> + <value tokenid="ooxml:Value_ST_Direction_ltr">ltr</value> + <value tokenid="ooxml:Value_ST_Direction_rtl">rtl</value> + </resource> + <resource name="CT_SdtContentRun" resource="Stream"/> + <resource name="CT_SdtContentBlock" resource="Stream"/> + <resource name="CT_SdtContentRow" resource="Stream"/> + <resource name="CT_SdtContentCell" resource="Stream"> + <action name="start" action="startSdt"/> + <action name="end" action="endSdt"/> + </resource> + <resource name="CT_SdtBlock" resource="Stream"> + <element name="sdtPr" tokenid="ooxml:CT_SdtBlock_sdtPr"/> + <element name="sdtEndPr" tokenid="ooxml:CT_SdtBlock_sdtEndPr"/> + <element name="sdtContent" tokenid="ooxml:CT_SdtBlock_sdtContent"/> + <element name="sdtEndContent" tokenid="ooxml:CT_SdtBlock_sdtEndContent"/> + <action name="start" action="startSdt"/> + <action name="end" action="endSdt"/> + </resource> + <resource name="CT_SdtRun" resource="Stream"> + <element name="sdtPr" tokenid="ooxml:CT_SdtRun_sdtPr"/> + <element name="sdtEndPr" tokenid="ooxml:CT_SdtRun_sdtEndPr"/> + <element name="sdtContent" tokenid="ooxml:CT_SdtRun_sdtContent"/> + <element name="sdtEndContent" tokenid="ooxml:CT_SdtRun_sdtEndContent"/> + <action name="start" action="startSdtRun"/> + <action name="end" action="endSdtRun"/> + </resource> + <resource name="CT_SdtCell" resource="Stream"> + <element name="sdtPr" tokenid="ooxml:CT_SdtCell_sdtPr"/> + <element name="sdtEndPr" tokenid="ooxml:CT_SdtCell_sdtEndPr"/> + <element name="sdtContent" tokenid="ooxml:CT_SdtCell_sdtContent"/> + </resource> + <resource name="CT_SdtRow" resource="Stream"> + <element name="sdtPr" tokenid="ooxml:CT_SdtRow_sdtPr"/> + <element name="sdtEndPr" tokenid="ooxml:CT_SdtRow_sdtEndPr"/> + <element name="sdtContent" tokenid="ooxml:CT_SdtRow_sdtContent"/> + </resource> + <resource name="CT_SdtDropDownList" resource="Properties"> + <element name="listItem" tokenid="ooxml:CT_SdtDropDownList_listItem"/> + </resource> + <resource name="CT_SdtDate" resource="Properties"> + <attribute name="fullDate" tokenid="ooxml:CT_SdtDate_fullDate"/> + <element name="dateFormat" tokenid="ooxml:CT_SdtDate_dateFormat"/> + <element name="lid" tokenid="ooxml:CT_SdtDate_lid"/> + <element name="storeMappedDataAs" tokenid="ooxml:CT_SdtDate_storeMappedDataAs"/> + <element name="calendar" tokenid="ooxml:CT_SdtDate_calendar"/> + </resource> + <resource name="CT_SdtDocPart" resource="Properties"> + <element name="docPartGallery" tokenid="ooxml:CT_SdtDocPart_docPartGallery"/> + <element name="docPartCategory" tokenid="ooxml:CT_SdtDocPart_docPartCategory"/> + <element name="docPartUnique" tokenid="ooxml:CT_SdtDocPart_docPartUnique"/> + </resource> + <resource name="CT_SdtListItem" resource="Properties"> + <attribute name="displayText" tokenid="ooxml:CT_SdtListItem_displayText"/> + <attribute name="value" tokenid="ooxml:CT_SdtListItem_value"/> + </resource> + <resource name="CT_SdtPlaceholderDocPart" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_SdtPlaceholder_docPart_val"/> + </resource> + <resource name="CT_Attr" resource="Properties"> + <attribute name="uri" tokenid="ooxml:CT_Attr_uri"/> + <attribute name="name" tokenid="ooxml:CT_Attr_name"/> + <attribute name="val" tokenid="ooxml:CT_Attr_val"/> + </resource> + <resource name="CT_CustomXmlRun" resource="Properties"> + <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlRun_customXmlPr"/> + <attribute name="uri" tokenid="ooxml:CT_CustomXmlRun_uri"/> + <attribute name="element" tokenid="ooxml:CT_CustomXmlRun_element"/> + </resource> + <resource name="CT_CustomXmlBlock" resource="Properties"> + <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlBlock_customXmlPr"/> + <attribute name="uri" tokenid="ooxml:CT_CustomXmlBlock_uri"/> + <attribute name="element" tokenid="ooxml:CT_CustomXmlBlock_element"/> + </resource> + <resource name="CT_CustomXmlCell" resource="Properties"> + <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlCell_customXmlPr"/> + <attribute name="uri" tokenid="ooxml:CT_CustomXmlCell_uri"/> + <attribute name="element" tokenid="ooxml:CT_CustomXmlCell_element"/> + </resource> + <resource name="CT_CustomXmlRow" resource="Properties"> + <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlRow_customXmlPr"/> + <attribute name="uri" tokenid="ooxml:CT_CustomXmlRow_uri"/> + <attribute name="element" tokenid="ooxml:CT_CustomXmlRow_element"/> + </resource> + <resource name="CT_SmartTagRun" resource="Properties"> + <element name="smartTagPr" tokenid="ooxml:CT_SmartTagRun_smartTagPr"/> + <attribute name="uri" tokenid="ooxml:CT_SmartTagRun_uri"/> + <attribute name="element" tokenid="ooxml:CT_SmartTagRun_element"/> + </resource> + <resource name="CT_SmartTagPr" resource="Properties"> + <element name="attr" tokenid="ooxml:CT_SmartTagPr_attr"/> + </resource> + <resource name="EG_PContent" resource="Properties"> + <element name="fldSimple" tokenid="ooxml:EG_PContent_fldSimple"/> + <element name="hyperlink" tokenid="ooxml:EG_PContent_hyperlink"/> + <element name="subDoc" tokenid="ooxml:EG_PContent_subDoc"/> + </resource> + <resource name="CT_P" resource="Stream"> + <attribute name="w14:paraId" tokenid="ooxml:AG_Parids_paraId"/> + <action name="start" action="handleLastParagraphInSection"/> + <action name="start" action="startParagraphGroup"/> + <action name="start" action="setHandle"/> + <action name="start" action="sendTableDepth"/> + <action name="end" action="endOfParagraph"/> + </resource> + <resource name="ST_TblWidth" resource="List"> + <value tokenid="ooxml:Value_ST_TblWidth_nil">nil</value> + <value tokenid="ooxml:Value_ST_TblWidth_pct">pct</value> + <value tokenid="ooxml:Value_ST_TblWidth_dxa">dxa</value> + <value tokenid="ooxml:Value_ST_TblWidth_auto">auto</value> + </resource> + <resource name="CT_Height" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Height_val"/> + <attribute name="hRule" tokenid="ooxml:CT_Height_hRule"/> + </resource> + <resource name="CT_TblWidth" resource="Properties"> + <attribute name="w" tokenid="ooxml:CT_TblWidth_w"/> + <attribute name="type" tokenid="ooxml:CT_TblWidth_type"/> + </resource> + <resource name="CT_TblPPr" resource="Properties"> + <attribute name="vertAnchor" tokenid="ooxml:CT_TblPPr_vertAnchor"/> + <attribute name="tblpYSpec" tokenid="ooxml:CT_TblPPr_tblpYSpec"/> + <attribute name="horzAnchor" tokenid="ooxml:CT_TblPPr_horzAnchor"/> + <attribute name="tblpXSpec" tokenid="ooxml:CT_TblPPr_tblpXSpec"/> + <attribute name="tblpY" tokenid="ooxml:CT_TblPPr_tblpY"/> + <attribute name="tblpX" tokenid="ooxml:CT_TblPPr_tblpX"/> + <attribute name="leftFromText" tokenid="ooxml:CT_TblPPr_leftFromText"/> + <attribute name="rightFromText" tokenid="ooxml:CT_TblPPr_rightFromText"/> + <attribute name="topFromText" tokenid="ooxml:CT_TblPPr_topFromText"/> + <attribute name="bottomFromText" tokenid="ooxml:CT_TblPPr_bottomFromText"/> + </resource> + <resource name="CT_TblGridCol" resource="Value"> + <attribute name="w" tokenid="ooxml:CT_TblGridCol_w" action="setValue"/> + <action name="start" action="setDefaultIntegerValue"/> + </resource> + <resource name="CT_TblGridBase" resource="Properties"> + <element name="gridCol" tokenid="ooxml:CT_TblGridBase_gridCol"/> + </resource> + <resource name="CT_TblGrid" resource="Properties"> + <element name="tblGridChange" tokenid="ooxml:CT_TblGrid_tblGridChange"/> + <action name="end" action="propagateTableProperties"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_TcBorders" resource="Properties"> + <element name="top" tokenid="ooxml:CT_TcBorders_top"/> + <element name="start" tokenid="ooxml:CT_TcBorders_start"/> + <element name="left" tokenid="ooxml:CT_TcBorders_left"/> + <element name="bottom" tokenid="ooxml:CT_TcBorders_bottom"/> + <element name="end" tokenid="ooxml:CT_TcBorders_end"/> + <element name="right" tokenid="ooxml:CT_TcBorders_right"/> + <element name="insideH" tokenid="ooxml:CT_TcBorders_insideH"/> + <element name="insideV" tokenid="ooxml:CT_TcBorders_insideV"/> + <element name="tl2br" tokenid="ooxml:CT_TcBorders_tl2br"/> + <element name="tr2bl" tokenid="ooxml:CT_TcBorders_tr2bl"/> + </resource> + <resource name="CT_TcMar" resource="Properties"> + <element name="top" tokenid="ooxml:CT_TcMar_top"/> + <element name="start" tokenid="ooxml:CT_TcMar_start"/> + <element name="left" tokenid="ooxml:CT_TcMar_left"/> + <element name="bottom" tokenid="ooxml:CT_TcMar_bottom"/> + <element name="end" tokenid="ooxml:CT_TcMar_end"/> + <element name="right" tokenid="ooxml:CT_TcMar_right"/> + </resource> + <resource name="ST_Merge" resource="List"> + <value tokenid="ooxml:Value_ST_Merge_continue">continue</value> + <value tokenid="ooxml:Value_ST_Merge_restart">restart</value> + </resource> + <resource name="CT_VMerge" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_VMerge_val" action="setValue"/> + </resource> + <resource name="CT_HMerge" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_HMerge_val" action="setValue"/> + </resource> + <resource name="CT_TcPrBase" resource="Properties"> + <element name="cnfStyle" tokenid="ooxml:CT_TcPrBase_cnfStyle"/> + <element name="tcW" tokenid="ooxml:CT_TcPrBase_tcW"/> + <element name="gridSpan" tokenid="ooxml:CT_TcPrBase_gridSpan"/> + <element name="hMerge" tokenid="ooxml:CT_TcPrBase_hMerge"/> + <element name="vMerge" tokenid="ooxml:CT_TcPrBase_vMerge"/> + <element name="tcBorders" tokenid="ooxml:CT_TcPrBase_tcBorders"/> + <element name="shd" tokenid="ooxml:CT_TcPrBase_shd"/> + <element name="noWrap" tokenid="ooxml:CT_TcPrBase_noWrap"/> + <element name="tcMar" tokenid="ooxml:CT_TcPrBase_tcMar"/> + <element name="textDirection" tokenid="ooxml:CT_TcPrBase_textDirection"/> + <element name="tcFitText" tokenid="ooxml:CT_TcPrBase_tcFitText"/> + <element name="vAlign" tokenid="ooxml:CT_TcPrBase_vAlign"/> + <element name="hideMark" tokenid="ooxml:CT_TcPrBase_hideMark"/> + <element name="cellDel" tokenid="ooxml:CT_TcPrBase_cellDel"/> + <element name="cellIns" tokenid="ooxml:CT_TcPrBase_cellIns"/> + <element name="cellMerge" tokenid="ooxml:CT_TcPrBase_cellMerge"/> + </resource> + <resource name="CT_TcPr" resource="Properties"> + <element name="tcPrChange" tokenid="ooxml:CT_TcPr_tcPrChange"/> + <action name="end" action="propagateCellProperties"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_TcPrInner" resource="Properties"/> + <resource name="CT_Tc" resource="TextTableCell"> + <action name="start" action="startCell"/> + <action name="end" action="endCell"/> + <action name="end" action="sendCellProperties"/> + <action name="end" action="endParagraphGroup"/> + </resource> + <resource name="ST_Cnf" resource="String"/> + <resource name="CT_Cnf" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Cnf_val"/> + <attribute name="firstRow" tokenid="ooxml:CT_Cnf_firstRow"/> + <attribute name="lastRow" tokenid="ooxml:CT_Cnf_lastRow"/> + <attribute name="firstColumn" tokenid="ooxml:CT_Cnf_firstColumn"/> + <attribute name="lastColumn" tokenid="ooxml:CT_Cnf_lastColumn"/> + <attribute name="oddVBand" tokenid="ooxml:CT_Cnf_oddVBand"/> + <attribute name="evenVBand" tokenid="ooxml:CT_Cnf_evenVBand"/> + <attribute name="oddHBand" tokenid="ooxml:CT_Cnf_oddHBand"/> + <attribute name="evenHBand" tokenid="ooxml:CT_Cnf_evenHBand"/> + <attribute name="firstRowFirstColumn" tokenid="ooxml:CT_Cnf_firstRowFirstColumn"/> + <attribute name="firstRowLastColumn" tokenid="ooxml:CT_Cnf_firstRowLastColumn"/> + <attribute name="lastRowFirstColumn" tokenid="ooxml:CT_Cnf_lastRowFirstColumn"/> + <attribute name="lastRowLastColumn" tokenid="ooxml:CT_Cnf_lastRowLastColumn"/> + </resource> + <resource name="CT_TrPrBase" resource="Properties"> + <element name="cnfStyle" tokenid="ooxml:CT_TrPrBase_cnfStyle"/> + <element name="divId" tokenid="ooxml:CT_TrPrBase_divId"/> + <element name="gridBefore" tokenid="ooxml:CT_TrPrBase_gridBefore"/> + <element name="gridAfter" tokenid="ooxml:CT_TrPrBase_gridAfter"/> + <element name="wBefore" tokenid="ooxml:CT_TrPrBase_wBefore"/> + <element name="wAfter" tokenid="ooxml:CT_TrPrBase_wAfter"/> + <element name="cantSplit" tokenid="ooxml:CT_TrPrBase_cantSplit"/> + <element name="trHeight" tokenid="ooxml:CT_TrPrBase_trHeight"/> + <element name="tblHeader" tokenid="ooxml:CT_TrPrBase_tblHeader"/> + <element name="tblCellSpacing" tokenid="ooxml:CT_TrPrBase_tblCellSpacing"/> + <element name="jc" tokenid="ooxml:CT_TrPrBase_jc"/> + <element name="hidden" tokenid="ooxml:CT_TrPrBase_hidden"/> + </resource> + <resource name="CT_TrPrBaseGridAfter" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TrPrBase_gridAfter" action="setValue"/> + <action name="end" action="handleGridAfter"/> + </resource> + <resource name="CT_TrPr" resource="Properties"> + <element name="ins" tokenid="ooxml:CT_TrPr_ins"/> + <element name="del" tokenid="ooxml:CT_TrPr_del"/> + <element name="trPrChange" tokenid="ooxml:CT_TrPr_trPrChange"/> + <action name="end" action="propagateRowProperties"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_Row" resource="TextTableRow"> + <action name="start" action="startRow"/> + <action name="end" action="sendRowProperties"/> + <action name="end" action="sendTableProperties"/> + <action name="end" action="endRow"/> + </resource> + <resource name="ST_TblLayout" resource="List"> + <value tokenid="ooxml:Value_doc_ST_TblLayout_fixed">fixed</value> + <value tokenid="ooxml:Value_doc_ST_TblLayout_autofit">autofit</value> + </resource> + <resource name="CT_TblLayoutType" resource="Value"> + <attribute name="type" tokenid="ooxml:CT_TblLayoutType_type" action="setValue"/> + </resource> + <resource name="ST_TblOverlap" resource="List"> + <value tokenid="ooxml:Value_ST_TblOverlap_never">never</value> + <value tokenid="ooxml:Value_ST_TblOverlap_overlap">overlap</value> + </resource> + <resource name="CT_TblOverlap" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TblOverlap_val" action="setValue"/> + </resource> + <resource name="CT_TblCellMar" resource="Properties"> + <element name="top" tokenid="ooxml:CT_TblCellMar_top"/> + <element name="start" tokenid="ooxml:CT_TblCellMar_start"/> + <element name="left" tokenid="ooxml:CT_TblCellMar_left"/> + <element name="bottom" tokenid="ooxml:CT_TblCellMar_bottom"/> + <element name="end" tokenid="ooxml:CT_TblCellMar_end"/> + <element name="right" tokenid="ooxml:CT_TblCellMar_right"/> + </resource> + <resource name="CT_TblBorders" resource="Properties"> + <element name="top" tokenid="ooxml:CT_TblBorders_top"/> + <element name="start" tokenid="ooxml:CT_TblBorders_start"/> + <element name="left" tokenid="ooxml:CT_TblBorders_left"/> + <element name="bottom" tokenid="ooxml:CT_TblBorders_bottom"/> + <element name="end" tokenid="ooxml:CT_TblBorders_end"/> + <element name="right" tokenid="ooxml:CT_TblBorders_right"/> + <element name="insideH" tokenid="ooxml:CT_TblBorders_insideH"/> + <element name="insideV" tokenid="ooxml:CT_TblBorders_insideV"/> + </resource> + <resource name="CT_TblPrBase" resource="Properties"> + <element name="tblStyle" tokenid="ooxml:CT_TblPrBase_tblStyle"/> + <element name="tblpPr" tokenid="ooxml:CT_TblPrBase_tblpPr"/> + <element name="tblOverlap" tokenid="ooxml:CT_TblPrBase_tblOverlap"/> + <element name="bidiVisual" tokenid="ooxml:CT_TblPrBase_bidiVisual"/> + <element name="tblStyleRowBandSize" tokenid="ooxml:CT_TblPrBase_tblStyleRowBandSize"/> + <element name="tblStyleColBandSize" tokenid="ooxml:CT_TblPrBase_tblStyleColBandSize"/> + <element name="tblW" tokenid="ooxml:CT_TblPrBase_tblW"/> + <element name="jc" tokenid="ooxml:CT_TblPrBase_jc"/> + <element name="tblCellSpacing" tokenid="ooxml:CT_TblPrBase_tblCellSpacing"/> + <element name="tblInd" tokenid="ooxml:CT_TblPrBase_tblInd"/> + <element name="tblBorders" tokenid="ooxml:CT_TblPrBase_tblBorders"/> + <element name="shd" tokenid="ooxml:CT_TblPrBase_shd"/> + <element name="tblLayout" tokenid="ooxml:CT_TblPrBase_tblLayout"/> + <element name="tblCellMar" tokenid="ooxml:CT_TblPrBase_tblCellMar"/> + <element name="tblLook" tokenid="ooxml:CT_TblPrBase_tblLook"/> + <element name="tblCaption" tokenid="ooxml:CT_TblPrBase_tblCaption"/> + <element name="tblDescription" tokenid="ooxml:CT_TblPrBase_tblDescription"/> + </resource> + <resource name="CT_TblPr" resource="Properties"> + <element name="tblPrChange" tokenid="ooxml:CT_TblPr_tblPrChange"/> + <action name="end" action="propagateTableProperties"/> + <action name="end" action="clearProps"/> + </resource> + <resource name="CT_TblPrEx" resource="Properties"> + <element name="tblPrExChange" tokenid="ooxml:CT_TblPrEx_tblPrExChange"/> + <element name="tblBorders" tokenid="ooxml:CT_TblPrEx_tblBorders"/> + </resource> + <resource name="CT_Tbl" resource="TextTable"/> + <!-- tdf#111550 : allow <w:tbl> at paragraph level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word --> + <resource name="CT_P_Tbl" resource="TextTable"> + <action name="start" action="start_P_Tbl"/> + </resource> + <resource name="CT_TblLook" resource="Properties"> + <attribute name="firstRow" tokenid="ooxml:CT_TblLook_firstRow"/> + <attribute name="lastRow" tokenid="ooxml:CT_TblLook_lastRow"/> + <attribute name="firstColumn" tokenid="ooxml:CT_TblLook_firstColumn"/> + <attribute name="lastColumn" tokenid="ooxml:CT_TblLook_lastColumn"/> + <attribute name="noHBand" tokenid="ooxml:CT_TblLook_noHBand"/> + <attribute name="noVBand" tokenid="ooxml:CT_TblLook_noVBand"/> + <attribute name="val" tokenid="ooxml:CT_TblLook_val"/> + </resource> + <resource name="ST_FtnPos" resource="List"> + <value tokenid="ooxml:Value_ST_FtnPos_pageBottom">pageBottom</value> + <value tokenid="ooxml:Value_ST_FtnPos_beneathText">beneathText</value> + <value tokenid="ooxml:Value_ST_FtnPos_sectEnd">sectEnd</value> + <value tokenid="ooxml:Value_ST_FtnPos_docEnd">docEnd</value> + </resource> + <resource name="CT_FtnPos" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FtnPos_val" action="setValue"/> + </resource> + <resource name="ST_EdnPos" resource="List"> + <value tokenid="ooxml:Value_ST_EdnPos_sectEnd">sectEnd</value> + <value tokenid="ooxml:Value_ST_EdnPos_docEnd">docEnd</value> + </resource> + <resource name="CT_EdnPos" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_EdnPos_val" action="setValue"/> + </resource> + <resource name="CT_NumFmt" resource="Properties"> + <attribute name="format" tokenid="ooxml:CT_NumFmt_format"/> + <attribute name="val" tokenid="ooxml:CT_NumFmt_val"/> + </resource> + <resource name="ST_RestartNumber" resource="List"> + <value tokenid="ooxml:Value_ST_RestartNumber_continuous">continuous</value> + <value tokenid="ooxml:Value_ST_RestartNumber_eachSect">eachSect</value> + <value tokenid="ooxml:Value_ST_RestartNumber_eachPage">eachPage</value> + </resource> + <resource name="CT_NumRestart" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_NumRestart_val" action="setValue"/> + </resource> + <resource name="CT_FtnEdnRef" resource="Properties"> + <attribute name="customMarkFollows" tokenid="ooxml:CT_FtnEdnRef_customMarkFollows"/> + <attribute name="id" tokenid="ooxml:CT_FtnEdnRef_id" action="setXNoteId"/> + <action name="end" action="handleXNotes"/> + </resource> + <resource name="CT_FtnEdnSepRef" resource="Properties"> + <attribute name="id" tokenid="ooxml:CT_FtnEdnSepRef_id"/> + </resource> + <resource name="CT_FtnEdn" resource="XNote"> + <attribute name="type" tokenid="ooxml:CT_FtnEdn_type" action="checkType"/> + <attribute name="id" tokenid="ooxml:CT_FtnEdn_id" action="checkId"/> + <action name="start" action="propagateCharacterProperties"/> + <action name="end" action="endSectionGroup"/> + </resource> + <resource name="CT_CommentRef" resource="Properties"> + <action name="end" action="handleComment"/> + </resource> + <resource name="EG_FtnEdnNumProps" resource="Properties"> + <element name="numStart" tokenid="ooxml:EG_FtnEdnNumProps_numStart"/> + <element name="numRestart" tokenid="ooxml:EG_FtnEdnNumProps_numRestart"/> + </resource> + <resource name="CT_FtnProps" resource="Properties"> + <element name="pos" tokenid="ooxml:CT_FtnProps_pos"/> + <element name="numFmt" tokenid="ooxml:CT_FtnProps_numFmt"/> + </resource> + <resource name="CT_EdnProps" resource="Properties"> + <element name="pos" tokenid="ooxml:CT_EdnProps_pos"/> + <element name="numFmt" tokenid="ooxml:CT_EdnProps_numFmt"/> + </resource> + <resource name="CT_FtnDocProps" resource="Properties"> + <element name="footnote" tokenid="ooxml:CT_FtnDocProps_footnote"/> + </resource> + <resource name="CT_EdnDocProps" resource="Properties"> + <element name="endnote" tokenid="ooxml:CT_EdnDocProps_endnote"/> + </resource> + <resource name="CT_MailMergeSourceType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MailMergeSourceType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_MailMerge" resource="Properties"> + <element name="mainDocumentType" tokenid="ooxml:CT_MailMerge_mainDocumentType"/> + <element name="linkToQuery" tokenid="ooxml:CT_MailMerge_linkToQuery"/> + <element name="dataType" tokenid="ooxml:CT_MailMerge_dataType"/> + <element name="connectString" tokenid="ooxml:CT_MailMerge_connectString"/> + <element name="query" tokenid="ooxml:CT_MailMerge_query"/> + <element name="dataSource" tokenid="ooxml:CT_MailMerge_dataSource"/> + <element name="headerSource" tokenid="ooxml:CT_MailMerge_headerSource"/> + <element name="doNotSuppressBlankLines" tokenid="ooxml:CT_MailMerge_doNotSuppressBlankLines"/> + <element name="destination" tokenid="ooxml:CT_MailMerge_destination"/> + <element name="addressFieldName" tokenid="ooxml:CT_MailMerge_addressFieldName"/> + <element name="mailSubject" tokenid="ooxml:CT_MailMerge_mailSubject"/> + <element name="mailAsAttachment" tokenid="ooxml:CT_MailMerge_mailAsAttachment"/> + <element name="viewMergedData" tokenid="ooxml:CT_MailMerge_viewMergedData"/> + <element name="activeRecord" tokenid="ooxml:CT_MailMerge_activeRecord"/> + <element name="checkErrors" tokenid="ooxml:CT_MailMerge_checkErrors"/> + <element name="odso" tokenid="ooxml:CT_MailMerge_odso"/> + </resource> + <resource name="CT_TargetScreenSz" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_TargetScreenSz_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_Compat" resource="Properties"> + <element name="useSingleBorderforContiguousCells" tokenid="ooxml:CT_Compat_useSingleBorderforContiguousCells"/> + <element name="wpJustification" tokenid="ooxml:CT_Compat_wpJustification"/> + <element name="noTabHangInd" tokenid="ooxml:CT_Compat_noTabHangInd"/> + <element name="noLeading" tokenid="ooxml:CT_Compat_noLeading"/> + <element name="spaceForUL" tokenid="ooxml:CT_Compat_spaceForUL"/> + <element name="noColumnBalance" tokenid="ooxml:CT_Compat_noColumnBalance"/> + <element name="balanceSingleByteDoubleByteWidth" tokenid="ooxml:CT_Compat_balanceSingleByteDoubleByteWidth"/> + <element name="noExtraLineSpacing" tokenid="ooxml:CT_Compat_noExtraLineSpacing"/> + <element name="doNotLeaveBackslashAlone" tokenid="ooxml:CT_Compat_doNotLeaveBackslashAlone"/> + <element name="ulTrailSpace" tokenid="ooxml:CT_Compat_ulTrailSpace"/> + <element name="doNotExpandShiftReturn" tokenid="ooxml:CT_Compat_doNotExpandShiftReturn"/> + <element name="spacingInWholePoints" tokenid="ooxml:CT_Compat_spacingInWholePoints"/> + <element name="lineWrapLikeWord6" tokenid="ooxml:CT_Compat_lineWrapLikeWord6"/> + <element name="printBodyTextBeforeHeader" tokenid="ooxml:CT_Compat_printBodyTextBeforeHeader"/> + <element name="printColBlack" tokenid="ooxml:CT_Compat_printColBlack"/> + <element name="wpSpaceWidth" tokenid="ooxml:CT_Compat_wpSpaceWidth"/> + <element name="showBreaksInFrames" tokenid="ooxml:CT_Compat_showBreaksInFrames"/> + <element name="subFontBySize" tokenid="ooxml:CT_Compat_subFontBySize"/> + <element name="suppressBottomSpacing" tokenid="ooxml:CT_Compat_suppressBottomSpacing"/> + <element name="suppressTopSpacing" tokenid="ooxml:CT_Compat_suppressTopSpacing"/> + <element name="suppressSpacingAtTopOfPage" tokenid="ooxml:CT_Compat_suppressSpacingAtTopOfPage"/> + <element name="suppressTopSpacingWP" tokenid="ooxml:CT_Compat_suppressTopSpacingWP"/> + <element name="suppressSpBfAfterPgBrk" tokenid="ooxml:CT_Compat_suppressSpBfAfterPgBrk"/> + <element name="swapBordersFacingPages" tokenid="ooxml:CT_Compat_swapBordersFacingPages"/> + <element name="convMailMergeEsc" tokenid="ooxml:CT_Compat_convMailMergeEsc"/> + <element name="truncateFontHeightsLikeWP6" tokenid="ooxml:CT_Compat_truncateFontHeightsLikeWP6"/> + <element name="mwSmallCaps" tokenid="ooxml:CT_Compat_mwSmallCaps"/> + <element name="usePrinterMetrics" tokenid="ooxml:CT_Compat_usePrinterMetrics"/> + <element name="doNotSuppressParagraphBorders" tokenid="ooxml:CT_Compat_doNotSuppressParagraphBorders"/> + <element name="wrapTrailSpaces" tokenid="ooxml:CT_Compat_wrapTrailSpaces"/> + <element name="footnoteLayoutLikeWW8" tokenid="ooxml:CT_Compat_footnoteLayoutLikeWW8"/> + <element name="shapeLayoutLikeWW8" tokenid="ooxml:CT_Compat_shapeLayoutLikeWW8"/> + <element name="alignTablesRowByRow" tokenid="ooxml:CT_Compat_alignTablesRowByRow"/> + <element name="forgetLastTabAlignment" tokenid="ooxml:CT_Compat_forgetLastTabAlignment"/> + <element name="adjustLineHeightInTable" tokenid="ooxml:CT_Compat_adjustLineHeightInTable"/> + <element name="autoSpaceLikeWord95" tokenid="ooxml:CT_Compat_autoSpaceLikeWord95"/> + <element name="noSpaceRaiseLower" tokenid="ooxml:CT_Compat_noSpaceRaiseLower"/> + <element name="doNotUseHTMLParagraphAutoSpacing" tokenid="ooxml:CT_Compat_doNotUseHTMLParagraphAutoSpacing"/> + <element name="layoutRawTableWidth" tokenid="ooxml:CT_Compat_layoutRawTableWidth"/> + <element name="layoutTableRowsApart" tokenid="ooxml:CT_Compat_layoutTableRowsApart"/> + <element name="useWord97LineBreakRules" tokenid="ooxml:CT_Compat_useWord97LineBreakRules"/> + <element name="doNotBreakWrappedTables" tokenid="ooxml:CT_Compat_doNotBreakWrappedTables"/> + <element name="doNotSnapToGridInCell" tokenid="ooxml:CT_Compat_doNotSnapToGridInCell"/> + <element name="selectFldWithFirstOrLastChar" tokenid="ooxml:CT_Compat_selectFldWithFirstOrLastChar"/> + <element name="applyBreakingRules" tokenid="ooxml:CT_Compat_applyBreakingRules"/> + <element name="doNotWrapTextWithPunct" tokenid="ooxml:CT_Compat_doNotWrapTextWithPunct"/> + <element name="doNotUseEastAsianBreakRules" tokenid="ooxml:CT_Compat_doNotUseEastAsianBreakRules"/> + <element name="useWord2002TableStyleRules" tokenid="ooxml:CT_Compat_useWord2002TableStyleRules"/> + <element name="growAutofit" tokenid="ooxml:CT_Compat_growAutofit"/> + <element name="useFELayout" tokenid="ooxml:CT_Compat_useFELayout"/> + <element name="useNormalStyleForList" tokenid="ooxml:CT_Compat_useNormalStyleForList"/> + <element name="doNotUseIndentAsNumberingTabStop" tokenid="ooxml:CT_Compat_doNotUseIndentAsNumberingTabStop"/> + <element name="useAltKinsokuLineBreakRules" tokenid="ooxml:CT_Compat_useAltKinsokuLineBreakRules"/> + <element name="allowSpaceOfSameStyleInTable" tokenid="ooxml:CT_Compat_allowSpaceOfSameStyleInTable"/> + <element name="doNotSuppressIndentation" tokenid="ooxml:CT_Compat_doNotSuppressIndentation"/> + <element name="doNotAutofitConstrainedTables" tokenid="ooxml:CT_Compat_doNotAutofitConstrainedTables"/> + <element name="autofitToFirstFixedWidthCell" tokenid="ooxml:CT_Compat_autofitToFirstFixedWidthCell"/> + <element name="underlineTabInNumList" tokenid="ooxml:CT_Compat_underlineTabInNumList"/> + <element name="displayHangulFixedWidth" tokenid="ooxml:CT_Compat_displayHangulFixedWidth"/> + <element name="splitPgBreakAndParaMark" tokenid="ooxml:CT_Compat_splitPgBreakAndParaMark"/> + <element name="doNotVertAlignCellWithSp" tokenid="ooxml:CT_Compat_doNotVertAlignCellWithSp"/> + <element name="doNotBreakConstrainedForcedTable" tokenid="ooxml:CT_Compat_doNotBreakConstrainedForcedTable"/> + <element name="doNotVertAlignInTxbx" tokenid="ooxml:CT_Compat_doNotVertAlignInTxbx"/> + <element name="useAnsiKerningPairs" tokenid="ooxml:CT_Compat_useAnsiKerningPairs"/> + <element name="cachedColBalance" tokenid="ooxml:CT_Compat_cachedColBalance"/> + <element name="compatSetting" tokenid="ooxml:CT_Compat_compatSetting"/> + </resource> + <resource name="CT_CompatSetting" resource="Properties"> + <attribute name="name" tokenid="ooxml:CT_CompatSetting_name"/> + <attribute name="uri" tokenid="ooxml:CT_CompatSetting_uri"/> + <attribute name="val" tokenid="ooxml:CT_CompatSetting_val"/> + </resource> + <resource name="CT_DocVar" resource="Properties"> + <attribute name="name" tokenid="ooxml:CT_DocVar_name"/> + <attribute name="val" tokenid="ooxml:CT_DocVar_val"/> + </resource> + <resource name="CT_DocRsids" resource="Properties"> + <element name="rsidRoot" tokenid="ooxml:CT_DocRsids_rsidRoot"/> + <element name="rsid" tokenid="ooxml:CT_DocRsids_rsid"/> + </resource> + <resource name="CT_CharacterSpacing" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_CharacterSpacing_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_SaveThroughXslt" resource="Properties"> + <attribute name="r:id" tokenid="ooxml:CT_SaveThroughXslt_r_id"/> + <attribute name="solutionID" tokenid="ooxml:CT_SaveThroughXslt_solutionID"/> + </resource> + <resource name="CT_RPrDefault" resource="Properties"> + <element name="rPr" tokenid="ooxml:CT_RPrDefault_rPr"/> + </resource> + <resource name="CT_PPrDefault" resource="Properties"> + <element name="pPr" tokenid="ooxml:CT_PPrDefault_pPr"/> + </resource> + <resource name="CT_DocDefaults" resource="Properties"> + <element name="pPrDefault" tokenid="ooxml:CT_DocDefaults_pPrDefault"/> + <element name="rPrDefault" tokenid="ooxml:CT_DocDefaults_rPrDefault"/> + </resource> + <resource name="CT_LatentStyles" resource="Properties"> + <attribute name="defLockedState" tokenid="ooxml:CT_LatentStyles_defLockedState"/> + <attribute name="defUIPriority" tokenid="ooxml:CT_LatentStyles_defUIPriority"/> + <attribute name="defSemiHidden" tokenid="ooxml:CT_LatentStyles_defSemiHidden"/> + <attribute name="defUnhideWhenUsed" tokenid="ooxml:CT_LatentStyles_defUnhideWhenUsed"/> + <attribute name="defQFormat" tokenid="ooxml:CT_LatentStyles_defQFormat"/> + <attribute name="count" tokenid="ooxml:CT_LatentStyles_count"/> + <element name="lsdException" tokenid="ooxml:CT_LatentStyles_lsdException"/> + </resource> + <resource name="CT_LsdException" resource="Properties"> + <attribute name="name" tokenid="ooxml:CT_LsdException_name"/> + <attribute name="locked" tokenid="ooxml:CT_LsdException_locked"/> + <attribute name="uiPriority" tokenid="ooxml:CT_LsdException_uiPriority"/> + <attribute name="semiHidden" tokenid="ooxml:CT_LsdException_semiHidden"/> + <attribute name="unhideWhenUsed" tokenid="ooxml:CT_LsdException_unhideWhenUsed"/> + <attribute name="qFormat" tokenid="ooxml:CT_LsdException_qFormat"/> + </resource> + <resource name="ST_ColorSchemeIndex" resource="List"> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_dark1">dark1</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_light1">light1</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_dark2">dark2</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_light2">light2</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent1">accent1</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent2">accent2</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent3">accent3</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent4">accent4</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent5">accent5</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent6">accent6</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_hyperlink">hyperlink</value> + <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_followedHyperlink">followedHyperlink</value> + </resource> + <resource name="CT_ReadingModeInkLockDown" resource="Properties"> + <attribute name="actualPg" tokenid="ooxml:CT_ReadingModeInkLockDown_actualPg"/> + <attribute name="w" tokenid="ooxml:CT_ReadingModeInkLockDown_w"/> + <attribute name="h" tokenid="ooxml:CT_ReadingModeInkLockDown_h"/> + <attribute name="fontSz" tokenid="ooxml:CT_ReadingModeInkLockDown_fontSz"/> + </resource> + <resource name="CT_WriteProtection" resource="Properties"> + <attribute name="recommended" tokenid="ooxml:CT_WriteProtection_recommended"/> + </resource> + <resource name="CT_Settings" resource="PropertyTable" tokenid="ooxml:SETTINGS"> + <element name="writeProtection" tokenid="ooxml:CT_Settings_writeProtection"/> + <element name="view" tokenid="ooxml:CT_Settings_view"/> + <element name="zoom" tokenid="ooxml:CT_Settings_zoom"/> + <element name="removePersonalInformation" tokenid="ooxml:CT_Settings_removePersonalInformation"/> + <element name="removeDateAndTime" tokenid="ooxml:CT_Settings_removeDateAndTime"/> + <element name="doNotDisplayPageBoundaries" tokenid="ooxml:CT_Settings_doNotDisplayPageBoundaries"/> + <element name="displayBackgroundShape" tokenid="ooxml:CT_Settings_displayBackgroundShape"/> + <element name="printPostScriptOverText" tokenid="ooxml:CT_Settings_printPostScriptOverText"/> + <element name="printFractionalCharacterWidth" tokenid="ooxml:CT_Settings_printFractionalCharacterWidth"/> + <element name="printFormsData" tokenid="ooxml:CT_Settings_printFormsData"/> + <element name="embedTrueTypeFonts" tokenid="ooxml:CT_Settings_embedTrueTypeFonts"/> + <element name="embedSystemFonts" tokenid="ooxml:CT_Settings_embedSystemFonts"/> + <element name="saveSubsetFonts" tokenid="ooxml:CT_Settings_saveSubsetFonts"/> + <element name="saveFormsData" tokenid="ooxml:CT_Settings_saveFormsData"/> + <element name="mirrorMargins" tokenid="ooxml:CT_Settings_mirrorMargins"/> + <element name="alignBordersAndEdges" tokenid="ooxml:CT_Settings_alignBordersAndEdges"/> + <element name="bordersDoNotSurroundHeader" tokenid="ooxml:CT_Settings_bordersDoNotSurroundHeader"/> + <element name="bordersDoNotSurroundFooter" tokenid="ooxml:CT_Settings_bordersDoNotSurroundFooter"/> + <element name="gutterAtTop" tokenid="ooxml:CT_Settings_gutterAtTop"/> + <element name="hideSpellingErrors" tokenid="ooxml:CT_Settings_hideSpellingErrors"/> + <element name="hideGrammaticalErrors" tokenid="ooxml:CT_Settings_hideGrammaticalErrors"/> + <element name="activeWritingStyle" tokenid="ooxml:CT_Settings_activeWritingStyle"/> + <element name="proofState" tokenid="ooxml:CT_Settings_proofState"/> + <element name="formsDesign" tokenid="ooxml:CT_Settings_formsDesign"/> + <element name="attachedTemplate" tokenid="ooxml:CT_Settings_attachedTemplate"/> + <element name="linkStyles" tokenid="ooxml:CT_Settings_linkStyles"/> + <element name="stylePaneFormatFilter" tokenid="ooxml:CT_Settings_stylePaneFormatFilter"/> + <element name="stylePaneSortMethod" tokenid="ooxml:CT_Settings_stylePaneSortMethod"/> + <element name="documentType" tokenid="ooxml:CT_Settings_documentType"/> + <element name="mailMerge" tokenid="ooxml:CT_Settings_mailMerge"/> + <element name="revisionView" tokenid="ooxml:CT_Settings_revisionView"/> + <element name="trackRevisions" tokenid="ooxml:CT_Settings_trackRevisions"/> + <element name="doNotTrackMoves" tokenid="ooxml:CT_Settings_doNotTrackMoves"/> + <element name="doNotTrackFormatting" tokenid="ooxml:CT_Settings_doNotTrackFormatting"/> + <element name="documentProtection" tokenid="ooxml:CT_Settings_documentProtection"/> + <element name="autoFormatOverride" tokenid="ooxml:CT_Settings_autoFormatOverride"/> + <element name="styleLockTheme" tokenid="ooxml:CT_Settings_styleLockTheme"/> + <element name="styleLockQFSet" tokenid="ooxml:CT_Settings_styleLockQFSet"/> + <element name="defaultTabStop" tokenid="ooxml:CT_Settings_defaultTabStop"/> + <element name="autoHyphenation" tokenid="ooxml:CT_Settings_autoHyphenation"/> + <element name="consecutiveHyphenLimit" tokenid="ooxml:CT_Settings_consecutiveHyphenLimit"/> + <element name="hyphenationZone" tokenid="ooxml:CT_Settings_hyphenationZone"/> + <element name="doNotHyphenateCaps" tokenid="ooxml:CT_Settings_doNotHyphenateCaps"/> + <element name="showEnvelope" tokenid="ooxml:CT_Settings_showEnvelope"/> + <element name="summaryLength" tokenid="ooxml:CT_Settings_summaryLength"/> + <element name="clickAndTypeStyle" tokenid="ooxml:CT_Settings_clickAndTypeStyle"/> + <element name="defaultTableStyle" tokenid="ooxml:CT_Settings_defaultTableStyle"/> + <element name="evenAndOddHeaders" tokenid="ooxml:CT_Settings_evenAndOddHeaders"/> + <element name="bookFoldRevPrinting" tokenid="ooxml:CT_Settings_bookFoldRevPrinting"/> + <element name="bookFoldPrinting" tokenid="ooxml:CT_Settings_bookFoldPrinting"/> + <element name="bookFoldPrintingSheets" tokenid="ooxml:CT_Settings_bookFoldPrintingSheets"/> + <element name="drawingGridHorizontalSpacing" tokenid="ooxml:CT_Settings_drawingGridHorizontalSpacing"/> + <element name="drawingGridVerticalSpacing" tokenid="ooxml:CT_Settings_drawingGridVerticalSpacing"/> + <element name="displayHorizontalDrawingGridEvery" tokenid="ooxml:CT_Settings_displayHorizontalDrawingGridEvery"/> + <element name="displayVerticalDrawingGridEvery" tokenid="ooxml:CT_Settings_displayVerticalDrawingGridEvery"/> + <element name="doNotUseMarginsForDrawingGridOrigin" tokenid="ooxml:CT_Settings_doNotUseMarginsForDrawingGridOrigin"/> + <element name="drawingGridHorizontalOrigin" tokenid="ooxml:CT_Settings_drawingGridHorizontalOrigin"/> + <element name="drawingGridVerticalOrigin" tokenid="ooxml:CT_Settings_drawingGridVerticalOrigin"/> + <element name="doNotShadeFormData" tokenid="ooxml:CT_Settings_doNotShadeFormData"/> + <element name="noPunctuationKerning" tokenid="ooxml:CT_Settings_noPunctuationKerning"/> + <element name="characterSpacingControl" tokenid="ooxml:CT_Settings_characterSpacingControl"/> + <element name="printTwoOnOne" tokenid="ooxml:CT_Settings_printTwoOnOne"/> + <element name="strictFirstAndLastChars" tokenid="ooxml:CT_Settings_strictFirstAndLastChars"/> + <element name="noLineBreaksAfter" tokenid="ooxml:CT_Settings_noLineBreaksAfter"/> + <element name="noLineBreaksBefore" tokenid="ooxml:CT_Settings_noLineBreaksBefore"/> + <element name="savePreviewPicture" tokenid="ooxml:CT_Settings_savePreviewPicture"/> + <element name="doNotValidateAgainstSchema" tokenid="ooxml:CT_Settings_doNotValidateAgainstSchema"/> + <element name="saveInvalidXml" tokenid="ooxml:CT_Settings_saveInvalidXml"/> + <element name="ignoreMixedContent" tokenid="ooxml:CT_Settings_ignoreMixedContent"/> + <element name="alwaysShowPlaceholderText" tokenid="ooxml:CT_Settings_alwaysShowPlaceholderText"/> + <element name="doNotDemarcateInvalidXml" tokenid="ooxml:CT_Settings_doNotDemarcateInvalidXml"/> + <element name="saveXmlDataOnly" tokenid="ooxml:CT_Settings_saveXmlDataOnly"/> + <element name="useXSLTWhenSaving" tokenid="ooxml:CT_Settings_useXSLTWhenSaving"/> + <element name="saveThroughXslt" tokenid="ooxml:CT_Settings_saveThroughXslt"/> + <element name="showXMLTags" tokenid="ooxml:CT_Settings_showXMLTags"/> + <element name="alwaysMergeEmptyNamespace" tokenid="ooxml:CT_Settings_alwaysMergeEmptyNamespace"/> + <element name="updateFields" tokenid="ooxml:CT_Settings_updateFields"/> + <element name="hdrShapeDefaults" tokenid="ooxml:CT_Settings_hdrShapeDefaults"/> + <element name="footnotePr" tokenid="ooxml:CT_Settings_footnotePr"/> + <element name="endnotePr" tokenid="ooxml:CT_Settings_endnotePr"/> + <element name="compat" tokenid="ooxml:CT_Settings_compat"/> + <element name="docVars" tokenid="ooxml:CT_Settings_docVars"/> + <element name="rsids" tokenid="ooxml:CT_Settings_rsids"/> + <element name="uiCompat97To2003" tokenid="ooxml:CT_Settings_uiCompat97To2003"/> + <element name="attachedSchema" tokenid="ooxml:CT_Settings_attachedSchema"/> + <element name="themeFontLang" tokenid="ooxml:CT_Settings_themeFontLang"/> + <element name="clrSchemeMapping" tokenid="ooxml:CT_Settings_clrSchemeMapping"/> + <element name="doNotIncludeSubdocsInStats" tokenid="ooxml:CT_Settings_doNotIncludeSubdocsInStats"/> + <element name="doNotAutoCompressPictures" tokenid="ooxml:CT_Settings_doNotAutoCompressPictures"/> + <element name="forceUpgrade" tokenid="ooxml:CT_Settings_forceUpgrade"/> + <element name="captions" tokenid="ooxml:CT_Settings_captions"/> + <element name="readModeInkLockDown" tokenid="ooxml:CT_Settings_readModeInkLockDown"/> + <element name="smartTagType" tokenid="ooxml:CT_Settings_smartTagType"/> + <element name="shapeDefaults" tokenid="ooxml:CT_Settings_shapeDefaults"/> + <element name="doNotEmbedSmartTags" tokenid="ooxml:CT_Settings_doNotEmbedSmartTags"/> + <element name="decimalSymbol" tokenid="ooxml:CT_Settings_decimalSymbol"/> + <element name="listSeparator" tokenid="ooxml:CT_Settings_listSeparator"/> + </resource> + <resource name="CT_FrameScrollbar" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FrameScrollbar_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_FrameLayout" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FrameLayout_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_LevelSuffix" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_LevelSuffix_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_LevelText" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_LevelText_val"/> + <attribute name="null" tokenid="ooxml:CT_LevelText_null"/> + </resource> + <resource name="CT_LvlLegacy" resource="Properties"> + <attribute name="legacy" tokenid="ooxml:CT_LvlLegacy_legacy"/> + <attribute name="legacySpace" tokenid="ooxml:CT_LvlLegacy_legacySpace"/> + <attribute name="legacyIndent" tokenid="ooxml:CT_LvlLegacy_legacyIndent"/> + </resource> + <resource name="CT_Lvl" resource="Properties"> + <element name="start" tokenid="ooxml:CT_Lvl_start"/> + <element name="numFmt" tokenid="ooxml:CT_Lvl_numFmt"/> + <element name="lvlRestart" tokenid="ooxml:CT_Lvl_lvlRestart"/> + <element name="pStyle" tokenid="ooxml:CT_Lvl_pStyle"/> + <element name="isLgl" tokenid="ooxml:CT_Lvl_isLgl"/> + <element name="suff" tokenid="ooxml:CT_Lvl_suff"/> + <element name="lvlText" tokenid="ooxml:CT_Lvl_lvlText"/> + <element name="lvlPicBulletId" tokenid="ooxml:CT_Lvl_lvlPicBulletId"/> + <element name="legacy" tokenid="ooxml:CT_Lvl_legacy"/> + <element name="lvlJc" tokenid="ooxml:CT_Lvl_lvlJc"/> + <element name="pPr" tokenid="ooxml:CT_Lvl_pPr"/> + <element name="rPr" tokenid="ooxml:CT_Lvl_rPr"/> + <attribute name="ilvl" tokenid="ooxml:CT_Lvl_ilvl"/> + <attribute name="tplc" tokenid="ooxml:CT_Lvl_tplc"/> + <attribute name="tentative" tokenid="ooxml:CT_Lvl_tentative"/> + </resource> + <resource name="ST_MultiLevelType" resource="List"> + <value tokenid="ooxml:Value_ST_MultiLevelType_singleLevel">singleLevel</value> + <value tokenid="ooxml:Value_ST_MultiLevelType_multilevel">multilevel</value> + <value tokenid="ooxml:Value_ST_MultiLevelType_hybridMultilevel">hybridMultilevel</value> + </resource> + <resource name="CT_MultiLevelType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_MultiLevelType_val" action="setValue"/> + </resource> + <resource name="CT_NumPicBullet" resource="Properties"> + <element name="pict" tokenid="ooxml:CT_NumPicBullet_pict"/> + <attribute name="numPicBulletId" tokenid="ooxml:CT_NumPicBullet_numPicBulletId"/> + </resource> + <resource name="CT_AbstractNum" resource="Properties"> + <element name="nsid" tokenid="ooxml:CT_AbstractNum_nsid"/> + <element name="multiLevelType" tokenid="ooxml:CT_AbstractNum_multiLevelType"/> + <element name="tmpl" tokenid="ooxml:CT_AbstractNum_tmpl"/> + <element name="name" tokenid="ooxml:CT_AbstractNum_name"/> + <element name="styleLink" tokenid="ooxml:CT_AbstractNum_styleLink"/> + <element name="numStyleLink" tokenid="ooxml:CT_AbstractNum_numStyleLink"/> + <element name="lvl" tokenid="ooxml:CT_AbstractNum_lvl"/> + <attribute name="abstractNumId" tokenid="ooxml:CT_AbstractNum_abstractNumId"/> + </resource> + <resource name="CT_NumLvl" resource="Properties"> + <element name="startOverride" tokenid="ooxml:CT_NumLvl_startOverride"/> + <element name="lvl" tokenid="ooxml:CT_NumLvl_lvl"/> + <attribute name="ilvl" tokenid="ooxml:CT_NumLvl_ilvl"/> + </resource> + <resource name="CT_Num" resource="Properties"> + <element name="abstractNumId" tokenid="ooxml:CT_Num_abstractNumId"/> + <element name="lvlOverride" tokenid="ooxml:CT_Num_lvlOverride"/> + <attribute name="numId" tokenid="ooxml:CT_Num_numId"/> + </resource> + <resource name="CT_Numbering" resource="PropertyTable" tokenid="ooxml:NUMBERING"> + <element name="numPicBullet" tokenid="ooxml:CT_Numbering_numPicBullet"/> + <element name="abstractNum" tokenid="ooxml:CT_Numbering_abstractNum"/> + <element name="num" tokenid="ooxml:CT_Numbering_num"/> + <element name="numIdMacAtCleanup" tokenid="ooxml:CT_Numbering_numIdMacAtCleanup"/> + </resource> + <resource name="ST_TblStyleOverrideType" resource="List"> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_wholeTable">wholeTable</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_firstRow">firstRow</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_lastRow">lastRow</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_firstCol">firstCol</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_lastCol">lastCol</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band1Vert">band1Vert</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band2Vert">band2Vert</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band1Horz">band1Horz</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band2Horz">band2Horz</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_neCell">neCell</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_nwCell">nwCell</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_seCell">seCell</value> + <value tokenid="ooxml:Value_ST_TblStyleOverrideType_swCell">swCell</value> + </resource> + <resource name="CT_Style_tblStylePr" resource="Properties"> + <element name="pPr" tokenid="ooxml:CT_PPrBase"/> + <element name="rPr" tokenid="ooxml:EG_RPrBase"/> + <element name="tblPr" tokenid="ooxml:CT_TblPrBase"/> + <element name="trPr" tokenid="ooxml:CT_TrPrBase"/> + <element name="tcPr" tokenid="ooxml:CT_TcPrBase"/> + <attribute name="type" tokenid="ooxml:CT_TblStyleOverrideType"/> + </resource> + <resource name="ST_StyleType" resource="List"> + <value tokenid="ooxml:Value_ST_StyleType_paragraph">paragraph</value> + <value tokenid="ooxml:Value_ST_StyleType_character">character</value> + <value tokenid="ooxml:Value_ST_StyleType_table">table</value> + <value tokenid="ooxml:Value_ST_StyleType_numbering">numbering</value> + </resource> + <resource name="CT_Style" resource="Properties"> + <element name="name" tokenid="ooxml:CT_Style_name"/> + <element name="aliases" tokenid="ooxml:CT_Style_aliases"/> + <element name="basedOn" tokenid="ooxml:CT_Style_basedOn"/> + <element name="next" tokenid="ooxml:CT_Style_next"/> + <element name="link" tokenid="ooxml:CT_Style_link"/> + <element name="autoRedefine" tokenid="ooxml:CT_Style_autoRedefine"/> + <element name="hidden" tokenid="ooxml:CT_Style_hidden"/> + <element name="uiPriority" tokenid="ooxml:CT_Style_uiPriority"/> + <element name="semiHidden" tokenid="ooxml:CT_Style_semiHidden"/> + <element name="unhideWhenUsed" tokenid="ooxml:CT_Style_unhideWhenUsed"/> + <element name="qFormat" tokenid="ooxml:CT_Style_qFormat"/> + <element name="locked" tokenid="ooxml:CT_Style_locked"/> + <element name="personal" tokenid="ooxml:CT_Style_personal"/> + <element name="personalCompose" tokenid="ooxml:CT_Style_personalCompose"/> + <element name="personalReply" tokenid="ooxml:CT_Style_personalReply"/> + <element name="rsid" tokenid="ooxml:CT_Style_rsid"/> + <element name="pPr" tokenid="ooxml:CT_Style_pPr"/> + <element name="rPr" tokenid="ooxml:CT_Style_rPr"/> + <element name="tblPr" tokenid="ooxml:CT_Style_tblPr"/> + <element name="trPr" tokenid="ooxml:CT_Style_trPr"/> + <element name="tcPr" tokenid="ooxml:CT_Style_tcPr"/> + <element name="tblStylePr" tokenid="ooxml:CT_Style_tblStylePr"/> + <attribute name="type" tokenid="ooxml:CT_Style_type"/> + <attribute name="styleId" tokenid="ooxml:CT_Style_styleId"/> + <attribute name="default" tokenid="ooxml:CT_Style_default"/> + <attribute name="customStyle" tokenid="ooxml:CT_Style_customStyle"/> + </resource> + <resource name="CT_Styles" resource="Table" tokenid="ooxml:STYLESHEET"/> + <resource name="ST_Panose" resource="Hex"/> + <resource name="CT_Panose" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_Panose_val" action="setValue"/> + <action name="start" action="setDefaultHexValue"/> + </resource> + <resource name="CT_Charset" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Charset_val"/> + <attribute name="characterSet" tokenid="ooxml:CT_Charset_characterSet"/> + </resource> + <resource name="ST_FontFamily" resource="List"> + <value tokenid="ooxml:Value_ST_FontFamily_decorative">decorative</value> + <value tokenid="ooxml:Value_ST_FontFamily_modern">modern</value> + <value tokenid="ooxml:Value_ST_FontFamily_roman">roman</value> + <value tokenid="ooxml:Value_ST_FontFamily_script">script</value> + <value tokenid="ooxml:Value_ST_FontFamily_swiss">swiss</value> + <value tokenid="ooxml:Value_ST_FontFamily_auto">auto</value> + </resource> + <resource name="CT_FontFamily" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_FontFamily_val" action="setValue"/> + </resource> + <resource name="ST_Pitch" resource="List"> + <value tokenid="ooxml:Value_ST_Pitch_fixed">fixed</value> + <value tokenid="ooxml:Value_ST_Pitch_variable">variable</value> + <value tokenid="ooxml:Value_ST_Pitch_default">default</value> + </resource> + <resource name="CT_Pitch" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Pitch_val"/> + </resource> + <resource name="CT_FontSig" resource="Properties"> + <attribute name="usb0" tokenid="ooxml:CT_FontSig_usb0"/> + <attribute name="usb1" tokenid="ooxml:CT_FontSig_usb1"/> + <attribute name="usb2" tokenid="ooxml:CT_FontSig_usb2"/> + <attribute name="usb3" tokenid="ooxml:CT_FontSig_usb3"/> + <attribute name="csb0" tokenid="ooxml:CT_FontSig_csb0"/> + <attribute name="csb1" tokenid="ooxml:CT_FontSig_csb1"/> + </resource> + <resource name="CT_FontRel" resource="Properties"> + <attribute name="fontKey" tokenid="ooxml:CT_FontRel_fontKey"/> + <attribute name="subsetted" tokenid="ooxml:CT_FontRel_subsetted"/> + <action name="start" action="handleFontRel"/> + </resource> + <resource name="CT_Font" resource="Properties"> + <element name="altName" tokenid="ooxml:CT_Font_altName"/> + <element name="panose1" tokenid="ooxml:CT_Font_panose1"/> + <element name="charset" tokenid="ooxml:CT_Font_charset"/> + <element name="characterSet" tokenid="ooxml:CT_Font_characterSet"/> + <element name="family" tokenid="ooxml:CT_Font_family"/> + <element name="notTrueType" tokenid="ooxml:CT_Font_notTrueType"/> + <element name="pitch" tokenid="ooxml:CT_Font_pitch"/> + <element name="sig" tokenid="ooxml:CT_Font_sig"/> + <element name="embedRegular" tokenid="ooxml:CT_Font_embedRegular"/> + <element name="embedBold" tokenid="ooxml:CT_Font_embedBold"/> + <element name="embedItalic" tokenid="ooxml:CT_Font_embedItalic"/> + <element name="embedBoldItalic" tokenid="ooxml:CT_Font_embedBoldItalic"/> + <attribute name="name" tokenid="ooxml:CT_Font_name"/> + </resource> + <resource name="CT_FontsList" resource="Table" tokenid="ooxml:FONTTABLE"/> + <resource name="EG_BlockLevelElts" resource="Properties"> + <attribute name="name" tokenid="ooxml:EG_BlockLevelElts_altChunk"/> + </resource> + <resource name="EG_RunLevelElts" resource="Stream"> + <element name="proofErr" tokenid="ooxml:EG_RunLevelElts_proofErr"/> + <element name="permStart" tokenid="ooxml:EG_RunLevelElts_permStart"/> + <element name="permEnd" tokenid="ooxml:EG_RunLevelElts_permEnd"/> + <element name="ins" tokenid="ooxml:EG_RunLevelElts_ins"/> + <element name="del" tokenid="ooxml:EG_RunLevelElts_del"/> + <element name="moveFrom" tokenid="ooxml:EG_RunLevelElts_moveFrom"/> + <element name="moveTo" tokenid="ooxml:EG_RunLevelElts_moveTo"/> + </resource> + <resource name="CT_Body" resource="Stream"> + <action name="start" action="startSectionGroup"/> + <!-- + <action name="start" action="footnoteSeparator"/> + <action name="start" action="footnoteCont"/> + <action name="start" action="endnoteSeparator"/> + <action name="start" action="endnoteCont"/> + --> + <action name="end" action="endCharacterGroup"/> + <action name="end" action="endParagraphGroup"/> + <action name="end" action="setLastSectionGroup"/> + <action name="end" action="endSectionGroup"/> + </resource> + <resource name="CT_ShapeDefaults" resource="Properties"> + <element name="v:fill" tokenid="ooxml:CT_ShapeDefaults_v_fill"/> + <element name="v:stroke" tokenid="ooxml:CT_ShapeDefaults_v_stroke"/> + <element name="v:textbox" tokenid="ooxml:CT_ShapeDefaults_v_textbox"/> + <element name="v:shadow" tokenid="ooxml:CT_ShapeDefaults_v_shadow"/> + <element name="colormru" tokenid="ooxml:CT_ShapeDefaults_colormru"/> + <element name="colormenu" tokenid="ooxml:CT_ShapeDefaults_colormenu"/> + <attribute name="spidmax" tokenid="ooxml:CT_ShapeDefaults_spidmax"/> + <attribute name="style" tokenid="ooxml:CT_ShapeDefaults_style"/> + <attribute name="fill" tokenid="ooxml:CT_ShapeDefaults_fill"/> + <attribute name="fillcolor" tokenid="ooxml:CT_ShapeDefaults_fillcolor"/> + <attribute name="stroke" tokenid="ooxml:CT_ShapeDefaults_stroke"/> + <attribute name="strokecolor" tokenid="ooxml:CT_ShapeDefaults_strokecolor"/> + <attribute name="allowincell" tokenid="ooxml:CT_ShapeDefaults_allowincell"/> + </resource> + <resource name="CT_Comments" resource="Stream"> + <action name="start" action="startSectionGroup"/> + <action name="end" action="endSectionGroup"/> + </resource> + <resource name="CT_Footnotes" resource="Stream"/> + <resource name="footnotes" resource="Stream"/> + <resource name="CT_Endnotes" resource="Stream"/> + <resource name="endnotes" resource="Stream"/> + <resource name="CT_SmartTagType" resource="Properties"> + <attribute name="namespaceuri" tokenid="ooxml:CT_SmartTagType_namespaceuri"/> + <attribute name="name" tokenid="ooxml:CT_SmartTagType_name"/> + <attribute name="url" tokenid="ooxml:CT_SmartTagType_url"/> + </resource> + <resource name="ST_ThemeColor" resource="List"> + <value tokenid="ooxml:Value_St_ThemeColor_dark1">dark1</value> + <value tokenid="ooxml:Value_St_ThemeColor_light1">light1</value> + <value tokenid="ooxml:Value_St_ThemeColor_dark2">dark2</value> + <value tokenid="ooxml:Value_St_ThemeColor_light2">light2</value> + <value tokenid="ooxml:Value_St_ThemeColor_accent1">accent1</value> + <value tokenid="ooxml:Value_St_ThemeColor_accent2">accent2</value> + <value tokenid="ooxml:Value_St_ThemeColor_accent3">accent3</value> + <value tokenid="ooxml:Value_St_ThemeColor_accent4">accent4</value> + <value tokenid="ooxml:Value_St_ThemeColor_accent5">accent5</value> + <value tokenid="ooxml:Value_St_ThemeColor_accent6">accent6</value> + <value tokenid="ooxml:Value_St_ThemeColor_hyperlink">hyperlink</value> + <value tokenid="ooxml:Value_St_ThemeColor_followedHyperlink">followedHyperlink</value> + <value tokenid="ooxml:Value_St_ThemeColor_none">none</value> + <value tokenid="ooxml:Value_St_ThemeColor_background1">background1</value> + <value tokenid="ooxml:Value_St_ThemeColor_text1">text1</value> + <value tokenid="ooxml:Value_St_ThemeColor_background2">background2</value> + <value tokenid="ooxml:Value_St_ThemeColor_text2">text2</value> + </resource> + <resource name="CT_DocPartBehavior" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_DocPartBehavior_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_DocPartType" resource="Value"> + <attribute name="val" tokenid="ooxml:CT_DocPartType_val" action="setValue"/> + <action name="start" action="setDefaultStringValue"/> + </resource> + <resource name="CT_DocPartGallery" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_DocPartGallery_val"/> + </resource> + <resource name="CT_DocPartName" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_DocPartName_val"/> + <attribute name="decorated" tokenid="ooxml:CT_DocPartName_decorated"/> + </resource> + <resource name="settings" resource="Stream"> + <element name="settings" tokenid="ooxml:settings_settings"/> + </resource> + <resource name="fonts" resource="Stream"> + <element name="fonts" tokenid="ooxml:FONTTABLE"/> + </resource> + <resource name="numbering" resource="Stream"> + <element name="numbering" tokenid="ooxml:NUMBERING"/> + </resource> + <resource name="styles" resource="Stream"> + <element name="styles" tokenid="ooxml:STYLESHEET"/> + </resource> + <resource name="ST_CaptionPos" resource="List"> + <value tokenid="ooxml:Value_doc_ST_CaptionPos_above">above</value> + <value tokenid="ooxml:Value_doc_ST_CaptionPos_below">below</value> + <value tokenid="ooxml:Value_doc_ST_CaptionPos_left">left</value> + <value tokenid="ooxml:Value_doc_ST_CaptionPos_right">right</value> + </resource> + <resource name="CT_Caption" resource="Properties"> + <attribute name="name" tokenid="ooxml:CT_Caption_name"/> + <attribute name="pos" tokenid="ooxml:CT_Caption_pos"/> + <attribute name="chapNum" tokenid="ooxml:CT_Caption_chapNum"/> + <attribute name="heading" tokenid="ooxml:CT_Caption_heading"/> + <attribute name="noLabel" tokenid="ooxml:CT_Caption_noLabel"/> + <attribute name="numFmt" tokenid="ooxml:CT_Caption_numFmt"/> + <attribute name="sep" tokenid="ooxml:CT_Caption_sep"/> + </resource> + <resource name="CT_AutoCaption" resource="Properties"> + <attribute name="name" tokenid="ooxml:CT_AutoCaption_name"/> + <attribute name="caption" tokenid="ooxml:CT_AutoCaption_caption"/> + </resource> + <resource name="CT_AutoCaptions" resource="Properties"> + <element name="autoCaption" tokenid="ooxml:CT_AutoCaptions_autoCaption"/> + </resource> + <resource name="CT_Captions" resource="Properties"> + <element name="caption" tokenid="ooxml:CT_Captions_caption"/> + <element name="autoCaptions" tokenid="ooxml:CT_Captions_autoCaptions"/> + </resource> + <resource name="CT_DocumentBase" resource="Properties"> + <element name="background" tokenid="ooxml:CT_DocumentBase_background"/> + </resource> + <resource name="CT_Document" resource="Stream"/> + <resource name="CT_GlossaryDocument" resource="Stream"/> + <resource name="CT_DocParts" resource="Stream"/> + <resource name="CT_DocPart" resource="Stream"> + <action name="start" action="startGlossaryEntry"/> + <action name="end" action="endGlossaryEntry"/> + </resource> + <resource name="CT_DocPartPr" resource="Properties"> + <action name="start" action="startSectionGroup"/> + <element name="name" tokenid="ooxml:CT_DocPartPr_name"/> + <element name="category" tokenid="ooxml:CT_DocPartPr_category"/> + </resource> + <resource name="CT_DocPartCategory" resource="Properties"> + <element name="gallery" tokenid="ooxml:CT_DocPartCategory_gallery"/> + </resource> + <resource name="document" resource="Stream"/> + <resource name="glossaryDocument" resource="Stream"/> + <resource name="CT_TxbxContent" resource="Stream"> + <action name="start" action="startTxbxContent"/> + <action name="end" action="endTxbxContent"/> + </resource> + <resource name="CT_OMath" resource="Math"/> + <resource name="CT_OMathPara" resource="Stream"/> + <resource name="CT_OMathParaPr" resource="Properties"/> + <resource name="CT_OMathJc" resource="Value"/> + </namespace> +</model> +<!-- vim: shiftwidth=2 softtabstop=2 expandtab: +--> diff --git a/writerfilter/source/ooxml/modelpreprocess.py b/writerfilter/source/ooxml/modelpreprocess.py new file mode 100644 index 000000000..d6ef4c175 --- /dev/null +++ b/writerfilter/source/ooxml/modelpreprocess.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from xml.dom import minidom +import sys + + +def prefixForGrammar(namespace): + ns = namespace.getElementsByTagName("grammar")[0].getAttribute("ns") + return ooxUrlAliases[ns] + + +def parseNamespaceAliases(node): + ret = {} + for k, v in list(node.attributes.items()): + if k.startswith("xmlns:"): + ret[k.replace('xmlns:', '')] = v + return ret + + +def parseNamespaces(fro): + sock = open(fro) + for i in sock.readlines(): + line = i.strip() + alias, url = line.split(' ')[1:] + ooxUrlAliases[url] = alias + sock.close() + + +def check(model): + defines = [i.getAttribute("name") for i in model.getElementsByTagName("define")] + for reference in [i.getAttribute("name") for i in model.getElementsByTagName("ref")]: + if reference not in defines: + raise Exception("Unknown define element with name '%s'" % reference) + for start in [i.getAttribute("name") for i in model.getElementsByTagName("start")]: + if start not in defines: + raise Exception("Unknown start element with name '%s'" % start) + + +def preprocess(model): + modelNode = [i for i in model.childNodes if i.localName == "model"][0] + # Alias -> URL, based on "xmlns:" attributes. + modelNamespaceAliases = parseNamespaceAliases(modelNode) + for i in modelNode.getElementsByTagName("namespace"): + grammarprefix = prefixForGrammar(i) + + grammar = i.getElementsByTagName("grammar")[0] + + for j in i.getElementsByTagName("element") + i.getElementsByTagName("attribute"): + # prefix + prefix = "" + if ":" in j.getAttribute("name"): + nameprefix = j.getAttribute("name").split(':')[0] + prefix = ooxUrlAliases[modelNamespaceAliases[nameprefix]] + elif j.localName == "attribute": + if grammar.getAttribute("attributeFormDefault") == "qualified": + prefix = grammarprefix + else: + prefix = grammarprefix + + # localname + if ":" in j.getAttribute("name"): + localname = j.getAttribute("name").split(':')[1] + else: + localname = j.getAttribute("name") + + # set the attributes + j.setAttribute("prefix", prefix) + j.setAttribute("localname", localname) + + +namespacesPath = sys.argv[1] +modelPath = sys.argv[2] + +# URL -> alias, from oox +ooxUrlAliases = {} +parseNamespaces(namespacesPath) + +model = minidom.parse(modelPath) +check(model) +preprocess(model) +model.writexml(sys.stdout) + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/qnametostr.py b/writerfilter/source/ooxml/qnametostr.py new file mode 100644 index 000000000..e09a98570 --- /dev/null +++ b/writerfilter/source/ooxml/qnametostr.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +import xml.sax +import sys + + +class ContentHandler(xml.sax.handler.ContentHandler): + def __init__(self): + self.tokens = [] + + def startDocument(self): + print(""" +#include "ooxml/resourceids.hxx" +#include "ooxml/QNameToString.hxx" +#include "unordered_map" + +namespace writerfilter +{ + +#ifdef DBG_UTIL + + /* ooxml */ + static const std::unordered_map<Id, const char*> g_QNameToStringMap { +""") + + def endDocument(self): + print(""" + }; + + std::string QNameToString(Id qName) + { + auto it = g_QNameToStringMap.find(qName); + if (it == g_QNameToStringMap.end()) + return std::string(); + + return it->second; + } + +#endif +} +""") + + def startElement(self, name, attrs): + for k, v in list(attrs.items()): + if k == "tokenid": + if v.startswith("ooxml:"): + token = v.replace('ooxml:', '') + if token not in self.tokens: + print(""" { NS_ooxml::LN_%s, "ooxml:%s" },""" % (token, token)) + self.tokens.append(token) + + +parser = xml.sax.make_parser() +parser.setContentHandler(ContentHandler()) +parser.parse(sys.argv[1]) + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/resourceids.py b/writerfilter/source/ooxml/resourceids.py new file mode 100644 index 000000000..70325c9d3 --- /dev/null +++ b/writerfilter/source/ooxml/resourceids.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +import xml.sax +import sys + + +class ContentHandler(xml.sax.handler.ContentHandler): + def __init__(self): + self.tokens = [] + self.counter = 90001 + + def startDocument(self): + print(""" +/* + + THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT! + +*/ + + +#ifndef INCLUDED_OOXML_RESOURCEIDS_HXX +#define INCLUDED_OOXML_RESOURCEIDS_HXX + +#include <dmapper/resourcemodel.hxx> + +namespace writerfilter { + +namespace NS_ooxml +{""") + + def endDocument(self): + print("""} + + +} +#endif // INCLUDED_OOXML_RESOURCEIDS_HXX""") + + def startElement(self, name, attrs): + for k, v in attrs.items(): + if k in ("tokenid", "sendtokenid"): + if v.startswith("ooxml:"): + token = v.replace('ooxml:', '') + if token not in self.tokens: + print(" const Id LN_%s = %s;" % (token, self.counter)) + self.tokens.append(token) + self.counter += 1 + + +parser = xml.sax.make_parser() +parser.setContentHandler(ContentHandler()) +parser.parse(sys.argv[1]) + +# vim:set shiftwidth=4 softtabstop=4 expandtab: diff --git a/writerfilter/source/ooxml/tox.ini b/writerfilter/source/ooxml/tox.ini new file mode 100644 index 000000000..c1781905c --- /dev/null +++ b/writerfilter/source/ooxml/tox.ini @@ -0,0 +1,2 @@ +[pycodestyle] +ignore = E501 |