From b325b4c286b56a63316063a3ac4648bf7b7efcbe Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Sat, 5 Mar 2016 20:09:34 -0500 Subject: [PATCH] Update liborcus to 0.11.0. Markus did half of this, and I simply carried the torch. Change-Id: Icd3ee1e4b5bd562faee06dfd9dce52a4bed49a71 Reviewed-on: https://gerrit.libreoffice.org/22943 Tested-by: Jenkins Reviewed-by: Kohei Yoshida --- RepositoryExternal.mk | 19 +- configure.ac | 2 +- download.lst | 4 +- external/boost/Module_boost.mk | 1 + external/boost/StaticLibrary_boost_filesystem.mk | 36 + ...0001-Fix-for-OSX-build-inside-LibreOffice.patch | 1175 ++++++++++++++++++++ .../liborcus/0001-Get-it-to-build-on-Windows.patch | 212 ++++ external/liborcus/ExternalPackage_liborcus.mk | 8 +- external/liborcus/ExternalProject_liborcus.mk | 22 +- external/liborcus/Library_orcus-parser.mk | 3 + external/liborcus/Library_orcus.mk | 18 +- external/liborcus/UnpackedTarball_liborcus.mk | 11 +- external/liborcus/fix-crash-ooo55043-1.patch.0 | 17 - external/liborcus/unusedheader.patch.0 | 11 - external/liborcus/windows-constants-hack.patch | 15 + sc/Library_scfilt.mk | 1 + sc/source/filter/inc/orcusinterface.hxx | 2 + sc/source/filter/orcus/filterdetect.cxx | 2 +- sc/source/filter/orcus/interface.cxx | 63 +- 19 files changed, 1544 insertions(+), 78 deletions(-) create mode 100644 external/boost/StaticLibrary_boost_filesystem.mk create mode 100644 external/liborcus/0001-Fix-for-OSX-build-inside-LibreOffice.patch create mode 100755 external/liborcus/0001-Get-it-to-build-on-Windows.patch delete mode 100644 external/liborcus/fix-crash-ooo55043-1.patch.0 delete mode 100644 external/liborcus/unusedheader.patch.0 create mode 100755 external/liborcus/windows-constants-hack.patch diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk index 5b497ee..c6fe371 100644 --- a/RepositoryExternal.mk +++ b/RepositoryExternal.mk @@ -743,6 +743,21 @@ $(call gb_LinkTarget_set_include,$(1),\ endef +define gb_LinkTarget__use_boost_filesystem +$(call gb_LinkTarget_add_defs,$(1),\ + -DBOOST_ALL_NO_LIB \ +) + +$(call gb_LinkTarget_use_static_libraries,$(1),\ + boost_filesystem \ +) + +endef + +define gb_ExternalProject__use_boost_filesystem +$(call gb_ExternalProject_use_static_libraries,$(1),boost_filesystem) +endef + define gb_ExternalProject__use_boost_headers $(call gb_ExternalProject_use_unpacked,$(1),boost) @@ -3129,7 +3144,7 @@ $(call gb_LinkTarget_set_include,$(1),\ ) $(call gb_LinkTarget_add_libs,$(1),\ - -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.10 \ + -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.11 \ ) $(if $(SYSTEM_BOOST), \ @@ -3148,7 +3163,7 @@ $(call gb_LinkTarget_set_include,$(1),\ ) $(call gb_LinkTarget_add_libs,$(1),\ - -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.10 \ + -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.11 \ ) endef diff --git a/configure.ac b/configure.ac index 934d43a..dab1919 100644 --- a/configure.ac +++ b/configure.ac @@ -9196,7 +9196,7 @@ if test -z "$enable_orcus" -o "$enable_orcus" != no; then ENABLE_ORCUS="TRUE" AC_DEFINE(ENABLE_ORCUS) - libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.10 >= 0.9.0]) + libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.11 >= 0.11.0]) if test "$with_system_orcus" != "yes"; then if test "$SYSTEM_BOOST" = "TRUE"; then # =========================================================== diff --git a/external/boost/Module_boost.mk b/external/boost/Module_boost.mk index 5bac25e..ae407f5 100644 --- a/external/boost/Module_boost.mk +++ b/external/boost/Module_boost.mk @@ -11,6 +11,7 @@ $(eval $(call gb_Module_Module,boost)) $(eval $(call gb_Module_add_targets,boost,\ StaticLibrary_boostdatetime \ + StaticLibrary_boost_filesystem \ StaticLibrary_boost_system \ StaticLibrary_boost_iostreams \ UnpackedTarball_boost \ diff --git a/external/boost/StaticLibrary_boost_filesystem.mk b/external/boost/StaticLibrary_boost_filesystem.mk new file mode 100644 index 0000000..024308a --- /dev/null +++ b/external/boost/StaticLibrary_boost_filesystem.mk @@ -0,0 +1,36 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_StaticLibrary_StaticLibrary,boost_filesystem)) + +$(eval $(call gb_StaticLibrary_use_unpacked,boost_filesystem,boost)) + +$(eval $(call gb_StaticLibrary_set_warnings_not_errors,boost_filesystem)) + +# disable "auto link" "feature" on MSVC +$(eval $(call gb_StaticLibrary_add_defs,boost_filesystem,\ + -DBOOST_ALL_NO_LIB \ +)) + +$(eval $(call gb_StaticLibrary_use_external,boost_filesystem,boost_headers)) + +$(eval $(call gb_StaticLibrary_set_generated_cxx_suffix,boost_filesystem,cpp)) + +$(eval $(call gb_StaticLibrary_add_generated_exception_objects,boost_filesystem,\ + UnpackedTarball/boost/libs/filesystem/src/codecvt_error_category \ + UnpackedTarball/boost/libs/filesystem/src/operations \ + UnpackedTarball/boost/libs/filesystem/src/path \ + UnpackedTarball/boost/libs/filesystem/src/path_traits \ + UnpackedTarball/boost/libs/filesystem/src/portability \ + UnpackedTarball/boost/libs/filesystem/src/unique_path \ + UnpackedTarball/boost/libs/filesystem/src/utf8_codecvt_facet \ + UnpackedTarball/boost/libs/filesystem/src/windows_file_codecvt \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/external/liborcus/0001-Fix-for-OSX-build-inside-LibreOffice.patch b/external/liborcus/0001-Fix-for-OSX-build-inside-LibreOffice.patch new file mode 100644 index 0000000..d03c98d --- /dev/null +++ b/external/liborcus/0001-Fix-for-OSX-build-inside-LibreOffice.patch @@ -0,0 +1,1175 @@ +From a1df2d984d527931c6cbbe6547856283bdbf6a9b Mon Sep 17 00:00:00 2001 +From: Kohei Yoshida +Date: Sun, 6 Mar 2016 21:21:31 -0500 +Subject: [PATCH] Fix for OSX build inside LibreOffice. + +--- + include/orcus/sax_ns_parser.hpp | 2 +- + slickedit/orcus.vpj | 178 ++++--------------------------- + src/liborcus/dom_tree.cpp | 12 +-- + src/liborcus/json_document_tree.cpp | 29 +++-- + src/liborcus/json_document_tree_test.cpp | 2 +- + src/liborcus/ods_content_xml_context.cpp | 2 +- + src/liborcus/opc_reader.cpp | 2 +- + src/liborcus/orcus_gnumeric.cpp | 2 +- + src/liborcus/orcus_import_ods.cpp | 2 +- + src/liborcus/orcus_import_xlsx.cpp | 2 +- + src/liborcus/orcus_xls_xml.cpp | 2 +- + src/liborcus/orcus_xlsx.cpp | 20 ++-- + src/liborcus/orcus_xml.cpp | 4 +- + src/liborcus/xlsx_sheet_context.cpp | 8 +- + src/liborcus/xml_map_tree.cpp | 6 +- + src/liborcus/xml_structure_tree.cpp | 4 +- + src/liborcus/yaml_document_tree.cpp | 34 +++--- + src/mso/encryption_info.cpp | 3 +- + src/orcus_filter_global.cpp | 2 +- + src/orcus_json_main.cpp | 2 +- + src/orcus_yaml_main.cpp | 2 +- + src/parser/json_parser_base.cpp | 2 +- + src/parser/sax_parser_base.cpp | 2 +- + src/parser/string_pool.cpp | 4 +- + src/parser/yaml_parser_base.cpp | 2 +- + src/spreadsheet/document.cpp | 2 +- + 26 files changed, 95 insertions(+), 237 deletions(-) + +diff --git a/include/orcus/sax_ns_parser.hpp b/include/orcus/sax_ns_parser.hpp +index 680f39d..49a2b48 100644 +--- a/include/orcus/sax_ns_parser.hpp ++++ b/include/orcus/sax_ns_parser.hpp +@@ -142,7 +142,7 @@ private: + + void start_element(const sax::parser_element& elem) + { +- m_scopes.push_back(make_unique<__sax::elem_scope>()); ++ m_scopes.push_back(orcus::make_unique<__sax::elem_scope>()); + __sax::elem_scope& scope = *m_scopes.back(); + scope.ns = m_ns_cxt.get(elem.ns); + scope.name = elem.name; +diff --git a/slickedit/orcus.vpj b/slickedit/orcus.vpj +index 23c6d42..bbc89ec 100644 +--- a/slickedit/orcus.vpj ++++ b/slickedit/orcus.vpj +@@ -145,6 +145,10 @@ + Filters=""> + + ++ ++ ++ ++ + + + +@@ -186,6 +190,7 @@ + + + ++ + + + +@@ -193,43 +198,34 @@ + + + +- +- + + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + + + + +- +- + + + ++ ++ ++ + + + + + ++ ++ + + + +@@ -240,308 +236,172 @@ + + + +- +- + ++ + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + + +- + + + + + +- + +- +- + +- ++ ++ ++ + + +- +- + + +- +- + + +- + +- +- + + +- +- + +- ++ + + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + +- ++ + + +- +- + + +- +- + + +- + +- +- + + +- +- ++ ++ + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- + + + +- +- + + +- +- + + + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + +- +- + + +- + +- +- + + + + + + +- + + + +- +- + + +- +- + + + +@@ -565,6 +425,7 @@ + + + ++ + + + +@@ -597,7 +458,6 @@ + + + +- + + + +diff --git a/src/liborcus/dom_tree.cpp b/src/liborcus/dom_tree.cpp +index 255a7d7..1b4588b 100644 +--- a/src/liborcus/dom_tree.cpp ++++ b/src/liborcus/dom_tree.cpp +@@ -177,7 +177,7 @@ void dom_tree::content::print(ostream& os, const xmlns_context& /*cxt*/) const + dom_tree::content::~content() {} + + dom_tree::dom_tree(xmlns_context& cxt) : +- mp_impl(make_unique(cxt)) {} ++ mp_impl(orcus::make_unique(cxt)) {} + + dom_tree::~dom_tree() {} + +@@ -242,7 +242,7 @@ void dom_tree::start_element(xmlns_id_t ns, const pstring& name) + + // Append new element as a child element of the current element. + p = mp_impl->m_elem_stack.back(); +- p->child_nodes.push_back(make_unique(ns, name_safe)); ++ p->child_nodes.push_back(orcus::make_unique(ns, name_safe)); + p = static_cast(p->child_nodes.back().get()); + p->attrs.swap(mp_impl->m_cur_attrs); + mp_impl->m_elem_stack.push_back(p); +@@ -269,7 +269,7 @@ void dom_tree::set_characters(const pstring& val) + + element* p = mp_impl->m_elem_stack.back(); + val2 = mp_impl->m_pool.intern(val2).first; // Make sure the string is persistent. +- p->child_nodes.push_back(make_unique(val2)); ++ p->child_nodes.push_back(orcus::make_unique(val2)); + } + + void dom_tree::set_attribute(xmlns_id_t ns, const pstring& name, const pstring& val) +@@ -283,7 +283,7 @@ void dom_tree::set_attribute(xmlns_id_t ns, const pstring& name, const pstring& + + void dom_tree::set_doctype(const sax::doctype_declaration& dtd) + { +- mp_impl->m_doctype = make_unique(dtd); // make a copy. ++ mp_impl->m_doctype = orcus::make_unique(dtd); // make a copy. + + sax::doctype_declaration& this_dtd = *mp_impl->m_doctype; + string_pool& pool = mp_impl->m_pool; +@@ -360,7 +360,7 @@ void dom_tree::dump_compact(ostream& os) const + + scopes_type scopes; + +- scopes.push_back(make_unique(string(), mp_impl->m_root)); ++ scopes.push_back(orcus::make_unique(string(), mp_impl->m_root)); + while (!scopes.empty()) + { + bool new_scope = false; +@@ -418,7 +418,7 @@ void dom_tree::dump_compact(ostream& os) const + ++cur_scope.current_pos; + ostringstream elem_name; + elem->print(elem_name, mp_impl->m_ns_cxt); +- scopes.push_back(make_unique(elem_name.str())); ++ scopes.push_back(orcus::make_unique(elem_name.str())); + scope& child_scope = *scopes.back(); + child_scope.nodes.swap(nodes); + child_scope.current_pos = child_scope.nodes.begin(); +diff --git a/src/liborcus/json_document_tree.cpp b/src/liborcus/json_document_tree.cpp +index adafcbf..81289e1 100644 +--- a/src/liborcus/json_document_tree.cpp ++++ b/src/liborcus/json_document_tree.cpp +@@ -55,7 +55,6 @@ using node_t = json::detail::node_t; + + const char* tab = " "; + constexpr char quote = '"'; +-constexpr char backslash = '\\'; + + const xmlns_id_t NS_orcus_json_xml = "http://schemas.kohei.us/orcus/2015/json"; + +@@ -455,13 +454,13 @@ public: + { + if (m_root) + { +- json_value* jv = push_value(make_unique()); ++ json_value* jv = push_value(orcus::make_unique()); + assert(jv && jv->type == node_t::array); + m_stack.push_back(parser_stack(jv)); + } + else + { +- m_root = make_unique(); ++ m_root = orcus::make_unique(); + m_stack.push_back(parser_stack(m_root.get())); + } + } +@@ -476,13 +475,13 @@ public: + { + if (m_root) + { +- json_value* jv = push_value(make_unique()); ++ json_value* jv = push_value(orcus::make_unique()); + assert(jv && jv->type == node_t::object); + m_stack.push_back(parser_stack(jv)); + } + else + { +- m_root = make_unique(); ++ m_root = orcus::make_unique(); + m_stack.push_back(parser_stack(m_root.get())); + } + } +@@ -504,17 +503,17 @@ public: + + void boolean_true() + { +- push_value(make_unique(node_t::boolean_true)); ++ push_value(orcus::make_unique(node_t::boolean_true)); + } + + void boolean_false() + { +- push_value(make_unique(node_t::boolean_false)); ++ push_value(orcus::make_unique(node_t::boolean_false)); + } + + void null() + { +- push_value(make_unique(node_t::null)); ++ push_value(orcus::make_unique(node_t::null)); + } + + void string(const char* p, size_t len, bool transient) +@@ -524,12 +523,12 @@ public: + // The tree manages the life cycle of this string value. + s = m_pool.intern(s).first; + +- push_value(make_unique(s)); ++ push_value(orcus::make_unique(s)); + } + + void number(double val) + { +- push_value(make_unique(val)); ++ push_value(orcus::make_unique(val)); + } + + void swap(std::unique_ptr& other_root) +@@ -554,8 +553,8 @@ struct node::impl + impl(const json_value* jv) : m_node(jv) {} + }; + +-node::node(const json_value* jv) : mp_impl(make_unique(jv)) {} +-node::node(const node& other) : mp_impl(make_unique(other.mp_impl->m_node)) {} ++node::node(const json_value* jv) : mp_impl(orcus::make_unique(jv)) {} ++node::node(const node& other) : mp_impl(orcus::make_unique(other.mp_impl->m_node)) {} + node::node(node&& rhs) : mp_impl(std::move(rhs.mp_impl)) {} + node::~node() {} + +@@ -720,12 +719,12 @@ struct json_document_tree::impl + std::unique_ptr m_own_pool; + string_pool& m_pool; + +- impl() : m_own_pool(make_unique()), m_pool(*m_own_pool) {} ++ impl() : m_own_pool(orcus::make_unique()), m_pool(*m_own_pool) {} + impl(string_pool& pool) : m_pool(pool) {} + }; + +-json_document_tree::json_document_tree() : mp_impl(make_unique()) {} +-json_document_tree::json_document_tree(string_pool& pool) : mp_impl(make_unique(pool)) {} ++json_document_tree::json_document_tree() : mp_impl(orcus::make_unique()) {} ++json_document_tree::json_document_tree(string_pool& pool) : mp_impl(orcus::make_unique(pool)) {} + json_document_tree::~json_document_tree() {} + + void json_document_tree::load(const std::string& strm, const json_config& config) +diff --git a/src/liborcus/json_document_tree_test.cpp b/src/liborcus/json_document_tree_test.cpp +index da16150..4b4fcbd 100644 +--- a/src/liborcus/json_document_tree_test.cpp ++++ b/src/liborcus/json_document_tree_test.cpp +@@ -193,7 +193,7 @@ std::unique_ptr get_doc_tree(const char* filepath) + cout << "--- original" << endl; + cout << strm << endl; + +- auto doc = make_unique(); ++ auto doc = orcus::make_unique(); + doc->load(strm, test_config); + + return doc; +diff --git a/src/liborcus/ods_content_xml_context.cpp b/src/liborcus/ods_content_xml_context.cpp +index f496353..c4e706d 100644 +--- a/src/liborcus/ods_content_xml_context.cpp ++++ b/src/liborcus/ods_content_xml_context.cpp +@@ -588,7 +588,7 @@ void ods_content_xml_context::push_cell_value() + ods_session_data& ods_data = + static_cast(*get_session_context().mp_data); + ods_data.m_formulas.push_back( +- make_unique( ++ orcus::make_unique( + m_tables.size()-1, m_row, m_col, m_cell_attr.formula_grammar, m_cell_attr.formula)); + + ods_session_data::formula& formula_data = *ods_data.m_formulas.back(); +diff --git a/src/liborcus/opc_reader.cpp b/src/liborcus/opc_reader.cpp +index 814b2cf..666530e 100644 +--- a/src/liborcus/opc_reader.cpp ++++ b/src/liborcus/opc_reader.cpp +@@ -244,7 +244,7 @@ void opc_reader::read_content_types() + m_config, m_ns_repo, opc_tokens, + reinterpret_cast(&buffer[0]), buffer.size()); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + new opc_content_types_context(m_session_cxt, opc_tokens)); + + parser.set_handler(handler.get()); +diff --git a/src/liborcus/orcus_gnumeric.cpp b/src/liborcus/orcus_gnumeric.cpp +index 1873c0e..c29bef9 100644 +--- a/src/liborcus/orcus_gnumeric.cpp ++++ b/src/liborcus/orcus_gnumeric.cpp +@@ -82,7 +82,7 @@ void orcus_gnumeric::read_content_xml(const char* p, size_t size) + { + xml_stream_parser parser(get_config(), mp_impl->m_ns_repo, gnumeric_tokens, p, size); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + mp_impl->m_cxt, gnumeric_tokens, mp_impl->mp_factory); + + parser.set_handler(handler.get()); +diff --git a/src/liborcus/orcus_import_ods.cpp b/src/liborcus/orcus_import_ods.cpp +index af1135e..2d76dbb 100644 +--- a/src/liborcus/orcus_import_ods.cpp ++++ b/src/liborcus/orcus_import_ods.cpp +@@ -32,7 +32,7 @@ void import_ods::read_styles(const char* p, size_t n, spreadsheet::iface::import + + session_context cxt; + odf_styles_map_type styles_map; +- auto context = make_unique(cxt, odf_tokens, styles_map, styles); ++ auto context = orcus::make_unique(cxt, odf_tokens, styles_map, styles); + + xml_simple_stream_handler stream_handler(context.release()); + +diff --git a/src/liborcus/orcus_import_xlsx.cpp b/src/liborcus/orcus_import_xlsx.cpp +index 2f9f172..0d4a933 100644 +--- a/src/liborcus/orcus_import_xlsx.cpp ++++ b/src/liborcus/orcus_import_xlsx.cpp +@@ -33,7 +33,7 @@ void import_xlsx::read_table(const char* p, size_t n, spreadsheet::iface::import + return; + + session_context cxt; +- auto handler = make_unique(cxt, ooxml_tokens, *table); ++ auto handler = orcus::make_unique(cxt, ooxml_tokens, *table); + + xmlns_repository ns_repo; + ns_repo.add_predefined_values(NS_ooxml_all); +diff --git a/src/liborcus/orcus_xls_xml.cpp b/src/liborcus/orcus_xls_xml.cpp +index 2849219..22ffeab 100644 +--- a/src/liborcus/orcus_xls_xml.cpp ++++ b/src/liborcus/orcus_xls_xml.cpp +@@ -92,7 +92,7 @@ void orcus_xls_xml::read_stream(const char* content, size_t len) + xml_stream_parser parser( + get_config(), mp_impl->m_ns_repo, xls_xml_tokens, content, len); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + mp_impl->m_cxt, xls_xml_tokens, mp_impl->mp_factory); + + parser.set_handler(handler.get()); +diff --git a/src/liborcus/orcus_xlsx.cpp b/src/liborcus/orcus_xlsx.cpp +index 8c578e6..7c1e46c 100644 +--- a/src/liborcus/orcus_xlsx.cpp ++++ b/src/liborcus/orcus_xlsx.cpp +@@ -286,7 +286,7 @@ void orcus_xlsx::read_workbook(const string& dir_path, const string& file_name) + if (buffer.empty()) + return; + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + new xlsx_workbook_context(mp_impl->m_cxt, ooxml_tokens)); + + xml_stream_parser parser( +@@ -341,7 +341,7 @@ void orcus_xlsx::read_sheet(const string& dir_path, const string& file_name, xls + get_config(), mp_impl->m_ns_repo, ooxml_tokens, + reinterpret_cast(&buffer[0]), buffer.size()); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + mp_impl->m_cxt, ooxml_tokens, data->id-1, sheet); + + parser.set_handler(handler.get()); +@@ -373,7 +373,7 @@ void orcus_xlsx::read_shared_strings(const string& dir_path, const string& file_ + get_config(), mp_impl->m_ns_repo, ooxml_tokens, + reinterpret_cast(&buffer[0]), buffer.size()); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + new xlsx_shared_strings_context( + mp_impl->m_cxt, ooxml_tokens, mp_impl->mp_factory->get_shared_strings())); + +@@ -406,7 +406,7 @@ void orcus_xlsx::read_styles(const string& dir_path, const string& file_name) + get_config(), mp_impl->m_ns_repo, ooxml_tokens, + reinterpret_cast(&buffer[0]), buffer.size()); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + new xlsx_styles_context( + mp_impl->m_cxt, ooxml_tokens, mp_impl->mp_factory->get_styles())); + +@@ -441,7 +441,7 @@ void orcus_xlsx::read_table(const std::string& dir_path, const std::string& file + if (buffer.empty()) + return; + +- auto handler = make_unique(mp_impl->m_cxt, ooxml_tokens, *table); ++ auto handler = orcus::make_unique(mp_impl->m_cxt, ooxml_tokens, *table); + + xml_stream_parser parser( + get_config(), mp_impl->m_ns_repo, ooxml_tokens, +@@ -471,7 +471,7 @@ void orcus_xlsx::read_pivot_cache_def(const std::string& dir_path, const std::st + if (buffer.empty()) + return; + +- auto handler = make_unique(mp_impl->m_cxt, ooxml_tokens); ++ auto handler = orcus::make_unique(mp_impl->m_cxt, ooxml_tokens); + + xml_stream_parser parser( + get_config(), mp_impl->m_ns_repo, ooxml_tokens, +@@ -502,7 +502,7 @@ void orcus_xlsx::read_pivot_cache_rec(const std::string& dir_path, const std::st + if (buffer.empty()) + return; + +- auto handler = make_unique(mp_impl->m_cxt, ooxml_tokens); ++ auto handler = orcus::make_unique(mp_impl->m_cxt, ooxml_tokens); + + xml_stream_parser parser( + get_config(), mp_impl->m_ns_repo, ooxml_tokens, +@@ -532,7 +532,7 @@ void orcus_xlsx::read_pivot_table(const std::string& dir_path, const std::string + if (buffer.empty()) + return; + +- auto handler = make_unique(mp_impl->m_cxt, ooxml_tokens); ++ auto handler = orcus::make_unique(mp_impl->m_cxt, ooxml_tokens); + + xml_stream_parser parser( + get_config(), mp_impl->m_ns_repo, ooxml_tokens, +@@ -567,7 +567,7 @@ void orcus_xlsx::read_rev_headers(const std::string& dir_path, const std::string + get_config(), mp_impl->m_ns_repo, ooxml_tokens, + reinterpret_cast(&buffer[0]), buffer.size()); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + new xlsx_revheaders_context(mp_impl->m_cxt, ooxml_tokens)); + + parser.set_handler(handler.get()); +@@ -600,7 +600,7 @@ void orcus_xlsx::read_rev_log(const std::string& dir_path, const std::string& fi + get_config(), mp_impl->m_ns_repo, ooxml_tokens, + reinterpret_cast(&buffer[0]), buffer.size()); + +- auto handler = make_unique( ++ auto handler = orcus::make_unique( + new xlsx_revlog_context(mp_impl->m_cxt, ooxml_tokens)); + + parser.set_handler(handler.get()); +diff --git a/src/liborcus/orcus_xml.cpp b/src/liborcus/orcus_xml.cpp +index 2cb7fa3..f97c4f9 100644 +--- a/src/liborcus/orcus_xml.cpp ++++ b/src/liborcus/orcus_xml.cpp +@@ -343,7 +343,7 @@ void write_range_reference_group( + scopes_type scopes; + for (spreadsheet::row_t current_row = 0; current_row < ref.row_size; ++current_row) + { +- scopes.push_back(make_unique(root)); // root element ++ scopes.push_back(orcus::make_unique(root)); // root element + + while (!scopes.empty()) + { +@@ -378,7 +378,7 @@ void write_range_reference_group( + // This is a non-leaf element. Push a new scope with this + // element and re-start the loop. + ++cur_scope.current_child_pos; +- scopes.push_back(make_unique(child_elem)); ++ scopes.push_back(orcus::make_unique(child_elem)); + new_scope = true; + break; + } +diff --git a/src/liborcus/xlsx_sheet_context.cpp b/src/liborcus/xlsx_sheet_context.cpp +index f350049..720319a 100644 +--- a/src/liborcus/xlsx_sheet_context.cpp ++++ b/src/liborcus/xlsx_sheet_context.cpp +@@ -547,7 +547,7 @@ void xlsx_sheet_context::end_element_cell() + { + // shared formula expression + session_data.m_shared_formulas.push_back( +- make_unique( ++ orcus::make_unique( + m_sheet_id, m_cur_row, m_cur_col, m_cur_formula.shared_id, + m_cur_formula.str.str(), m_cur_formula.ref.str())); + } +@@ -555,14 +555,14 @@ void xlsx_sheet_context::end_element_cell() + { + // array formula expression + session_data.m_formulas.push_back( +- make_unique( ++ orcus::make_unique( + m_sheet_id, m_cur_row, m_cur_col, m_cur_formula.str.str(), m_cur_formula.ref.str())); + } + else + { + // normal (non-shared) formula expression + session_data.m_formulas.push_back( +- make_unique( ++ orcus::make_unique( + m_sheet_id, m_cur_row, m_cur_col, m_cur_formula.str.str())); + } + } +@@ -570,7 +570,7 @@ void xlsx_sheet_context::end_element_cell() + { + // shared formula without formula expression + session_data.m_shared_formulas.push_back( +- make_unique( ++ orcus::make_unique( + m_sheet_id, m_cur_row, m_cur_col, m_cur_formula.shared_id)); + } + else if (m_cur_formula.type == spreadsheet::formula_t::data_table) +diff --git a/src/liborcus/xml_map_tree.cpp b/src/liborcus/xml_map_tree.cpp +index 132ccb9..69fbc75 100644 +--- a/src/liborcus/xml_map_tree.cpp ++++ b/src/liborcus/xml_map_tree.cpp +@@ -666,7 +666,7 @@ xml_map_tree::linkable* xml_map_tree::get_element_stack( + { + // Insert a new element of this name. + children.push_back( +- make_unique( ++ orcus::make_unique( + token.ns, m_names.intern(token.name.get(), token.name.size()).first, + element_unlinked, reference_unknown)); + cur_element = children.back().get(); +@@ -695,7 +695,7 @@ xml_map_tree::linkable* xml_map_tree::get_element_stack( + throw xpath_error("This attribute is already linked. You can't link the same attribute twice."); + + attrs.push_back( +- make_unique( ++ orcus::make_unique( + token.ns, m_names.intern(token.name.get(), token.name.size()).first, ref_type)); + + ret = attrs.back().get(); +@@ -710,7 +710,7 @@ xml_map_tree::linkable* xml_map_tree::get_element_stack( + { + // No element of that name exists. + children.push_back( +- make_unique( ++ orcus::make_unique( + token.ns, m_names.intern(token.name.get(), token.name.size()).first, + element_linked, ref_type)); + +diff --git a/src/liborcus/xml_structure_tree.cpp b/src/liborcus/xml_structure_tree.cpp +index f2d62bd..3a08c64 100644 +--- a/src/liborcus/xml_structure_tree.cpp ++++ b/src/liborcus/xml_structure_tree.cpp +@@ -451,7 +451,7 @@ void xml_structure_tree::dump_compact(ostream& os) const + cxt.dump(os); + + element_ref ref(mp_impl->mp_root->name, &mp_impl->mp_root->prop); +- scopes.push_back(make_unique(entity_name(), false, ref)); ++ scopes.push_back(orcus::make_unique(entity_name(), false, ref)); + while (!scopes.empty()) + { + bool new_scope = false; +@@ -505,7 +505,7 @@ void xml_structure_tree::dump_compact(ostream& os) const + + // Push a new scope, and restart the loop with the new scope. + ++cur_scope.current_pos; +- scopes.push_back(make_unique(this_elem.name, this_elem.prop->repeat)); ++ scopes.push_back(orcus::make_unique(this_elem.name, this_elem.prop->repeat)); + scope& child_scope = *scopes.back(); + child_scope.elements.swap(elems); + child_scope.current_pos = child_scope.elements.begin(); +diff --git a/src/liborcus/yaml_document_tree.cpp b/src/liborcus/yaml_document_tree.cpp +index b7cc4bc..5aad4f2 100644 +--- a/src/liborcus/yaml_document_tree.cpp ++++ b/src/liborcus/yaml_document_tree.cpp +@@ -254,13 +254,13 @@ public: + + if (m_root) + { +- yaml_value* yv = push_value(make_unique()); ++ yaml_value* yv = push_value(orcus::make_unique()); + assert(yv && yv->type == node_t::sequence); + m_stack.push_back(parser_stack(yv)); + } + else + { +- m_root = make_unique(); ++ m_root = orcus::make_unique(); + m_stack.push_back(parser_stack(m_root.get())); + } + } +@@ -276,13 +276,13 @@ public: + assert(m_in_document); + if (m_root) + { +- yaml_value* yv = push_value(make_unique()); ++ yaml_value* yv = push_value(orcus::make_unique()); + assert(yv && yv->type == node_t::map); + m_stack.push_back(parser_stack(yv)); + } + else + { +- m_root = make_unique(); ++ m_root = orcus::make_unique(); + m_stack.push_back(parser_stack(m_root.get())); + } + } +@@ -319,11 +319,11 @@ public: + + if (m_root) + { +- yaml_value* yv = push_value(make_unique(p, n)); ++ yaml_value* yv = push_value(orcus::make_unique(p, n)); + assert(yv && yv->type == node_t::string); + } + else +- m_root = make_unique(p, n); ++ m_root = orcus::make_unique(p, n); + } + + void number(double val) +@@ -331,11 +331,11 @@ public: + assert(m_in_document); + if (m_root) + { +- yaml_value* yv = push_value(make_unique(val)); ++ yaml_value* yv = push_value(orcus::make_unique(val)); + assert(yv && yv->type == node_t::number); + } + else +- m_root = make_unique(val); ++ m_root = orcus::make_unique(val); + } + + void boolean_true() +@@ -343,11 +343,11 @@ public: + assert(m_in_document); + if (m_root) + { +- yaml_value* yv = push_value(make_unique(node_t::boolean_true)); ++ yaml_value* yv = push_value(orcus::make_unique(node_t::boolean_true)); + assert(yv && yv->type == node_t::boolean_true); + } + else +- m_root = make_unique(node_t::boolean_true); ++ m_root = orcus::make_unique(node_t::boolean_true); + } + + void boolean_false() +@@ -355,11 +355,11 @@ public: + assert(m_in_document); + if (m_root) + { +- yaml_value* yv = push_value(make_unique(node_t::boolean_false)); ++ yaml_value* yv = push_value(orcus::make_unique(node_t::boolean_false)); + assert(yv && yv->type == node_t::boolean_false); + } + else +- m_root = make_unique(node_t::boolean_false); ++ m_root = orcus::make_unique(node_t::boolean_false); + } + + void null() +@@ -367,11 +367,11 @@ public: + assert(m_in_document); + if (m_root) + { +- yaml_value* yv = push_value(make_unique(node_t::null)); ++ yaml_value* yv = push_value(orcus::make_unique(node_t::null)); + assert(yv && yv->type == node_t::null); + } + else +- m_root = make_unique(node_t::null); ++ m_root = orcus::make_unique(node_t::null); + } + + void swap(std::vector& docs) +@@ -396,8 +396,8 @@ struct node::impl + impl(const yaml_value* yv) : m_node(yv) {} + }; + +-node::node(const yaml_value* yv) : mp_impl(make_unique(yv)) {} +-node::node(const node& other) : mp_impl(make_unique(other.mp_impl->m_node)) {} ++node::node(const yaml_value* yv) : mp_impl(orcus::make_unique(yv)) {} ++node::node(const node& other) : mp_impl(orcus::make_unique(other.mp_impl->m_node)) {} + node::node(node&& rhs) : mp_impl(std::move(rhs.mp_impl)) {} + node::~node() {} + +@@ -548,7 +548,7 @@ double node::numeric_value() const + + }} + +-yaml_document_tree::yaml_document_tree() : mp_impl(make_unique()) {} ++yaml_document_tree::yaml_document_tree() : mp_impl(orcus::make_unique()) {} + yaml_document_tree::~yaml_document_tree() {} + + void yaml_document_tree::load(const std::string& strm) +diff --git a/src/mso/encryption_info.cpp b/src/mso/encryption_info.cpp +index 1d428fc..e9bc3ad 100644 +--- a/src/mso/encryption_info.cpp ++++ b/src/mso/encryption_info.cpp +@@ -143,11 +143,10 @@ public: + + class sax_handler + { +- xmlns_context& m_ns_cxt; + vector m_attrs; + + public: +- sax_handler(xmlns_context& ns_cxt) : m_ns_cxt(ns_cxt) {} ++ sax_handler(xmlns_context& /*ns_cxt*/) {} + void doctype(const sax::doctype_declaration&) {} + void start_declaration(const pstring&) {} + void end_declaration(const pstring&) {} +diff --git a/src/orcus_filter_global.cpp b/src/orcus_filter_global.cpp +index 09c2ab6..df50496 100644 +--- a/src/orcus_filter_global.cpp ++++ b/src/orcus_filter_global.cpp +@@ -239,7 +239,7 @@ std::unique_ptr parse_json_args(int argc, char** argv) + return nullptr; + } + +- std::unique_ptr config = make_unique(); ++ std::unique_ptr config = orcus::make_unique(); + + if (vm.count("input")) + config->input_path = vm["input"].as(); +diff --git a/src/orcus_json_main.cpp b/src/orcus_json_main.cpp +index edca63a..6a739b2 100644 +--- a/src/orcus_json_main.cpp ++++ b/src/orcus_json_main.cpp +@@ -25,7 +25,7 @@ using namespace orcus; + + std::unique_ptr load_doc(const std::string& strm, const json_config& config) + { +- std::unique_ptr doc(make_unique()); ++ std::unique_ptr doc(orcus::make_unique()); + try + { + doc->load(strm, config); +diff --git a/src/orcus_yaml_main.cpp b/src/orcus_yaml_main.cpp +index 3d15742..c028f64 100644 +--- a/src/orcus_yaml_main.cpp ++++ b/src/orcus_yaml_main.cpp +@@ -76,7 +76,7 @@ std::unique_ptr parse_yaml_args(int argc, char** argv) + return nullptr; + } + +- std::unique_ptr config = make_unique(); ++ std::unique_ptr config = orcus::make_unique(); + + if (vm.count("input")) + config->input_path = vm["input"].as(); +diff --git a/src/parser/json_parser_base.cpp b/src/parser/json_parser_base.cpp +index 50e3f36..eff27b7 100644 +--- a/src/parser/json_parser_base.cpp ++++ b/src/parser/json_parser_base.cpp +@@ -35,7 +35,7 @@ struct parser_base::impl + }; + + parser_base::parser_base(const char* p, size_t n) : +- ::orcus::parser_base(p, n), mp_impl(make_unique()) {} ++ ::orcus::parser_base(p, n), mp_impl(orcus::make_unique()) {} + + parser_base::~parser_base() {} + +diff --git a/src/parser/sax_parser_base.cpp b/src/parser/sax_parser_base.cpp +index 51d56a4..3cd4f25 100644 +--- a/src/parser/sax_parser_base.cpp ++++ b/src/parser/sax_parser_base.cpp +@@ -57,7 +57,7 @@ struct parser_base::impl + + parser_base::parser_base(const char* content, size_t size) : + ::orcus::parser_base(content, size), +- mp_impl(make_unique()), ++ mp_impl(orcus::make_unique()), + m_nest_level(0), + m_buffer_pos(0), + m_root_elem_open(true) +diff --git a/src/parser/string_pool.cpp b/src/parser/string_pool.cpp +index 83c0501..baba88a 100644 +--- a/src/parser/string_pool.cpp ++++ b/src/parser/string_pool.cpp +@@ -61,7 +61,7 @@ struct string_pool::impl + string_store_type m_store; + }; + +-string_pool::string_pool() : mp_impl(make_unique()) {} ++string_pool::string_pool() : mp_impl(orcus::make_unique()) {} + + string_pool::~string_pool() + { +@@ -82,7 +82,7 @@ pair string_pool::intern(const char* str, size_t n) + if (itr == mp_impl->m_set.end()) + { + // This string has not been interned. Intern it. +- mp_impl->m_store.push_back(make_unique(str, n)); ++ mp_impl->m_store.push_back(orcus::make_unique(str, n)); + pair r = mp_impl->m_set.insert(pstring(mp_impl->m_store.back()->data(), n)); + if (!r.second) + throw general_error("failed to intern a new string instance."); +diff --git a/src/parser/yaml_parser_base.cpp b/src/parser/yaml_parser_base.cpp +index 656dfdc..3c93266 100644 +--- a/src/parser/yaml_parser_base.cpp ++++ b/src/parser/yaml_parser_base.cpp +@@ -59,7 +59,7 @@ const size_t parser_base::parse_indent_end_of_stream = std::numeric_limits::max() - 2; + + parser_base::parser_base(const char* p, size_t n) : +- ::orcus::parser_base(p, n), mp_impl(make_unique()) {} ++ ::orcus::parser_base(p, n), mp_impl(orcus::make_unique()) {} + + parser_base::~parser_base() {} + +diff --git a/src/spreadsheet/document.cpp b/src/spreadsheet/document.cpp +index a80646c..17cc113 100644 +--- a/src/spreadsheet/document.cpp ++++ b/src/spreadsheet/document.cpp +@@ -448,7 +448,7 @@ sheet* document::append_sheet(const pstring& sheet_name, row_t row_size, col_t c + sheet_t sheet_index = static_cast(mp_impl->m_sheets.size()); + + mp_impl->m_sheets.push_back( +- make_unique( ++ orcus::make_unique( + *this, sheet_name_safe, sheet_index, row_size, col_size)); + + mp_impl->m_context.append_sheet( +-- +2.4.5 + diff --git a/external/liborcus/0001-Get-it-to-build-on-Windows.patch b/external/liborcus/0001-Get-it-to-build-on-Windows.patch new file mode 100755 index 0000000..dca91b3 --- /dev/null +++ b/external/liborcus/0001-Get-it-to-build-on-Windows.patch @@ -0,0 +1,212 @@ +From c5d7282214727bcc28b6ec7e2b8016b40872cd3b Mon Sep 17 00:00:00 2001 +From: Kohei Yoshida +Date: Mon, 7 Mar 2016 18:35:23 -0500 +Subject: [PATCH] Get it to build on Windows. + +--- + include/orcus/json_parser.hpp | 32 +++++++++++++------------------- + include/orcus/parser_global.hpp | 4 ++-- + src/liborcus/json_document_tree.cpp | 2 +- + src/liborcus/json_util.cpp | 4 ++-- + src/liborcus/yaml_document_tree.cpp | 4 +++- + src/parser/parser_global.cpp | 3 +++ + src/parser/pstring.cpp | 1 + + src/parser/stream.cpp | 4 ++-- + src/parser/yaml_parser_base.cpp | 17 ++++++----------- + 9 files changed, 33 insertions(+), 38 deletions(-) + +diff --git a/include/orcus/json_parser.hpp b/include/orcus/json_parser.hpp +index 5d733fb..183b831 100644 +--- a/include/orcus/json_parser.hpp ++++ b/include/orcus/json_parser.hpp +@@ -204,16 +204,13 @@ void json_parser<_Handler>::object() + if (!res.str) + { + // Parsing was unsuccessful. +- switch (res.length) +- { +- case parse_quoted_string_state::error_no_closing_quote: +- throw json::parse_error("object: stream ended prematurely before reaching the closing quote of a key.", offset()); +- case parse_quoted_string_state::error_illegal_escape_char: +- json::parse_error::throw_with( +- "object: illegal escape character '", cur_char(), "' in key value.", offset()); +- default: +- throw json::parse_error("object: unknown error while parsing a key value.", offset()); +- } ++ if (res.length == parse_quoted_string_state::error_no_closing_quote) ++ throw json::parse_error("object: stream ended prematurely before reaching the closing quote of a key.", offset()); ++ else if (res.length == parse_quoted_string_state::error_illegal_escape_char) ++ json::parse_error::throw_with( ++ "object: illegal escape character '", cur_char(), "' in key value.", offset()); ++ else ++ throw json::parse_error("object: unknown error while parsing a key value.", offset()); + } + + m_handler.object_key(res.str, res.length, res.transient); +@@ -297,15 +294,12 @@ void json_parser<_Handler>::string() + } + + // Parsing was unsuccessful. +- switch (res.length) +- { +- case parse_quoted_string_state::error_no_closing_quote: +- throw json::parse_error("string: stream ended prematurely before reaching the closing quote.", offset()); +- case parse_quoted_string_state::error_illegal_escape_char: +- json::parse_error::throw_with("string: illegal escape character '", cur_char(), "'.", offset()); +- default: +- throw json::parse_error("string: unknown error.", offset()); +- } ++ if (res.length == parse_quoted_string_state::error_no_closing_quote) ++ throw json::parse_error("string: stream ended prematurely before reaching the closing quote.", offset()); ++ else if (res.length == parse_quoted_string_state::error_illegal_escape_char) ++ json::parse_error::throw_with("string: illegal escape character '", cur_char(), "'.", offset()); ++ else ++ throw json::parse_error("string: unknown error.", offset()); + } + + } +diff --git a/include/orcus/parser_global.hpp b/include/orcus/parser_global.hpp +index 6fab254..b76aec4 100644 +--- a/include/orcus/parser_global.hpp ++++ b/include/orcus/parser_global.hpp +@@ -31,8 +31,8 @@ enum class string_escape_char_t + */ + struct parse_quoted_string_state + { +- static constexpr size_t error_no_closing_quote = 1; +- static constexpr size_t error_illegal_escape_char = 2; ++ ORCUS_PSR_DLLPUBLIC static const size_t error_no_closing_quote; ++ ORCUS_PSR_DLLPUBLIC static const size_t error_illegal_escape_char; + + const char* str; + size_t length; +diff --git a/src/liborcus/json_document_tree.cpp b/src/liborcus/json_document_tree.cpp +index 81289e1..2fb8a41 100644 +--- a/src/liborcus/json_document_tree.cpp ++++ b/src/liborcus/json_document_tree.cpp +@@ -54,7 +54,7 @@ using json_value = json::detail::json_value; + using node_t = json::detail::node_t; + + const char* tab = " "; +-constexpr char quote = '"'; ++const char quote = '"'; + + const xmlns_id_t NS_orcus_json_xml = "http://schemas.kohei.us/orcus/2015/json"; + +diff --git a/src/liborcus/json_util.cpp b/src/liborcus/json_util.cpp +index 37bd2b0..8f593cd 100644 +--- a/src/liborcus/json_util.cpp ++++ b/src/liborcus/json_util.cpp +@@ -11,8 +11,8 @@ namespace orcus { namespace json { + + namespace { + +-constexpr char quote = '"'; +-constexpr char backslash = '\\'; ++const char quote = '"'; ++const char backslash = '\\'; + + } + +diff --git a/src/liborcus/yaml_document_tree.cpp b/src/liborcus/yaml_document_tree.cpp +index 5aad4f2..27bb7e8 100644 +--- a/src/liborcus/yaml_document_tree.cpp ++++ b/src/liborcus/yaml_document_tree.cpp +@@ -155,6 +155,8 @@ struct parser_stack + yaml_value* node; + + parser_stack(yaml_value* _node) : node(_node) {} ++ parser_stack(const parser_stack&) = delete; ++ parser_stack(parser_stack&& r) : key(std::move(r.key)), node(r.node) {} + }; + + typedef std::unique_ptr document_root_type; +@@ -577,7 +579,7 @@ const char* kw_false = "false"; + const char* kw_tilde = "~"; + const char* kw_null = "null"; + +-constexpr char quote = '"'; ++const char quote = '"'; + + void dump_indent(std::ostringstream& os, size_t scope) + { +diff --git a/src/parser/parser_global.cpp b/src/parser/parser_global.cpp +index 6e6b656..4023689 100644 +--- a/src/parser/parser_global.cpp ++++ b/src/parser/parser_global.cpp +@@ -12,6 +12,9 @@ + + namespace orcus { + ++const size_t parse_quoted_string_state::error_no_closing_quote = 1; ++const size_t parse_quoted_string_state::error_illegal_escape_char = 2; ++ + bool is_blank(char c) + { + return is_in(c, " \t\n\r"); +diff --git a/src/parser/pstring.cpp b/src/parser/pstring.cpp +index 303e88e..50ab2ca 100644 +--- a/src/parser/pstring.cpp ++++ b/src/parser/pstring.cpp +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + + using namespace std; + +diff --git a/src/parser/stream.cpp b/src/parser/stream.cpp +index 00a24a0..eb73dcc 100644 +--- a/src/parser/stream.cpp ++++ b/src/parser/stream.cpp +@@ -85,7 +85,7 @@ std::string create_parse_error_output(const std::string& strm, std::ptrdiff_t of + if (offset < 0) + return std::string(); + +- constexpr size_t max_line_length = 60; ++ const size_t max_line_length = 60; + + auto line_info = find_line_with_offset(strm, offset); + pstring line = std::get<0>(line_info); +@@ -113,7 +113,7 @@ std::string create_parse_error_output(const std::string& strm, std::ptrdiff_t of + // The error line is too long. Only show a segment of the line where the + // error occurred. + +- constexpr size_t fixed_offset = 20; ++ const size_t fixed_offset = 20; + + size_t line_start = offset_on_line - fixed_offset; + size_t line_end = line_start + max_line_length; +diff --git a/src/parser/yaml_parser_base.cpp b/src/parser/yaml_parser_base.cpp +index 3c93266..c6e7939 100644 +--- a/src/parser/yaml_parser_base.cpp ++++ b/src/parser/yaml_parser_base.cpp +@@ -289,18 +289,13 @@ void throw_quoted_string_parse_error(const char* func_name, const parse_quoted_s + { + std::ostringstream os; + os << func_name << ": failed to parse "; +- switch (ret.length) +- { +- case parse_quoted_string_state::error_illegal_escape_char: +- os << "due to the presence of illegal escape character."; +- break; +- case parse_quoted_string_state::error_no_closing_quote: +- os << "because the closing quote was not found."; +- break; +- default: +- os << "due to unknown reason."; ++ if (ret.length == parse_quoted_string_state::error_illegal_escape_char) ++ os << "due to the presence of illegal escape character."; ++ else if (ret.length == parse_quoted_string_state::error_no_closing_quote) ++ os << "because the closing quote was not found."; ++ else ++ os << "due to unknown reason."; + +- } + throw parse_error(os.str()); + } + +-- +1.8.1.msysgit.1 + diff --git a/external/liborcus/ExternalPackage_liborcus.mk b/external/liborcus/ExternalPackage_liborcus.mk index 4411592..56debe9 100644 --- a/external/liborcus/ExternalPackage_liborcus.mk +++ b/external/liborcus/ExternalPackage_liborcus.mk @@ -12,11 +12,11 @@ $(eval $(call gb_ExternalPackage_ExternalPackage,liborcus,liborcus)) $(eval $(call gb_ExternalPackage_use_external_project,liborcus,liborcus)) ifeq ($(OS),MACOSX) -$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.10.0.dylib,src/liborcus/.libs/liborcus-0.10.0.dylib)) -$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.10.0.dylib,src/parser/.libs/liborcus-parser-0.10.0.dylib)) +$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.11.0.dylib,src/liborcus/.libs/liborcus-0.11.0.dylib)) +$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.11.0.dylib,src/parser/.libs/liborcus-parser-0.11.0.dylib)) else ifeq ($(DISABLE_DYNLOADING),) -$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.10.so.0,src/liborcus/.libs/liborcus-0.10.so.0.0.0)) -$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.10.so.0,src/parser/.libs/liborcus-parser-0.10.so.0.0.0)) +$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.11.so.0,src/liborcus/.libs/liborcus-0.11.so.0.0.0)) +$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.11.so.0,src/parser/.libs/liborcus-parser-0.11.so.0.0.0)) endif # vim: set noet sw=4 ts=4: diff --git a/external/liborcus/ExternalProject_liborcus.mk b/external/liborcus/ExternalProject_liborcus.mk index 7eb8fdb..580ef847 100644 --- a/external/liborcus/ExternalProject_liborcus.mk +++ b/external/liborcus/ExternalProject_liborcus.mk @@ -13,6 +13,7 @@ $(eval $(call gb_ExternalProject_use_autoconf,liborcus,build)) $(eval $(call gb_ExternalProject_use_externals,liborcus, \ boost_headers \ + boost_filesystem \ boost_iostreams \ boost_system \ mdds_headers \ @@ -38,9 +39,9 @@ ifneq ($(SYSTEM_ZLIB),) liborcus_LIBS+=-lz endif ifneq ($(SYSTEM_BOOST),) -liborcus_LIBS+=$(BOOST_SYSTEM_LIB) $(BOOST_IOSTREAMS_LIB) +liborcus_LIBS+=$(BOOST_SYSTEM_LIB) $(BOOST_IOSTREAMS_LIB) $(BOOST_FILESYSTEM_LIB) else -liborcus_LIBS+=-L$(gb_StaticLibrary_WORKDIR) -lboost_system -lboost_iostreams +liborcus_LIBS+=-L$(gb_StaticLibrary_WORKDIR) -lboost_system -lboost_iostreams -lboost_filesystem endif ifeq ($(OS),ANDROID) liborcus_LIBS+=-lgnustl_shared -lm @@ -96,12 +97,13 @@ $(call gb_ExternalProject_get_state_target,liborcus,build) : , \ --enable-shared --disable-static \ ) \ - $(if $(ENABLE_DEBUG),--enable-debug,--disable-debug) \ - --disable-spreadsheet-model \ - --without-tools \ - --disable-werror \ - $(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________OOO) \ - $(if $(SYSTEM_BOOST),,\ + $(if $(ENABLE_DEBUG),--enable-debug,--disable-debug) \ + --disable-spreadsheet-model \ + --without-tools \ + --disable-python \ + --disable-werror \ + $(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________OOO) \ + $(if $(SYSTEM_BOOST),,\ --with-boost=$(WORKDIR)/UnpackedTarball/boost \ boost_cv_lib_iostreams=yes \ boost_cv_lib_system=yes \ @@ -111,8 +113,8 @@ $(call gb_ExternalProject_get_state_target,liborcus,build) : $(MAKE) \ $(if $(filter MACOSX,$(OS)),\ && $(PERL) $(SRCDIR)/solenv/bin/macosx-change-install-names.pl shl OOO \ - $(gb_Package_SOURCEDIR_liborcus)/src/liborcus/.libs/liborcus-0.10.0.dylib \ - $(gb_Package_SOURCEDIR_liborcus)/src/parser/.libs/liborcus-parser-0.10.0.dylib \ + $(gb_Package_SOURCEDIR_liborcus)/src/liborcus/.libs/liborcus-0.11.0.dylib \ + $(gb_Package_SOURCEDIR_liborcus)/src/parser/.libs/liborcus-parser-0.11.0.dylib \ ) \ ) diff --git a/external/liborcus/Library_orcus-parser.mk b/external/liborcus/Library_orcus-parser.mk index c3b4eec..28af14e 100644 --- a/external/liborcus/Library_orcus-parser.mk +++ b/external/liborcus/Library_orcus-parser.mk @@ -39,6 +39,8 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus-parser,\ UnpackedTarball/liborcus/src/parser/css_types \ UnpackedTarball/liborcus/src/parser/csv_parser_base \ UnpackedTarball/liborcus/src/parser/exception \ + UnpackedTarball/liborcus/src/parser/json_parser_base \ + UnpackedTarball/liborcus/src/parser/parser_base \ UnpackedTarball/liborcus/src/parser/parser_global \ UnpackedTarball/liborcus/src/parser/pstring \ UnpackedTarball/liborcus/src/parser/sax_parser_base \ @@ -48,6 +50,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus-parser,\ UnpackedTarball/liborcus/src/parser/tokens \ UnpackedTarball/liborcus/src/parser/types \ UnpackedTarball/liborcus/src/parser/xml_namespace \ + UnpackedTarball/liborcus/src/parser/yaml_parser_base \ UnpackedTarball/liborcus/src/parser/zip_archive \ UnpackedTarball/liborcus/src/parser/zip_archive_stream \ )) diff --git a/external/liborcus/Library_orcus.mk b/external/liborcus/Library_orcus.mk index ae98d5e..96169f1 100644 --- a/external/liborcus/Library_orcus.mk +++ b/external/liborcus/Library_orcus.mk @@ -13,6 +13,7 @@ $(eval $(call gb_Library_use_unpacked,orcus,liborcus)) $(eval $(call gb_Library_use_externals,orcus,\ boost_headers \ + boost_filesystem \ boost_iostreams \ boost_system \ mdds_headers \ @@ -53,12 +54,16 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ UnpackedTarball/liborcus/src/liborcus/gnumeric_namespace_types \ UnpackedTarball/liborcus/src/liborcus/gnumeric_sheet_context \ UnpackedTarball/liborcus/src/liborcus/gnumeric_tokens \ + UnpackedTarball/liborcus/src/liborcus/info \ UnpackedTarball/liborcus/src/liborcus/interface \ + UnpackedTarball/liborcus/src/liborcus/json_document_tree \ + UnpackedTarball/liborcus/src/liborcus/json_util \ UnpackedTarball/liborcus/src/liborcus/measurement \ + UnpackedTarball/liborcus/src/liborcus/odf_helper \ UnpackedTarball/liborcus/src/liborcus/odf_namespace_types \ UnpackedTarball/liborcus/src/liborcus/odf_para_context \ - UnpackedTarball/liborcus/src/liborcus/odf_styles \ UnpackedTarball/liborcus/src/liborcus/odf_styles_context \ + UnpackedTarball/liborcus/src/liborcus/odf_styles \ UnpackedTarball/liborcus/src/liborcus/odf_tokens \ UnpackedTarball/liborcus/src/liborcus/ods_content_xml_context \ UnpackedTarball/liborcus/src/liborcus/ods_content_xml_handler \ @@ -73,18 +78,26 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ UnpackedTarball/liborcus/src/liborcus/opc_reader \ UnpackedTarball/liborcus/src/liborcus/orcus_csv \ UnpackedTarball/liborcus/src/liborcus/orcus_gnumeric \ + UnpackedTarball/liborcus/src/liborcus/orcus_import_ods \ + UnpackedTarball/liborcus/src/liborcus/orcus_import_xlsx \ UnpackedTarball/liborcus/src/liborcus/orcus_ods \ UnpackedTarball/liborcus/src/liborcus/orcus_xlsx \ + UnpackedTarball/liborcus/src/liborcus/orcus_xls_xml \ UnpackedTarball/liborcus/src/liborcus/orcus_xml \ UnpackedTarball/liborcus/src/liborcus/session_context \ UnpackedTarball/liborcus/src/liborcus/spreadsheet_interface \ UnpackedTarball/liborcus/src/liborcus/spreadsheet_types \ - UnpackedTarball/liborcus/src/liborcus/xls_xml_namespace_types \ + UnpackedTarball/liborcus/src/liborcus/string_helper \ UnpackedTarball/liborcus/src/liborcus/xlsx_autofilter_context \ UnpackedTarball/liborcus/src/liborcus/xlsx_conditional_format_context \ UnpackedTarball/liborcus/src/liborcus/xlsx_context \ UnpackedTarball/liborcus/src/liborcus/xlsx_handler \ UnpackedTarball/liborcus/src/liborcus/xlsx_helper \ + UnpackedTarball/liborcus/src/liborcus/xls_xml_context \ + UnpackedTarball/liborcus/src/liborcus/xls_xml_detection_handler \ + UnpackedTarball/liborcus/src/liborcus/xls_xml_handler \ + UnpackedTarball/liborcus/src/liborcus/xls_xml_namespace_types \ + UnpackedTarball/liborcus/src/liborcus/xls_xml_tokens \ UnpackedTarball/liborcus/src/liborcus/xlsx_pivot_context \ UnpackedTarball/liborcus/src/liborcus/xlsx_revision_context \ UnpackedTarball/liborcus/src/liborcus/xlsx_session_data \ @@ -99,6 +112,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\ UnpackedTarball/liborcus/src/liborcus/xml_stream_handler \ UnpackedTarball/liborcus/src/liborcus/xml_stream_parser \ UnpackedTarball/liborcus/src/liborcus/xml_structure_tree \ + UnpackedTarball/liborcus/src/liborcus/yaml_document_tree \ )) # vim: set noet sw=4 ts=4: diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk index 825fa49..0e337ef 100644 --- a/external/liborcus/UnpackedTarball_liborcus.mk +++ b/external/liborcus/UnpackedTarball_liborcus.mk @@ -16,8 +16,15 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,liborcus,1)) $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\ external/liborcus/0001-workaround-a-linking-problem-on-windows.patch \ external/liborcus/rpath.patch.0 \ - external/liborcus/fix-crash-ooo55043-1.patch.0 \ - external/liborcus/unusedheader.patch.0 \ + external/liborcus/0001-Fix-for-OSX-build-inside-LibreOffice.patch \ + external/liborcus/0001-Get-it-to-build-on-Windows.patch \ )) +ifeq ($(OS),WNT) +$(eval $(call gb_UnpackedTarball_add_patches,liborcus,\ + external/liborcus/windows-constants-hack.patch \ +)) +endif + + # vim: set noet sw=4 ts=4: diff --git a/external/liborcus/fix-crash-ooo55043-1.patch.0 b/external/liborcus/fix-crash-ooo55043-1.patch.0 deleted file mode 100644 index 58a97c0..0000000 --- a/external/liborcus/fix-crash-ooo55043-1.patch.0 +++ /dev/null @@ -1,17 +0,0 @@ ---- src/parser/zip_archive_stream.cpp -+++ src/parser/zip_archive_stream.cpp -@@ -91,8 +91,13 @@ - - void zip_archive_stream_blob::read(unsigned char* buffer, size_t length) const - { -+ if (!length) -+ return; - // First, make sure we have enough blob to satisfy the requested stream length. -- size_t length_available = m_size - tell(); -+ const size_t pos = tell(); -+ if (pos > m_size) -+ throw zip_error("Stream is seeked past end. No data available"); -+ const size_t length_available = m_size - pos; - if (length_available < length) - throw zip_error("There is not enough stream left to fill requested length."); - diff --git a/external/liborcus/unusedheader.patch.0 b/external/liborcus/unusedheader.patch.0 deleted file mode 100644 index 4f7a77b..0000000 --- a/external/liborcus/unusedheader.patch.0 +++ /dev/null @@ -1,11 +0,0 @@ ---- ./src/parser/pstring.cpp.orig 2015-12-02 14:38:44.658744408 +0000 -+++ ./src/parser/pstring.cpp 2015-12-02 14:38:50.449658497 +0000 -@@ -13,8 +13,6 @@ - #include - #include - --#include -- - using namespace std; - - namespace orcus { diff --git a/external/liborcus/windows-constants-hack.patch b/external/liborcus/windows-constants-hack.patch new file mode 100755 index 0000000..876bc16 --- /dev/null +++ b/external/liborcus/windows-constants-hack.patch @@ -0,0 +1,15 @@ +diff --git a/src/liborcus/info.cpp b/src/liborcus/info.cpp +index ae571f5..539ce18 100644 +--- a/src/liborcus/info.cpp ++++ b/src/liborcus/info.cpp +@@ -7,7 +7,9 @@ + + #include "orcus/info.hpp" + +-#include "constants.inl" ++#define ORCUS_MAJOR_VERSION 0 ++#define ORCUS_MINOR_VERSION 11 ++#define ORCUS_MICRO_VERSION 0 + + namespace orcus { + diff --git a/sc/Library_scfilt.mk b/sc/Library_scfilt.mk index 74f2ce5..b764290 100644 --- a/sc/Library_scfilt.mk +++ b/sc/Library_scfilt.mk @@ -227,6 +227,7 @@ ifeq ($(ENABLE_ORCUS),TRUE) $(eval $(call gb_Library_use_externals,scfilt,\ orcus \ orcus-parser \ + boost_filesystem \ boost_system \ boost_iostreams \ zlib \ diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx index 63b36ef..05fe4cb 100644 --- a/sc/source/filter/inc/orcusinterface.hxx +++ b/sc/source/filter/inc/orcusinterface.hxx @@ -375,6 +375,7 @@ public: virtual void set_border_count(size_t n) override; virtual void set_border_style(orcus::spreadsheet::border_direction_t dir, const char* s, size_t n) override; + virtual void set_border_style(orcus::spreadsheet::border_direction_t dir, orcus::spreadsheet::border_style_t style) override; virtual void set_border_color(orcus::spreadsheet::border_direction_t dir, orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, @@ -425,6 +426,7 @@ public: virtual void set_cell_style_name(const char* s, size_t n) override; virtual void set_cell_style_xf(size_t index) override; virtual void set_cell_style_builtin(size_t index) override; + virtual void set_cell_style_parent_name(const char* s, size_t n) override; virtual size_t commit_cell_style() override; }; diff --git a/sc/source/filter/orcus/filterdetect.cxx b/sc/source/filter/orcus/filterdetect.cxx index 7dfccb9..9ae30ad 100644 --- a/sc/source/filter/orcus/filterdetect.cxx +++ b/sc/source/filter/orcus/filterdetect.cxx @@ -93,7 +93,7 @@ OUString OrcusFormatDetect::detect(css::uno::Sequence } orcus::format_t eFormat = orcus::detect(reinterpret_cast(aContent.getStr()), aContent.getLength()); - if (eFormat == orcus::format_gnumeric) + if (eFormat == orcus::format_t::gnumeric) return OUString("Gnumeric XML"); return OUString(); diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx index e50b8bf..496faea 100644 --- a/sc/source/filter/orcus/interface.cxx +++ b/sc/source/filter/orcus/interface.cxx @@ -55,7 +55,7 @@ void ScOrcusGlobalSettings::set_default_formula_grammar(orcus::spreadsheet::form orcus::spreadsheet::formula_grammar_t ScOrcusGlobalSettings::get_default_formula_grammar() const { - return orcus::spreadsheet::formula_grammar_unknown; + return orcus::spreadsheet::formula_grammar_t::unknown; } ScOrcusFactory::StringCellCache::StringCellCache(const ScAddress& rPos, size_t nIndex) : @@ -231,19 +231,19 @@ double translateToInternal(double nVal, orcus::length_unit_t unit) { switch(unit) { - case orcus::length_unit_inch: + case orcus::length_unit_t::inch: return nVal * 72.0 * 20.0; break; - case orcus::length_unit_twip: + case orcus::length_unit_t::twip: return nVal; break; - case orcus::length_unit_point: + case orcus::length_unit_t::point: return nVal * 20.0; break; - case orcus::length_unit_centimeter: + case orcus::length_unit_t::centimeter: return nVal * 20.0 * 72.0 / 2.54; break; - case orcus::length_unit_unknown: + case orcus::length_unit_t::unknown: SAL_WARN("sc.orcus", "unknown unit"); break; default: @@ -393,18 +393,18 @@ void ScOrcusConditionalFormat::set_type(os::conditional_format_t type) { switch (type) { - case os::conditional_format_condition: - case os::conditional_format_formula: + case os::conditional_format_t::condition: + case os::conditional_format_t::formula: meEntryType = condformat::CONDITION; // mpCurrentEntry.reset(new ScCondFormatEntry()); break; - case os::conditional_format_date: + case os::conditional_format_t::date: break; - case os::conditional_format_colorscale: + case os::conditional_format_t::colorscale: break; - case os::conditional_format_databar: + case os::conditional_format_t::databar: break; - case os::conditional_format_iconset: + case os::conditional_format_t::iconset: break; default: SAL_INFO("sc.orcus.condformat", "unknown conditional_format_t value"); @@ -549,17 +549,17 @@ formula::FormulaGrammar::Grammar getCalcGrammarFromOrcus( os::formula_grammar_t formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_ODFF; switch(grammar) { - case orcus::spreadsheet::formula_grammar_ods: + case orcus::spreadsheet::formula_grammar_t::ods: eGrammar = formula::FormulaGrammar::GRAM_ODFF; break; - case orcus::spreadsheet::formula_grammar_xlsx_2007: - case orcus::spreadsheet::formula_grammar_xlsx_2010: + case orcus::spreadsheet::formula_grammar_t::xlsx_2007: + case orcus::spreadsheet::formula_grammar_t::xlsx_2010: eGrammar = formula::FormulaGrammar::GRAM_OOXML; break; - case orcus::spreadsheet::formula_grammar_gnumeric: + case orcus::spreadsheet::formula_grammar_t::gnumeric: eGrammar = formula::FormulaGrammar::GRAM_ENGLISH_XL_A1; break; - case orcus::spreadsheet::formula_grammar_unknown: + case orcus::spreadsheet::formula_grammar_t::unknown: break; } @@ -799,16 +799,16 @@ SvxBoxItemLine getDirection(os::border_direction_t dir) { switch (dir) { - case os::border_right: + case os::border_direction_t::right: return SvxBoxItemLine::RIGHT; break; - case os::border_left: + case os::border_direction_t::left: return SvxBoxItemLine::RIGHT; break; - case os::border_top: + case os::border_direction_t::top: return SvxBoxItemLine::RIGHT; break; - case os::border_bottom: + case os::border_direction_t::bottom: return SvxBoxItemLine::RIGHT; break; default: @@ -947,15 +947,15 @@ void ScOrcusStyles::set_font_underline(orcus::spreadsheet::underline_t e) { switch(e) { - case orcus::spreadsheet::underline_single: - case orcus::spreadsheet::underline_single_accounting: + case orcus::spreadsheet::underline_t::single_line: + case orcus::spreadsheet::underline_t::single_accounting: maCurrentFont.meUnderline = UNDERLINE_SINGLE; break; - case orcus::spreadsheet::underline_double: - case orcus::spreadsheet::underline_double_accounting: + case orcus::spreadsheet::underline_t::double_line: + case orcus::spreadsheet::underline_t::double_accounting: maCurrentFont.meUnderline = UNDERLINE_DOUBLE; break; - case orcus::spreadsheet::underline_none: + case orcus::spreadsheet::underline_t::none: maCurrentFont.meUnderline = UNDERLINE_NONE; break; } @@ -1019,6 +1019,12 @@ void ScOrcusStyles::set_border_style(orcus::spreadsheet::border_direction_t /*di // implement later } +void ScOrcusStyles::set_border_style( + orcus::spreadsheet::border_direction_t /*dir*/, orcus::spreadsheet::border_style_t /*style*/) +{ + // implement later +} + void ScOrcusStyles::set_border_color(orcus::spreadsheet::border_direction_t dir, orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, @@ -1186,6 +1192,11 @@ void ScOrcusStyles::set_cell_style_builtin(size_t index) maCurrentCellStyle.mnBuiltInId = index; } +void ScOrcusStyles::set_cell_style_parent_name(const char* /*s*/, size_t /*n*/) +{ + // place holder +} + size_t ScOrcusStyles::commit_cell_style() { SAL_INFO("sc.orcus.style", "commit cell style: " << maCurrentCellStyle.maName); -- 2.5.0