diff --git a/ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.cpp b/ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.cpp deleted file mode 100644 index e762100493..0000000000 --- a/ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ - -#include "math_limit_elements.h" - -#include -#include -#include - -namespace cpdoccore { - - using namespace odf_types; - -namespace odf_writer { - -//--------------------------------------------------------------- -const wchar_t * math_msub::ns = L"math"; -const wchar_t * math_msub::name = L"msub"; -//---------------------------------------------------------------------------------------------------- -void math_msub::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_msub::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_msub::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} -//--------------------------------------------------------------- -const wchar_t * math_msup::ns = L"math"; -const wchar_t * math_msup::name = L"msup"; -//---------------------------------------------------------------------------------------------------- -void math_msup::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_msup::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_msup::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} - -//--------------------------------------------------------------- -const wchar_t * math_msubsup::ns = L"math"; -const wchar_t * math_msubsup::name = L"msubsup"; -//---------------------------------------------------------------------------------------------------- -void math_msubsup::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_msubsup::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_msubsup::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} -//--------------------------------------------------------------- -const wchar_t * math_none::ns = L"math"; -const wchar_t * math_none::name = L"none"; -//---------------------------------------------------------------------------------------------------- -void math_none::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_none::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_none::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} - -//--------------------------------------------------------------- -const wchar_t * math_mprescripts::ns = L"math"; -const wchar_t * math_mprescripts::name = L"mprescripts"; - -void math_mprescripts::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - //CP_CREATE_ELEMENT(content_); //TODO pich -} - -void math_mprescripts::add_child_element(const office_element_ptr & child_element) -{ - //content_.push_back(child_element); -} - -void math_mprescripts::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - // pich_qa? - /*for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - }*/ - } - } -} -//--------------------------------------------------------------- -const wchar_t * math_mmultiscripts::ns = L"math"; -const wchar_t * math_mmultiscripts::name = L"mmultiscripts"; -//---------------------------------------------------------------------------------------------------- -void math_mmultiscripts::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_mmultiscripts::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_mmultiscripts::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - for (size_t i = 0; i < pre_content_.size(); i++) - { - if (!pre_content_[i]) continue; - pre_content_[i]->serialize(CP_XML_STREAM()); - } - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} -//--------------------------------------------------------------- -const wchar_t * math_munderover::ns = L"math"; -const wchar_t * math_munderover::name = L"munderover"; -//---------------------------------------------------------------------------------------------------- -void math_munderover::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_munderover::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_munderover::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} -//--------------------------------------------------------------- -const wchar_t * math_mover::ns = L"math"; -const wchar_t * math_mover::name = L"mover"; -//---------------------------------------------------------------------------------------------------- -void math_mover::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_mover::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_mover::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - CP_XML_ATTR_OPT(L"accent", accent); - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} -//--------------------------------------------------------------- -const wchar_t * math_munder::ns = L"math"; -const wchar_t * math_munder::name = L"munder"; -//---------------------------------------------------------------------------------------------------- -void math_munder::create_child_element(const std::wstring & Ns, const std::wstring & Name) -{ - CP_CREATE_ELEMENT(content_); -} - -void math_munder::add_child_element(const office_element_ptr & child_element) -{ - content_.push_back(child_element); -} - -void math_munder::serialize(std::wostream & _Wostream) -{ - CP_XML_WRITER(_Wostream) - { - CP_XML_NODE_SIMPLE_NONS() - { - CP_XML_ATTR_OPT(L"accentunder", accentunder); - for (size_t i = 0; i < content_.size(); i++) - { - if (!content_[i]) continue; - content_[i]->serialize(CP_XML_STREAM()); - } - } - } -} -} // odf_writer -} // cpdoccore diff --git a/ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.h b/ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.h deleted file mode 100644 index 1ee7724f6b..0000000000 --- a/ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ -#pragma once - -#include "math_elements.h" -#include "../datatypes/common_attlists.h" - -namespace cpdoccore { - using namespace odf_types; - namespace odf_writer { - - class math_msub : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMSub; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_msub); - //-------------------------------------------------------------------- - class math_msup : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMSup; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_msup); - - //-------------------------------------------------------------------- - class math_msubsup : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMSubSup; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - }; - CP_REGISTER_OFFICE_ELEMENT2(math_msubsup); -//-------------------------------------------------------------------- - class math_none : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMNone; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - }; - CP_REGISTER_OFFICE_ELEMENT2(math_none); - //CP_REGISTER_OFFICE_ELEMENT3(math_none); - - //-------------------------------------------------------------------- - class math_mprescripts : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMPreScripts; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - }; - CP_REGISTER_OFFICE_ELEMENT2(math_mprescripts); -//-------------------------------------------------------------------- - class math_mmultiscripts : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMMultiScripts; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - office_element_ptr_array pre_content_; - bool bSeparate = false; - }; - CP_REGISTER_OFFICE_ELEMENT2(math_mmultiscripts); -//-------------------------------------------------------------------- - class math_munderover : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMUnderOver; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; //3 exact - base, under, over - }; - CP_REGISTER_OFFICE_ELEMENT2(math_munderover); -//-------------------------------------------------------------------- - class math_mover : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMOver; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_ - - _CP_OPT(Bool) accent; - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - }; - CP_REGISTER_OFFICE_ELEMENT2(math_mover); -//-------------------------------------------------------------------- - class math_munder : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMUnder; - - CPDOCCORE_DEFINE_VISITABLE(); - CPDOCCORE_OFFICE_DOCUMENT_IMPL_NAME_FUNCS_; - - _CP_OPT(Bool) accentunder; - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - office_element_ptr_array content_; - }; - CP_REGISTER_OFFICE_ELEMENT2(math_munder); -//-------------------------------------------------------------------- - } -} diff --git a/ASCOfficeOdfFileW/source/OdfFormat/math_token_elements.h b/ASCOfficeOdfFileW/source/OdfFormat/math_token_elements.h deleted file mode 100644 index 2bbe669a1c..0000000000 --- a/ASCOfficeOdfFileW/source/OdfFormat/math_token_elements.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ -#pragma once - -#include "math_elements.h" - -#include "../datatypes/common_attlists.h" - -namespace cpdoccore { - using namespace odf_types; - namespace odf_writer { - - class math_mi : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMI; - _CP_OPT(std::wstring) text_; - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - virtual void add_text(const std::wstring & Text); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_mi); - //CP_REGISTER_OFFICE_ELEMENT3(math_mi); - //-------------------------------------------------------------------- - class math_mo : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMO; - - _CP_OPT(Bool) accent_; - _CP_OPT(Bool) fence_; - _CP_OPT(std::wstring) form_; - _CP_OPT(Bool) stretchy_; - _CP_OPT(std::wstring) text_; - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - virtual void add_text(const std::wstring & Text); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_mo); - //CP_REGISTER_OFFICE_ELEMENT3(math_mo); - //-------------------------------------------------------------------- - class math_mn : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - _CP_OPT(std::wstring) text_; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMN; - - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - virtual void add_text(const std::wstring & Text); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_mn); - //CP_REGISTER_OFFICE_ELEMENT3(math_mn); - //-------------------------------------------------------------------- - class math_mtext : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMText; - _CP_OPT(std::wstring) text_; - - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - virtual void add_text(const std::wstring & Text); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_mtext); - //CP_REGISTER_OFFICE_ELEMENT3(math_mtext); - //-------------------------------------------------------------------- - class math_mspace : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMSpace; - - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_mspace); - //CP_REGISTER_OFFICE_ELEMENT3(math_mspace); - //-------------------------------------------------------------------- - class math_ms : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMS; - - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_ms); - //CP_REGISTER_OFFICE_ELEMENT3(math_ms); - //-------------------------------------------------------------------- - class math_mglyph : public office_math_element - { - public: - static const wchar_t * ns; - static const wchar_t * name; - static const xml::NodeType xml_type = xml::typeElement; - static const ElementType type = typeMGlyph; - - - private: - virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); - virtual void add_child_element(const office_element_ptr & child_element); - - virtual void serialize(std::wostream & _Wostream); - - odf_types::common_math_style_attlist common_attlist_; - - office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; - }; - - CP_REGISTER_OFFICE_ELEMENT2(math_mglyph); - //CP_REGISTER_OFFICE_ELEMENT3(math_mglyph); - //-------------------------------------------------------------------- - } -} diff --git a/ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.cpp b/ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.cpp deleted file mode 100644 index 0bbe7a3183..0000000000 --- a/ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.cpp +++ /dev/null @@ -1,552 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ - -#include - -#include "office_spreadsheet.h" -#include "office_scripts.h" -#include "office_chart.h" - -#include "office_elements_create.h" - -#include "odf_conversion_context.h" -#include "odf_rels.h" - -#include "styles.h" -#include "style_paragraph_properties.h" - -#include "../../DesktopEditor/graphics/pro/Fonts.h" - -#include "../utils.h" - -namespace cpdoccore { - - using namespace odf_types; - -namespace odf_writer { - - namespace utils - { - - void calculate_size_font_symbols(_font_metrix & metrix, NSFonts::IApplicationFonts *appFonts) - { - std::pair appr = _graphics_utils_::calculate_size_symbol_asc(metrix.font_name, metrix.font_size, metrix.italic, metrix.bold, appFonts); - - if (appr.first < 0.01 || appr.second < 0.01) - { - appr.first = _graphics_utils_::calculate_size_symbol_win(metrix.font_name, metrix.font_size, false/*metrix.italic*/, false/*metrix.bold*/); - appr.first = ((int)(appr.first + 0.5) + 2 * (int)appr.first) / 3.; - } - - if (appr.first > 0) - { - //pixels to pt - metrix.approx_symbol_size = appr.first;///1.1;//"1.2" волшебное число оО - metrix.IsCalc = true; - } - - } - } -////////////////////////////////////////////////////////////////////////////////////////////////// - -odf_conversion_context::odf_conversion_context(_office_type_document type_, package::odf_document * outputDocument) - : type (type_), chart_context_ (this), page_layout_context_(this), math_context_(this), font_metrix_() -{ - output_document_ = outputDocument; - current_object_ = 0; - - applicationFonts_ = NSFonts::NSApplication::Create(); - -} -odf_conversion_context::~odf_conversion_context() -{ - if (applicationFonts_) - delete applicationFonts_; -} - -void odf_conversion_context::set_fonts_directory(std::wstring pathFonts) -{ - if (applicationFonts_) - applicationFonts_->InitializeFromFolder(pathFonts); -} -void odf_conversion_context::calculate_font_metrix(std::wstring name, double size, bool italic, bool bold) -{ - if (font_metrix_.IsCalc) return; - - if (size < 1) - size = 12; - - font_metrix_.font_size = size; - font_metrix_.italic = italic; - font_metrix_.bold = bold; - font_metrix_.font_name = name; - - //////////////////////////////////////////// - utils::calculate_size_font_symbols(font_metrix_, applicationFonts_); -} -double odf_conversion_context::convert_symbol_width(double val) -{ - //width = ((int)((column_width * Digit_Width + 5) / Digit_Width * 256 )) / 256.; - //width = (int)(((256. * width + ((int)(128. / Digit_Width ))) / 256. ) * Digit_Width ); //in pixels - // - //_dxR = dxR / 1024. * width * 9525.; // to emu - - val = ((int)((val * font_metrix_.approx_symbol_size + 5) / font_metrix_.approx_symbol_size * 256)) / 256.; - - double pixels = (int)(((256. * val + ((int)(128. / font_metrix_.approx_symbol_size))) / 256.) * font_metrix_.approx_symbol_size); //in pixels - - return pixels * 0.75; //* 9525. * 72.0 / (360000.0 * 2.54); -} - -odf_style_context* odf_conversion_context::styles_context() -{ - if (!objects_.empty()) - return objects_[current_object_].style_context.get(); - else - return NULL; -} -odf_settings_context* odf_conversion_context::settings_context() -{ - if (!objects_.empty()) - return objects_[current_object_].settings_context.get(); - else - return NULL; -} - -odf_page_layout_context* odf_conversion_context::page_layout_context() -{ - return &page_layout_context_; -} - -odf_chart_context* odf_conversion_context::chart_context() -{ - return &chart_context_; -} - -odf_math_context* odf_conversion_context::math_context() -{ - return &math_context_; -} - -odf_number_styles_context* odf_conversion_context::numbers_styles_context() -{ - if (objects_.size() > 0 && objects_[current_object_].style_context) - return &(objects_[current_object_].style_context->numbers_styles()); - else return NULL; -} - -_mediaitems* odf_conversion_context::mediaitems() -{ - return &objects_[current_object_].mediaitems; -} - -void odf_conversion_context::end_document() -{ - rels rels_; - for (size_t i = 0; i < objects_.size(); i++) - { - _object & object = objects_[i]; - bool isRoot = (i == 0 ? true : false); - - if (object.content == NULL)continue; - - process_styles (object, isRoot); - process_settings(object, isRoot); - - package::content_content_ptr content_root_ = package::content_content::create(); - - if (objects_.back().scripts) - objects_.back().scripts->serialize(content_root_->styles()); - - object.content->serialize(content_root_->content()); - - for (size_t i = 0; i < object.content_styles.size(); i++) - { - object.content_styles[i]->serialize(content_root_->styles()); - } - package::content_simple_ptr content_style_ = package::content_simple::create(); - for (size_t i = 0; i < object.styles.size(); i++) - {// мастер-пейджы, заданные заливки (градиенты, битмапы), дефолтные стили, колонтитулы, разметки, заметки,... - object.styles[i]->serialize(content_style_->content()); - } - package::content_simple_ptr content_settings_ = package::content_simple::create(); - object.settings->serialize(content_settings_->content()); -//////////////////////////// - package::object_files *object_files = new package::object_files(); - if (object_files) - { - object_files->set_content (content_root_, object.content_ext); - object_files->set_styles (content_style_); - object_files->set_mediaitems(object.mediaitems); - object_files->set_settings (content_settings_); - - if (!isRoot)object_files->local_path = object.name + L"/"; - - object.mediaitems.dump_rels(rels_, object_files->local_path); - - rels_.add(relationship(std::wstring(L"text/xml"), object_files->local_path + L"styles.xml")); - rels_.add(relationship(std::wstring(L"text/xml"), object_files->local_path + L"content.xml")); - rels_.add(relationship(std::wstring(L"text/xml"), object_files->local_path + L"meta.xml")); - rels_.add(relationship(std::wstring(L"text/xml"), object_files->local_path + L"settings.xml")); - - if (isRoot) - { - object_files->local_path = L"/"; - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.") + output_document_->get_type(), object_files->local_path)); - } - else - { - switch (object.content->get_type()) - { - case typeOfficeText: - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.text"), object_files->local_path)); break; - case typeOfficeSpreadsheet: - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.spreadsheet"), object_files->local_path)); break; - case typeOfficePresentation: - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.presentation"), object_files->local_path)); break; - case typeOfficeChart: - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.chart"), object_files->local_path)); break; - case typeMath: - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.formula"), object_files->local_path)); break; - default: - rels_.add(relationship(std::wstring(L"application/vnd.oasis.opendocument.") + object.content->get_name(), object_files->local_path)); - break; - } - } - - output_document_->add_object(package::element_ptr(object_files), isRoot); - } - - } - - output_document_->set_rels(rels_); -} -void odf_conversion_context::start_chart() -{ - create_object(); - create_element(L"office", L"chart", objects_.back().content, this, true); - - chart_context_.set_styles_context(odf_conversion_context::styles_context()); - chart_context_.start_chart(get_current_object_element()); -} -void odf_conversion_context::start_spreadsheet() -{ - create_object(); - create_element(L"office", L"spreadsheet", objects_.back().content, this, true); -} -void odf_conversion_context::start_text() -{ - create_object(); - create_element(L"office", L"text", objects_.back().content, this, true); -} -void odf_conversion_context::start_presentation() -{ - create_object(); - create_element(L"office", L"presentation", objects_.back().content, this, true); - - create_element(L"office", L"scripts", objects_.back().scripts, this); -} -void odf_conversion_context::create_object(bool bAddContentExt) -{ - _object obj; - - obj.content_ext = bAddContentExt; - obj.style_context = boost::make_shared(); - obj.settings_context = boost::make_shared(); - - obj.name = get_next_name_object(); - - obj.style_context->set_odf_context(this); - obj.settings_context->set_odf_context(this); - - objects_.push_back(obj); - - current_object_ = objects_.size() - 1; -} -void odf_conversion_context::end_chart() -{ - chart_context_.end_chart(); - - end_object(); - chart_context_.set_styles_context(styles_context()); -} -bool odf_conversion_context::start_math() -{ - if (false == math_context_.isEmpty()) return false; - - if (false == math_context_.in_text_box_) - { - drawing_context()->start_drawing(); - drawing_context()->set_anchor(anchor_type::AsChar); - } - drawing_context()->start_object(get_next_name_object(), !math_context_.in_text_box_); - //имитация рисованного объекта - высота-ширина ???? - - create_object(false); - create_element(L"math", L"math", objects_.back().content, this, true); - - math_context_.set_styles_context(odf_conversion_context::styles_context()); - math_context_.start_math(get_current_object_element()); - - return true; -} -void odf_conversion_context::end_math() -{ - math_context_.end_math(); - - end_object(); - math_context_.set_styles_context(styles_context()); - - calculate_font_metrix(math_context_.font, math_context_.size, false, false); // смотреть по формуле - перевычислять только если есть изменения это шрифт и кегль - int count_symbol_height = 30; //сосчитать в math_context_ кол-во этажей - int count_symbol_width = 100; //длина символов - - _CP_OPT(double)width = convert_symbol_width(math_context_.symbol_counter * 1.73); // либра рамка формулы(её параметры) - _CP_OPT(double)height = convert_symbol_width(1.73 * (math_context_.lvl_max - math_context_.lvl_min)); - - if (false == math_context_.in_text_box_) - drawing_context()->set_size(width, height); // раскомиттить по завершению - - drawing_context()->end_object(!math_context_.in_text_box_); - - if (false == math_context_.in_text_box_) - { - drawing_context()->end_drawing(); - } - this->math_context()->symbol_counter = 0; - this->math_context()->lvl_max = 1; - this->math_context()->lvl_min = -1; - this->math_context()->lvl_down_counter = -1; - this->math_context()->lvl_up_counter = 1; -} -void odf_conversion_context::end_text() -{ - end_object(); -} -void odf_conversion_context::end_spreadsheet() -{ - end_object(); -} -void odf_conversion_context::end_presentation() -{ - end_object(); -} -void odf_conversion_context::end_object() -{ - current_object_ = 0;//main -} - -office_element_ptr & odf_conversion_context::get_current_object_element() -{ - if (objects_.empty()) - { - create_object(); - } - - return objects_[current_object_].content; -} - -std::wstring odf_conversion_context::get_next_name_object() -{ - return std::wstring(L"Object ") + boost::lexical_cast(objects_.size()); -} -void odf_conversion_context::process_settings(_object & object, bool isRoot) -{ - create_element(L"office", L"settings", object.settings, this, true); - - object.settings_context->process_office_settings(object.settings); - - if (isRoot) - { - } -} - -void odf_conversion_context::process_styles(_object & object, bool isRoot) -{ - create_element(L"office", L"font-face-decls", object.content_styles, this, true); - - for (boost::unordered_map::const_iterator it = object.mapFonts.begin(); it != object.mapFonts.end(); ++it) - { - office_element_ptr font_elm; - create_element(L"style", L"font-face", font_elm, this, true); - - style_font_face* font = dynamic_cast(font_elm.get()); - - if (font) - { - font->style_name_ = it->first; - font->svg_font_family_ = it->first; - - object.content_styles.back()->add_child_element(font_elm); - } - } - - object.styles.push_back(object.content_styles.back()); //копия - - create_element(L"office", L"styles", object.styles, this, true);//общие стили - - object.style_context->process_office_styles(object.styles.back()); - page_layout_context()->process_office_styles(object.styles.back()); - - if (isRoot) - { - create_element(L"office", L"automatic-styles", object.styles, this, true); - object.style_context->process_automatic_for_styles(object.styles.back()); - page_layout_context()->process_automatic_for_styles(object.styles.back()); - - create_element(L"office", L"master-styles", object.styles, this, true); - page_layout_context()->process_master_styles(object.styles.back()); - } - - - create_element(L"office", L"automatic-styles", object.content_styles, this, true); - object.style_context->process_automatic_styles(object.content_styles.back()); -} - -office_element_ptr odf_conversion_context::start_tabs() -{ - create_element(L"style", L"tab-stops", temporary_.elm, this, true); - return temporary_.elm; -} -std::wstring odf_conversion_context::add_image(const std::wstring & image_file_name) -{ - if (image_file_name.empty()) return L""; - - std::wstring odf_ref_name ; - mediaitems()->add_or_find(image_file_name,_mediaitems::typeImage, odf_ref_name); - - return odf_ref_name; -} -std::wstring odf_conversion_context::add_media(const std::wstring & file_name) -{ - if (file_name.empty()) return L""; - - std::wstring odf_ref_name ; - mediaitems()->add_or_find(file_name,_mediaitems::typeMedia, odf_ref_name); - - return odf_ref_name; -} -std::wstring odf_conversion_context::add_imageobject(const std::wstring & file_name) -{ - if (file_name.empty()) return L""; - - std::wstring odf_ref_name ; - mediaitems()->add_or_find(file_name,_mediaitems::typeObjectReplacement, odf_ref_name); - - return odf_ref_name; -} -std::wstring odf_conversion_context::add_oleobject(const std::wstring & file_name) -{ - if (file_name.empty()) return L""; - - std::wstring odf_ref_name ; - mediaitems()->add_or_find(file_name,_mediaitems::typeOleObject, odf_ref_name); - - return odf_ref_name; -} -void odf_conversion_context::add_tab(_CP_OPT(int) type, _CP_OPT(length) _length, _CP_OPT(int) leader) -{ - if (!temporary_.elm) return; - - office_element_ptr elm; - create_element(L"style", L"tab-stop", elm, this, true); - - style_tab_stop* tab = dynamic_cast(elm.get()); - if (tab) - { - if (_length) - tab->style_position_ = length(_length->get_value_unit(length::cm), length::cm); - - if (type) - { - switch(*type) - { - case 0: tab->style_type_ = style_type::Left; break;//tabjcBar = 0, - case 1: tab->style_type_ = style_type::Center; break;//tabjcCenter = 1, - case 2: tab->style_type_ = style_type::Left; break;//tabjcClear = 2, - case 3: tab->style_type_ = style_type::Left; break;//tabjcDecimal = 3, - case 4: tab->style_type_ = style_type::Right; break;//tabjcEnd = 4, - case 5: tab->style_type_ = style_type::Left; break;//tabjcNum = 5, - case 6: tab->style_type_ = style_type::Left; break;//tabjcStart = 6, - case 7: tab->style_type_ = style_type::Right; break;//tabjcRight = 7, - case 8: tab->style_type_ = style_type::Left; break;//tabjcLeft = 8 - } - } - if (leader) - { - switch(*leader) - { - case 0: tab->style_leader_type_ = line_type::Single ; - tab->style_leader_style_= line_style::Dotted; - break; // tabtlcDot = 0, - case 1: tab->style_leader_type_ = line_type::Single ; - tab->style_leader_style_= line_style::Wave; - break; // tabtlcHeavy = 1, - case 2: tab->style_leader_type_ = line_type::Single ; - tab->style_leader_style_= line_style::Dash; - break; // tabtlcHyphen = 2, - case 3: tab->style_leader_type_ = line_type::Single ; - tab->style_leader_style_= line_style::LongDash; - break; // tabtlcMiddleDot = 3, - case 4: tab->style_leader_type_ = line_type::None; - break; // tabtlcNone = 4, - case 5: tab->style_leader_type_ = line_type::Single; - tab->style_leader_style_= line_style::Solid; - break; // tabtlcUnderscore = 5 - } - } - temporary_.elm->add_child_element(elm); - } -} - -void odf_conversion_context::end_tabs() -{ - temporary_.elm = office_element_ptr(); - temporary_.style_elm = office_element_ptr(); - temporary_.style_name = L""; - -} -void odf_conversion_context::add_font(const std::wstring& font_name) -{ - if (objects_.empty())return; - - if (objects_[current_object_].mapFonts.find(font_name) == objects_[current_object_].mapFonts.end()) - { - objects_[current_object_].mapFonts.insert(std::make_pair(font_name, 1)); - } - else - { - objects_[current_object_].mapFonts[font_name]++; - } -} -} -} diff --git a/ASCOfficeOdfFileW/source/OdfFormat/odf_math_context.cpp b/ASCOfficeOdfFileW/source/OdfFormat/odf_math_context.cpp deleted file mode 100644 index 87ec92a47b..0000000000 --- a/ASCOfficeOdfFileW/source/OdfFormat/odf_math_context.cpp +++ /dev/null @@ -1,236 +0,0 @@ -/* -* (c) Copyright Ascensio System SIA 2010-2019 -* -* This program is a free software product. You can redistribute it and/or -* modify it under the terms of the GNU Affero General Public License (AGPL) -* version 3 as published by the Free Software Foundation. In accordance with -* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect -* that Ascensio System SIA expressly excludes the warranty of non-infringement -* of any third-party rights. -* -* This program is distributed WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For -* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html -* -* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha -* street, Riga, Latvia, EU, LV-1050. -* -* The interactive user interfaces in modified source and object code versions -* of the Program must display Appropriate Legal Notices, as required under -* Section 5 of the GNU AGPL version 3. -* -* Pursuant to Section 7(b) of the License you must retain the original Product -* logo when distributing the program. Pursuant to Section 7(e) we decline to -* grant you any rights under trademark law for use of our trademarks. -* -* All the Product's GUI elements, including illustrations and icon sets, as -* well as technical writing content are licensed under the terms of the -* Creative Commons Attribution-ShareAlike 4.0 International. See the License -* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode -* -*/ - -#include "logging.h" - -#include - -#include "../../../ASCOfficeOdfFile/formulasconvert/formulasconvert.h" - -#include - -#include "odf_math_context.h" -#include "odf_text_context.h" -#include "odf_style_context.h" -#include "odf_drawing_context.h" - -#include "odf_conversion_context.h" - -#include "ods_table_state.h" - -#include "math_elements.h" -#include "math_layout_elements.h" -#include "math_table_elements.h" -#include "math_limit_elements.h" -#include "math_token_elements.h" -//#include "math_elementaries.h" - - - -namespace cpdoccore -{ -using namespace odf_types; - -namespace odf_writer -{ - struct odf_math_state - { - odf_math_state() { } - void clear() - { - elements_.clear(); - } - std::vector elements_; - }; - - struct odf_math_level_state - { - style_text_properties *text_properties_; - style_paragraph_properties *paragraph_properties_; - - office_element_ptr elm; - }; - - class odf_math_context::Impl - { - public: - Impl(odf_conversion_context *odf_context) : odf_context_(odf_context) - { - styles_context_ = NULL; - current_paragraph_properties = NULL; - current_text_properties = NULL; - } - odf_math_state current_math_state_; - void clear_current(); - - style_paragraph_properties *current_paragraph_properties; - style_text_properties *current_text_properties; - std::vector current_level_; //постоянно меняющийся список уровней наследования - std::vector math_list_; //все элементы .. для удобства разделение по "топам" - odf_conversion_context *odf_context_; - office_math *root_element_; - - odf_style_context *styles_context_; - }; - - void odf_math_context::Impl::clear_current() - { - current_math_state_.clear(); - } - - static formulasconvert::oox2odf_converter formulas_converter_math; - - odf_math_context::odf_math_context(odf_conversion_context *odf_context) - : impl_(new odf_math_context::Impl(odf_context)), - lvl_of_me(0), style_flag(true), counter(0), symbol_counter(0), annotation_flag(true), annotation_oper_flag(false), matrix_row_counter(0) - { - mo = { L'+', L'-', L'±', L'∓', L'∙', L'×', L'∗', L'÷', L'/', L'≂', L'⊕', L'⊖', L'⊙', L'⊗', L'⊘', L'∘', L'¬', L'∧', L'∨', // un/bi operators - L'=', L'≠', L'<', L'≤', L'>', L'≥', L'≪', L'≫', L'≈', L'~', L'≃', L'≡', L'∝', L'∥', L'⟂', L'|', L'∤', L'→', L'⊷', // relations - L'⊶', L'≝', L'⇐', L'⇔', L'⇒', L'≺', L'≻', L'≼', L'≽', L'≾', L'≿', L'⊀', L'⊁', // relationships over sets - L'∈', L'∉', L'∋', L'∩', L'∪', L'/', L'⊂', L'⊆', L'⊃', L'⊇', L'⊄', L'⊈', L'⊅', L'⊉', // - L'∞', L'∂', L'∇', L'∃', L'∄', L'∀', L'ħ', L'ƛ', L'ℜ', L'ℑ', L'℘', L'ℒ', L'ℱ', L'←', L'→', L'↑', L'↓', // others - L'…', L'⋯', L'⋮', L'⋰', L'⋱', L'∞', L'→', - L'∫', L'∬', L'∭', L'∮', L'∯', L'∰', - L'∑', L'∏', L'∐', L'⋃', L'⋂', L'⋀', L'⋁', L'≝', L'≞', L'≜', - L'˙', L'¨', L'⃛', L'̂', L'̌', L'́'//, L'̆', L'', L'', L'', L'', L'', - }; - - diak_symbols = { {L"̇", L"˙"}, {L"̈", L"¨"}, {L"⃛", L"⃛"}, {L"̂", L"˄"}, {L"̌", L"ˇ"}, {L"́", L"´"}, {L"̀", L"ˋ"}, {L"̆", L"˘"}, {L"̃", L"~"}, {L"̅", L"¯"}, - {L"̿", L"═"}, {L"⏞", L"⏞"}, {L"⃖", L"←"}, {L"⃗", L"→"}, {L"⃡", L"↔"}, {L"⃐", L"↼"}, {L"⃑", L"⇀"}, {L"̲", L"-"} - //{L'', L''}, { L'', L'' }, { L'', L'' }, { L'', L'' }, { L'', L'' }, { L'', L'' }, { L'', L'' } - }; - - annotation_diak_symbols = { {L"˙",L"dot"}, {L"¨",L"ddot"}, {L"⃛",L"dddot"}, {L"˄", L"hat"}, {L"ˇ",L"check"}, {L"´",L"acute"}, {L"ˋ",L"grave"}, {L"˘",L"breve"}, - {L"~",L"tilde"},{L"¯",L"overline"},{L"→",L"vec"}, {L"⇀",L"harpoon"}, {L"-",L"underline"}/*, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""},{L"",L""}, - {L"",L""}*/ - }; - - annotation_operators = { {L"∫",L"int"}, {L"∬", L"iint "}, {L"∭", L"iiint "}, {L"∮", L"lint "}, {L"∯", L"llint "}, - {L"∰", L"lllint "}, {L"∑", L"sum "}, {L"∏", L"prod "}, {L"∐", L"coprod "} - - }; - - annotation_brackets_begin = { {L"(", L"("}, {L"[", L"["}, {L"{", L"lbrace"}, {L"⟨", L"langle"}, {L"〈", L"langle"}, {L"⌊", L"lfloor"}, {L"⌈", L"lceil"}, {L"|", L"lline"}, {L"‖", L"ldline"}, - {L"]", L"]"}, {L"⟦", L"ldbracket"} - }; - annotation_brackets_end = { {L")", L")"}, {L"]", L"]"}, {L"}", L"rbrace"}, {L"⟩", L"rangle"}, {L"〉", L"rangle"},{L"⌋", L"rfloor"}, {L"⌉", L"rceil"}, {L"|", L"rline"}, {L"‖", L"rdline"}, - {L"[", L"["}, {L"⟧", L"rdbracket"} - }; - lvl_counter = 1; - lvl_up_counter = 1; - lvl_down_counter = -1; - lvl_max = 1; - lvl_min = -1; - //debug_stream.open(debug_fileName); - } - - odf_math_context::~odf_math_context() - { - //debug_stream.close(); - } - - void odf_math_context::set_styles_context(odf_style_context * style_context) - { - impl_->styles_context_ = style_context; - - impl_->odf_context_->drawing_context()->set_styles_context(style_context); - } - - odf_drawing_context * odf_math_context::drawing_context() - { - return impl_->odf_context_->drawing_context(); - } - - odf_text_context * odf_math_context::text_context() - { - return impl_->odf_context_->text_context(); - } - - void odf_math_context::start_math(office_element_ptr & root) - { - impl_->root_element_ = dynamic_cast(root.get()); - - if (!impl_->root_element_) return; - - impl_->root_element_->create_child_element(L"math", L"semantics"); - - size_t level = impl_->current_level_.size(); - - odf_math_level_state level_state = { NULL, NULL, root }; - odf_element_state state(root, L"", office_element_ptr(), level); - - impl_->current_level_.push_back(level_state); - impl_->current_math_state_.elements_.push_back(state); - style_flag = true; - } - - bool odf_math_context::start_element(office_element_ptr & elm) - { - - if (!elm) - return false; - impl_->current_level_.back().elm->add_child_element(elm); - - size_t level = impl_->current_level_.size(); - - odf_element_state state(elm, L"", office_element_ptr(), level); - odf_math_level_state level_state = { NULL, NULL, elm }; - - impl_->current_level_.push_back(level_state); - impl_->current_math_state_.elements_.push_back(state); - return true; - } - - void odf_math_context::end_element() - { - impl_->current_level_.pop_back(); - } - bool odf_math_context::isEmpty() - { - return impl_->current_level_.empty(); - } - void odf_math_context::end_math() - { - if (impl_->current_math_state_.elements_.empty()) return; - - - - end_element(); - /////////////////// - - - - - impl_->clear_current(); - } -} -} \ No newline at end of file diff --git a/ASCOfficeOdfFileW/source/OdfFormat/odf_math_context.h b/ASCOfficeOdfFileW/source/OdfFormat/odf_math_context.h deleted file mode 100644 index 7cd9298abe..0000000000 --- a/ASCOfficeOdfFileW/source/OdfFormat/odf_math_context.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ -#pragma once - -#include -#include -#include -#include -#include "office_elements_create.h" -#include - //#include "../../../ASCOfficeOdfFile/src/odf/datatypes/mathclass.h" - - -#define CREATE_MATH_TAG(tag)\ - odf_writer::office_element_ptr elm;\ - odf_writer::create_element(L"math", tag, elm, odf_context());\ - odf_context()->math_context()->current_tag = tag; -//odf_context()->math_context()->debug_stream << tag << "\n"; - -#define OPEN_MATH_TAG(elm)\ - odf_context()->math_context()->tagFlag.push_back(odf_context()->math_context()->start_element(elm));\ - if (odf_context()->math_context()->current_tag == L"mn")\ - {\ - typedef odf_writer::math_mn* T;\ - T tmp = dynamic_cast(elm.get());\ - odf_context()->math_context()->symbol_counter += tmp->text_.get().size();\ - }\ - if (odf_context()->math_context()->current_tag == L"mi")\ - {\ - typedef odf_writer::math_mi* T;\ - T tmp = dynamic_cast(elm.get());\ - odf_context()->math_context()->symbol_counter += tmp->text_.get().size();\ - }\ - if (odf_context()->math_context()->current_tag == L"mo")\ - {\ - typedef odf_writer::math_mo* T;\ - T tmp = dynamic_cast(elm.get());\ - odf_context()->math_context()->symbol_counter += tmp->text_.get().size();\ - }\ - if (odf_context()->math_context()->tagFlag.back())\ - {\ - odf_context()->math_context()->counter++;\ - }\ - odf_context()->math_context()->current_tag = L""; - -//odf_context()->math_context()->debug_stream << L"open, counter is " << odf_context()->math_context()->counter << "\n"; - -#define CLOSE_MATH_TAG\ - if(odf_context()->math_context()->tagFlag.back()) \ - {\ - odf_context()->math_context()->end_element();\ - odf_context()->math_context()->counter--; \ - }\ - odf_context()->math_context()->tagFlag.pop_back(); - - //odf_context()->math_context()->debug_stream /*std::wcout*/ << L"close, counter is " << odf_context()->math_context()->counter << "\n"; - -namespace cpdoccore { - namespace odf_writer - { - class odf_conversion_context; - class odf_style_context; - class odf_text_context; - class odf_drawing_context; - - class odf_math_context - { - public: - odf_math_context(odf_conversion_context* odf_context); - ~odf_math_context(); - - void set_styles_context(odf_style_context* style_context); - - odf_drawing_context* drawing_context(); - odf_text_context* text_context(); - - void start_math(office_element_ptr& root); - - bool start_element(office_element_ptr& elm); // office_math_element TODO - - void end_element(); - - std::vector> brackets; - std::wstring annotation; - int lvl_of_me; - int matrix_row_counter; - std::vector end_counter; - bool style_flag; - int counter; - std::wstring current_tag; - int symbol_counter; - double lvl_counter; - double lvl_up_counter; - double lvl_down_counter; - double lvl_max; - double lvl_min; - std::wstring font; - double size; - std::set mo; - std::map diak_symbols; - bool annotation_flag; - bool annotation_oper_flag; - std::map annotation_operators; - std::map annotation_brackets_begin; - std::map annotation_brackets_end; - std::map annotation_diak_symbols; - //std::pair, bool> annotation_from_to_operators; - void end_math(); - - std::wofstream debug_stream; - std::string debug_fileName = "debugLog.txt"; - bool isEmpty(); - std::vector tagFlag; - - bool in_text_box_ = false; - private: - class Impl; - _CP_PTR(Impl) impl_; - }; - - } -} diff --git a/ASCOfficeOdfFileW/source/Oox2OdfConverter/Converter.h b/ASCOfficeOdfFileW/source/Oox2OdfConverter/Converter.h deleted file mode 100644 index ee0def4b84..0000000000 --- a/ASCOfficeOdfFileW/source/Oox2OdfConverter/Converter.h +++ /dev/null @@ -1,784 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ -#pragma once - -#include -#include "../../../Common/DocxFormat/Source/Base/SmartPtr.h" -#include "../../Common/DocxFormat/Source/DocxFormat/Math/oMathContent.h" - -#include "../progressCallback.h" - -#include -#include - -namespace cpdoccore -{ - namespace odf_types - { - - class color; - class length; - class text_align; - class font_size; - class length_or_percent; - } - namespace odf_writer - { - class odf_conversion_context; - - class style_paragraph_properties; - class style_text_properties; - class style_graphic_properties; - class style_section_properties; - class style_table_properties; - class style_table_cell_properties; - class style_table_row_properties; - class style_table_column_properties; - class style_chart_properties; - class style_drawing_page_properties; - class graphic_format_properties; - namespace package - { - class odf_document; - } - } -} -namespace OOX -{ - class WritingElement; - class IFileContainer; - class File; - class JsaProject; - - namespace Drawing - { - //class CDiagrammParts; - //class CPresetTextShape; - class CInline; - class CAnchor; - class COfficeArtExtensionList; - class COfficeArtExtension; - } - namespace Spreadsheet - { - class IFileContainer; - class CChartSpace; - - class CT_extLst; - class CT_ChartSpace; - class CT_Boolean; - class CT_RelId; - class CT_PageSetup; - class CT_PageMargins; - class CT_HeaderFooter; - class CT_PrintSettings; - class CT_ExternalData; - class CT_DispBlanksAs; - class CT_LegendEntry; - class CT_UnsignedInt; - class CT_Extension; - class CT_LegendPos; - class CT_Legend; - class CT_Layout; - class CT_ManualLayout; - class CT_LayoutTarget; - class CT_LayoutMode; - class CT_Double; - class CT_DTable; - class CT_SerAx; - class CT_Scaling; - class CT_LogBase; - class CT_Orientation; - class CT_AxPos; - class CT_ChartLines; - class CT_Title; - class CT_Tx; - class CT_StrRef; - class CT_StrData; - class CT_StrVal; - class CT_NumFmt; - class CT_TickMark; - class CT_TickLblPos; - class CT_Crosses; - class CT_Skip; - class CT_TimeUnit; - class CT_DateAx; - class CT_LblOffset; - class CT_AxisUnit; - class CT_LblAlgn; - class CT_CatAx; - class CT_DispUnitsLbl; - class CT_BuiltInUnit; - class CT_DispUnits; - class CT_CrossBetween; - class CT_ValAx; - class CT_SizeRepresents; - class CT_BubbleScale; - class CT_BubbleSer; - class CT_SerTx; - class CT_DPt; - class CT_Marker; - class CT_MarkerStyle; - class CT_MarkerSize; - class CT_PictureOptions; - class CT_PictureFormat; - class CT_PictureStackUnit; - class CT_DLbls; - class CT_DLbl; - class CT_DLblPos; - class CT_Trendline; - class CT_TrendlineType; - class CT_Order; - class CT_Period; - class CT_TrendlineLbl; - class CT_ErrBars; - class CT_ErrDir; - class CT_ErrBarType; - class CT_ErrValType; - class CT_NumDataSource; - class CT_NumData; - class CT_NumVal; - class CT_NumRef; - class CT_AxDataSource; - class CT_MultiLvlStrRef; - class CT_lvl; - class CT_MultiLvlStrData; - class CT_BubbleChart; - class CT_bandFmts; - class CT_Surface3DChart; - class CT_SurfaceSer; - class CT_BandFmt; - class CT_SurfaceChart; - class CT_SecondPieSize; - class CT_SplitType; - class CT_OfPieType; - class CT_custSplit; - class CT_OfPieChart; - class CT_PieSer; - class CT_GapAmount; - class CT_Bar3DChart; - class CT_BarDir; - class CT_BarGrouping; - class CT_BarSer; - class CT_Shape; - class CT_Overlap; - class CT_BarChart; - class CT_HoleSize; - class CT_DoughnutChart; - class CT_FirstSliceAng; - class CT_Pie3DChart; - class CT_PieChart; - class CT_ScatterSer; - class CT_ScatterStyle; - class CT_ScatterChart; - class CT_RadarSer; - class CT_RadarStyle; - class CT_RadarChart; - class CT_StockChart; - class CT_LineSer; - class CT_UpDownBars; - class CT_UpDownBar; - class CT_Line3DChart; - class CT_Grouping; - class CT_LineChart; - class CT_Area3DChart; - class CT_AreaSer; - class CT_AreaChart; - class CT_PlotArea; - class CT_Thickness; - class CT_Surface; - class CT_Perspective; - class CT_DepthPercent; - class CT_RotY; - class CT_HPercent; - class CT_RotX; - class CT_View3D; - class CT_PivotFmt; - class CT_pivotFmts; - class CT_Chart; - class CT_Protection; - class CT_PivotSource; - class CT_Style1; - class CT_Style; - class CT_TextLanguageID; - class CTextProperties; - - namespace ChartEx - { - class CChartSpace; - class CChart; - class CChartData; - class CData; - class CDimension; - class CPlotArea; - class CLegend; - class CAxis; - class CTickMarks; - class CGridlines; - class CValScaling; - class CCatScaling; - class CSeries; - class CDataLabels; - class CTitle; - - } - } - class CSizeAnchor; - namespace Vml - { - class CShapeType; - class CShape; - class CImage; - class CImageData; - class CArc; - class CBackground; - class CCurve; - class CFill; - class CLine; - class COval; - class CPath ; - class CPolyLine ; - class CRect; - class CRoundRect; - class CShadow; - class CStroke; - class CTextbox; - class CTextPath; - class CGroup; - class CVmlCommonElements; - class CFormulas; - } - namespace VmlWord - { - class CWrap; - } - namespace Logic - { - class CDeg; - class CDen; - class CElement; - class CFName; - class CLim; - class CNum; - class COMath; - class CSub; - class CSup; - class CCtrlPr; - class CAcc; - class CAccPr; - class CArgPr; - class CBar; - class CBarPr; - class CBorderBox; - class CBorderBoxPr; - class CBox; - class CBoxPr; - class CBrk; - class CDelimiter; - class CDelimiterPr; - class CEqArr; - class CEqArrPr; - class CFPr; - class CFraction; - class CFunc; - class CFuncPr; - class CGroupChr; - class CGroupChrPr; - class CLimLow; - class CLimLowPr; - class CLimUpp; - class CLimUppPr; - class CMathFont; - class CMathPr; - class CMatrix; - class CMc; - class CMcPr; - class CMcs; - class CMDel; - class CMIns; - class CMPr; - class CMr; - class CMRPr; - class CMRun; - class CMText; - class CNary; - class CNaryPr; - class COMathPara; - class COMathParaPr; - class CPhant; - class CPhantPr; - class CRad; - class CRadPr; - class CSPre; - class CSPrePr; - class CSSub; - class CSSubPr; - class CSSubSup; - class CSSubSupPr; - class CSSup; - class CSSupPr; - //class CType; - //class CSupHide; - //class CSubHide; - //class CBegChr; - //class CEndChr; - //class CDiff; - //class CDegHide; - //class CChr; - //class CArgSz; - } -} -namespace SimpleTypes -{ - namespace Vml - { - class CCssStyle; - } -} -namespace PPTX -{ - class Theme; - namespace Logic - { - class Bullet; - class ClrMap; - class SpTreeElem; - class GraphicFrame; - class SpTree; - class Shape; - class CxnSp; - class Pic; - class SmartArt; - class ChartRec; - class SpPr; - class GrpSpPr; - class Xfrm; - class ShapeStyle; - class PrstTxWarp; - class PrstGeom; - class CustGeom; - class BlipFill; - class GradFill; - class SolidFill; - class PattFill; - class EffectLst; - class EffectDag; - class FontRef; - class StyleRef; - class Ln; - class Path2D; - class PathBase; - class TxBody; - class BodyPr; - class UniFill; - class UniColor; - class NvSpPr; - class CNvPr; - class CNvSpPr; - class CNvCxnSpPr; - class CNvGrpSpPr; - class NvCxnSpPr; - class NvGrpSpPr; - class NvPr; - class Paragraph; - class TxBody; - class TextListStyle; - class TextParagraphPr; - class TextSpacing; - class RunProperties; - class Run; - class Fld; - class Br; - class MathParaWrapper; - class NvGraphicFramePr; - class LineTo; - class MoveTo; - class ArcTo; - class QuadBezTo; - class CubicBezTo; - class Close; - class AhXY; - class AhPolar; - class EffectStyle; - class InnerShdw; - class OuterShdw; - class PrstShdw; - class AlphaModFix; - class Blur; - class FillOverlay; - class Glow; - class Reflection; - class SoftEdge; - class Grayscl; - class Duotone; - } -} - -using namespace cpdoccore; - - - -namespace Oox2Odf -{ - struct returnValues - { - returnValues() : colorFlag(false), auxFlag(false), naryChr(false), narySubHide(false), narySupHide(false), begEndChrs(L"(", L")"), str(L"") - {} - bool colorFlag; - bool auxFlag; - bool naryChr; - bool narySubHide; - bool narySupHide; - std::pair begEndChrs; - std::wstring str; - ~returnValues() {} - }; - class OoxConverter - { -public: - virtual bool convertDocument() = 0; - - bool write(const std::wstring & out_path, const std::wstring & temp_path, const std::wstring & password, const std::wstring & documentID); - - OoxConverter() : output_document(NULL), oox_current_child_document(NULL) - { - } - virtual ~OoxConverter() - { - m_mapVmlShapeTypes.clear(); - } - - void set_fonts_directory (const std::wstring & fontsPath); - - bool encrypt_document (const std::wstring &password, const std::wstring & srcPath, const std::wstring & dstPath); - bool encrypt_file (const std::wstring &password, const std::wstring & srcPath, const std::wstring & dstPath, std::wstring &encrypt_info, int &size); - -//....................................................................................................................... - virtual OOX::IFileContainer *current_document() = 0; - virtual cpdoccore::odf_writer::odf_conversion_context *odf_context() = 0; - virtual PPTX::Theme *oox_theme() = 0; - virtual PPTX::Logic::ClrMap *oox_clrMap() {return NULL;} - - cpdoccore::odf_writer::package::odf_document *output_document; - - std::wstring find_link_by (NSCommon::smart_ptr & oFile, int type); - virtual std::wstring find_link_by_id(const std::wstring & sId, int type) = 0; - virtual NSCommon::smart_ptr find_file_by_id(const std::wstring & sId) = 0; - - OOX::IFileContainer *oox_current_child_document; - - void convert (OOX::JsaProject *jsaProject); - void convert (double oox_font_size, _CP_OPT(cpdoccore::odf_types::font_size) & odf_font_size); - bool convert (std::wstring sSchemeColor, DWORD & argb); - void convert_font(PPTX::Theme *theme, std::wstring & font); -//....................................................................................................................... - void convert(OOX::WritingElement *oox_unknown); -//drawingML & pptx................................................................................................................................ - void convert(PPTX::Logic::SpTreeElem *oox_element); - void convert(PPTX::Logic::GraphicFrame *oox_graphicFrame); - void convert(PPTX::Logic::SpTree *oox_shape_tree); - void convert(PPTX::Logic::Shape *oox_shape); - void convert(PPTX::Logic::CxnSp *oox_connect); - void convert(PPTX::Logic::Pic *oox_pic); - void convert(PPTX::Logic::GrpSpPr *oox_grpSpPr); - void convert(PPTX::Logic::SpPr *oox_spPr, PPTX::Logic::ShapeStyle* oox_sp_style = NULL); - void convert(PPTX::Logic::TextSpacing *oox_spacing, cpdoccore::odf_types::length_or_percent & length_or_percent); - void convert(PPTX::Logic::Xfrm *oox_xfrm); - void convert(PPTX::Logic::Xfrm *oox_txbx, PPTX::Logic::Xfrm *oox_xfrm); - int convert(PPTX::Logic::PrstTxWarp *oox_text_preset); - void convert(PPTX::Logic::PrstGeom *oox_geom); - void convert(PPTX::Logic::CustGeom *oox_geom); - void convert(PPTX::Logic::BlipFill *oox_fill); - void convert(PPTX::Logic::GradFill *oox_fill, DWORD ARGB = 0); - void convert(PPTX::Logic::SolidFill *oox_fill, DWORD ARGB = 0); - void convert(PPTX::Logic::PattFill *oox_fill, DWORD ARGB = 0); - void convert(PPTX::Logic::Ln *oox_line, DWORD ARGB = 0, PPTX::Logic::ShapeStyle* oox_sp_style = NULL); - void convert(PPTX::Logic::FontRef *oox_fontRef); - void convert(PPTX::Logic::StyleRef *oox_styleRef, int type); - void convert(PPTX::Logic::Path2D *oox_path2D); - void convert(PPTX::Logic::PathBase *oox_path); - void convert(PPTX::Logic::UniFill *oox_fill, DWORD ARGB = 0); - void convert(PPTX::Logic::UniColor *color, DWORD & nARGB); - void convert(PPTX::Logic::UniColor *color, std::wstring & hexString, _CP_OPT(double) & opacity, DWORD ARGB = 0); - void convert(PPTX::Logic::NvSpPr *oox_nvSpPr); - void convert(PPTX::Logic::CNvPr *oox_cnvPr); - void convert(PPTX::Logic::CNvCxnSpPr *oox_cnvPr); - void convert(PPTX::Logic::CNvSpPr *oox_cnvSpPr); - void convert(PPTX::Logic::CNvGrpSpPr *oox_cnvGrpSpPr); - void convert(PPTX::Logic::NvCxnSpPr *oox_nvSpPr); - void convert(PPTX::Logic::NvGrpSpPr *oox_nvSpPr); - void convert(PPTX::Logic::NvPr *oox_nvPr); - void convert(PPTX::Logic::Paragraph *oox_para, PPTX::Logic::TextListStyle *oox_list_style = NULL); - void convert(PPTX::Logic::TextListStyle *oox_list_style); - - void convert_list_level (PPTX::Logic::TextParagraphPr *oox_para_props, int level); - - void convert(PPTX::Logic::TextListStyle *oox_list_style, int level, cpdoccore::odf_writer::style_paragraph_properties *paragraph_properties, - cpdoccore::odf_writer::style_text_properties *text_properties); - void convert(PPTX::Logic::TextParagraphPr *oox_para_props, cpdoccore::odf_writer::style_paragraph_properties *paragraph_properties, - cpdoccore::odf_writer::style_text_properties *text_properties); - void convert(PPTX::Logic::RunProperties *oox_run_props, cpdoccore::odf_writer::style_text_properties *text_properties); - void convert(PPTX::Logic::Run *oox_run); - void convert(PPTX::Logic::Fld *oox_fld); - void convert(PPTX::Logic::Br *oox_br); - - void convert(PPTX::Logic::TxBody *oox_txBody, PPTX::Logic::ShapeStyle* oox_style = NULL); - void convert_chart_text(PPTX::Logic::TxBody *oox_txBody, bool only_properties = false); - void convert(PPTX::Logic::BodyPr *oox_bodyPr); - void convert_chart_text(PPTX::Logic::BodyPr *oox_bodyPr); - - void convert(PPTX::Logic::MathParaWrapper *oox_math); - void convert(PPTX::Logic::NvGraphicFramePr *oox_framePr); - void convert(PPTX::Logic::ChartRec *oox_chart); - void convert(PPTX::Logic::SmartArt *oox_smart_art); - void convert(PPTX::Logic::LineTo *oox_geom_path); - void convert(PPTX::Logic::MoveTo *oox_geom_path); - void convert(PPTX::Logic::ArcTo *oox_geom_path); - void convert(PPTX::Logic::QuadBezTo *oox_geom_path); - void convert(PPTX::Logic::CubicBezTo *oox_geom_path); - void convert(PPTX::Logic::Close *oox_geom_path); - void convert(PPTX::Logic::AhXY *oox_handle); - void convert(PPTX::Logic::AhPolar *oox_handle); - - void convert(PPTX::Logic::EffectStyle *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::EffectLst *oox_effect_list, DWORD ARGB = 0); - void convert(PPTX::Logic::EffectDag *oox_effect_dag, DWORD ARGB = 0); - void convert(PPTX::Logic::InnerShdw *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::OuterShdw *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::PrstShdw *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::AlphaModFix *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::Blur *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::FillOverlay *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::Glow *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::Reflection *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::SoftEdge *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::Grayscl *oox_effect, DWORD ARGB = 0); - void convert(PPTX::Logic::Duotone *oox_effect, DWORD ARGB = 0); -//.chart............................................................................................................................ - void convert(OOX::Spreadsheet::CT_ChartSpace *oox_chart); - void convert(OOX::Spreadsheet::CT_View3D *oox_view3D); - void convert(OOX::Spreadsheet::CT_Title *ct_title); - void convert(OOX::Spreadsheet::CT_Legend *ct_legend); - void convert(OOX::Spreadsheet::CT_LegendEntry *ct_legend); - void convert(OOX::Spreadsheet::CT_PlotArea *ct_plotArea); - void convert(OOX::Spreadsheet::CT_Surface *ct_surface, int type, bool chart3D); - void convert(OOX::Spreadsheet::CT_CatAx *ct_catAx); - void convert(OOX::Spreadsheet::CT_SerAx *ct_serAx); - void convert(OOX::Spreadsheet::CT_DateAx *ct_dateAx); - void convert(OOX::Spreadsheet::CT_ValAx *ct_valAx); - void convert(OOX::Spreadsheet::CT_Area3DChart *chart); - void convert(OOX::Spreadsheet::CT_AreaChart *chart); - void convert(OOX::Spreadsheet::CT_Bar3DChart *chart); - void convert_before(OOX::Spreadsheet::CT_Bar3DChart *chart); - void convert(OOX::Spreadsheet::CT_BarChart *chart); - void convert_before(OOX::Spreadsheet::CT_BarChart *chart); - void convert(OOX::Spreadsheet::CT_Line3DChart *chart); - void convert(OOX::Spreadsheet::CT_LineChart *chart); - void convert(OOX::Spreadsheet::CT_Pie3DChart *chart); - void convert(OOX::Spreadsheet::CT_PieChart *chart); - void convert(OOX::Spreadsheet::CT_Surface3DChart *chart); - void convert(OOX::Spreadsheet::CT_SurfaceChart *chart); - void convert(OOX::Spreadsheet::CT_BubbleChart *chart); - void convert(OOX::Spreadsheet::CT_DoughnutChart *chart); - void convert(OOX::Spreadsheet::CT_ScatterChart *chart); - void convert(OOX::Spreadsheet::CT_RadarChart *chart); - void convert(OOX::Spreadsheet::CT_StockChart *chart); - void convert(OOX::Spreadsheet::CT_OfPieChart *chart); - void convert(OOX::Spreadsheet::CT_AreaSer *ser); - void convert(OOX::Spreadsheet::CT_BubbleSer *ser); - void convert(OOX::Spreadsheet::CT_SurfaceSer *ser); - void convert(OOX::Spreadsheet::CT_PieSer *ser); - void convert(OOX::Spreadsheet::CT_BarSer *ser); - void convert(OOX::Spreadsheet::CT_ScatterSer *ser); - void convert(OOX::Spreadsheet::CT_RadarSer *ser); - void convert(OOX::Spreadsheet::CT_LineSer *ser); - void convert(OOX::Spreadsheet::CT_AxDataSource *cat, int type); - void convert(OOX::Spreadsheet::CT_NumDataSource *val); - //void convert(OOX::Spreadsheet::CRichText *rich); - //void convert(OOX::Spreadsheet::CTextProperties *txPr); - void convert(OOX::Spreadsheet::CT_Tx *ct_tx); - void convert(OOX::Spreadsheet::CT_Layout *ct_layout); - void convert(OOX::Spreadsheet::CT_ManualLayout *ct_layout); - void convert(OOX::Spreadsheet::CT_ChartLines *grid, int type); - void convert(OOX::Spreadsheet::CT_SerTx *ser_tx); - void convert(OOX::Spreadsheet::CT_DLbls *ser_lbls); - void convert(OOX::Spreadsheet::CT_Marker *marker); - void convert(OOX::Spreadsheet::CT_Marker *marker, std::vector & dPt); - void convert(OOX::Spreadsheet::CT_ExternalData *external_data); - void convert(OOX::Spreadsheet::CT_NumData *num_data, bool categories, bool label); - void convert(OOX::Spreadsheet::CT_StrData *str_data, bool categories, bool label); - - void convert(OOX::CSizeAnchor *sz_anchor, double x0, double y0, double width, double height); -//.chart.ex........................................................................................................................... - void convert(OOX::Spreadsheet::ChartEx::CChartSpace *oox_chart); - void convert(OOX::Spreadsheet::ChartEx::CTitle *ct_title); - void convert(OOX::Spreadsheet::ChartEx::CChart *oox_chart); - void convert(OOX::Spreadsheet::ChartEx::CChartData *oox_chart_data); - void convert(OOX::Spreadsheet::ChartEx::CPlotArea *oox_plot_area); -//.vml............................................................................................................................ - void convert(OOX::Vml::CShapeType *vml_shape_type); - void convert(OOX::Vml::CShape *vml_shape); - void convert(OOX::Vml::CImage *vml_image); - void convert(OOX::Vml::CImageData *vml_image_data); - void convert(OOX::Vml::CArc *vml_arc); - void convert(OOX::Vml::CBackground *vml_background); - void convert(OOX::Vml::CCurve *vml_curve); - void convert(OOX::Vml::CFill *vml_fill); - void convert(OOX::Vml::CLine *vml_line); - void convert(OOX::Vml::COval *vml_oval); - void convert(OOX::Vml::CPath *vml_path); - void convert(OOX::Vml::CPolyLine *vml_polyline); - void convert(OOX::Vml::CRect *vml_rect); - void convert(OOX::Vml::CRoundRect *vml_roundrect); - void convert(OOX::Vml::CShadow *vml_shadow); - void convert(OOX::Vml::CStroke *vml_stroke); - void convert(OOX::Vml::CTextbox *vml_textbox); - void convert(OOX::Vml::CTextPath *vml_textpath); - void convert(SimpleTypes::Vml::CCssStyle *vml_style); - void convert(OOX::VmlWord::CWrap *vml_wrap); - void convert(OOX::Vml::CGroup *vml_group); - void convert(OOX::Vml::CVmlCommonElements *vml_attr); - void convert(OOX::Vml::CFormulas *vml_formulas); - - void convert(OOX::Drawing::COfficeArtExtensionList *ext_list); - void convert(OOX::Drawing::COfficeArtExtension *art_ext); -//math............................................................................................................................ - std::vector>& brackets(); - int& lvl_of_me(); - std::vector& end_counter(); - std::wstring& annotation(); - bool& annotation_flag(); - void lvl_up_counter_increace(double val); - void lvl_up_counter_decreace(double val); - void lvl_down_counter_increace(double val); - void lvl_down_counter_decreace(double val); - void mrow(); - void endOfMrow(); - void resizeBrackets(); - void convert(OOX::Logic::COMath *oox_math); - void convert(OOX::Logic::CMathPr *oox_math_pr); - returnValues convert(OOX::Logic::CCtrlPr *oox_ctrl_pr); - void convert(OOX::Logic::CAcc *oox_acc); - returnValues convert(OOX::Logic::CAccPr *oox_acc_pr); - void convert(OOX::Logic::CArgPr *oox_arg_pr); - void convert(OOX::Logic::CBar *oox_bar); - returnValues convert(OOX::Logic::CBarPr *oox_bar_pr); - void convert(OOX::Logic::CBorderBox *oox_border_box); - returnValues convert(OOX::Logic::CBorderBoxPr *oox_border_box_pr); - void convert(OOX::Logic::CBox *oox_box); - returnValues convert(OOX::Logic::CBoxPr *oox_box_pr); - void convert(OOX::Logic::CBrk *oox_brk); - void convert(OOX::Logic::CDelimiter *oox_del); - returnValues convert(OOX::Logic::CDelimiterPr *oox_del_pr); - void convert(OOX::Logic::CEqArr *oox_eq_arr); - returnValues convert(OOX::Logic::CEqArrPr *oox_eq_arr_pr); - void convert(OOX::Logic::CBaseJc *oox_base_jc); - void convert(OOX::Logic::CMaxDist *oox_max_dist); - void convert(OOX::Logic::CObjDist *oox_obj_dist); - void convert(OOX::Logic::CRSp *oox_r_sp); - void convert(OOX::Logic::CRSpRule *oox_r_sp_rule); - returnValues convert(OOX::Logic::CFPr *oox_f_pr); - void convert(OOX::Logic::CFraction *oox_fraction); - void convert(OOX::Logic::CFunc *oox_func); - returnValues convert(OOX::Logic::CFuncPr *oox_func_pr); - void convert(OOX::Logic::CGroupChr *oox_group_ch, OOX::Logic::CLim *oox_lim = NULL); - returnValues convert(OOX::Logic::CGroupChrPr *oox_group_ch_pr); - void convert(OOX::Logic::CLimLow *oox_lim_low, OOX::Logic::CElement *oox_elm = NULL); - returnValues convert(OOX::Logic::CLimLowPr *oox_lim_low_pr); - void convert(OOX::Logic::CLimUpp *oox_lim_upp); - returnValues convert(OOX::Logic::CLimUppPr *oox_lim_upp_pr); - void convert(OOX::Logic::CMathFont *oox_math_font); - void convert(OOX::Logic::CMatrix *oox_matrix); - void convert(OOX::Logic::CMc *oox_mc); - void convert(OOX::Logic::CMcPr *oox_mc_pr); - void convert(OOX::Logic::CMcs *oox_mcs); - void convert(OOX::Logic::CMDel *oox_m_del); - void convert(OOX::Logic::CMIns *oox_m_ins); - returnValues convert(OOX::Logic::CMPr *oox_m_pr); - void convert(OOX::Logic::CMr *oox_mr); - void convert(OOX::Logic::CMRun *oox_run); - void convert(OOX::Logic::CMText *oox_text); - void convert(OOX::Logic::CNary *oox_nary); - returnValues convert(OOX::Logic::CNaryPr *oox_nary_pr); - void convert(OOX::Logic::CGrow *oox_grow); - void convert(OOX::Logic::COMathPara *oox_math_para); - void convert(OOX::Logic::COMathParaPr *oox_math_para_pr); - void convert(OOX::Logic::CPhant *oox_phant); - void convert(OOX::Logic::CPhantPr *oox_phant_pr); - void convert(OOX::Logic::CRad *oox_rad); - returnValues convert(OOX::Logic::CRadPr *oox_rad_pr); - void convert(OOX::Logic::CSPre *oox_s_pre); - returnValues convert(OOX::Logic::CSPrePr *oox_s_pre_pr); - void convert(OOX::Logic::CSSub *oox_ssub); - returnValues convert(OOX::Logic::CSSubPr *oox_ssub_pr); - void convert(OOX::Logic::CSSubSup *oox_ssub_sup); - returnValues convert(OOX::Logic::CSSubSupPr *oox_ssub_sup_pr); - void convert(OOX::Logic::CAlnScr *oox_aln_scr); - void convert(OOX::Logic::CSSup *oox_ssup); - returnValues convert(OOX::Logic::CSSupPr *oox_ssup_pr); - void convert(OOX::Logic::CNum *oox_num); - void convert(OOX::Logic::CDen *oox_den); - std::wstring convert(OOX::Logic::CBegChr *oox_beg_chr); - std::wstring convert(OOX::Logic::CEndChr *oox_end_chr); - void convert(OOX::Logic::CElement *oox_elm); - bool convert(OOX::Logic::CDegHide *oox_deg_hide); - void convert(OOX::Logic::CDeg *oox_deg, OOX::Logic::CElement *oox_elm); - void convert(OOX::Logic::CSup *oox_sup, OOX::Logic::CElement *oox_elm); - void convert(OOX::Logic::CSub *oox_sub, OOX::Logic::CElement *oox_elm); - bool convert(OOX::Logic::CFName *oox_fname, OOX::Logic::CElement* oox_elm); - void convert(OOX::Logic::CLim *oox_lim); - bool convert(OOX::Logic::CChr *oox_chr); - void convert(OOX::Logic::CSup *oox_csup); - void convert(OOX::Logic::CSub *oox_csub); - bool convert(OOX::Logic::CSubHide *oox_subHide); - bool convert(OOX::Logic::CSupHide *oox_supHide); - std::wstring convert(OOX::Logic::CType *oox_type); - void convert(OOX::Logic::CDiff *oox_diff); - void convert(OOX::Logic::CArgSz *oox_arg_sz); - bool convert(OOX::Logic::COpEmu *oox_op_emu); - bool convert(OOX::Logic::CPos *oox_pos); - void convert(OOX::Logic::CVertJc *oox_vert_jc); - void convert(OOX::Logic::CNoBreak *oox_no_break); - void convert(OOX::Logic::CCount *oox_count); - void convert(OOX::Logic::CMcJc *oox_mc_jc); - void convert(OOX::Logic::CPlcHide *oox_plc_hide); - bool convert(OOX::Logic::CRunProperty *oox_r_pr); - -//----------------------------------- - void RGB2HSL(DWORD argb, double& dH, double& dS, double& dL); - DWORD HSL2RGB(double dH, double dS, double dL); - private: - std::map m_mapVmlShapeTypes; - - }; - -} // namespace Oox2Odf diff --git a/ASCOfficeOdfFileW/source/Oox2OdfConverter/MathConverter.cpp b/ASCOfficeOdfFileW/source/Oox2OdfConverter/MathConverter.cpp deleted file mode 100644 index 33ab135810..0000000000 --- a/ASCOfficeOdfFileW/source/Oox2OdfConverter/MathConverter.cpp +++ /dev/null @@ -1,2006 +0,0 @@ -#include "Converter.h" - -//#include "../utils.h" - -#include "../../../Common/DocxFormat/Source/DocxFormat/DocxFlat.h" - -#include "../OdfFormat/odf_conversion_context.h" -#include "../../ASCOfficeOdfFileW/source/OdfFormat/math_layout_elements.h" -#include "../../ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.h" -#include "../../ASCOfficeOdfFileW/source/OdfFormat/math_token_elements.h" -#include -#include -#include -#include -#include -namespace Oox2Odf -{ - - std::vector>& OoxConverter::brackets() - { - return odf_context()->math_context()->brackets; - } - - int& OoxConverter::lvl_of_me() - { - return odf_context()->math_context()->lvl_of_me; - } - - std::vector& OoxConverter::end_counter() - { - return odf_context()->math_context()->end_counter; - } - - void OoxConverter::lvl_up_counter_increace(double val) - { - double& lvl_max = odf_context()->math_context()->lvl_max; - double& lvl_up_counter = odf_context()->math_context()->lvl_up_counter; - lvl_up_counter += val; - if (lvl_max < lvl_up_counter) - lvl_max = lvl_up_counter; - } - - void OoxConverter::lvl_up_counter_decreace(double val) - { - double& lvl_up_counter = odf_context()->math_context()->lvl_up_counter; - lvl_up_counter -= val; - } - - void OoxConverter::lvl_down_counter_decreace(double val) - { - double& lvl_min = odf_context()->math_context()->lvl_min; - double& lvl_down_counter = odf_context()->math_context()->lvl_down_counter; - lvl_down_counter -= val; - if (lvl_min > lvl_down_counter) - lvl_min = lvl_down_counter; - } - - void OoxConverter::lvl_down_counter_increace(double val) - { - double& lvl_down_counter = odf_context()->math_context()->lvl_down_counter; - lvl_down_counter += val; - } - - std::wstring& OoxConverter::annotation() - { - return odf_context()->math_context()->annotation; - } - - void annotaionReplaceAll(std::wstring& annotation, std::wstring substr1, std::wstring substr2) - { - size_t pos = annotation.find(substr1); - while (pos != std::wstring::npos) - { - annotation.replace(pos, substr1.size(), substr2); - pos = annotation.find(substr1, pos + substr2.size()); - } - } - - void annotationPostProd(std::wstring& annotation) - { - annotaionReplaceAll(annotation, L"=", L"\"=\""); - annotaionReplaceAll(annotation, L"+", L"\"+\""); - annotaionReplaceAll(annotation, L"-", L"\"-\""); - annotaionReplaceAll(annotation, L"{) }", L")"); - annotaionReplaceAll(annotation, L"{( }", L"("); - annotaionReplaceAll(annotation, L"*", L"\"*\""); - annotaionReplaceAll(annotation, L"|", L"\"|\""); - // ∥ - size_t pos = annotation.find(L"∥"); - std::vector positions; - //positions.push_back(pos); - while (pos != std::wstring::npos) - { - positions.push_back(pos); - pos = annotation.find(L"∥", pos + 1); - } - std::wstring str1 = L"ldline"; - std::wstring str2 = L"rdline"; - for (int i = positions.size() - 1; i >= 0; i--) - { - if (i % 2 == 0) - annotation.replace(positions[i], 1, str1); - else - annotation.replace(positions[i], 1, str2); - } - - //if (annotation[0] == L'=') - // annotation = L"\"\"" + annotation; - - //if ((annotation[annotation.size() - 1] == L'=') || (annotation[annotation.size() - 1] == L' ') && annotation[annotation.size() - 2] == L'=') - // annotation = annotation + L"\"\""; - } - - std::vector hexToIntColor(std::wstring clr) - { - std::vector rgb; - - std::wstringstream ss; - for (size_t i = 0; i < 3; i++) - { - std::wstring substr; - substr += clr[i * 2]; - substr += clr[i * 2 + 1]; - ss << std::hex << substr; - int i_clr; - ss >> i_clr; - ss.clear(); - rgb.push_back(i_clr); - } - return rgb; - } - - double dist(std::vector point_1, std::vector point_2) - { - double sum = 0; - for(size_t i = 0; i < 3; i++) - { - sum += pow((point_1[i] - point_2[i]), 2); - } - return sqrt(sum); - } - - std::wstring coordToColor(std::vector rgb) - { - std::wstring arrColor[8] = { L"black", L"red", L"green", L"blue", L"magenta", L"cyan", L"yellow", L"white" }; - std::vector> coord = { {0,0,0}, {255,0,0}, {0,255,0}, {0,0,255}, {255, 0, 255}, {0,255,255}, {255,255,0}, {255,255,255} }; - std::vector distArr; - for (size_t i = 0; i < 8; i++) - { - distArr.push_back(dist(coord[i], rgb)); - } - double min = distArr[0]; - int index = 0; - for (size_t i = 1; i < 8; i++) - { - if (min > distArr[i]) - { - min = distArr[i]; - index = i; - } - } - return arrColor[index]; - } - - bool& OoxConverter::annotation_flag() - { - return odf_context()->math_context()->annotation_flag; - } - - void OoxConverter::mrow() // обертка для тега - { - CREATE_MATH_TAG(L"mrow"); - OPEN_MATH_TAG(elm); - } - - void OoxConverter::endOfMrow() // закрывашка тега - { - CLOSE_MATH_TAG - } - - void OoxConverter::resizeBrackets() - { - lvl_of_me()++; - brackets().resize(brackets().size() + 1); - } - - void OoxConverter::convert(OOX::Logic::COMath *oox_math) - { - if (!oox_math) return; - - brackets().resize(1); - - bool bStart = odf_context()->start_math(); - - - for (size_t i = 0; i < oox_math->m_arrItems.size(); ++i) - { - convert(oox_math->m_arrItems[i]); - } - if (annotation_flag()) - { - CREATE_MATH_TAG(L"annotation"); - typedef odf_writer::math_annotation* T; - T tmp = dynamic_cast(elm.get()); - if (tmp) - { - tmp->encoding_ = L"StarMath 5.0"; - } - - annotationPostProd(annotation()); - - elm->add_text(annotation()); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - } - else - annotation_flag() = true; - annotation().clear(); - - - - if (bStart) odf_context()->end_math(); - } - - void OoxConverter::convert(OOX::Logic::CMathPr *oox_math_pr) - { - if (!oox_math_pr) return; - -// for (size_t i = 0; i < oox_math_pr->m_arrItems.size(); ++i) -// { -// convert(oox_math_pr->m_arrItems[i]); -// } - convert(oox_math_pr->m_oBrkBin.GetPointer()); - convert(oox_math_pr->m_oBrkBinSub.GetPointer()); - convert(oox_math_pr->m_oDefJc.GetPointer()); - convert(oox_math_pr->m_oDispDef.GetPointer()); - convert(oox_math_pr->m_oInterSp.GetPointer()); - convert(oox_math_pr->m_oIntLim.GetPointer()); - convert(oox_math_pr->m_oIntraSp.GetPointer()); - convert(oox_math_pr->m_oLMargin.GetPointer()); - convert(oox_math_pr->m_oMathFont.GetPointer()); - convert(oox_math_pr->m_oNaryLim.GetPointer()); - convert(oox_math_pr->m_oPostSp.GetPointer()); - convert(oox_math_pr->m_oPreSp.GetPointer()); - convert(oox_math_pr->m_oRMargin.GetPointer()); - convert(oox_math_pr->m_oSmallFrac.GetPointer()); - convert(oox_math_pr->m_oWrapIndent.GetPointer()); - convert(oox_math_pr->m_oWrapRight.GetPointer()); - } - - void OoxConverter::convert(OOX::Logic::COMathPara *oox_math_para) - { - if (!oox_math_para) return; - - odf_context()->start_math(); - - for (size_t i = 0; i < oox_math_para->m_arrItems.size(); ++i) - { - convert(oox_math_para->m_arrItems[i]); - } - odf_context()->end_math(); - } - - void OoxConverter::convert(OOX::Logic::COMathParaPr *oox_math_para_pr) - { - if (!oox_math_para_pr) return; - } - - returnValues OoxConverter::convert(OOX::Logic::CCtrlPr *oox_ctrl_pr) - { - returnValues result; - if (!oox_ctrl_pr) result.auxFlag = false; - - convert(oox_ctrl_pr->m_oARPr.GetPointer()); - convert(oox_ctrl_pr->m_oDel.GetPointer()); - convert(oox_ctrl_pr->m_oIns.GetPointer()); - result.colorFlag = convert(oox_ctrl_pr->m_oRPr.GetPointer()); - return result; - } - - void OoxConverter::convert(OOX::Logic::CAcc *oox_acc) - { - if (!oox_acc) return; - - returnValues values = convert(oox_acc->m_oAccPr.GetPointer()); - - CREATE_MATH_TAG(L"mover"); - OPEN_MATH_TAG(elm); - lvl_up_counter_increace(1); - std::wstring diakSymbol = (oox_acc->m_oAccPr->m_oChr.IsInit()) ? oox_acc->m_oAccPr->m_oChr.get().m_val->GetValue() : L"̂"; - - std::map& map = odf_context()->math_context()->diak_symbols; - std::wstring symbol; - - symbol = (map[diakSymbol]); - std::map& annotation_map = odf_context()->math_context()->annotation_diak_symbols; - bool annotation_flag; - if (annotation_map.find(symbol) != annotation_map.end()) - { - annotation() += annotation_map[symbol] + L" "; - annotation_flag = true; - } - else - annotation_flag = false; - - - annotation() += L"{"; - convert(oox_acc->m_oElement.GetPointer()); - annotation() += L"}"; - if (!annotation_flag) - { - annotation() += L" csup "; - annotation() += L"\"" + symbol + L"\""; - } - { - CREATE_MATH_TAG(L"mo"); - elm->add_text(symbol); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - } - - CLOSE_MATH_TAG; - lvl_up_counter_decreace(1); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CAccPr *oox_acc_pr) - { - returnValues values; - if (!oox_acc_pr) return values; - - //convert(oox_acc_pr->m_oChr.GetPointer()); - values = convert(oox_acc_pr->m_oCtrlPr.GetPointer()); - return values; - - } - - void OoxConverter::convert(OOX::Logic::CArgPr *oox_arg_pr) - { - if (!oox_arg_pr) return; - - convert(oox_arg_pr->m_oArgSz.GetPointer()); - } - - - void OoxConverter::convert(OOX::Logic::CArgSz *oox_arg_sz) - { - if (!oox_arg_sz) return; - } - - void OoxConverter::convert(OOX::Logic::CBar *oox_bar) - { - if (!oox_bar) return; - - returnValues values = convert(oox_bar->m_oBarPr.GetPointer()); - std::wstring tag; - if (values.auxFlag) - { - tag = L"mover"; - lvl_up_counter_increace(1); - } - else - { - tag = L"munder"; - lvl_down_counter_decreace(1); - } - CREATE_MATH_TAG(tag.c_str()); - OPEN_MATH_TAG(elm); - { - if(values.auxFlag) annotation() += L"bar {"; - else annotation() += L"underline { "; - - convert(oox_bar->m_oElement.GetPointer()); - CREATE_MATH_TAG(L"mo"); - if (values.auxFlag) elm->add_text(L"¯"); - else elm->add_text(L"ˉ"); - - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - - annotation() += L"} "; - } - CLOSE_MATH_TAG; - if (values.auxFlag) - lvl_up_counter_decreace(1); - else - lvl_down_counter_increace(1); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CBarPr *oox_bar_pr) - { - returnValues values; - if (!oox_bar_pr) - { - values.auxFlag = false; - return values; - } - - values.colorFlag = convert(oox_bar_pr->m_oCtrlPr.GetPointer()).colorFlag; - values.auxFlag = convert(oox_bar_pr->m_oPos.GetPointer()); - return values; - } - - void OoxConverter::convert(OOX::Logic::CBorderBox *oox_border_box) - { - if (!oox_border_box) return; - - returnValues values = convert(oox_border_box->m_oBorderBoxPr.GetPointer()); - convert(oox_border_box->m_oElement.GetPointer()); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CBorderBoxPr *oox_border_box_pr) - { - returnValues values; - if (!oox_border_box_pr) return values; - - - values.colorFlag = convert(oox_border_box_pr->m_oCtrlPr.GetPointer()).colorFlag; - convert(oox_border_box_pr->m_oHideBot.GetPointer()); - convert(oox_border_box_pr->m_oHideLeft.GetPointer()); - convert(oox_border_box_pr->m_oHideRight.GetPointer()); - convert(oox_border_box_pr->m_oHideTop.GetPointer()); - convert(oox_border_box_pr->m_oStrikeBLTR.GetPointer()); - convert(oox_border_box_pr->m_oStrikeH.GetPointer()); - convert(oox_border_box_pr->m_oStrikeTLBR.GetPointer()); - convert(oox_border_box_pr->m_oStrikeV.GetPointer()); - return values; - } - - void OoxConverter::convert(OOX::Logic::CBox *oox_box) - { - if (!oox_box) return; - returnValues val = convert(oox_box->m_oBoxPr.GetPointer()); - - if (val.auxFlag) - { - //annotation() += L"\""; - convert(oox_box->m_oElement.GetPointer()); - //annotation() += L"\""; - } - else - convert(oox_box->m_oElement.GetPointer()); - if (val.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CBoxPr *oox_box_pr) - { - returnValues values; - if (!oox_box_pr) - { - values.auxFlag = false; - return values; - } - - convert(oox_box_pr->m_oAln.GetPointer()); - convert(oox_box_pr->m_oBrk.GetPointer()); - values.colorFlag = convert(oox_box_pr->m_oCtrlPr.GetPointer()).colorFlag; - convert(oox_box_pr->m_oDiff.GetPointer()); - convert(oox_box_pr->m_oNoBreak.GetPointer()); - values.auxFlag = convert(oox_box_pr->m_oOpEmu.GetPointer()); - return values; - } - - void OoxConverter::convert(OOX::Logic::CNoBreak *oox_no_break) - { - if (!oox_no_break) return; - } - - bool OoxConverter::convert(OOX::Logic::COpEmu *oox_op_emu) - { - if (!oox_op_emu) return false; - - if (oox_op_emu->m_val->ToBool())// == L"true") ||(oox_op_emu->m_val == L"1")) - return true; - else - return false; - } - - void OoxConverter::convert(OOX::Logic::CDiff *oox_diff) - { - if (!oox_diff) return; - } - - void OoxConverter::convert(OOX::Logic::CBrk *oox_brk) - { - if (!oox_brk) return; - } - - void OoxConverter::convert(OOX::Logic::CDelimiter *oox_del) - { - if (!oox_del) return; - returnValues values; - for (size_t i = 0; i < oox_del->m_arrItems.size(); ++i) - { - if(oox_del->m_arrItems[i]->getType() == OOX::et_m_dPr) - values = convert((OOX::Logic::CDelimiterPr*)(oox_del->m_arrItems[i])); - } - mrow(); - { - CREATE_MATH_TAG(L"mo"); - elm->add_text(values.begEndChrs.first); - typedef odf_writer::math_mo* T; - - T tmp = dynamic_cast(elm.get()); - if (tmp) - { - tmp->fence_ = true; - tmp->form_ = L"prefix"; - tmp->stretchy_ = true; - } - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - if (values.begEndChrs.first == L"") - annotation() += L"left none "; //left none - else - annotation() += L"left " + odf_context()->math_context()->annotation_brackets_begin[values.begEndChrs.first] + L" "; - } - - for (size_t i = 0; i < oox_del->m_arrItems.size(); ++i) - { - if (!(oox_del->m_arrItems[i]->getType() == OOX::et_m_dPr)) - convert(oox_del->m_arrItems[i]); - } - - { - CREATE_MATH_TAG(L"mo"); - elm->add_text(values.begEndChrs.second); - typedef odf_writer::math_mo* T; - - T tmp = dynamic_cast(elm.get()); - if (tmp) - { - tmp->fence_ = true; - tmp->form_ = L"postfix"; - tmp->stretchy_ = true; - } - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - if (values.begEndChrs.second == L"") - annotation() += L"right none "; //right none - else - annotation() += L"right " + odf_context()->math_context()->annotation_brackets_end[values.begEndChrs.second] + L" "; - - } - endOfMrow(); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CDelimiterPr *oox_del_pr) - { - returnValues values; - - if (!oox_del_pr) return values; - - - values.begEndChrs.first = convert(oox_del_pr->m_oBegChr.GetPointer()); - values.colorFlag = convert(oox_del_pr->m_oCtrlPr.GetPointer()).colorFlag; - convert(oox_del_pr->m_oGrow.GetPointer()); - convert(oox_del_pr->m_oSepChr.GetPointer()); - convert(oox_del_pr->m_oShp.GetPointer()); - values.begEndChrs.second = convert(oox_del_pr->m_oEndChr.GetPointer()); - return values; - } - - std::wstring OoxConverter::convert(OOX::Logic::CBegChr * oox_beg_chr) - { - if (!oox_beg_chr) return L"("; - - std::wstring s_val = oox_beg_chr->m_val->GetValue(); - - //brackets()[lvl_of_me()].push_back(s_val); - - return s_val; - } - - std::wstring OoxConverter::convert(OOX::Logic::CEndChr * oox_end_chr) - { - if (!oox_end_chr) return L")"; - - std::wstring s_val = oox_end_chr->m_val->GetValue(); - - //brackets()[lvl_of_me()].push_back(s_val); - return s_val; - } - - void OoxConverter::convert(OOX::Logic::CEqArr *oox_eq_arr) - { - if (!oox_eq_arr) return; - returnValues values; - if(oox_eq_arr->m_arrItems[0]->getType() == OOX::EElementType::et_m_eqArrPr) - values = convert((OOX::Logic::CEqArrPr*)(oox_eq_arr->m_arrItems[0])); - - CREATE_MATH_TAG(L"mtable"); - OPEN_MATH_TAG(elm); - { - for (size_t i = 1; i < oox_eq_arr->m_arrItems.size() - 1; ++i) - annotation() += L" binom "; - for (size_t i = 1; i < oox_eq_arr->m_arrItems.size(); ++i) - { - CREATE_MATH_TAG(L"mtr"); - OPEN_MATH_TAG(elm); - { - CREATE_MATH_TAG(L"mtd"); - OPEN_MATH_TAG(elm); - mrow(); - annotation() += L"{"; - convert(oox_eq_arr->m_arrItems[i]); - annotation() += L"} "; - endOfMrow(); - CLOSE_MATH_TAG; - } - CLOSE_MATH_TAG; - } - } - CLOSE_MATH_TAG; - if(values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CEqArrPr *oox_eq_arr_pr) - { - returnValues values; - if (!oox_eq_arr_pr) return values; - - convert(oox_eq_arr_pr->m_oBaseJc.GetPointer()); - values.colorFlag = convert(oox_eq_arr_pr->m_oCtrlPr.GetPointer()).colorFlag; - convert(oox_eq_arr_pr->m_oMaxDist.GetPointer()); - convert(oox_eq_arr_pr->m_oObjDist.GetPointer()); - convert(oox_eq_arr_pr->m_oRSp.GetPointer()); - convert(oox_eq_arr_pr->m_oRSpRule.GetPointer()); - return values; - } - - void OoxConverter::convert(OOX::Logic::CBaseJc *oox_base_js) - { - if (!oox_base_js) return; - } - - void OoxConverter::convert(OOX::Logic::CMaxDist *oox_max_dist) - { - if (!oox_max_dist) return; - } - - void OoxConverter::convert(OOX::Logic::CObjDist *oox_obj_dist) // !!! ) - { - if (!oox_obj_dist) return; - } - - void OoxConverter::convert(OOX::Logic::CRSp *oox_r_sp) - { - if (!oox_r_sp) return; - } - - void OoxConverter::convert(OOX::Logic::CRSpRule *oox_r_sp_rule) - { - if (!oox_r_sp_rule) return; - } - - void OoxConverter::convert(OOX::Logic::CFraction *oox_fraction) - { - if (!oox_fraction) return; - - - returnValues val = convert(oox_fraction->m_oFPr.GetPointer()); - - if (val.str == L"lin") - { - - annotation() += L"{"; - - mrow(); - convert(oox_fraction->m_oNum.GetPointer()); - endOfMrow(); - - annotation() += L"} / {"; - - CREATE_MATH_TAG(L"mo"); - elm->add_text(L"/"); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - mrow(); - convert(oox_fraction->m_oDen.GetPointer()); - endOfMrow(); - - annotation() += L"}"; - } - else if (val.str == L"skw") - { - CREATE_MATH_TAG(L"mfrac"); - lvl_up_counter_increace(1); - lvl_down_counter_decreace(1); - typedef odf_writer::math_mfrac* T; - T tmp = dynamic_cast(elm.get()); - - if (tmp) - { - tmp->bevelled = true; - } - OPEN_MATH_TAG(elm); - annotation() += L"{"; - mrow(); - convert(oox_fraction->m_oNum.GetPointer()); - endOfMrow(); - annotation() += L"} wideslash {"; - mrow(); - convert(oox_fraction->m_oDen.GetPointer()); - endOfMrow(); - annotation() += L"}"; - CLOSE_MATH_TAG; - lvl_up_counter_decreace(1); - lvl_down_counter_increace(1); - } - else if (val.str == L"noBar") - { - CREATE_MATH_TAG(L"mtable"); - OPEN_MATH_TAG(elm); - { - CREATE_MATH_TAG(L"mtr"); - OPEN_MATH_TAG(elm); - { - CREATE_MATH_TAG(L"mtd"); - OPEN_MATH_TAG(elm); - annotation() += L"binom{"; - mrow(); - convert(oox_fraction->m_oNum.GetPointer()); - endOfMrow(); - CLOSE_MATH_TAG; - annotation() += L"} {"; - } - CLOSE_MATH_TAG; - } - { - CREATE_MATH_TAG(L"mtr"); - OPEN_MATH_TAG(elm); - { - CREATE_MATH_TAG(L"mtd"); - OPEN_MATH_TAG(elm); - mrow(); - convert(oox_fraction->m_oDen.GetPointer()); - endOfMrow(); - CLOSE_MATH_TAG; - annotation() += L"}"; - } - CLOSE_MATH_TAG; - } - CLOSE_MATH_TAG; - } - else - { - CREATE_MATH_TAG(L"mfrac"); - lvl_up_counter_increace(1); - lvl_down_counter_decreace(1); - annotation() += L"{"; - OPEN_MATH_TAG(elm); - mrow(); - convert(oox_fraction->m_oNum.GetPointer()); - endOfMrow(); - annotation() += L"} over {"; - mrow(); - convert(oox_fraction->m_oDen.GetPointer()); - endOfMrow(); - annotation() += L"}"; - CLOSE_MATH_TAG; - lvl_up_counter_decreace(1); - lvl_down_counter_increace(1); - } - if (val.colorFlag) - { - annotation() += L"}"; - CLOSE_MATH_TAG; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CFPr *oox_f_pr) - { - returnValues result; - result.str = L""; - if (!oox_f_pr) return result; - - result.str = convert(oox_f_pr->m_oType.GetPointer()); - result.colorFlag = convert(oox_f_pr->m_oCtrlPr.GetPointer()).colorFlag; - return result; - } - - std::wstring OoxConverter::convert(OOX::Logic::CType *oox_type) - { - if (!oox_type) return L""; - - std::wstring val = oox_type->m_val->ToString(); - - return val; - } - - void OoxConverter::convert(OOX::Logic::CNum *oox_num) - { - if (!oox_num) return; - - for (size_t i = 0; i < oox_num->m_arrItems.size(); ++i) - { - convert(oox_num->m_arrItems[i]); - } - } - - void OoxConverter::convert(OOX::Logic::CDen *oox_den) - { - if (!oox_den) return; - - for (size_t i = 0; i < oox_den->m_arrItems.size(); ++i) - { - convert(oox_den->m_arrItems[i]); - } - } - - void OoxConverter::convert(OOX::Logic::CFunc *oox_func) - { - if (!oox_func) return; - - returnValues values = convert(oox_func->m_oFuncPr.GetPointer()); - bool flag = convert(oox_func->m_oFName.GetPointer(), oox_func->m_oElement.GetPointer()); - - if(!flag) - convert(oox_func->m_oElement.GetPointer()); - - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CFuncPr *oox_func_pr) - { - returnValues values; - if (!oox_func_pr) return values; - - values = convert(oox_func_pr->m_oCtrlPr.GetPointer()); - return values; - } - - bool OoxConverter::convert(OOX::Logic::CFName *oox_fname, OOX::Logic::CElement *oox_elm) - { - if (!oox_fname) return false; - bool result; - for (size_t i = 0; i < oox_fname->m_arrItems.size(); ++i) - { - if (oox_fname->m_arrItems[i]->getType() == OOX::et_m_limLow) - { - convert(dynamic_cast(oox_fname->m_arrItems[i]), oox_elm); - result = true; - } - else - { - convert(oox_fname->m_arrItems[i]); - result = false; - } - } - return result; - } - - void OoxConverter::convert(OOX::Logic::CGroupChr* oox_group_ch, OOX::Logic::CLim* oox_lim) - { - if (!oox_group_ch) return; - - returnValues values = convert(oox_group_ch->m_oGroupChrPr.GetPointer()); - std::wstring tag; - if (values.auxFlag) - { - tag = L"mover"; - lvl_up_counter_increace(1); - } - else - { - tag = L"munder"; - lvl_down_counter_decreace(1); - } - - - CREATE_MATH_TAG(tag.c_str()); - if (values.auxFlag) - { - typedef odf_writer::math_mover* T; - T tmp = dynamic_cast(elm.get()); - tmp->accent = true; - } - else - { - typedef odf_writer::math_munder* T; - T tmp = dynamic_cast(elm.get()); - tmp->accentunder = true; - } - - OPEN_MATH_TAG(elm); - convert(oox_group_ch->m_oElement.GetPointer()); - if (values.auxFlag) - { - if (oox_group_ch->m_oGroupChrPr->m_oChr.IsInit() && oox_group_ch->m_oGroupChrPr->m_oChr->m_val->GetValue() == L"⏞") - { - if (oox_lim) - { - annotation() += L"overbrace {"; - convert(oox_lim); - annotation() += L"}"; - } - else - annotation() += L"overbrace \"\""; - } - else - { - annotation() += L" csup "; - convert(oox_group_ch->m_oGroupChrPr->m_oChr.GetPointer()); - } - } - else - { - if (oox_group_ch->m_oGroupChrPr->m_oChr.IsInit()) - { - annotation() += L" csub "; - convert(oox_group_ch->m_oGroupChrPr->m_oChr.GetPointer()); - } - else - { - CREATE_MATH_TAG(L"mo"); - elm->add_text(L" ⏟ "); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - if (oox_lim) - { - annotation() += L"underbrace {"; - convert(oox_lim); - annotation() += L"}"; - } - else - annotation() += L"underbrace \"\""; - } - } - CLOSE_MATH_TAG; - if (values.auxFlag) - lvl_up_counter_decreace(1); - else - lvl_down_counter_increace(1); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CGroupChrPr *oox_group_ch_pr) - { - returnValues values; - if (!oox_group_ch_pr) return values; - - //convert(oox_group_ch_pr->m_oChr.GetPointer()); - values.colorFlag = convert(oox_group_ch_pr->m_oCtrlPr.GetPointer()).colorFlag; - values.auxFlag = convert(oox_group_ch_pr->m_oPos.GetPointer()); - convert(oox_group_ch_pr->m_oVertJc.GetPointer()); - - return values; - } - - bool OoxConverter::convert(OOX::Logic::CPos *oox_pos) - { - if (!oox_pos) return false; - - if (oox_pos->m_val->ToString() == L"top") return true; - else return false; - } - - void OoxConverter::convert(OOX::Logic::CVertJc *oox_vert_jc) - { - if (!oox_vert_jc) return; - } - - void OoxConverter::convert(OOX::Logic::CLimLow *oox_lim_low, OOX::Logic::CElement *oox_elm) - { - if (!oox_lim_low) return; - - returnValues values = convert(oox_lim_low->m_oLimLowPr.GetPointer()); - mrow(); - - CREATE_MATH_TAG(L"munder"); - OPEN_MATH_TAG(elm); - lvl_down_counter_decreace(1); - if (oox_lim_low->m_oElement->m_arrItems[0]->getType() == OOX::EElementType::et_m_groupChr) - { - - convert(dynamic_cast(oox_lim_low->m_oElement->m_arrItems[0]), oox_lim_low->m_oLim.GetPointer()); - } - else - { - odf_context()->math_context()->annotation_oper_flag = true; - mrow(); - convert(oox_lim_low->m_oElement.GetPointer()); - endOfMrow(); - - annotation() += L"from {"; - convert(oox_lim_low->m_oLim.GetPointer()); - annotation() += L"} "; - } - - CLOSE_MATH_TAG; - lvl_down_counter_increace(1); - if (oox_elm) - convert(oox_elm); - - endOfMrow(); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - void OoxConverter::convert(OOX::Logic::CLim *oox_lim) - { - if (!oox_lim) return; - - mrow(); - - for (size_t i = 0; i < oox_lim->m_arrItems.size(); ++i) - convert(oox_lim->m_arrItems[i]); - - endOfMrow(); - } - - returnValues OoxConverter::convert(OOX::Logic::CLimLowPr *oox_lim_low_pr) - { - returnValues values; - if (!oox_lim_low_pr) return values; - - values.colorFlag = convert(oox_lim_low_pr->m_oCtrlPr.GetPointer()).colorFlag; - return values; - } - - void OoxConverter::convert(OOX::Logic::CLimUpp *oox_lim_upp) - { - if (!oox_lim_upp) return; - - returnValues values = convert(oox_lim_upp->m_oLimUppPr.GetPointer()); - mrow(); - CREATE_MATH_TAG(L"mover"); - OPEN_MATH_TAG(elm); - lvl_up_counter_increace(1); - if (oox_lim_upp->m_oElement->m_arrItems[0]->getType() == OOX::EElementType::et_m_groupChr) - { - - convert(dynamic_cast(oox_lim_upp->m_oElement->m_arrItems[0]), oox_lim_upp->m_oLim.GetPointer()); - } - else - { - annotation() += L"oper "; - - mrow(); - convert(oox_lim_upp->m_oElement.GetPointer()); - endOfMrow(); - - annotation() += L"to {"; - convert(oox_lim_upp->m_oLim.GetPointer()); - annotation() += L"} "; - } - - - CLOSE_MATH_TAG; - lvl_up_counter_decreace(1); - endOfMrow(); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CLimUppPr *oox_lim_upp_pr) - { - returnValues values; - if (!oox_lim_upp_pr) return values; - - values.colorFlag = convert(oox_lim_upp_pr->m_oCtrlPr.GetPointer()).colorFlag; - return values; - - } - - void OoxConverter::convert(OOX::Logic::CMathFont *oox_math_font) - { - if (!oox_math_font) return; - } - - void OoxConverter::convert(OOX::Logic::CMatrix *oox_matrix) - { - if (!oox_matrix) return; - int& matrix_row_counter = odf_context()->math_context()->matrix_row_counter; - returnValues values; - if (oox_matrix->m_arrItems[0]->getType() == OOX::EElementType::et_m_mPr) - { - matrix_row_counter = oox_matrix->m_arrItems.size() - 1; - values = convert((OOX::Logic::CMPr*)(oox_matrix->m_arrItems[0])); - } - else - matrix_row_counter = oox_matrix->m_arrItems.size(); - - CREATE_MATH_TAG(L"mtable"); - OPEN_MATH_TAG(elm); - annotation() += L"matrix{"; - for (size_t i = 0; i < oox_matrix->m_arrItems.size(); ++i) - { - if(oox_matrix->m_arrItems[i]->getType() != OOX::EElementType::et_m_mPr) - convert(oox_matrix->m_arrItems[i]); - } - CLOSE_MATH_TAG; - - odf_context()->math_context()->matrix_row_counter = 0; - annotation() += L"} "; - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - void OoxConverter::convert(OOX::Logic::CMc *oox_mc) - { - if (!oox_mc) return; - - convert(oox_mc->m_oMcPr.GetPointer()); - } - - void OoxConverter::convert(OOX::Logic::CMcPr *oox_mc_pr) - { - if (!oox_mc_pr) return; - - convert(oox_mc_pr->m_oCount.GetPointer()); - convert(oox_mc_pr->m_oMcJc.GetPointer()); - } - - void OoxConverter::convert(OOX::Logic::CCount *oox_count) - { - if (!oox_count) return; - } - - void OoxConverter::convert(OOX::Logic::CMcJc *oox_mc_jc) - { - if (!oox_mc_jc) return; - } - - void OoxConverter::convert(OOX::Logic::CMcs *oox_mcs) - { - if (!oox_mcs) return; - - for (size_t i = 0; i < oox_mcs->m_arrItems.size(); ++i) - { - convert(oox_mcs->m_arrItems[i]); - } - } - - void OoxConverter::convert(OOX::Logic::CMDel *oox_m_del) - { - if (!oox_m_del) return; - - - CREATE_MATH_TAG(L"mathMDel") - OPEN_MATH_TAG(elm) - - convert(oox_m_del->m_oRun.GetPointer()); - - CLOSE_MATH_TAG - } - - void OoxConverter::convert(OOX::Logic::CMIns *oox_m_ins) - { - if (!oox_m_ins) return; - - CREATE_MATH_TAG(L"mathMIns") - OPEN_MATH_TAG(elm) - - convert(oox_m_ins->m_oRun.GetPointer()); - - CLOSE_MATH_TAG - } - - returnValues OoxConverter::convert(OOX::Logic::CMPr *oox_m_pr) - { - returnValues values; - if (!oox_m_pr) return values; - - convert(oox_m_pr->m_oBaseJc.GetPointer()); - convert(oox_m_pr->m_oCGp.GetPointer()); - convert(oox_m_pr->m_oCGpRule.GetPointer()); - convert(oox_m_pr->m_oCSp.GetPointer()); - values.colorFlag = convert(oox_m_pr->m_oCtrlPr.GetPointer()).colorFlag; - convert(oox_m_pr->m_oMcs.GetPointer()); - convert(oox_m_pr->m_oMcs.GetPointer()); - convert(oox_m_pr->m_oPlcHide.GetPointer()); - convert(oox_m_pr->m_oRSp.GetPointer()); - convert(oox_m_pr->m_oRSpRule.GetPointer()); - return values; - } - - void OoxConverter::convert(OOX::Logic::CPlcHide *oox_plc_hide) - { - if (!oox_plc_hide) return; - } - - void OoxConverter::convert(OOX::Logic::CMr *oox_mr) - { - if (!oox_mr) return; - bool color_flag = false; - for (size_t i = 0; i < oox_mr->m_arrItems.size(); ++i) - { - if (oox_mr->m_arrItems[i]->getType() == OOX::et_w_rPr) - color_flag = convert((OOX::Logic::CRunProperty*)(oox_mr->m_arrItems[i])); - } - int& matrix_row_counter = odf_context()->math_context()->matrix_row_counter; - - CREATE_MATH_TAG(L"mtr"); - OPEN_MATH_TAG(elm); - - for (size_t i = 0; i < oox_mr->m_arrItems.size(); ++i) - { - CREATE_MATH_TAG(L"mtd"); - OPEN_MATH_TAG(elm); - convert(oox_mr->m_arrItems[i]); - CLOSE_MATH_TAG; - if( i != oox_mr->m_arrItems.size() - 1) - annotation() += L"# "; - } - CLOSE_MATH_TAG; - - matrix_row_counter--; - if(matrix_row_counter > 0) - annotation() += L"## "; - if(color_flag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - void OoxConverter::convert(OOX::Logic::CMRun *oox_mrun) - { - if (!oox_mrun) return; - - convert(oox_mrun->m_oAnnotationRef.GetPointer()); - convert(oox_mrun->m_oARPr.GetPointer()); - convert(oox_mrun->m_oBr.GetPointer()); - convert(oox_mrun->m_oCommentReference.GetPointer()); - convert(oox_mrun->m_oContentPart.GetPointer()); - convert(oox_mrun->m_oContinuationSeparator.GetPointer()); - convert(oox_mrun->m_oCr.GetPointer()); - convert(oox_mrun->m_oDayLong.GetPointer()); - convert(oox_mrun->m_oDayShort.GetPointer()); - convert(oox_mrun->m_oDel.GetPointer()); - convert(oox_mrun->m_oDelInstrText.GetPointer()); - convert(oox_mrun->m_oDelText.GetPointer()); - convert(oox_mrun->m_oDrawing.GetPointer()); - convert(oox_mrun->m_oEndnoteRef.GetPointer()); - convert(oox_mrun->m_oEndnoteReference.GetPointer()); - convert(oox_mrun->m_oEndnoteReference.GetPointer()); - convert(oox_mrun->m_oFldChar.GetPointer()); - convert(oox_mrun->m_oFootnoteRef.GetPointer()); - convert(oox_mrun->m_oFootnoteReference.GetPointer()); - convert(oox_mrun->m_oIns.GetPointer()); - convert(oox_mrun->m_oInstrText.GetPointer()); - convert(oox_mrun->m_oLastRenderedPageBreak.GetPointer()); - convert(oox_mrun->m_oMonthLong.GetPointer()); - convert(oox_mrun->m_oMonthShort.GetPointer()); - //convert(oox_mrun->m_oMRPr.GetPointer()); - bool clrFlag = convert(oox_mrun->m_oRPr.GetPointer()); - convert(oox_mrun->m_oMText.GetPointer()); - convert(oox_mrun->m_oNoBreakHyphen.GetPointer()); - convert(oox_mrun->m_oObject.GetPointer()); - convert(oox_mrun->m_oPgNum.GetPointer()); - convert(oox_mrun->m_oPtab.GetPointer()); - convert(oox_mrun->m_oRuby.GetPointer()); - convert(oox_mrun->m_oSeparator.GetPointer()); - convert(oox_mrun->m_oSoftHyphen.GetPointer()); - convert(oox_mrun->m_oSym.GetPointer()); - convert(oox_mrun->m_oTab.GetPointer()); - convert(oox_mrun->m_oText.GetPointer()); - convert(oox_mrun->m_oYearLong.GetPointer()); - convert(oox_mrun->m_oYearShort.GetPointer()); - if (clrFlag) - { - CLOSE_MATH_TAG; - if(odf_context()->math_context()->annotation_oper_flag) - odf_context()->math_context()->annotation_oper_flag = false; - else - { - annotation() += L"}"; - } - } - } - - bool OoxConverter::convert(OOX::Logic::CRunProperty *oox_r_pr) - { - if (!oox_r_pr) return false; - - if (odf_context()->math_context()->style_flag) - { - odf_context()->math_context()->style_flag = false; - odf_context()->math_context()->font = *oox_r_pr->m_oRFonts->m_sAscii; - odf_context()->math_context()->size = oox_r_pr->m_oSz->m_oVal->GetValue(); - odf_context()->settings_context()->start_view(); - odf_context()->settings_context()->add_config_content_item(L"BaseFontHeight", L"short", oox_r_pr->m_oSz->m_oVal->ToString()); - odf_context()->settings_context()->add_config_content_item(L"FontNameFunctions", L"string", *oox_r_pr->m_oRFonts->m_sAscii); - odf_context()->settings_context()->add_config_content_item(L"FontNameNumbers", L"string", *oox_r_pr->m_oRFonts->m_sAscii); - odf_context()->settings_context()->add_config_content_item(L"FontNameText", L"string", *oox_r_pr->m_oRFonts->m_sAscii); - odf_context()->settings_context()->add_config_content_item(L"FontNameVariables", L"string", *oox_r_pr->m_oRFonts->m_sAscii); - odf_context()->settings_context()->end_view(); - } - - - if (oox_r_pr->m_oColor.IsInit() && oox_r_pr->m_oColor->m_oVal->ToString() != L"auto") - { - if (oox_r_pr->m_oColor->m_oVal.IsInit()) - { - std::wstring clr = oox_r_pr->m_oColor->m_oVal.GetPointer()->ToString(); - std::wstring clr2(L"#"); - clr.erase(0, 2); - clr2 += clr; - - CREATE_MATH_TAG(L"mstyle"); - typedef odf_writer::math_mstyle * T; - T tmp = dynamic_cast(elm.get()); - tmp->color_ = clr2; - OPEN_MATH_TAG(elm); - - clr2.erase(0, 1); - std::vector rgb = hexToIntColor(clr2); - boost::to_upper(clr2); - if (odf_context()->math_context()->annotation_oper_flag) - { - annotation() += L" color hex " + clr2 + L" oper "; - } - else - annotation() += L" color hex " + clr2 + L"{" ; - return true; - } - } - return false; - } - - void OoxConverter::convert(OOX::Logic::CMText *oox_text) - { - if (!oox_text) return; - - std::set& mo = odf_context()->math_context()->mo; - - std::wstring s_val = oox_text->m_sText; - std::wstring sub_s_val = L""; - - for (size_t i = 0; i < s_val.size(); i++) - { - wchar_t w_val = s_val[i]; - - if (w_val == L'=') - { - if (sub_s_val.size() != 0) - { - CREATE_MATH_TAG(L"mi"); - elm->add_text(sub_s_val); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - annotation() += sub_s_val; - sub_s_val.clear(); - } - CREATE_MATH_TAG(L"mtext"); - - elm->add_text(std::wstring(1, s_val[i])); - - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - annotation() += std::wstring(1, s_val[i]) + L" "; - } - - else if (w_val <= 57 && w_val >= 48) - { - if (sub_s_val.size() != 0) - { - CREATE_MATH_TAG(L"mi"); - elm->add_text(sub_s_val); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - annotation() += sub_s_val + L" "; - sub_s_val.clear(); - } - - CREATE_MATH_TAG(L"mn"); - - elm->add_text(std::wstring(1, s_val[i])); - OPEN_MATH_TAG(elm); - - CLOSE_MATH_TAG; - annotation() += std::wstring(1, s_val[i]) + L" "; - } - else if (mo.find(w_val) != mo.end()) - { - if (sub_s_val.size() != 0) - { - CREATE_MATH_TAG(L"mi"); - elm->add_text(sub_s_val); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - annotation() += sub_s_val + L" "; - sub_s_val.clear(); - } - - CREATE_MATH_TAG(L"mo"); - - elm->add_text(std::wstring(1, s_val[i])); - - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - annotation() += std::wstring(1, s_val[i]) + L" "; - } - else // - { - sub_s_val += s_val[i]; - } - - if ((i == s_val.size() - 1) && (sub_s_val.size() != 0)) - { - CREATE_MATH_TAG(L"mi"); - elm->add_text(sub_s_val); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - annotation() += sub_s_val + L" "; - } - } - } - - void OoxConverter::convert(OOX::Logic::CNary *oox_nary) - { - if (!oox_nary) return; - returnValues values = convert(oox_nary->m_oNaryPr.GetPointer()); - mrow(); - - bool flag_nary = false; - std::wstring tag; - if ((oox_nary->m_oSub.GetPointer()->m_arrItems.size() != 0) && (oox_nary->m_oSup.GetPointer()->m_arrItems.size() != 0)) - { - tag = L"munderover"; - flag_nary = true; - - lvl_up_counter_increace(1); - lvl_down_counter_decreace(1); - } - else if ((oox_nary->m_oSub.GetPointer()->m_arrItems.size() != 0) && (oox_nary->m_oSup.GetPointer()->m_arrItems.size() == 0)) - { - tag = L"munder"; - flag_nary = true; - lvl_down_counter_decreace(1); - } - else if ((oox_nary->m_oSub.GetPointer()->m_arrItems.size() == 0) && (oox_nary->m_oSup.GetPointer()->m_arrItems.size() != 0)) - { - tag = L"mover"; - flag_nary = true; - lvl_up_counter_increace(1); - } - - if (flag_nary) - { - CREATE_MATH_TAG(tag); - OPEN_MATH_TAG(elm); - } - - std::wstring str1, str2; - if (values.naryChr) - { - str1 = L" from {"; - str2 = L" to {"; - } - else - { - str1 = L" csub {"; - str2 = L" csup {"; - } - - if (!values.narySubHide) - { - - annotation() += str1; - - //mrow(); - convert(oox_nary->m_oSub.GetPointer()); - //endOfMrow(); - annotation() += L"}"; - - } - if (!values.narySupHide) - { - annotation() += str2; - //mrow(); - convert(oox_nary->m_oSup.GetPointer()); - //endOfMrow(); - annotation() += L"} "; - } - - if (flag_nary) - { - CLOSE_MATH_TAG; - if (tag == L"munderover") - { - lvl_up_counter_decreace(1); - lvl_down_counter_increace(1); - } - else if (tag == L"mover") - lvl_up_counter_decreace(1); - else if (tag == L"munder") - lvl_down_counter_increace(1); - } - annotation() += L" {"; - convert(oox_nary->m_oElement.GetPointer()); - annotation() += L"} "; - endOfMrow(); - - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CNaryPr *oox_nary_pr) - { - returnValues values; - if (!oox_nary_pr) - { - values.auxFlag = false; - return values; - } - - values.colorFlag = convert(oox_nary_pr->m_oCtrlPr.GetPointer()).colorFlag; - values.naryChr = convert(oox_nary_pr->m_oChr.GetPointer()); - convert(oox_nary_pr->m_oGrow.GetPointer()); - values.narySubHide = convert(oox_nary_pr->m_oSubHide.GetPointer()); - values.narySupHide = convert(oox_nary_pr->m_oSupHide.GetPointer()); - - return values; - } - - void OoxConverter::convert(OOX::Logic::CGrow* oox_grow) - { - if (!oox_grow) return; - } - - bool OoxConverter::convert(OOX::Logic::CSubHide *oox_subHide) - { - if (!oox_subHide) return false; - - bool result = oox_subHide->m_val->ToBool(); - return result; - } - - bool OoxConverter::convert(OOX::Logic::CSupHide *oox_supHide) - { - if (!oox_supHide) return false; - bool result = oox_supHide->m_val->ToBool(); - return result; - } - - bool OoxConverter::convert(OOX::Logic::CChr * oox_chr) - { - bool flag = false; - //if (!oox_chr) return; - CREATE_MATH_TAG(L"mo"); - typedef odf_writer::math_mo* T; - - T tmp = dynamic_cast(elm.get()); - if (tmp) - { - tmp->stretchy_ = false; - } - - if (!oox_chr) - { - annotation() += L"int "; - elm->add_text(L"∫"); - } - else - { - std::wstring val = oox_chr->m_val->GetValue(); - std::map& map = odf_context()->math_context()->annotation_operators; - if (map.count(val)) - { - flag = true; - annotation() += map[val]; - } - else - //annotation_flag() = false; - annotation() += (val + L" "); - elm->add_text(val); - } - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - return flag; - } - - void OoxConverter::convert(OOX::Logic::CPhant *oox_phant) - { - if (!oox_phant) return; - - CREATE_MATH_TAG(L"mathPhant") - OPEN_MATH_TAG(elm) - - convert(oox_phant->m_oElement.GetPointer()); - convert(oox_phant->m_oPhantPr.GetPointer()); - - CLOSE_MATH_TAG - } - - void OoxConverter::convert(OOX::Logic::CPhantPr *oox_phant_pr) - { - if (!oox_phant_pr) return; - - CREATE_MATH_TAG(L"mathPhantPr") - OPEN_MATH_TAG(elm) - - convert(oox_phant_pr->m_oCtrlPr.GetPointer()); - convert(oox_phant_pr->m_oShow.GetPointer()); - convert(oox_phant_pr->m_oTransp.GetPointer()); - convert(oox_phant_pr->m_oZeroAsc.GetPointer()); - convert(oox_phant_pr->m_oZeroDesc.GetPointer()); - convert(oox_phant_pr->m_oZeroWid.GetPointer()); - - CLOSE_MATH_TAG - } - - void OoxConverter::convert(OOX::Logic::CRad *oox_rad) - { - if (!oox_rad) return; - - returnValues val = convert(oox_rad->m_oRadPr.GetPointer()); - if (val.auxFlag) - { - CREATE_MATH_TAG(L"msqrt"); - OPEN_MATH_TAG(elm); - annotation() += L"sqrt {"; - mrow(); - convert(oox_rad->m_oElement.GetPointer()); - endOfMrow(); - annotation() += L"}"; - CLOSE_MATH_TAG; - odf_context()->math_context()->symbol_counter++; - } - else - convert(oox_rad->m_oDeg.GetPointer(), oox_rad->m_oElement.GetPointer()); - - - if (val.colorFlag) - { - annotation() += L"}"; - CLOSE_MATH_TAG; - } - - } - - returnValues OoxConverter::convert(OOX::Logic::CRadPr *oox_rad_pr) - { - returnValues result; - if (!oox_rad_pr) result.auxFlag = false; - - result.auxFlag = convert(oox_rad_pr->m_oDegHide.GetPointer()); - result.colorFlag = convert(oox_rad_pr->m_oCtrlPr.GetPointer()).colorFlag; - return result; - } - - bool OoxConverter::convert(OOX::Logic::CDegHide *oox_deg_hide) - { - if (!oox_deg_hide) return false; - - return oox_deg_hide->m_val->ToBool(); - } - - void OoxConverter::convert(OOX::Logic::CDeg *oox_deg, OOX::Logic::CElement *oox_elm) - { - if (!oox_deg) return; - if (oox_deg->m_arrItems.size() == 0) return; - - CREATE_MATH_TAG(L"mroot"); - OPEN_MATH_TAG(elm); - - size_t iterator = annotation().size(); - - convert(oox_elm); - - size_t rootSize = annotation().size() - iterator; - std::wstring root(&annotation()[iterator], rootSize); - - mrow(); - for (size_t i = 0; i < oox_deg->m_arrItems.size(); ++i) - convert(oox_deg->m_arrItems[i]); - endOfMrow(); - - size_t degreeSize = annotation().size() - rootSize - iterator; - std::wstring degree(&annotation()[iterator + rootSize], degreeSize); - - annotation().erase(iterator); - annotation() += L"nroot {" + degree + L"} {" + root + L"}"; - - CLOSE_MATH_TAG; - } - - void OoxConverter::convert(OOX::Logic::CSPre *oox_s_pre) - { - if (!oox_s_pre) return; - - returnValues values = convert(oox_s_pre->m_oSPrePr.GetPointer()); - - CREATE_MATH_TAG(L"mmultiscripts"); - OPEN_MATH_TAG(elm); - lvl_up_counter_increace(0.4); - lvl_down_counter_decreace(0.4); - annotation() += L"{"; - mrow(); - convert(oox_s_pre->m_oElement.GetPointer()); - endOfMrow(); - - annotation() += L"} lsub {"; - - { - CREATE_MATH_TAG(L"mprescripts"); - OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - - mrow(); - convert(oox_s_pre->m_oSub.GetPointer()); - endOfMrow(); - - annotation() += L"} lsup {"; - - mrow(); - convert(oox_s_pre->m_oSup.GetPointer()); - endOfMrow(); - - annotation() += L"}"; - } - CLOSE_MATH_TAG; - lvl_up_counter_decreace(0.4); - lvl_down_counter_increace(0.4); - if (values.colorFlag) - { - annotation() += L"}"; - CLOSE_MATH_TAG; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CSPrePr *oox_s_pre_pr) - { - returnValues values; - if (!oox_s_pre_pr) return values; - - values = convert(oox_s_pre_pr->m_oCtrlPr.GetPointer()); - return values; - } - - void OoxConverter::convert(OOX::Logic::CSup *oox_sup, OOX::Logic::CElement *oox_elm) - { - if (!oox_sup) return; - - CREATE_MATH_TAG(L"msup"); - OPEN_MATH_TAG(elm); - lvl_up_counter_increace(0.4); - annotation() += L"{"; - - mrow(); - convert(oox_elm); - endOfMrow(); - - annotation() += L"}^{"; - - mrow(); - for (size_t i = 0; i < oox_sup->m_arrItems.size(); ++i) - { - convert(oox_sup->m_arrItems[i]); - } - endOfMrow(); - - annotation() += L"}"; - CLOSE_MATH_TAG; - lvl_up_counter_decreace(0.4); - } - - void OoxConverter::convert(OOX::Logic::CSub *oox_sub, OOX::Logic::CElement *oox_elm) - { - if (!oox_sub) return; - - CREATE_MATH_TAG(L"msub"); - OPEN_MATH_TAG(elm); - lvl_down_counter_decreace(0.4); - annotation() += L"{"; - - mrow(); - convert(oox_elm); - endOfMrow(); - - annotation() += L"}_{"; - - for (size_t i = 0; i < oox_sub->m_arrItems.size(); ++i) - { - convert(oox_sub->m_arrItems[i]); - - } - annotation() += L"}"; - CLOSE_MATH_TAG; - lvl_down_counter_increace(0.4); - } - - void OoxConverter::convert(OOX::Logic::CSub *oox_csub) - { - mrow(); - for (size_t i = 0; i < oox_csub->m_arrItems.size(); ++i) - { - convert(oox_csub->m_arrItems[i]); - } - endOfMrow(); - } - - void OoxConverter::convert(OOX::Logic::CSup *oox_csup) - { - mrow(); - for (size_t i = 0; i < oox_csup->m_arrItems.size(); ++i) - { - convert(oox_csup->m_arrItems[i]); - } - endOfMrow(); - } - - void OoxConverter::convert(OOX::Logic::CSSub *oox_ssub) - { - if (!oox_ssub) return; - - returnValues values = convert(oox_ssub->m_oSSubPr.GetPointer()); - convert(oox_ssub->m_oSub.GetPointer(), oox_ssub->m_oElement.GetPointer()); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CSSubPr*oox_ssub_pr) - { - returnValues values; - if (!oox_ssub_pr) return values; - - values.colorFlag = convert(oox_ssub_pr->m_oCtrlPr.GetPointer()).colorFlag; - return values; - } - - void OoxConverter::convert(OOX::Logic::CSSubSup *oox_ssub_sup) - { - if (!oox_ssub_sup) return; - - returnValues values = convert(oox_ssub_sup->m_oSSubSupPr.GetPointer()); - { - CREATE_MATH_TAG(L"msubsup"); - OPEN_MATH_TAG(elm); - lvl_up_counter_increace(0.4); - lvl_down_counter_decreace(0.4); - annotation() += L"{"; - - mrow(); - convert(oox_ssub_sup->m_oElement.GetPointer()); - endOfMrow(); - - annotation() += L"}_{"; - - mrow(); - convert(oox_ssub_sup->m_oSub.GetPointer()); - endOfMrow(); - - annotation() += L"}^{"; - - mrow(); - convert(oox_ssub_sup->m_oSup.GetPointer()); - endOfMrow(); - - annotation() += L"}"; - CLOSE_MATH_TAG; - lvl_up_counter_decreace(0.4); - lvl_down_counter_increace(0.4); - } - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CSSubSupPr *oox_ssub_sup_pr) - { - returnValues values; - if (!oox_ssub_sup_pr) return values; - - - convert(oox_ssub_sup_pr->m_oAlnScr.GetPointer()); - values.colorFlag = convert(oox_ssub_sup_pr->m_oCtrlPr.GetPointer()).colorFlag; - return values; - } - - void OoxConverter::convert(OOX::Logic::CAlnScr* oox_aln_scr) - { - if (!oox_aln_scr) return; - } - - void OoxConverter::convert(OOX::Logic::CSSup *oox_ssup) - { - if (!oox_ssup) return; - - returnValues values = convert(oox_ssup->m_oSSupPr.GetPointer()); - - convert(oox_ssup->m_oSup.GetPointer(), oox_ssup->m_oElement.GetPointer()); - if (values.colorFlag) - { - CLOSE_MATH_TAG; - annotation() += L"}"; - } - } - - returnValues OoxConverter::convert(OOX::Logic::CSSupPr *oox_ssup_pr) - { - returnValues values; - if (!oox_ssup_pr) return values; - - values.colorFlag = convert(oox_ssup_pr->m_oCtrlPr.GetPointer()).colorFlag; - return values; - } - - void OoxConverter::convert(OOX::Logic::CElement *oox_elm) - { - if (!oox_elm) return; - - if (oox_elm->m_arrItems.empty()) - annotation() += L"\"\""; - - resizeBrackets(); - - if (!brackets()[lvl_of_me()].empty()) - { - for (size_t i = 0; i < brackets()[lvl_of_me()].size() / 2; ++i) - { - - CREATE_MATH_TAG(L"mo") - elm->add_text(brackets()[lvl_of_me()][i]); - OPEN_MATH_TAG(elm) - CLOSE_MATH_TAG - } - } - - for (size_t i = 0; i < oox_elm->m_arrItems.size(); ++i) - { - convert(oox_elm->m_arrItems[i]); - } - - if (!brackets()[lvl_of_me()].empty()) - { - for (size_t i = brackets()[lvl_of_me()].size() / 2; i < brackets()[lvl_of_me()].size(); ++i) - { - CREATE_MATH_TAG(L"mo") - elm->add_text(brackets()[lvl_of_me()][i]); - OPEN_MATH_TAG(elm) - CLOSE_MATH_TAG - } - } - brackets()[lvl_of_me()].clear(); - - if (lvl_of_me() != 0) - { - lvl_of_me()--; - brackets().pop_back(); - } - - if (!end_counter().empty()) - { - for (size_t i = 0; i < end_counter()[end_counter().size() - 1]; ++i) - CLOSE_MATH_TAG - - end_counter().pop_back(); - } - } -} diff --git a/OdfFile/Writer/Converter/Converter.h b/OdfFile/Writer/Converter/Converter.h index 33ad5b76da..d3bec82ee2 100644 --- a/OdfFile/Writer/Converter/Converter.h +++ b/OdfFile/Writer/Converter/Converter.h @@ -443,8 +443,23 @@ namespace PPTX using namespace cpdoccore; + + namespace Oox2Odf { + struct returnValues + { + returnValues() : colorFlag(false), auxFlag(false), naryChr(false), narySubHide(false), narySupHide(false), begEndChrs(L"(", L")"), str(L"") + {} + bool colorFlag; + bool auxFlag; + bool naryChr; + bool narySubHide; + bool narySupHide; + std::pair begEndChrs; + std::wstring str; + ~returnValues() {} + }; class OoxConverter { public: @@ -654,49 +669,51 @@ public: void convert(OOX::Drawing::COfficeArtExtensionList *ext_list); void convert(OOX::Drawing::COfficeArtExtension *art_ext); - - std::wstring GetImageIdFromVmlShape(OOX::Vml::CVmlCommonElements* pShape); //math............................................................................................................................ std::vector>& brackets(); int& lvl_of_me(); std::vector& end_counter(); std::wstring& annotation(); bool& annotation_flag(); + void lvl_up_counter_increace(double val); + void lvl_up_counter_decreace(double val); + void lvl_down_counter_increace(double val); + void lvl_down_counter_decreace(double val); void mrow(); void endOfMrow(); void resizeBrackets(); void convert(OOX::Logic::COMath *oox_math); void convert(OOX::Logic::CMathPr *oox_math_pr); - bool convert(OOX::Logic::CCtrlPr *oox_ctrl_pr); + returnValues convert(OOX::Logic::CCtrlPr *oox_ctrl_pr); void convert(OOX::Logic::CAcc *oox_acc); - void convert(OOX::Logic::CAccPr *oox_acc_pr); + returnValues convert(OOX::Logic::CAccPr *oox_acc_pr); void convert(OOX::Logic::CArgPr *oox_arg_pr); void convert(OOX::Logic::CBar *oox_bar); - bool convert(OOX::Logic::CBarPr *oox_bar_pr); + returnValues convert(OOX::Logic::CBarPr *oox_bar_pr); void convert(OOX::Logic::CBorderBox *oox_border_box); - void convert(OOX::Logic::CBorderBoxPr *oox_border_box_pr); + returnValues convert(OOX::Logic::CBorderBoxPr *oox_border_box_pr); void convert(OOX::Logic::CBox *oox_box); - bool convert(OOX::Logic::CBoxPr *oox_box_pr); + returnValues convert(OOX::Logic::CBoxPr *oox_box_pr); void convert(OOX::Logic::CBrk *oox_brk); void convert(OOX::Logic::CDelimiter *oox_del); - std::pair convert(OOX::Logic::CDelimiterPr *oox_del_pr); + returnValues convert(OOX::Logic::CDelimiterPr *oox_del_pr); void convert(OOX::Logic::CEqArr *oox_eq_arr); - void convert(OOX::Logic::CEqArrPr *oox_eq_arr_pr); + returnValues convert(OOX::Logic::CEqArrPr *oox_eq_arr_pr); void convert(OOX::Logic::CBaseJc *oox_base_jc); void convert(OOX::Logic::CMaxDist *oox_max_dist); void convert(OOX::Logic::CObjDist *oox_obj_dist); void convert(OOX::Logic::CRSp *oox_r_sp); void convert(OOX::Logic::CRSpRule *oox_r_sp_rule); - std::wstring convert(OOX::Logic::CFPr *oox_f_pr); + returnValues convert(OOX::Logic::CFPr *oox_f_pr); void convert(OOX::Logic::CFraction *oox_fraction); void convert(OOX::Logic::CFunc *oox_func); - void convert(OOX::Logic::CFuncPr *oox_func_pr); - void convert(OOX::Logic::CGroupChr *oox_group_ch); - bool convert(OOX::Logic::CGroupChrPr *oox_group_ch_pr); - void convert(OOX::Logic::CLimLow *oox_lim_low); - void convert(OOX::Logic::CLimLowPr *oox_lim_low_pr); + returnValues convert(OOX::Logic::CFuncPr *oox_func_pr); + void convert(OOX::Logic::CGroupChr *oox_group_ch, OOX::Logic::CLim *oox_lim = NULL); + returnValues convert(OOX::Logic::CGroupChrPr *oox_group_ch_pr); + void convert(OOX::Logic::CLimLow *oox_lim_low, OOX::Logic::CElement *oox_elm = NULL); + returnValues convert(OOX::Logic::CLimLowPr *oox_lim_low_pr); void convert(OOX::Logic::CLimUpp *oox_lim_upp); - void convert(OOX::Logic::CLimUppPr *oox_lim_upp_pr); + returnValues convert(OOX::Logic::CLimUppPr *oox_lim_upp_pr); void convert(OOX::Logic::CMathFont *oox_math_font); void convert(OOX::Logic::CMatrix *oox_matrix); void convert(OOX::Logic::CMc *oox_mc); @@ -704,38 +721,38 @@ public: void convert(OOX::Logic::CMcs *oox_mcs); void convert(OOX::Logic::CMDel *oox_m_del); void convert(OOX::Logic::CMIns *oox_m_ins); - void convert(OOX::Logic::CMPr *oox_m_pr); + returnValues convert(OOX::Logic::CMPr *oox_m_pr); void convert(OOX::Logic::CMr *oox_mr); void convert(OOX::Logic::CMRun *oox_run); void convert(OOX::Logic::CMText *oox_text); void convert(OOX::Logic::CNary *oox_nary); - std::vector convert(OOX::Logic::CNaryPr *oox_nary_pr); + returnValues convert(OOX::Logic::CNaryPr *oox_nary_pr); void convert(OOX::Logic::CGrow *oox_grow); void convert(OOX::Logic::COMathPara *oox_math_para); void convert(OOX::Logic::COMathParaPr *oox_math_para_pr); void convert(OOX::Logic::CPhant *oox_phant); void convert(OOX::Logic::CPhantPr *oox_phant_pr); void convert(OOX::Logic::CRad *oox_rad); - bool convert(OOX::Logic::CRadPr *oox_rad_pr); + returnValues convert(OOX::Logic::CRadPr *oox_rad_pr); void convert(OOX::Logic::CSPre *oox_s_pre); - void convert(OOX::Logic::CSPrePr *oox_s_pre_pr); + returnValues convert(OOX::Logic::CSPrePr *oox_s_pre_pr); void convert(OOX::Logic::CSSub *oox_ssub); - void convert(OOX::Logic::CSSubPr *oox_ssub_pr); + returnValues convert(OOX::Logic::CSSubPr *oox_ssub_pr); void convert(OOX::Logic::CSSubSup *oox_ssub_sup); - void convert(OOX::Logic::CSSubSupPr *oox_ssub_sup_pr); + returnValues convert(OOX::Logic::CSSubSupPr *oox_ssub_sup_pr); void convert(OOX::Logic::CAlnScr *oox_aln_scr); void convert(OOX::Logic::CSSup *oox_ssup); - void convert(OOX::Logic::CSSupPr *oox_ssup_pr); + returnValues convert(OOX::Logic::CSSupPr *oox_ssup_pr); void convert(OOX::Logic::CNum *oox_num); void convert(OOX::Logic::CDen *oox_den); - std::wstring convert(OOX::Logic::CBegChr *oox_beg_chr); - std::wstring convert(OOX::Logic::CEndChr *oox_end_chr); + std::wstring convert(OOX::Logic::CBegChr *oox_beg_chr); + std::wstring convert(OOX::Logic::CEndChr *oox_end_chr); void convert(OOX::Logic::CElement *oox_elm); bool convert(OOX::Logic::CDegHide *oox_deg_hide); void convert(OOX::Logic::CDeg *oox_deg, OOX::Logic::CElement *oox_elm); void convert(OOX::Logic::CSup *oox_sup, OOX::Logic::CElement *oox_elm); void convert(OOX::Logic::CSub *oox_sub, OOX::Logic::CElement *oox_elm); - void convert(OOX::Logic::CFName *oox_fname); + bool convert(OOX::Logic::CFName *oox_fname, OOX::Logic::CElement* oox_elm); void convert(OOX::Logic::CLim *oox_lim); bool convert(OOX::Logic::CChr *oox_chr); void convert(OOX::Logic::CSup *oox_csup); diff --git a/OdfFile/Writer/Converter/MathConverter.cpp b/OdfFile/Writer/Converter/MathConverter.cpp index 29222acd50..aa658fedc9 100644 --- a/OdfFile/Writer/Converter/MathConverter.cpp +++ b/OdfFile/Writer/Converter/MathConverter.cpp @@ -1,50 +1,21 @@ -/* -* (c) Copyright Ascensio System SIA 2010-2019 -* -* This program is a free software product. You can redistribute it and/or -* modify it under the terms of the GNU Affero General Public License (AGPL) -* version 3 as published by the Free Software Foundation. In accordance with -* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect -* that Ascensio System SIA expressly excludes the warranty of non-infringement -* of any third-party rights. -* -* This program is distributed WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For -* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html -* -* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha -* street, Riga, Latvia, EU, LV-1050. -* -* The interactive user interfaces in modified source and object code versions -* of the Program must display Appropriate Legal Notices, as required under -* Section 5 of the GNU AGPL version 3. -* -* Pursuant to Section 7(b) of the License you must retain the original Product -* logo when distributing the program. Pursuant to Section 7(e) we decline to -* grant you any rights under trademark law for use of our trademarks. -* -* All the Product's GUI elements, including illustrations and icon sets, as -* well as technical writing content are licensed under the terms of the -* Creative Commons Attribution-ShareAlike 4.0 International. See the License -* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode -* -*/ +#include "Converter.h" -#include "Converter.h" +//#include "../utils.h" -#include "../../../OOXML/DocxFormat/DocxFlat.h" -#include "../../../OOXML/DocxFormat/Math/oMathPara.h" +#include "../../../Common/DocxFormat/Source/DocxFormat/DocxFlat.h" - -#include "../Format/odf_conversion_context.h" -#include "../Format/math_layout_elements.h" -#include "../Format/math_limit_elements.h" -#include "../Format/math_token_elements.h" +#include "../OdfFormat/odf_conversion_context.h" +#include "../../ASCOfficeOdfFileW/source/OdfFormat/math_layout_elements.h" +#include "../../ASCOfficeOdfFileW/source/OdfFormat/math_limit_elements.h" +#include "../../ASCOfficeOdfFileW/source/OdfFormat/math_token_elements.h" #include +#include #include - +#include +#include namespace Oox2Odf { + std::vector>& OoxConverter::brackets() { return odf_context()->math_context()->brackets; @@ -60,6 +31,36 @@ namespace Oox2Odf return odf_context()->math_context()->end_counter; } + void OoxConverter::lvl_up_counter_increace(double val) + { + double& lvl_max = odf_context()->math_context()->lvl_max; + double& lvl_up_counter = odf_context()->math_context()->lvl_up_counter; + lvl_up_counter += val; + if (lvl_max < lvl_up_counter) + lvl_max = lvl_up_counter; + } + + void OoxConverter::lvl_up_counter_decreace(double val) + { + double& lvl_up_counter = odf_context()->math_context()->lvl_up_counter; + lvl_up_counter -= val; + } + + void OoxConverter::lvl_down_counter_decreace(double val) + { + double& lvl_min = odf_context()->math_context()->lvl_min; + double& lvl_down_counter = odf_context()->math_context()->lvl_down_counter; + lvl_down_counter -= val; + if (lvl_min > lvl_down_counter) + lvl_min = lvl_down_counter; + } + + void OoxConverter::lvl_down_counter_increace(double val) + { + double& lvl_down_counter = odf_context()->math_context()->lvl_down_counter; + lvl_down_counter += val; + } + std::wstring& OoxConverter::annotation() { return odf_context()->math_context()->annotation; @@ -78,6 +79,8 @@ namespace Oox2Odf void annotationPostProd(std::wstring& annotation) { annotaionReplaceAll(annotation, L"=", L"\"=\""); + annotaionReplaceAll(annotation, L"+", L"\"+\""); + annotaionReplaceAll(annotation, L"-", L"\"-\""); annotaionReplaceAll(annotation, L"{) }", L")"); annotaionReplaceAll(annotation, L"{( }", L"("); annotaionReplaceAll(annotation, L"*", L"\"*\""); @@ -108,6 +111,57 @@ namespace Oox2Odf // annotation = annotation + L"\"\""; } + std::vector hexToIntColor(std::wstring clr) + { + std::vector rgb; + + std::wstringstream ss; + for (size_t i = 0; i < 3; i++) + { + std::wstring substr; + substr += clr[i * 2]; + substr += clr[i * 2 + 1]; + ss << std::hex << substr; + int i_clr; + ss >> i_clr; + ss.clear(); + rgb.push_back(i_clr); + } + return rgb; + } + + double dist(std::vector point_1, std::vector point_2) + { + double sum = 0; + for(size_t i = 0; i < 3; i++) + { + sum += pow((point_1[i] - point_2[i]), 2); + } + return sqrt(sum); + } + + std::wstring coordToColor(std::vector rgb) + { + std::wstring arrColor[8] = { L"black", L"red", L"green", L"blue", L"magenta", L"cyan", L"yellow", L"white" }; + std::vector> coord = { {0,0,0}, {255,0,0}, {0,255,0}, {0,0,255}, {255, 0, 255}, {0,255,255}, {255,255,0}, {255,255,255} }; + std::vector distArr; + for (size_t i = 0; i < 8; i++) + { + distArr.push_back(dist(coord[i], rgb)); + } + double min = distArr[0]; + int index = 0; + for (size_t i = 1; i < 8; i++) + { + if (min > distArr[i]) + { + min = distArr[i]; + index = i; + } + } + return arrColor[index]; + } + bool& OoxConverter::annotation_flag() { return odf_context()->math_context()->annotation_flag; @@ -212,32 +266,27 @@ namespace Oox2Odf if (!oox_math_para_pr) return; } - bool OoxConverter::convert(OOX::Logic::CCtrlPr *oox_ctrl_pr) + returnValues OoxConverter::convert(OOX::Logic::CCtrlPr *oox_ctrl_pr) { - if (!oox_ctrl_pr) return false; + returnValues result; + if (!oox_ctrl_pr) result.auxFlag = false; convert(oox_ctrl_pr->m_oARPr.GetPointer()); convert(oox_ctrl_pr->m_oDel.GetPointer()); - convert(oox_ctrl_pr->m_oIns.GetPointer()); - return true; + convert(oox_ctrl_pr->m_oIns.GetPointer()); + result.colorFlag = convert(oox_ctrl_pr->m_oRPr.GetPointer()); + return result; } void OoxConverter::convert(OOX::Logic::CAcc *oox_acc) { if (!oox_acc) return; - CREATE_MATH_TAG(L"mover"); + returnValues values = convert(oox_acc->m_oAccPr.GetPointer()); - /*typedef odf_writer::math_mover* T; - T tmp = dynamic_cast(elm.get()); - if (tmp) - { - tmp->accent = true; - }*/ - - OPEN_MATH_TAG(elm); - - //convert(oox_acc->m_oAccPr.GetPointer()); + CREATE_MATH_TAG(L"mover"); + OPEN_MATH_TAG(elm); + lvl_up_counter_increace(1); std::wstring diakSymbol = (oox_acc->m_oAccPr->m_oChr.IsInit()) ? oox_acc->m_oAccPr->m_oChr.get().m_val->GetValue() : L"̂"; std::map& map = odf_context()->math_context()->diak_symbols; @@ -245,37 +294,48 @@ namespace Oox2Odf symbol = (map[diakSymbol]); std::map& annotation_map = odf_context()->math_context()->annotation_diak_symbols; + bool annotation_flag; if (annotation_map.find(symbol) != annotation_map.end()) + { annotation() += annotation_map[symbol] + L" "; - else - annotation_flag() = false; + annotation_flag = true; + } + else + annotation_flag = false; + annotation() += L"{"; convert(oox_acc->m_oElement.GetPointer()); annotation() += L"}"; + if (!annotation_flag) + { + annotation() += L" csup "; + annotation() += L"\"" + symbol + L"\""; + } { CREATE_MATH_TAG(L"mo"); - /*typedef odf_writer::math_mo* T; - T tmp = dynamic_cast(elm.get()); - if (tmp) - { - tmp->stretchy_ = false; - }*/ elm->add_text(symbol); OPEN_MATH_TAG(elm); CLOSE_MATH_TAG; - } - CLOSE_MATH_TAG; + CLOSE_MATH_TAG; + lvl_up_counter_decreace(1); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CAccPr *oox_acc_pr) + returnValues OoxConverter::convert(OOX::Logic::CAccPr *oox_acc_pr) { - if (!oox_acc_pr) return; + returnValues values; + if (!oox_acc_pr) return values; - convert(oox_acc_pr->m_oChr.GetPointer()); - convert(oox_acc_pr->m_oCtrlPr.GetPointer()); + //convert(oox_acc_pr->m_oChr.GetPointer()); + values = convert(oox_acc_pr->m_oCtrlPr.GetPointer()); + return values; } @@ -296,19 +356,27 @@ namespace Oox2Odf { if (!oox_bar) return; - bool flag = convert(oox_bar->m_oBarPr.GetPointer()); + returnValues values = convert(oox_bar->m_oBarPr.GetPointer()); std::wstring tag; - if (flag) tag = L"mover"; - else tag = L"munder"; + if (values.auxFlag) + { + tag = L"mover"; + lvl_up_counter_increace(1); + } + else + { + tag = L"munder"; + lvl_down_counter_decreace(1); + } CREATE_MATH_TAG(tag.c_str()); OPEN_MATH_TAG(elm); { - if(flag) annotation() += L"bar {"; + if(values.auxFlag) annotation() += L"bar {"; else annotation() += L"underline { "; convert(oox_bar->m_oElement.GetPointer()); CREATE_MATH_TAG(L"mo"); - if (flag) elm->add_text(L"¯"); + if (values.auxFlag) elm->add_text(L"¯"); else elm->add_text(L"ˉ"); OPEN_MATH_TAG(elm); @@ -316,35 +384,52 @@ namespace Oox2Odf annotation() += L"} "; } - CLOSE_MATH_TAG; - + if (values.auxFlag) + lvl_up_counter_decreace(1); + else + lvl_down_counter_increace(1); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - bool OoxConverter::convert(OOX::Logic::CBarPr *oox_bar_pr) + returnValues OoxConverter::convert(OOX::Logic::CBarPr *oox_bar_pr) { - if (!oox_bar_pr) return false; - - convert(oox_bar_pr->m_oCtrlPr.GetPointer()); - return convert(oox_bar_pr->m_oPos.GetPointer()); + returnValues values; + if (!oox_bar_pr) + { + values.auxFlag = false; + return values; + } + values.colorFlag = convert(oox_bar_pr->m_oCtrlPr.GetPointer()).colorFlag; + values.auxFlag = convert(oox_bar_pr->m_oPos.GetPointer()); + return values; } void OoxConverter::convert(OOX::Logic::CBorderBox *oox_border_box) { if (!oox_border_box) return; - convert(oox_border_box->m_oBorderBoxPr.GetPointer()); + returnValues values = convert(oox_border_box->m_oBorderBoxPr.GetPointer()); convert(oox_border_box->m_oElement.GetPointer()); - + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CBorderBoxPr *oox_border_box_pr) + returnValues OoxConverter::convert(OOX::Logic::CBorderBoxPr *oox_border_box_pr) { - if (!oox_border_box_pr) return; + returnValues values; + if (!oox_border_box_pr) return values; - convert(oox_border_box_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_border_box_pr->m_oCtrlPr.GetPointer()).colorFlag; convert(oox_border_box_pr->m_oHideBot.GetPointer()); convert(oox_border_box_pr->m_oHideLeft.GetPointer()); convert(oox_border_box_pr->m_oHideRight.GetPointer()); @@ -353,33 +438,45 @@ namespace Oox2Odf convert(oox_border_box_pr->m_oStrikeH.GetPointer()); convert(oox_border_box_pr->m_oStrikeTLBR.GetPointer()); convert(oox_border_box_pr->m_oStrikeV.GetPointer()); - + return values; } void OoxConverter::convert(OOX::Logic::CBox *oox_box) { if (!oox_box) return; - if (convert(oox_box->m_oBoxPr.GetPointer())) + returnValues val = convert(oox_box->m_oBoxPr.GetPointer()); + + if (val.auxFlag) { - annotation() += L"\""; + //annotation() += L"\""; convert(oox_box->m_oElement.GetPointer()); - annotation() += L"\""; + //annotation() += L"\""; } else convert(oox_box->m_oElement.GetPointer()); + if (val.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - bool OoxConverter::convert(OOX::Logic::CBoxPr *oox_box_pr) + returnValues OoxConverter::convert(OOX::Logic::CBoxPr *oox_box_pr) { - if (!oox_box_pr) return false; - + returnValues values; + if (!oox_box_pr) + { + values.auxFlag = false; + return values; + } convert(oox_box_pr->m_oAln.GetPointer()); convert(oox_box_pr->m_oBrk.GetPointer()); - convert(oox_box_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_box_pr->m_oCtrlPr.GetPointer()).colorFlag; convert(oox_box_pr->m_oDiff.GetPointer()); convert(oox_box_pr->m_oNoBreak.GetPointer()); - return convert(oox_box_pr->m_oOpEmu.GetPointer()); + values.auxFlag = convert(oox_box_pr->m_oOpEmu.GetPointer()); + return values; } void OoxConverter::convert(OOX::Logic::CNoBreak *oox_no_break) @@ -410,16 +507,16 @@ namespace Oox2Odf void OoxConverter::convert(OOX::Logic::CDelimiter *oox_del) { if (!oox_del) return; - std::pair begEndChrs; + returnValues values; for (size_t i = 0; i < oox_del->m_arrItems.size(); ++i) { if(oox_del->m_arrItems[i]->getType() == OOX::et_m_dPr) - begEndChrs = convert((OOX::Logic::CDelimiterPr*)(oox_del->m_arrItems[i])); + values = convert((OOX::Logic::CDelimiterPr*)(oox_del->m_arrItems[i])); } mrow(); { CREATE_MATH_TAG(L"mo"); - elm->add_text(begEndChrs.first); + elm->add_text(values.begEndChrs.first); typedef odf_writer::math_mo* T; T tmp = dynamic_cast(elm.get()); @@ -431,10 +528,10 @@ namespace Oox2Odf } OPEN_MATH_TAG(elm); CLOSE_MATH_TAG; - if (begEndChrs.first == L"") + if (values.begEndChrs.first == L"") annotation() += L"left none "; //left none else - annotation() += L"left " + odf_context()->math_context()->annotation_brackets_begin[begEndChrs.first] + L" "; + annotation() += L"left " + odf_context()->math_context()->annotation_brackets_begin[values.begEndChrs.first] + L" "; } for (size_t i = 0; i < oox_del->m_arrItems.size(); ++i) @@ -445,7 +542,7 @@ namespace Oox2Odf { CREATE_MATH_TAG(L"mo"); - elm->add_text(begEndChrs.second); + elm->add_text(values.begEndChrs.second); typedef odf_writer::math_mo* T; T tmp = dynamic_cast(elm.get()); @@ -457,33 +554,34 @@ namespace Oox2Odf } OPEN_MATH_TAG(elm); CLOSE_MATH_TAG; - if (begEndChrs.second == L"") + if (values.begEndChrs.second == L"") annotation() += L"right none "; //right none else - annotation() += L"right " + odf_context()->math_context()->annotation_brackets_end[begEndChrs.second] + L" "; + annotation() += L"right " + odf_context()->math_context()->annotation_brackets_end[values.begEndChrs.second] + L" "; } endOfMrow(); - /*if (begEndChrs.first == begEndChrs.second || - begEndChrs.first == L"]" && begEndChrs.second == L"[" || - begEndChrs.first == L"⟦" && begEndChrs.second == L"⟧") - annotation_flag() = false;*/ + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - std::pair OoxConverter::convert(OOX::Logic::CDelimiterPr *oox_del_pr) + returnValues OoxConverter::convert(OOX::Logic::CDelimiterPr *oox_del_pr) { - std::pair result(L"(", L")"); + returnValues values; - if (!oox_del_pr) return result; + if (!oox_del_pr) return values; - result.first = convert(oox_del_pr->m_oBegChr.GetPointer()); - convert(oox_del_pr->m_oCtrlPr.GetPointer()); + values.begEndChrs.first = convert(oox_del_pr->m_oBegChr.GetPointer()); + values.colorFlag = convert(oox_del_pr->m_oCtrlPr.GetPointer()).colorFlag; convert(oox_del_pr->m_oGrow.GetPointer()); convert(oox_del_pr->m_oSepChr.GetPointer()); convert(oox_del_pr->m_oShp.GetPointer()); - result.second = convert(oox_del_pr->m_oEndChr.GetPointer()); - return result; + values.begEndChrs.second = convert(oox_del_pr->m_oEndChr.GetPointer()); + return values; } std::wstring OoxConverter::convert(OOX::Logic::CBegChr * oox_beg_chr) @@ -510,9 +608,9 @@ namespace Oox2Odf void OoxConverter::convert(OOX::Logic::CEqArr *oox_eq_arr) { if (!oox_eq_arr) return; - + returnValues values; if(oox_eq_arr->m_arrItems[0]->getType() == OOX::EElementType::et_m_eqArrPr) - convert(oox_eq_arr->m_arrItems[0]); + values = convert((OOX::Logic::CEqArrPr*)(oox_eq_arr->m_arrItems[0])); CREATE_MATH_TAG(L"mtable"); OPEN_MATH_TAG(elm); @@ -534,24 +632,28 @@ namespace Oox2Odf CLOSE_MATH_TAG; } CLOSE_MATH_TAG; - } - /*for (size_t i = 1; i < oox_eq_arr->m_arrItems.size() - 1; ++i) - annotation() += L"} ";*/ + } } CLOSE_MATH_TAG; + if(values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CEqArrPr *oox_eq_arr_pr) + returnValues OoxConverter::convert(OOX::Logic::CEqArrPr *oox_eq_arr_pr) { - if (!oox_eq_arr_pr) return; + returnValues values; + if (!oox_eq_arr_pr) return values; convert(oox_eq_arr_pr->m_oBaseJc.GetPointer()); - convert(oox_eq_arr_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_eq_arr_pr->m_oCtrlPr.GetPointer()).colorFlag; convert(oox_eq_arr_pr->m_oMaxDist.GetPointer()); convert(oox_eq_arr_pr->m_oObjDist.GetPointer()); convert(oox_eq_arr_pr->m_oRSp.GetPointer()); convert(oox_eq_arr_pr->m_oRSpRule.GetPointer()); - + return values; } void OoxConverter::convert(OOX::Logic::CBaseJc *oox_base_js) @@ -584,9 +686,9 @@ namespace Oox2Odf if (!oox_fraction) return; - std::wstring val = convert(oox_fraction->m_oFPr.GetPointer()); + returnValues val = convert(oox_fraction->m_oFPr.GetPointer()); - if (val == L"lin") + if (val.str == L"lin") { annotation() += L"{"; @@ -598,8 +700,8 @@ namespace Oox2Odf annotation() += L"} / {"; CREATE_MATH_TAG(L"mo"); - OPEN_MATH_TAG(elm); elm->add_text(L"/"); + OPEN_MATH_TAG(elm); CLOSE_MATH_TAG; mrow(); convert(oox_fraction->m_oDen.GetPointer()); @@ -607,9 +709,11 @@ namespace Oox2Odf annotation() += L"}"; } - else if (val == L"skw") + else if (val.str == L"skw") { CREATE_MATH_TAG(L"mfrac"); + lvl_up_counter_increace(1); + lvl_down_counter_decreace(1); typedef odf_writer::math_mfrac* T; T tmp = dynamic_cast(elm.get()); @@ -628,8 +732,10 @@ namespace Oox2Odf endOfMrow(); annotation() += L"}"; CLOSE_MATH_TAG; + lvl_up_counter_decreace(1); + lvl_down_counter_increace(1); } - else if (val == L"noBar") + else if (val.str == L"noBar") { CREATE_MATH_TAG(L"mtable"); OPEN_MATH_TAG(elm); @@ -666,7 +772,9 @@ namespace Oox2Odf } else { - CREATE_MATH_TAG(L"mfrac"); + CREATE_MATH_TAG(L"mfrac"); + lvl_up_counter_increace(1); + lvl_down_counter_decreace(1); annotation() += L"{"; OPEN_MATH_TAG(elm); mrow(); @@ -678,15 +786,24 @@ namespace Oox2Odf endOfMrow(); annotation() += L"}"; CLOSE_MATH_TAG; - } + lvl_up_counter_decreace(1); + lvl_down_counter_increace(1); + } + if (val.colorFlag) + { + annotation() += L"}"; + CLOSE_MATH_TAG; + } } - std::wstring OoxConverter::convert(OOX::Logic::CFPr *oox_f_pr) + returnValues OoxConverter::convert(OOX::Logic::CFPr *oox_f_pr) { - if (!oox_f_pr) return L""; + returnValues result; + result.str = L""; + if (!oox_f_pr) return result; - std::wstring result = convert(oox_f_pr->m_oType.GetPointer()); - convert(oox_f_pr->m_oCtrlPr.GetPointer()); + result.str = convert(oox_f_pr->m_oType.GetPointer()); + result.colorFlag = convert(oox_f_pr->m_oCtrlPr.GetPointer()).colorFlag; return result; } @@ -723,72 +840,147 @@ namespace Oox2Odf { if (!oox_func) return; - convert(oox_func->m_oFuncPr.GetPointer()); - convert(oox_func->m_oFName.GetPointer()); + returnValues values = convert(oox_func->m_oFuncPr.GetPointer()); + bool flag = convert(oox_func->m_oFName.GetPointer(), oox_func->m_oElement.GetPointer()); - - convert(oox_func->m_oElement.GetPointer()); + if(!flag) + convert(oox_func->m_oElement.GetPointer()); + + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CFuncPr *oox_func_pr) + returnValues OoxConverter::convert(OOX::Logic::CFuncPr *oox_func_pr) { - if (!oox_func_pr) return; + returnValues values; + if (!oox_func_pr) return values; - convert(oox_func_pr->m_oCtrlPr.GetPointer()); + values = convert(oox_func_pr->m_oCtrlPr.GetPointer()); + return values; } - void OoxConverter::convert(OOX::Logic::CFName *oox_fname) + bool OoxConverter::convert(OOX::Logic::CFName *oox_fname, OOX::Logic::CElement *oox_elm) { - if (!oox_fname) return; - + if (!oox_fname) return false; + bool result; for (size_t i = 0; i < oox_fname->m_arrItems.size(); ++i) - convert(oox_fname->m_arrItems[i]); - + { + if (oox_fname->m_arrItems[i]->getType() == OOX::et_m_limLow) + { + convert(dynamic_cast(oox_fname->m_arrItems[i]), oox_elm); + result = true; + } + else + { + convert(oox_fname->m_arrItems[i]); + result = false; + } + } + return result; } - void OoxConverter::convert(OOX::Logic::CGroupChr *oox_group_ch) + void OoxConverter::convert(OOX::Logic::CGroupChr* oox_group_ch, OOX::Logic::CLim* oox_lim) { if (!oox_group_ch) return; - bool flag = convert(oox_group_ch->m_oGroupChrPr.GetPointer()); + returnValues values = convert(oox_group_ch->m_oGroupChrPr.GetPointer()); std::wstring tag; - if (flag) tag = L"mover"; - else tag = L"munder"; + if (values.auxFlag) + { + tag = L"mover"; + lvl_up_counter_increace(1); + } + else + { + tag = L"munder"; + lvl_down_counter_decreace(1); + } CREATE_MATH_TAG(tag.c_str()); - OPEN_MATH_TAG(elm); - convert(oox_group_ch->m_oElement.GetPointer()); - if(flag) - convert(oox_group_ch->m_oGroupChrPr->m_oChr.GetPointer()); + if (values.auxFlag) + { + typedef odf_writer::math_mover* T; + T tmp = dynamic_cast(elm.get()); + tmp->accent = true; + } else { - if (!oox_group_ch->m_oGroupChrPr->m_oChr.IsInit()) + typedef odf_writer::math_munder* T; + T tmp = dynamic_cast(elm.get()); + tmp->accentunder = true; + } + + OPEN_MATH_TAG(elm); + convert(oox_group_ch->m_oElement.GetPointer()); + if (values.auxFlag) + { + if (oox_group_ch->m_oGroupChrPr->m_oChr.IsInit() && oox_group_ch->m_oGroupChrPr->m_oChr->m_val->GetValue() == L"⏞") + { + if (oox_lim) + { + annotation() += L"overbrace {"; + convert(oox_lim); + annotation() += L"}"; + } + else + annotation() += L"overbrace \"\""; + } + else + { + annotation() += L" csup "; + convert(oox_group_ch->m_oGroupChrPr->m_oChr.GetPointer()); + } + } + else + { + if (oox_group_ch->m_oGroupChrPr->m_oChr.IsInit()) + { + annotation() += L" csub "; + convert(oox_group_ch->m_oGroupChrPr->m_oChr.GetPointer()); + } + else { CREATE_MATH_TAG(L"mo"); elm->add_text(L" ⏟ "); OPEN_MATH_TAG(elm); CLOSE_MATH_TAG; - } - else - convert(oox_group_ch->m_oGroupChrPr->m_oChr.GetPointer()); - + if (oox_lim) + { + annotation() += L"underbrace {"; + convert(oox_lim); + annotation() += L"}"; + } + else + annotation() += L"underbrace \"\""; + } + } + CLOSE_MATH_TAG; + if (values.auxFlag) + lvl_up_counter_decreace(1); + else + lvl_down_counter_increace(1); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; } - CLOSE_MATH_TAG; } - bool OoxConverter::convert(OOX::Logic::CGroupChrPr *oox_group_ch_pr) + returnValues OoxConverter::convert(OOX::Logic::CGroupChrPr *oox_group_ch_pr) { - if (!oox_group_ch_pr) return false; - - bool flag = false; - + returnValues values; + if (!oox_group_ch_pr) return values; + //convert(oox_group_ch_pr->m_oChr.GetPointer()); - convert(oox_group_ch_pr->m_oCtrlPr.GetPointer()); - flag = convert(oox_group_ch_pr->m_oPos.GetPointer()); + values.colorFlag = convert(oox_group_ch_pr->m_oCtrlPr.GetPointer()).colorFlag; + values.auxFlag = convert(oox_group_ch_pr->m_oPos.GetPointer()); convert(oox_group_ch_pr->m_oVertJc.GetPointer()); - return flag; + return values; } bool OoxConverter::convert(OOX::Logic::CPos *oox_pos) @@ -804,31 +996,44 @@ namespace Oox2Odf if (!oox_vert_jc) return; } - void OoxConverter::convert(OOX::Logic::CLimLow *oox_lim_low) + void OoxConverter::convert(OOX::Logic::CLimLow *oox_lim_low, OOX::Logic::CElement *oox_elm) { if (!oox_lim_low) return; + returnValues values = convert(oox_lim_low->m_oLimLowPr.GetPointer()); mrow(); - CREATE_MATH_TAG(L"munder"); OPEN_MATH_TAG(elm); - annotation() += L"oper "; - mrow(); + lvl_down_counter_decreace(1); + if (oox_lim_low->m_oElement->m_arrItems[0]->getType() == OOX::EElementType::et_m_groupChr) + { + + convert(dynamic_cast(oox_lim_low->m_oElement->m_arrItems[0]), oox_lim_low->m_oLim.GetPointer()); + } + else + { + odf_context()->math_context()->annotation_oper_flag = true; + mrow(); convert(oox_lim_low->m_oElement.GetPointer()); - endOfMrow(); + endOfMrow(); - /*if (annotation().find(L"lim") == -1) - annotation_flag() = false;*/ - - convert(oox_lim_low->m_oLimLowPr.GetPointer()); - annotation() += L"from {"; + annotation() += L"from {"; convert(oox_lim_low->m_oLim.GetPointer()); - annotation() += L"} "; + annotation() += L"} "; + } CLOSE_MATH_TAG; + lvl_down_counter_increace(1); + if (oox_elm) + convert(oox_elm); endOfMrow(); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } void OoxConverter::convert(OOX::Logic::CLim *oox_lim) @@ -843,43 +1048,60 @@ namespace Oox2Odf endOfMrow(); } - void OoxConverter::convert(OOX::Logic::CLimLowPr *oox_lim_low_pr) + returnValues OoxConverter::convert(OOX::Logic::CLimLowPr *oox_lim_low_pr) { - if (!oox_lim_low_pr) return; + returnValues values; + if (!oox_lim_low_pr) return values; - convert(oox_lim_low_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_lim_low_pr->m_oCtrlPr.GetPointer()).colorFlag; + return values; } void OoxConverter::convert(OOX::Logic::CLimUpp *oox_lim_upp) { if (!oox_lim_upp) return; - + returnValues values = convert(oox_lim_upp->m_oLimUppPr.GetPointer()); + mrow(); CREATE_MATH_TAG(L"mover"); OPEN_MATH_TAG(elm); + lvl_up_counter_increace(1); + if (oox_lim_upp->m_oElement->m_arrItems[0]->getType() == OOX::EElementType::et_m_groupChr) + { + + convert(dynamic_cast(oox_lim_upp->m_oElement->m_arrItems[0]), oox_lim_upp->m_oLim.GetPointer()); + } + else + { + annotation() += L"oper "; - annotation() += L"oper "; - - mrow(); + mrow(); convert(oox_lim_upp->m_oElement.GetPointer()); - endOfMrow(); + endOfMrow(); - /*if (annotation().find(L"lim") == -1) - annotation_flag() = false;*/ - - convert(oox_lim_upp->m_oLimUppPr.GetPointer()); - annotation() += L"to {"; + annotation() += L"to {"; convert(oox_lim_upp->m_oLim.GetPointer()); - annotation() += L"} "; + annotation() += L"} "; + } - CLOSE_MATH_TAG + + CLOSE_MATH_TAG; + lvl_up_counter_decreace(1); + endOfMrow(); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CLimUppPr *oox_lim_upp_pr) + returnValues OoxConverter::convert(OOX::Logic::CLimUppPr *oox_lim_upp_pr) { - if (!oox_lim_upp_pr) return; + returnValues values; + if (!oox_lim_upp_pr) return values; - convert(oox_lim_upp_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_lim_upp_pr->m_oCtrlPr.GetPointer()).colorFlag; + return values; } @@ -892,9 +1114,12 @@ namespace Oox2Odf { if (!oox_matrix) return; int& matrix_row_counter = odf_context()->math_context()->matrix_row_counter; - + returnValues values; if (oox_matrix->m_arrItems[0]->getType() == OOX::EElementType::et_m_mPr) + { matrix_row_counter = oox_matrix->m_arrItems.size() - 1; + values = convert((OOX::Logic::CMPr*)(oox_matrix->m_arrItems[0])); + } else matrix_row_counter = oox_matrix->m_arrItems.size(); @@ -903,12 +1128,18 @@ namespace Oox2Odf annotation() += L"matrix{"; for (size_t i = 0; i < oox_matrix->m_arrItems.size(); ++i) { - convert(oox_matrix->m_arrItems[i]); + if(oox_matrix->m_arrItems[i]->getType() != OOX::EElementType::et_m_mPr) + convert(oox_matrix->m_arrItems[i]); } CLOSE_MATH_TAG; odf_context()->math_context()->matrix_row_counter = 0; annotation() += L"} "; + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } void OoxConverter::convert(OOX::Logic::CMc *oox_mc) @@ -971,20 +1202,22 @@ namespace Oox2Odf CLOSE_MATH_TAG } - void OoxConverter::convert(OOX::Logic::CMPr *oox_m_pr) + returnValues OoxConverter::convert(OOX::Logic::CMPr *oox_m_pr) { - if (!oox_m_pr) return; + returnValues values; + if (!oox_m_pr) return values; convert(oox_m_pr->m_oBaseJc.GetPointer()); convert(oox_m_pr->m_oCGp.GetPointer()); convert(oox_m_pr->m_oCGpRule.GetPointer()); convert(oox_m_pr->m_oCSp.GetPointer()); - convert(oox_m_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_m_pr->m_oCtrlPr.GetPointer()).colorFlag; convert(oox_m_pr->m_oMcs.GetPointer()); convert(oox_m_pr->m_oMcs.GetPointer()); convert(oox_m_pr->m_oPlcHide.GetPointer()); convert(oox_m_pr->m_oRSp.GetPointer()); convert(oox_m_pr->m_oRSpRule.GetPointer()); + return values; } void OoxConverter::convert(OOX::Logic::CPlcHide *oox_plc_hide) @@ -995,7 +1228,12 @@ namespace Oox2Odf void OoxConverter::convert(OOX::Logic::CMr *oox_mr) { if (!oox_mr) return; - + bool color_flag = false; + for (size_t i = 0; i < oox_mr->m_arrItems.size(); ++i) + { + if (oox_mr->m_arrItems[i]->getType() == OOX::et_w_rPr) + color_flag = convert((OOX::Logic::CRunProperty*)(oox_mr->m_arrItems[i])); + } int& matrix_row_counter = odf_context()->math_context()->matrix_row_counter; CREATE_MATH_TAG(L"mtr"); @@ -1015,6 +1253,11 @@ namespace Oox2Odf matrix_row_counter--; if(matrix_row_counter > 0) annotation() += L"## "; + if(color_flag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } void OoxConverter::convert(OOX::Logic::CMRun *oox_mrun) @@ -1062,7 +1305,13 @@ namespace Oox2Odf convert(oox_mrun->m_oYearShort.GetPointer()); if (clrFlag) { - CLOSE_MATH_TAG; + CLOSE_MATH_TAG; + if(odf_context()->math_context()->annotation_oper_flag) + odf_context()->math_context()->annotation_oper_flag = false; + else + { + annotation() += L"}"; + } } } @@ -1070,23 +1319,48 @@ namespace Oox2Odf { if (!oox_r_pr) return false; - //if (oox_r_pr->m_oColor.IsInit()) - //{ - // if (oox_r_pr->m_oColor->m_oVal.IsInit()) - // { - // std::wstring clr = oox_r_pr->m_oColor->m_oVal.GetPointer()->ToString(); - // std::wstring clr2(L"#"); - // clr.erase(0, 2); - // clr2 += clr; - // CREATE_MATH_TAG(L"mstyle"); - // typedef odf_writer::math_mstyle * T; + if (odf_context()->math_context()->style_flag) + { + odf_context()->math_context()->style_flag = false; + odf_context()->math_context()->font = *oox_r_pr->m_oRFonts->m_sAscii; + odf_context()->math_context()->size = oox_r_pr->m_oSz->m_oVal->GetValue(); + odf_context()->settings_context()->start_view(); + odf_context()->settings_context()->add_config_content_item(L"BaseFontHeight", L"short", oox_r_pr->m_oSz->m_oVal->ToString()); + odf_context()->settings_context()->add_config_content_item(L"FontNameFunctions", L"string", *oox_r_pr->m_oRFonts->m_sAscii); + odf_context()->settings_context()->add_config_content_item(L"FontNameNumbers", L"string", *oox_r_pr->m_oRFonts->m_sAscii); + odf_context()->settings_context()->add_config_content_item(L"FontNameText", L"string", *oox_r_pr->m_oRFonts->m_sAscii); + odf_context()->settings_context()->add_config_content_item(L"FontNameVariables", L"string", *oox_r_pr->m_oRFonts->m_sAscii); + odf_context()->settings_context()->end_view(); + } - // T tmp = dynamic_cast(elm.get()); - // tmp->color_ = clr2; - // OPEN_MATH_TAG(elm); - // return true; - // } - //} + + if (oox_r_pr->m_oColor.IsInit() && oox_r_pr->m_oColor->m_oVal->ToString() != L"auto") + { + if (oox_r_pr->m_oColor->m_oVal.IsInit()) + { + std::wstring clr = oox_r_pr->m_oColor->m_oVal.GetPointer()->ToString(); + std::wstring clr2(L"#"); + clr.erase(0, 2); + clr2 += clr; + + CREATE_MATH_TAG(L"mstyle"); + typedef odf_writer::math_mstyle * T; + T tmp = dynamic_cast(elm.get()); + tmp->color_ = clr2; + OPEN_MATH_TAG(elm); + + clr2.erase(0, 1); + std::vector rgb = hexToIntColor(clr2); + boost::to_upper(clr2); + if (odf_context()->math_context()->annotation_oper_flag) + { + annotation() += L" color hex " + clr2 + L" oper "; + } + else + annotation() += L" color hex " + clr2 + L"{" ; + return true; + } + } return false; } @@ -1138,8 +1412,8 @@ namespace Oox2Odf CREATE_MATH_TAG(L"mn"); elm->add_text(std::wstring(1, s_val[i])); - OPEN_MATH_TAG(elm); + CLOSE_MATH_TAG; annotation() += std::wstring(1, s_val[i]) + L" "; } @@ -1182,57 +1456,40 @@ namespace Oox2Odf void OoxConverter::convert(OOX::Logic::CNary *oox_nary) { if (!oox_nary) return; - nullable* ref = NULL; - - if (oox_nary->m_oNaryPr->m_oCtrlPr.IsInit() && - oox_nary->m_oNaryPr->m_oCtrlPr->m_oRPr.IsInit() && - oox_nary->m_oNaryPr->m_oCtrlPr->m_oRPr->m_oColor.IsInit()) - { - ref = &(oox_nary->m_oNaryPr->m_oCtrlPr->m_oRPr->m_oColor->m_oVal); - } - bool flag_color = false; - if (ref != NULL) - { - /*std::wstring clr = ref->GetPointer()->ToString(); - std::wstring clr2(L"#"); - clr.erase(0, 2); - clr2 += clr; - CREATE_MATH_TAG(L"mstyle"); - typedef odf_writer::math_mstyle* T; - - T tmp = dynamic_cast(elm.get()); - tmp->color_ = clr2; - OPEN_MATH_TAG(elm); - flag_color = true;*/ - } - + returnValues values = convert(oox_nary->m_oNaryPr.GetPointer()); mrow(); - bool flag_nary = false; // TODO REFAC + bool flag_nary = false; + std::wstring tag; if ((oox_nary->m_oSub.GetPointer()->m_arrItems.size() != 0) && (oox_nary->m_oSup.GetPointer()->m_arrItems.size() != 0)) { - CREATE_MATH_TAG(L"munderover"); - OPEN_MATH_TAG(elm); + tag = L"munderover"; flag_nary = true; + + lvl_up_counter_increace(1); + lvl_down_counter_decreace(1); } else if ((oox_nary->m_oSub.GetPointer()->m_arrItems.size() != 0) && (oox_nary->m_oSup.GetPointer()->m_arrItems.size() == 0)) { - CREATE_MATH_TAG(L"munder"); - OPEN_MATH_TAG(elm); + tag = L"munder"; flag_nary = true; + lvl_down_counter_decreace(1); } - else if ((oox_nary->m_oSub.GetPointer()->m_arrItems.size() == 0) && (oox_nary->m_oSup.GetPointer()->m_arrItems.size() != 0)) { - CREATE_MATH_TAG(L"mover"); - OPEN_MATH_TAG(elm); + tag = L"mover"; flag_nary = true; - } - - std::vector flags; - flags = convert(oox_nary->m_oNaryPr.GetPointer()); + lvl_up_counter_increace(1); + } + + if (flag_nary) + { + CREATE_MATH_TAG(tag); + OPEN_MATH_TAG(elm); + } + std::wstring str1, str2; - if (flags[2]) + if (values.naryChr) { str1 = L" from {"; str2 = L" to {"; @@ -1242,55 +1499,68 @@ namespace Oox2Odf str1 = L" csub {"; str2 = L" csup {"; } - - if (!flags[0]) + + if (!values.narySubHide) { - + annotation() += str1; - + //mrow(); convert(oox_nary->m_oSub.GetPointer()); //endOfMrow(); annotation() += L"}"; - + } - if (!flags[1]) - { - annotation() += str2; + if (!values.narySupHide) + { + annotation() += str2; //mrow(); convert(oox_nary->m_oSup.GetPointer()); //endOfMrow(); - annotation() += L"} "; + annotation() += L"} "; } - if (flag_nary) { CLOSE_MATH_TAG; - } - - if (flag_color) - { - CLOSE_MATH_TAG; + if (tag == L"munderover") + { + lvl_up_counter_decreace(1); + lvl_down_counter_increace(1); + } + else if (tag == L"mover") + lvl_up_counter_decreace(1); + else if (tag == L"munder") + lvl_down_counter_increace(1); } annotation() += L" {"; convert(oox_nary->m_oElement.GetPointer()); annotation() += L"} "; endOfMrow(); + + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - std::vector OoxConverter::convert(OOX::Logic::CNaryPr *oox_nary_pr) + returnValues OoxConverter::convert(OOX::Logic::CNaryPr *oox_nary_pr) { - std::vector result = { false, false, false}; - if (!oox_nary_pr) return result; + returnValues values; + if (!oox_nary_pr) + { + values.auxFlag = false; + return values; + } - convert(oox_nary_pr->m_oCtrlPr.GetPointer()); - result[2] = convert(oox_nary_pr->m_oChr.GetPointer()); + values.colorFlag = convert(oox_nary_pr->m_oCtrlPr.GetPointer()).colorFlag; + values.naryChr = convert(oox_nary_pr->m_oChr.GetPointer()); convert(oox_nary_pr->m_oGrow.GetPointer()); - result[0] = convert(oox_nary_pr->m_oSubHide.GetPointer()); - result[1] = convert(oox_nary_pr->m_oSupHide.GetPointer()); + values.narySubHide = convert(oox_nary_pr->m_oSubHide.GetPointer()); + values.narySupHide = convert(oox_nary_pr->m_oSupHide.GetPointer()); - return result; + return values; } void OoxConverter::convert(OOX::Logic::CGrow* oox_grow) @@ -1383,56 +1653,40 @@ namespace Oox2Odf void OoxConverter::convert(OOX::Logic::CRad *oox_rad) { if (!oox_rad) return; - - nullable p; - if(oox_rad->m_oRadPr.IsInit() && oox_rad->m_oRadPr->m_oCtrlPr.IsInit() && oox_rad->m_oRadPr->m_oCtrlPr->m_oRPr.IsInit()) - p = oox_rad->m_oRadPr->m_oCtrlPr->m_oRPr->m_oColor; - if (p.IsInit()) + returnValues val = convert(oox_rad->m_oRadPr.GetPointer()); + if (val.auxFlag) { - /*std::wstring clr = p->m_oVal.GetPointer()->ToString(); - std::wstring clr2(L"#"); - clr.erase(0, 2); - clr2 += clr; - CREATE_MATH_TAG(L"mstyle"); - typedef odf_writer::math_mstyle * T; - - T tmp = dynamic_cast(elm.get()); - tmp->color_ = clr2; - OPEN_MATH_TAG(elm);*/ + CREATE_MATH_TAG(L"msqrt"); + OPEN_MATH_TAG(elm); + annotation() += L"sqrt {"; + mrow(); + convert(oox_rad->m_oElement.GetPointer()); + endOfMrow(); + annotation() += L"}"; + CLOSE_MATH_TAG; + odf_context()->math_context()->symbol_counter++; } + else + convert(oox_rad->m_oDeg.GetPointer(), oox_rad->m_oElement.GetPointer()); + + if (val.colorFlag) { - bool flag = convert(oox_rad->m_oRadPr.GetPointer()); - if (flag) - { - CREATE_MATH_TAG(L"msqrt"); - OPEN_MATH_TAG(elm); - annotation() += L"sqrt {"; - mrow(); - convert(oox_rad->m_oElement.GetPointer()); - endOfMrow(); - annotation() += L"}"; - CLOSE_MATH_TAG; - } - else - convert(oox_rad->m_oDeg.GetPointer(), oox_rad->m_oElement.GetPointer()); - } - - if (p.IsInit()) - { - //CLOSE_MATH_TAG; + annotation() += L"}"; + CLOSE_MATH_TAG; } } - bool OoxConverter::convert(OOX::Logic::CRadPr *oox_rad_pr) + returnValues OoxConverter::convert(OOX::Logic::CRadPr *oox_rad_pr) { - if (!oox_rad_pr) return false; + returnValues result; + if (!oox_rad_pr) result.auxFlag = false; - bool flag = convert(oox_rad_pr->m_oDegHide.GetPointer()); - convert(oox_rad_pr->m_oCtrlPr.GetPointer()); - return flag; + result.auxFlag = convert(oox_rad_pr->m_oDegHide.GetPointer()); + result.colorFlag = convert(oox_rad_pr->m_oCtrlPr.GetPointer()).colorFlag; + return result; } bool OoxConverter::convert(OOX::Logic::CDegHide *oox_deg_hide) @@ -1468,18 +1722,19 @@ namespace Oox2Odf annotation().erase(iterator); annotation() += L"nroot {" + degree + L"} {" + root + L"}"; - CLOSE_MATH_TAG + CLOSE_MATH_TAG; } void OoxConverter::convert(OOX::Logic::CSPre *oox_s_pre) { if (!oox_s_pre) return; - convert(oox_s_pre->m_oSPrePr.GetPointer()); + returnValues values = convert(oox_s_pre->m_oSPrePr.GetPointer()); CREATE_MATH_TAG(L"mmultiscripts"); OPEN_MATH_TAG(elm); - + lvl_up_counter_increace(0.4); + lvl_down_counter_decreace(0.4); annotation() += L"{"; mrow(); convert(oox_s_pre->m_oElement.GetPointer()); @@ -1490,9 +1745,7 @@ namespace Oox2Odf { CREATE_MATH_TAG(L"mprescripts"); OPEN_MATH_TAG(elm); - CLOSE_MATH_TAG; - - + CLOSE_MATH_TAG; mrow(); convert(oox_s_pre->m_oSub.GetPointer()); @@ -1506,16 +1759,23 @@ namespace Oox2Odf annotation() += L"}"; } - - CLOSE_MATH_TAG + CLOSE_MATH_TAG; + lvl_up_counter_decreace(0.4); + lvl_down_counter_increace(0.4); + if (values.colorFlag) + { + annotation() += L"}"; + CLOSE_MATH_TAG; + } } - void OoxConverter::convert(OOX::Logic::CSPrePr *oox_s_pre_pr) + returnValues OoxConverter::convert(OOX::Logic::CSPrePr *oox_s_pre_pr) { - if (!oox_s_pre_pr) return; + returnValues values; + if (!oox_s_pre_pr) return values; - convert(oox_s_pre_pr->m_oCtrlPr.GetPointer()); - + values = convert(oox_s_pre_pr->m_oCtrlPr.GetPointer()); + return values; } void OoxConverter::convert(OOX::Logic::CSup *oox_sup, OOX::Logic::CElement *oox_elm) @@ -1524,7 +1784,7 @@ namespace Oox2Odf CREATE_MATH_TAG(L"msup"); OPEN_MATH_TAG(elm); - + lvl_up_counter_increace(0.4); annotation() += L"{"; mrow(); @@ -1541,7 +1801,8 @@ namespace Oox2Odf endOfMrow(); annotation() += L"}"; - CLOSE_MATH_TAG + CLOSE_MATH_TAG; + lvl_up_counter_decreace(0.4); } void OoxConverter::convert(OOX::Logic::CSub *oox_sub, OOX::Logic::CElement *oox_elm) @@ -1550,7 +1811,7 @@ namespace Oox2Odf CREATE_MATH_TAG(L"msub"); OPEN_MATH_TAG(elm); - + lvl_down_counter_decreace(0.4); annotation() += L"{"; mrow(); @@ -1565,7 +1826,8 @@ namespace Oox2Odf } annotation() += L"}"; - CLOSE_MATH_TAG + CLOSE_MATH_TAG; + lvl_down_counter_increace(0.4); } void OoxConverter::convert(OOX::Logic::CSub *oox_csub) @@ -1592,57 +1854,73 @@ namespace Oox2Odf { if (!oox_ssub) return; - convert(oox_ssub->m_oSSubPr.GetPointer()); - convert(oox_ssub->m_oSub.GetPointer(), oox_ssub->m_oElement.GetPointer()); + returnValues values = convert(oox_ssub->m_oSSubPr.GetPointer()); + convert(oox_ssub->m_oSub.GetPointer(), oox_ssub->m_oElement.GetPointer()); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CSSubPr*oox_ssub_pr) + returnValues OoxConverter::convert(OOX::Logic::CSSubPr*oox_ssub_pr) { - if (!oox_ssub_pr) return; + returnValues values; + if (!oox_ssub_pr) return values; - convert(oox_ssub_pr->m_oCtrlPr.GetPointer()); - + values.colorFlag = convert(oox_ssub_pr->m_oCtrlPr.GetPointer()).colorFlag; + return values; } void OoxConverter::convert(OOX::Logic::CSSubSup *oox_ssub_sup) { if (!oox_ssub_sup) return; - convert(oox_ssub_sup->m_oSSubSupPr.GetPointer()); - - CREATE_MATH_TAG(L"msubsup"); - OPEN_MATH_TAG(elm); + returnValues values = convert(oox_ssub_sup->m_oSSubSupPr.GetPointer()); + { + CREATE_MATH_TAG(L"msubsup"); + OPEN_MATH_TAG(elm); + lvl_up_counter_increace(0.4); + lvl_down_counter_decreace(0.4); + annotation() += L"{"; - annotation() += L"{"; - - mrow(); + mrow(); convert(oox_ssub_sup->m_oElement.GetPointer()); - endOfMrow(); + endOfMrow(); - annotation() += L"}_{"; + annotation() += L"}_{"; - mrow(); + mrow(); convert(oox_ssub_sup->m_oSub.GetPointer()); - endOfMrow(); + endOfMrow(); - annotation() += L"}^{"; + annotation() += L"}^{"; - mrow(); + mrow(); convert(oox_ssub_sup->m_oSup.GetPointer()); - endOfMrow(); + endOfMrow(); - annotation() += L"}"; - CLOSE_MATH_TAG + annotation() += L"}"; + CLOSE_MATH_TAG; + lvl_up_counter_decreace(0.4); + lvl_down_counter_increace(0.4); + } + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CSSubSupPr *oox_ssub_sup_pr) + returnValues OoxConverter::convert(OOX::Logic::CSSubSupPr *oox_ssub_sup_pr) { - if (!oox_ssub_sup_pr) return; + returnValues values; + if (!oox_ssub_sup_pr) return values; convert(oox_ssub_sup_pr->m_oAlnScr.GetPointer()); - convert(oox_ssub_sup_pr->m_oCtrlPr.GetPointer()); - + values.colorFlag = convert(oox_ssub_sup_pr->m_oCtrlPr.GetPointer()).colorFlag; + return values; } void OoxConverter::convert(OOX::Logic::CAlnScr* oox_aln_scr) @@ -1654,16 +1932,23 @@ namespace Oox2Odf { if (!oox_ssup) return; - convert(oox_ssup->m_oSSupPr.GetPointer()); + returnValues values = convert(oox_ssup->m_oSSupPr.GetPointer()); convert(oox_ssup->m_oSup.GetPointer(), oox_ssup->m_oElement.GetPointer()); + if (values.colorFlag) + { + CLOSE_MATH_TAG; + annotation() += L"}"; + } } - void OoxConverter::convert(OOX::Logic::CSSupPr *oox_ssup_pr) + returnValues OoxConverter::convert(OOX::Logic::CSSupPr *oox_ssup_pr) { - if (!oox_ssup_pr) return; + returnValues values; + if (!oox_ssup_pr) return values; - convert(oox_ssup_pr->m_oCtrlPr.GetPointer()); + values.colorFlag = convert(oox_ssup_pr->m_oCtrlPr.GetPointer()).colorFlag; + return values; } void OoxConverter::convert(OOX::Logic::CElement *oox_elm) diff --git a/OdfFile/Writer/Format/math_limit_elements.cpp b/OdfFile/Writer/Format/math_limit_elements.cpp index 9b6808791d..e58ee3b0e3 100644 --- a/OdfFile/Writer/Format/math_limit_elements.cpp +++ b/OdfFile/Writer/Format/math_limit_elements.cpp @@ -295,6 +295,7 @@ void math_munder::serialize(std::wostream & _Wostream) { CP_XML_NODE_SIMPLE_NONS() { + CP_XML_ATTR_OPT(L"accentunder", accentunder); for (size_t i = 0; i < content_.size(); i++) { if (!content_[i]) continue; diff --git a/OdfFile/Writer/Format/math_limit_elements.h b/OdfFile/Writer/Format/math_limit_elements.h index f11f2ef3b8..8592bd1508 100644 --- a/OdfFile/Writer/Format/math_limit_elements.h +++ b/OdfFile/Writer/Format/math_limit_elements.h @@ -43,12 +43,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMSub; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -65,12 +62,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMSup; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -88,12 +82,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMSubSup; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -109,12 +100,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMNone; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -132,12 +120,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMPreScripts; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -151,12 +136,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMMultiScripts; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -174,12 +156,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMUnderOver; - - - private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -195,12 +174,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMOver; - - - _CP_OPT(Bool) accent; private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); @@ -217,12 +193,10 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMUnder; - - - + _CP_OPT(Bool) accentunder; private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); diff --git a/OdfFile/Writer/Format/math_token_elements.h b/OdfFile/Writer/Format/math_token_elements.h index 8508eadac1..75a50fb73d 100644 --- a/OdfFile/Writer/Format/math_token_elements.h +++ b/OdfFile/Writer/Format/math_token_elements.h @@ -44,8 +44,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMI; + _CP_OPT(std::wstring) text_; private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -57,7 +58,6 @@ namespace cpdoccore { odf_types::common_math_style_attlist common_attlist_; office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; }; CP_REGISTER_OFFICE_ELEMENT2(math_mi); @@ -68,13 +68,14 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMO; _CP_OPT(Bool) accent_; _CP_OPT(Bool) fence_; _CP_OPT(std::wstring) form_; _CP_OPT(Bool) stretchy_; + _CP_OPT(std::wstring) text_; private: virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name); virtual void add_child_element(const office_element_ptr & child_element); @@ -86,7 +87,6 @@ namespace cpdoccore { odf_types::common_math_style_attlist common_attlist_; office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; }; CP_REGISTER_OFFICE_ELEMENT2(math_mo); @@ -97,7 +97,8 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + _CP_OPT(std::wstring) text_; + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMN; @@ -112,7 +113,6 @@ namespace cpdoccore { odf_types::common_math_style_attlist common_attlist_; office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; }; CP_REGISTER_OFFICE_ELEMENT2(math_mn); @@ -123,8 +123,9 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMText; + _CP_OPT(std::wstring) text_; private: @@ -138,7 +139,6 @@ namespace cpdoccore { odf_types::common_math_style_attlist common_attlist_; office_element_ptr_array content_; - _CP_OPT(std::wstring) text_; }; CP_REGISTER_OFFICE_ELEMENT2(math_mtext); @@ -149,7 +149,7 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMSpace; @@ -173,7 +173,7 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMS; @@ -197,7 +197,7 @@ namespace cpdoccore { public: static const wchar_t * ns; static const wchar_t * name; - + static const xml::NodeType xml_type = xml::typeElement; static const ElementType type = typeMGlyph; diff --git a/OdfFile/Writer/Format/odf_conversion_context.cpp b/OdfFile/Writer/Format/odf_conversion_context.cpp index 0a17843037..0163bca229 100644 --- a/OdfFile/Writer/Format/odf_conversion_context.cpp +++ b/OdfFile/Writer/Format/odf_conversion_context.cpp @@ -179,7 +179,7 @@ _mediaitems* odf_conversion_context::mediaitems() void odf_conversion_context::end_document() { - rels rels_; + rels rels_; for (size_t i = 0; i < objects_.size(); i++) { _object & object = *objects_[i]; @@ -296,9 +296,9 @@ void odf_conversion_context::create_object(bool bAddContentExt) obj->style_context->set_odf_context(this); obj->settings_context->set_odf_context(this); - objects_.push_back(obj); + objects_.push_back(obj); - current_object_ = objects_.size() - 1; + current_object_ = objects_.size() - 1; } } void odf_conversion_context::end_chart() @@ -331,20 +331,19 @@ bool odf_conversion_context::start_math() void odf_conversion_context::end_math() { math_context_.end_math(); - + end_object(); math_context_.set_styles_context(styles_context()); - - calculate_font_metrix(L"Cambria Math", 12, false, false); // смотреть по формуле - перевычислять только если есть изменения - - int count_symbol_height = 3; //сосчитать в math_context_ - int count_symbol_width = 10; - _CP_OPT(double)width = convert_symbol_width(count_symbol_width); - _CP_OPT(double)height = convert_symbol_width(count_symbol_height); + calculate_font_metrix(math_context_.font, math_context_.size, false, false); // смотреть по формуле - перевычислять только если есть изменения это шрифт и кегль + int count_symbol_height = 30; //сосчитать в math_context_ кол-во этажей + int count_symbol_width = 100; //длина символов - //if (false == math_context_.in_text_box_) - // drawing_context()->set_size(width, height); + _CP_OPT(double)width = convert_symbol_width(math_context_.symbol_counter * 1.73); // либра рамка формулы(её параметры) + _CP_OPT(double)height = convert_symbol_width(1.73 * (math_context_.lvl_max - math_context_.lvl_min)); + + if (false == math_context_.in_text_box_) + drawing_context()->set_size(width, height); // раскомиттить по завершению drawing_context()->end_object(!math_context_.in_text_box_); @@ -352,6 +351,11 @@ void odf_conversion_context::end_math() { drawing_context()->end_drawing(); } + this->math_context()->symbol_counter = 0; + this->math_context()->lvl_max = 1; + this->math_context()->lvl_min = -1; + this->math_context()->lvl_down_counter = -1; + this->math_context()->lvl_up_counter = 1; } void odf_conversion_context::end_text() { diff --git a/OdfFile/Writer/Format/odf_math_context.cpp b/OdfFile/Writer/Format/odf_math_context.cpp index c964e029b6..ff4a5c6cc9 100644 --- a/OdfFile/Writer/Format/odf_math_context.cpp +++ b/OdfFile/Writer/Format/odf_math_context.cpp @@ -110,7 +110,8 @@ namespace odf_writer static formulasconvert::oox2odf_converter formulas_converter_math; odf_math_context::odf_math_context(odf_conversion_context *odf_context) - : impl_(new odf_math_context::Impl(odf_context)), lvl_of_me(0), counter(0), annotation_flag(true), matrix_row_counter(0) + : impl_(new odf_math_context::Impl(odf_context)), + lvl_of_me(0), style_flag(true), counter(0), symbol_counter(0), annotation_flag(true), annotation_oper_flag(false), matrix_row_counter(0) { mo = { L'+', L'-', L'±', L'∓', L'∙', L'×', L'∗', L'÷', L'/', L'≂', L'⊕', L'⊖', L'⊙', L'⊗', L'⊘', L'∘', L'¬', L'∧', L'∨', // un/bi operators L'=', L'≠', L'<', L'≤', L'>', L'≥', L'≪', L'≫', L'≈', L'~', L'≃', L'≡', L'∝', L'∥', L'⟂', L'|', L'∤', L'→', L'⊷', // relations @@ -129,7 +130,7 @@ namespace odf_writer }; annotation_diak_symbols = { {L"˙",L"dot"}, {L"¨",L"ddot"}, {L"⃛",L"dddot"}, {L"˄", L"hat"}, {L"ˇ",L"check"}, {L"´",L"acute"}, {L"ˋ",L"grave"}, {L"˘",L"breve"}, - {L"~",L"tilde"},{L"¯",L"overline"},{L"→",L"vec"}, {L"⇀",L"harpoon"}, {L"-",L"unnderline"}/*, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""},{L"",L""}, + {L"~",L"tilde"},{L"¯",L"overline"},{L"→",L"vec"}, {L"⇀",L"harpoon"}, {L"-",L"underline"}/*, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""}, {L"",L""},{L"",L""}, {L"",L""}*/ }; @@ -144,6 +145,11 @@ namespace odf_writer annotation_brackets_end = { {L")", L")"}, {L"]", L"]"}, {L"}", L"rbrace"}, {L"⟩", L"rangle"}, {L"〉", L"rangle"},{L"⌋", L"rfloor"}, {L"⌉", L"rceil"}, {L"|", L"rline"}, {L"‖", L"rdline"}, {L"[", L"["}, {L"⟧", L"rdbracket"} }; + lvl_counter = 1; + lvl_up_counter = 1; + lvl_down_counter = -1; + lvl_max = 1; + lvl_min = -1; //debug_stream.open(debug_fileName); } @@ -184,6 +190,7 @@ namespace odf_writer impl_->current_level_.push_back(level_state); impl_->current_math_state_.elements_.push_back(state); + style_flag = true; } bool odf_math_context::start_element(office_element_ptr & elm) @@ -226,4 +233,4 @@ namespace odf_writer impl_->clear_current(); } } -} +} \ No newline at end of file diff --git a/OdfFile/Writer/Format/odf_math_context.h b/OdfFile/Writer/Format/odf_math_context.h index 77c6f4cd1d..3eabdc6732 100644 --- a/OdfFile/Writer/Format/odf_math_context.h +++ b/OdfFile/Writer/Format/odf_math_context.h @@ -43,13 +43,36 @@ #define CREATE_MATH_TAG(tag)\ odf_writer::office_element_ptr elm;\ odf_writer::create_element(L"math", tag, elm, odf_context());\ - //odf_context()->math_context()->debug_stream << tag << "\n"; + odf_context()->math_context()->current_tag = tag; +//odf_context()->math_context()->debug_stream << tag << "\n"; #define OPEN_MATH_TAG(elm)\ - odf_context()->math_context()->tagFlag.push_back(odf_context()->math_context()->start_element(elm)); \ - if(odf_context()->math_context()->tagFlag.back()) \ - odf_context()->math_context()->counter++; \ - //odf_context()->math_context()->debug_stream << L"open, counter is " << odf_context()->math_context()->counter << "\n"; + odf_context()->math_context()->tagFlag.push_back(odf_context()->math_context()->start_element(elm));\ + if (odf_context()->math_context()->current_tag == L"mn")\ + {\ + typedef odf_writer::math_mn* T;\ + T tmp = dynamic_cast(elm.get());\ + odf_context()->math_context()->symbol_counter += tmp->text_.get().size();\ + }\ + if (odf_context()->math_context()->current_tag == L"mi")\ + {\ + typedef odf_writer::math_mi* T;\ + T tmp = dynamic_cast(elm.get());\ + odf_context()->math_context()->symbol_counter += tmp->text_.get().size();\ + }\ + if (odf_context()->math_context()->current_tag == L"mo")\ + {\ + typedef odf_writer::math_mo* T;\ + T tmp = dynamic_cast(elm.get());\ + odf_context()->math_context()->symbol_counter += tmp->text_.get().size();\ + }\ + if (odf_context()->math_context()->tagFlag.back())\ + {\ + odf_context()->math_context()->counter++;\ + }\ + odf_context()->math_context()->current_tag = L""; + +//odf_context()->math_context()->debug_stream << L"open, counter is " << odf_context()->math_context()->counter << "\n"; #define CLOSE_MATH_TAG\ if(odf_context()->math_context()->tagFlag.back()) \ @@ -57,7 +80,7 @@ odf_context()->math_context()->end_element();\ odf_context()->math_context()->counter--; \ }\ - odf_context()->math_context()->tagFlag.pop_back(); \ + odf_context()->math_context()->tagFlag.pop_back(); //odf_context()->math_context()->debug_stream /*std::wcout*/ << L"close, counter is " << odf_context()->math_context()->counter << "\n"; @@ -72,18 +95,18 @@ namespace cpdoccore { class odf_math_context { public: - odf_math_context(odf_conversion_context *odf_context); + odf_math_context(odf_conversion_context* odf_context); ~odf_math_context(); - void set_styles_context(odf_style_context * style_context); + void set_styles_context(odf_style_context* style_context); - odf_drawing_context *drawing_context(); - odf_text_context *text_context(); + odf_drawing_context* drawing_context(); + odf_text_context* text_context(); + + void start_math(office_element_ptr& root); + + bool start_element(office_element_ptr& elm); // office_math_element TODO - void start_math(office_element_ptr & root); - - bool start_element(office_element_ptr & elm); // office_math_element TODO - void end_element(); std::vector> brackets; @@ -91,10 +114,21 @@ namespace cpdoccore { int lvl_of_me; int matrix_row_counter; std::vector end_counter; - int counter; + bool style_flag; + int counter; + std::wstring current_tag; + int symbol_counter; + double lvl_counter; + double lvl_up_counter; + double lvl_down_counter; + double lvl_max; + double lvl_min; + std::wstring font; + double size; std::set mo; std::map diak_symbols; bool annotation_flag; + bool annotation_oper_flag; std::map annotation_operators; std::map annotation_brackets_begin; std::map annotation_brackets_end;