[packages/libreoffice] - added patches from opensuse to fix build with liborcus 0.11
baggins
baggins at pld-linux.org
Mon May 23 23:58:07 CEST 2016
commit ff5c65178585c673048fde7e5a95e5bdacd7d546
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Mon May 23 23:57:32 2016 +0200
- added patches from opensuse to fix build with liborcus 0.11
boost-filesystem1.patch | 158 ++++
boost-filesystem2.patch | 25 +
liborcus-0.11.patch | 1974 +++++++++++++++++++++++++++++++++++++++++++++++
libreoffice.spec | 6 +
4 files changed, 2163 insertions(+)
---
diff --git a/libreoffice.spec b/libreoffice.spec
index 6ad83da..1359bff 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -88,6 +88,9 @@ Source28: http://dev-www.libreoffice.org/src/OpenCOLLADA-master-6509aa13af.tar.b
Patch0: disable-failing-test.patch
Patch1: mdds-1.2.0.patch
Patch2: boost-1.59.patch
+Patch3: boost-filesystem1.patch
+Patch4: boost-filesystem2.patch
+Patch5: liborcus-0.11.patch
URL: http://www.documentfoundation.org/
BuildRequires: /usr/bin/getopt
BuildRequires: Firebird-devel
@@ -2865,6 +2868,9 @@ dialogs.
%patch0 -p1
%patch1 -p1
%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
for dir in *-%{version}; do
[ -f $dir/ChangeLog ] && mv $dir/ChangeLog ChangeLog-$dir
diff --git a/boost-filesystem1.patch b/boost-filesystem1.patch
new file mode 100644
index 0000000..fee73d7
--- /dev/null
+++ b/boost-filesystem1.patch
@@ -0,0 +1,158 @@
+From ed41a33ca22f46b123df4132d376247682af07af Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon at redhat.com>
+Date: Tue, 8 Mar 2016 06:23:24 +0100
+Subject: detect Boost.Filesystem
+
+Change-Id: I86c268f49f44bd1e208a9de781a16bf19450c64c
+
+diff --git a/config_host.mk.in b/config_host.mk.in
+index 89081ca..0a2ec0b 100644
+--- a/config_host.mk.in
++++ b/config_host.mk.in
+@@ -37,6 +37,7 @@ export BARCODE_EXTENSION_PACK=@BARCODE_EXTENSION_PACK@
+ export BOOST_CPPFLAGS=@BOOST_CPPFLAGS@
+ export BOOST_CXXFLAGS=@BOOST_CXXFLAGS@
+ export BOOST_DATE_TIME_LIB=@BOOST_DATE_TIME_LIB@
++export BOOST_FILESYSTEM_LIB=@BOOST_FILESYSTEM_LIB@
+ export BOOST_IOSTREAMS_LIB=@BOOST_IOSTREAMS_LIB@
+ export BOOST_LDFLAGS=@BOOST_LDFLAGS@
+ export BOOST_SYSTEM_LIB=@BOOST_SYSTEM_LIB@
+diff --git a/configure.ac b/configure.ac
+index dab1919..7b5cedd 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -8836,6 +8836,7 @@ if test "$with_system_boost" = "yes"; then
+ SYSTEM_BOOST=TRUE
+ AX_BOOST_BASE(1.47)
+ AX_BOOST_DATE_TIME
++ AX_BOOST_FILESYSTEM
+ AX_BOOST_IOSTREAMS
+ mingw_boost_date_time_dll=`echo $BOOST_DATE_TIME_LIB | sed -e 's/^-l//' -e 's/\.dll$//'`
+ libo_MINGW_TRY_DLL([$mingw_boost_date_time_dll])
+diff --git a/m4/ax_boost_filesystem.m4 b/m4/ax_boost_filesystem.m4
+new file mode 100644
+index 0000000..f162163
+--- /dev/null
++++ b/m4/ax_boost_filesystem.m4
+@@ -0,0 +1,118 @@
++# ===========================================================================
++# http://www.gnu.org/software/autoconf-archive/ax_boost_filesystem.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_BOOST_FILESYSTEM
++#
++# DESCRIPTION
++#
++# Test for Filesystem library from the Boost C++ libraries. The macro
++# requires a preceding call to AX_BOOST_BASE. Further documentation is
++# available at <http://randspringer.de/boost/index.html>.
++#
++# This macro calls:
++#
++# AC_SUBST(BOOST_FILESYSTEM_LIB)
++#
++# And sets:
++#
++# HAVE_BOOST_FILESYSTEM
++#
++# LICENSE
++#
++# Copyright (c) 2009 Thomas Porschberg <thomas at randspringer.de>
++# Copyright (c) 2009 Michael Tindal
++# Copyright (c) 2009 Roman Rybalko <libtorrent at romanr.info>
++#
++# Copying and distribution of this file, with or without modification, are
++# permitted in any medium without royalty provided the copyright notice
++# and this notice are preserved. This file is offered as-is, without any
++# warranty.
++
++#serial 26
++
++AC_DEFUN([AX_BOOST_FILESYSTEM],
++[
++ AC_ARG_WITH([boost-filesystem],
++ AS_HELP_STRING([--with-boost-filesystem@<:@=special-lib@:>@],
++ [use the Filesystem library from boost - it is possible to specify a certain library for the linker
++ e.g. --with-boost-filesystem=boost_filesystem-gcc-mt ]),
++ [
++ if test "$withval" = "no"; then
++ want_boost="no"
++ elif test "$withval" = "yes"; then
++ want_boost="yes"
++ ax_boost_user_filesystem_lib=""
++ else
++ want_boost="yes"
++ ax_boost_user_filesystem_lib="$withval"
++ fi
++ ],
++ [want_boost="yes"]
++ )
++
++ if test "x$want_boost" = "xyes"; then
++ AC_REQUIRE([AC_PROG_CC])
++ CPPFLAGS_SAVED="$CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
++ export CPPFLAGS
++
++ LDFLAGS_SAVED="$LDFLAGS"
++ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
++ export LDFLAGS
++
++ LIBS_SAVED=$LIBS
++ LIBS="$LIBS $BOOST_SYSTEM_LIB"
++ export LIBS
++
++ AC_CACHE_CHECK(whether the Boost::Filesystem library is available,
++ ax_cv_boost_filesystem,
++ [AC_LANG_PUSH([C++])
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/filesystem/path.hpp>]],
++ [[using namespace boost::filesystem;
++ path my_path( "foo/bar/data.txt" );
++ return 0;]])],
++ ax_cv_boost_filesystem=yes, ax_cv_boost_filesystem=no)
++ AC_LANG_POP([C++])
++ ])
++ if test "x$ax_cv_boost_filesystem" = "xyes"; then
++ AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::Filesystem library is available])
++ BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'`
++ if test "x$ax_boost_user_filesystem_lib" = "x"; then
++ for libextension in `ls -r $BOOSTLIBDIR/libboost_filesystem* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do
++ ax_lib=${libextension}
++ AC_CHECK_LIB($ax_lib, exit,
++ [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break],
++ [link_filesystem="no"])
++ done
++ if test "x$link_filesystem" != "xyes"; then
++ for libextension in `ls -r $BOOSTLIBDIR/boost_filesystem* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do
++ ax_lib=${libextension}
++ AC_CHECK_LIB($ax_lib, exit,
++ [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break],
++ [link_filesystem="no"])
++ done
++ fi
++ else
++ for ax_lib in $ax_boost_user_filesystem_lib boost_filesystem-$ax_boost_user_filesystem_lib; do
++ AC_CHECK_LIB($ax_lib, exit,
++ [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break],
++ [link_filesystem="no"])
++ done
++
++ fi
++ if test "x$ax_lib" = "x"; then
++ AC_MSG_ERROR(Could not find a version of the library!)
++ fi
++ if test "x$link_filesystem" != "xyes"; then
++ AC_MSG_ERROR(Could not link against $ax_lib !)
++ fi
++ fi
++
++ CPPFLAGS="$CPPFLAGS_SAVED"
++ LDFLAGS="$LDFLAGS_SAVED"
++ LIBS="$LIBS_SAVED"
++ fi
++])
+--
+cgit v0.10.2
+
diff --git a/boost-filesystem2.patch b/boost-filesystem2.patch
new file mode 100644
index 0000000..0b296cf
--- /dev/null
+++ b/boost-filesystem2.patch
@@ -0,0 +1,25 @@
+From b4339fa7eee12f173b2273aed5dc6b8abae528f4 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon at redhat.com>
+Date: Tue, 8 Mar 2016 06:08:36 +0100
+Subject: define boost_filestystem external for system boost too
+
+Change-Id: Ie9bfc6a5f3e1862acbd1bb08c6f2bb0b63f2587e
+
+Index: libreoffice-5.1.1.3/RepositoryExternal.mk
+===================================================================
+--- libreoffice-5.1.1.3.orig/RepositoryExternal.mk
++++ libreoffice-5.1.1.3/RepositoryExternal.mk
+@@ -676,6 +676,13 @@ $(call gb_LinkTarget_add_libs,$(1),\
+
+ endef
+
++define gb_LinkTarget__use_boost_filesystem
++$(call gb_LinkTarget__use_boost_lib,$(1),$(BOOST_FILESYSTEM_LIB))
++
++endef
++
++gb_ExternalProject__use_boost_filesystem :=
++
+ define gb_LinkTarget__use_boost_iostreams
+ $(call gb_LinkTarget_set_include,$(1),\
+ $$(INCLUDE) \
diff --git a/liborcus-0.11.patch b/liborcus-0.11.patch
new file mode 100644
index 0000000..a3babac
--- /dev/null
+++ b/liborcus-0.11.patch
@@ -0,0 +1,1974 @@
+From b325b4c286b56a63316063a3ac4648bf7b7efcbe Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kohei.yoshida at gmail.com>
+Date: Sat, 5 Mar 2016 20:09:34 -0500
+Subject: 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 <ci at libreoffice.org>
+Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>
+
+Index: libreoffice-5.1.2.2/RepositoryExternal.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/RepositoryExternal.mk
++++ libreoffice-5.1.2.2/RepositoryExternal.mk
+@@ -786,6 +786,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)
+
+@@ -3180,7 +3195,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), \
+@@ -3199,7 +3214,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
+Index: libreoffice-5.1.2.2/configure.ac
+===================================================================
+--- libreoffice-5.1.2.2.orig/configure.ac
++++ libreoffice-5.1.2.2/configure.ac
+@@ -9143,7 +9143,7 @@ if test -z "$enable_orcus" -o "$enable_o
+ 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
+ # ===========================================================
+Index: libreoffice-5.1.2.2/download.lst
+===================================================================
+--- libreoffice-5.1.2.2.orig/download.lst
++++ libreoffice-5.1.2.2/download.lst
+@@ -112,8 +112,8 @@ export OPENCOLLADA_TARBALL := OpenCOLLAD
+ export OPENLDAP_TARBALL := 804c6cb5698db30b75ad0ff1c25baefd-openldap-2.4.31.tgz
+ export OPENSSL_MD5SUM := f3c710c045cdee5fd114feb69feba7aa
+ export OPENSSL_TARBALL := openssl-1.0.2g.tar.gz
+-export ORCUS_MD5SUM := e6efcbe50a5fd4d50d513c9a7a4139b0
+-export ORCUS_TARBALL := liborcus-0.9.2.tar.gz
++export ORCUS_MD5SUM := ca1e5d486b29cd519bb1d9845a6a768e
++export ORCUS_TARBALL := liborcus-0.11.0.tar.gz
+ export OWNCLOUD_ANDROID_LIB_MD5SUM := 593f0aa47bf2efc0efda2d28fae063b2
+ export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz
+ export PAGEMAKER_MD5SUM := 795cc7a59ace4db2b12586971d668671
+Index: libreoffice-5.1.2.2/external/boost/Module_boost.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/external/boost/Module_boost.mk
++++ libreoffice-5.1.2.2/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 \
+Index: libreoffice-5.1.2.2/external/boost/StaticLibrary_boost_filesystem.mk
+===================================================================
+--- /dev/null
++++ libreoffice-5.1.2.2/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:
+Index: libreoffice-5.1.2.2/external/liborcus/0001-Fix-for-OSX-build-inside-LibreOffice.patch
+===================================================================
+--- /dev/null
++++ libreoffice-5.1.2.2/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 <kohei.yoshida at gmail.com>
++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=""></Folder>
++ </CustomFolders>
++ <Files AutoFolders="DirectoryView">
+++ <Folder Name="../example">
+++ <F N="../example/json.cpp"/>
+++ <F N="../example/json_parser.cpp"/>
+++ </Folder>
++ <Folder Name="../include">
++ <Folder Name="orcus">
++ <Folder Name="mso">
++@@ -186,6 +190,7 @@
++ <F N="../include/orcus/measurement.hpp"/>
++ <F N="../include/orcus/orcus_csv.hpp"/>
++ <F N="../include/orcus/orcus_gnumeric.hpp"/>
+++ <F N="../include/orcus/orcus_import_ods.hpp"/>
++ <F N="../include/orcus/orcus_import_xlsx.hpp"/>
++ <F N="../include/orcus/orcus_ods.hpp"/>
++ <F N="../include/orcus/orcus_xls_xml.hpp"/>
++@@ -193,43 +198,34 @@
++ <F N="../include/orcus/orcus_xml.hpp"/>
++ <F N="../include/orcus/parser_base.hpp"/>
++ <F N="../include/orcus/parser_global.hpp"/>
++- <F N="../include/orcus/parser_global.hpp"/>
++- <F N="../include/orcus/pstring.hpp"/>
++ <F N="../include/orcus/pstring.hpp"/>
++ <F N="../include/orcus/sax_ns_parser.hpp"/>
++- <F N="../include/orcus/sax_ns_parser.hpp"/>
++- <F N="../include/orcus/sax_parser.hpp"/>
++ <F N="../include/orcus/sax_parser.hpp"/>
++ <F N="../include/orcus/sax_parser_base.hpp"/>
++- <F N="../include/orcus/sax_parser_base.hpp"/>
++- <F N="../include/orcus/sax_token_parser.hpp"/>
++ <F N="../include/orcus/sax_token_parser.hpp"/>
++ <F N="../include/orcus/stream.hpp"/>
++- <F N="../include/orcus/stream.hpp"/>
++ <F N="../include/orcus/string_pool.hpp"/>
++- <F N="../include/orcus/string_pool.hpp"/>
++- <F N="../include/orcus/tokens.hpp"/>
++ <F N="../include/orcus/tokens.hpp"/>
++ <F N="../include/orcus/types.hpp"/>
++- <F N="../include/orcus/types.hpp"/>
++- <F N="../include/orcus/xml_namespace.hpp"/>
++ <F N="../include/orcus/xml_namespace.hpp"/>
++ <F N="../include/orcus/xml_structure_tree.hpp"/>
++- <F N="../include/orcus/xml_structure_tree.hpp"/>
++ <F N="../include/orcus/yaml_document_tree.hpp"/>
++ <F N="../include/orcus/yaml_parser.hpp"/>
++ <F N="../include/orcus/yaml_parser_base.hpp"/>
++ <F N="../include/orcus/zip_archive.hpp"/>
++- <F N="../include/orcus/zip_archive.hpp"/>
++- <F N="../include/orcus/zip_archive_stream.hpp"/>
++ <F N="../include/orcus/zip_archive_stream.hpp"/>
++ </Folder>
++ </Folder>
+++ <Folder Name="../misc">
+++ <F N="../misc/sorted_string_map_perf.cpp"/>
+++ </Folder>
++ <Folder Name="../parser_handlers">
++ <F N="../parser_handlers/css.hpp"/>
++ <F N="../parser_handlers/css_test.cpp"/>
++ <F N="../parser_handlers/csv.hpp"/>
++ <F N="../parser_handlers/csv_test.cpp"/>
+++ <F N="../parser_handlers/json.hpp"/>
+++ <F N="../parser_handlers/json_test.cpp"/>
++ <F N="../parser_handlers/sax.hpp"/>
++ <F N="../parser_handlers/sax_ns.hpp"/>
++ <F N="../parser_handlers/sax_ns_test.cpp"/>
++@@ -240,308 +236,172 @@
++ <Folder Name="../src">
++ <Folder Name="liborcus">
++ <F N="../src/liborcus/common_test.cpp"/>
++- <F N="../src/liborcus/common_test.cpp"/>
++- <F N="../src/liborcus/config.cpp"/>
++ <F N="../src/liborcus/config.cpp"/>
+++ <F N="../src/liborcus/constants.inl"/>
++ <F N="../src/liborcus/css_document_tree.cpp"/>
++- <F N="../src/liborcus/css_document_tree.cpp"/>
++- <F N="../src/liborcus/css_document_tree_test.cpp"/>
++ <F N="../src/liborcus/css_document_tree_test.cpp"/>
++ <F N="../src/liborcus/css_selector.cpp"/>
++- <F N="../src/liborcus/css_selector.cpp"/>
++- <F N="../src/liborcus/detection_result.cpp"/>
++ <F N="../src/liborcus/detection_result.cpp"/>
++ <F N="../src/liborcus/detection_result.hpp"/>
++- <F N="../src/liborcus/detection_result.hpp"/>
++ <F N="../src/liborcus/dom_tree.cpp"/>
++- <F N="../src/liborcus/dom_tree.cpp"/>
++- <F N="../src/liborcus/format_detection.cpp"/>
++ <F N="../src/liborcus/format_detection.cpp"/>
++ <F N="../src/liborcus/format_detection_test.cpp"/>
++- <F N="../src/liborcus/format_detection_test.cpp"/>
++- <F N="../src/liborcus/global.cpp"/>
++ <F N="../src/liborcus/global.cpp"/>
++ <F N="../src/liborcus/gnumeric_cell_context.cpp"/>
++- <F N="../src/liborcus/gnumeric_cell_context.cpp"/>
++ <F N="../src/liborcus/gnumeric_cell_context.hpp"/>
++- <F N="../src/liborcus/gnumeric_cell_context.hpp"/>
++- <F N="../src/liborcus/gnumeric_cell_context_test.cpp"/>
++ <F N="../src/liborcus/gnumeric_cell_context_test.cpp"/>
++ <F N="../src/liborcus/gnumeric_context.cpp"/>
++- <F N="../src/liborcus/gnumeric_context.cpp"/>
++- <F N="../src/liborcus/gnumeric_context.hpp"/>
++ <F N="../src/liborcus/gnumeric_context.hpp"/>
++ <F N="../src/liborcus/gnumeric_detection_handler.cpp"/>
++- <F N="../src/liborcus/gnumeric_detection_handler.cpp"/>
++ <F N="../src/liborcus/gnumeric_detection_handler.hpp"/>
++- <F N="../src/liborcus/gnumeric_detection_handler.hpp"/>
++- <F N="../src/liborcus/gnumeric_handler.cpp"/>
++ <F N="../src/liborcus/gnumeric_handler.cpp"/>
++ <F N="../src/liborcus/gnumeric_handler.hpp"/>
++- <F N="../src/liborcus/gnumeric_handler.hpp"/>
++- <F N="../src/liborcus/gnumeric_helper.cpp"/>
++ <F N="../src/liborcus/gnumeric_helper.cpp"/>
++ <F N="../src/liborcus/gnumeric_helper.hpp"/>
++- <F N="../src/liborcus/gnumeric_helper.hpp"/>
++ <F N="../src/liborcus/gnumeric_helper_test.cpp"/>
++ <F N="../src/liborcus/gnumeric_namespace_types.cpp"/>
++- <F N="../src/liborcus/gnumeric_namespace_types.cpp"/>
++- <F N="../src/liborcus/gnumeric_namespace_types.hpp"/>
++ <F N="../src/liborcus/gnumeric_namespace_types.hpp"/>
++ <F N="../src/liborcus/gnumeric_sheet_context.cpp"/>
++- <F N="../src/liborcus/gnumeric_sheet_context.cpp"/>
++- <F N="../src/liborcus/gnumeric_sheet_context.hpp"/>
++ <F N="../src/liborcus/gnumeric_sheet_context.hpp"/>
++ <F N="../src/liborcus/gnumeric_sheet_context_test.cpp"/>
++- <F N="../src/liborcus/gnumeric_sheet_context_test.cpp"/>
++ <F N="../src/liborcus/gnumeric_token_constants.hpp"/>
++- <F N="../src/liborcus/gnumeric_token_constants.hpp"/>
++- <F N="../src/liborcus/gnumeric_token_constants.inl"/>
++ <F N="../src/liborcus/gnumeric_token_constants.inl"/>
++ <F N="../src/liborcus/gnumeric_tokens.cpp"/>
++- <F N="../src/liborcus/gnumeric_tokens.cpp"/>
++- <F N="../src/liborcus/gnumeric_tokens.hpp"/>
++ <F N="../src/liborcus/gnumeric_tokens.hpp"/>
++ <F N="../src/liborcus/gnumeric_tokens.inl"/>
++- <F N="../src/liborcus/gnumeric_tokens.inl"/>
++ <F N="../src/liborcus/info.cpp"/>
++ <F N="../src/liborcus/interface.cpp"/>
++- <F N="../src/liborcus/interface.cpp"/>
++ <F N="../src/liborcus/json_document_tree.cpp"/>
++ <F N="../src/liborcus/json_document_tree_test.cpp"/>
++ <F N="../src/liborcus/json_util.cpp"/>
++ <F N="../src/liborcus/json_util.hpp"/>
++ <F N="../src/liborcus/measurement.cpp"/>
++- <F N="../src/liborcus/measurement.cpp"/>
++ <F N="../src/liborcus/mock_spreadsheet.cpp"/>
++- <F N="../src/liborcus/mock_spreadsheet.cpp"/>
++- <F N="../src/liborcus/mock_spreadsheet.hpp"/>
++ <F N="../src/liborcus/mock_spreadsheet.hpp"/>
++- <F N="../src/liborcus/odf_namespace_types.cpp"/>
+++ <F N="../src/liborcus/odf_helper.cpp"/>
+++ <F N="../src/liborcus/odf_helper.hpp"/>
+++ <F N="../src/liborcus/odf_helper_test.cpp"/>
++ <F N="../src/liborcus/odf_namespace_types.cpp"/>
++ <F N="../src/liborcus/odf_namespace_types.hpp"/>
++- <F N="../src/liborcus/odf_namespace_types.hpp"/>
++- <F N="../src/liborcus/odf_namespace_types_cpp.inl"/>
++ <F N="../src/liborcus/odf_namespace_types_cpp.inl"/>
++ <F N="../src/liborcus/odf_namespace_types_hpp.inl"/>
++- <F N="../src/liborcus/odf_namespace_types_hpp.inl"/>
++- <F N="../src/liborcus/odf_para_context.cpp"/>
++ <F N="../src/liborcus/odf_para_context.cpp"/>
++ <F N="../src/liborcus/odf_para_context.hpp"/>
++- <F N="../src/liborcus/odf_para_context.hpp"/>
++ <F N="../src/liborcus/odf_styles.cpp"/>
++- <F N="../src/liborcus/odf_styles.cpp"/>
++- <F N="../src/liborcus/odf_styles.hpp"/>
++ <F N="../src/liborcus/odf_styles.hpp"/>
++ <F N="../src/liborcus/odf_styles_context.cpp"/>
++- <F N="../src/liborcus/odf_styles_context.cpp"/>
++- <F N="../src/liborcus/odf_styles_context.hpp"/>
++ <F N="../src/liborcus/odf_styles_context.hpp"/>
++- <F N="../src/liborcus/odf_token_constants.hpp"/>
+++ <F N="../src/liborcus/odf_styles_context_test.cpp"/>
++ <F N="../src/liborcus/odf_token_constants.hpp"/>
++ <F N="../src/liborcus/odf_token_constants.inl"/>
++- <F N="../src/liborcus/odf_token_constants.inl"/>
++- <F N="../src/liborcus/odf_tokens.cpp"/>
++ <F N="../src/liborcus/odf_tokens.cpp"/>
++ <F N="../src/liborcus/odf_tokens.hpp"/>
++- <F N="../src/liborcus/odf_tokens.hpp"/>
++- <F N="../src/liborcus/odf_tokens.inl"/>
++ <F N="../src/liborcus/odf_tokens.inl"/>
++ <F N="../src/liborcus/ods_content_xml_context.cpp"/>
++- <F N="../src/liborcus/ods_content_xml_context.cpp"/>
++ <F N="../src/liborcus/ods_content_xml_context.hpp"/>
++- <F N="../src/liborcus/ods_content_xml_context.hpp"/>
++- <F N="../src/liborcus/ods_content_xml_handler.cpp"/>
++ <F N="../src/liborcus/ods_content_xml_handler.cpp"/>
++ <F N="../src/liborcus/ods_content_xml_handler.hpp"/>
++- <F N="../src/liborcus/ods_content_xml_handler.hpp"/>
++- <F N="../src/liborcus/ods_session_data.cpp"/>
++ <F N="../src/liborcus/ods_session_data.cpp"/>
++ <F N="../src/liborcus/ods_session_data.hpp"/>
++- <F N="../src/liborcus/ods_session_data.hpp"/>
++ <F N="../src/liborcus/ooxml_content_types.cpp"/>
++- <F N="../src/liborcus/ooxml_content_types.cpp"/>
++- <F N="../src/liborcus/ooxml_content_types.hpp"/>
++ <F N="../src/liborcus/ooxml_content_types.hpp"/>
++ <F N="../src/liborcus/ooxml_global.cpp"/>
++- <F N="../src/liborcus/ooxml_global.cpp"/>
++- <F N="../src/liborcus/ooxml_global.hpp"/>
++ <F N="../src/liborcus/ooxml_global.hpp"/>
++ <F N="../src/liborcus/ooxml_namespace_types.cpp"/>
++- <F N="../src/liborcus/ooxml_namespace_types.cpp"/>
++ <F N="../src/liborcus/ooxml_namespace_types.hpp"/>
++- <F N="../src/liborcus/ooxml_namespace_types.hpp"/>
++- <F N="../src/liborcus/ooxml_schemas.cpp"/>
++ <F N="../src/liborcus/ooxml_schemas.cpp"/>
++ <F N="../src/liborcus/ooxml_schemas.hpp"/>
++- <F N="../src/liborcus/ooxml_schemas.hpp"/>
++- <F N="../src/liborcus/ooxml_token_constants.hpp"/>
++ <F N="../src/liborcus/ooxml_token_constants.hpp"/>
++ <F N="../src/liborcus/ooxml_token_constants.inl"/>
++- <F N="../src/liborcus/ooxml_token_constants.inl"/>
++ <F N="../src/liborcus/ooxml_tokens.cpp"/>
++- <F N="../src/liborcus/ooxml_tokens.cpp"/>
++- <F N="../src/liborcus/ooxml_tokens.hpp"/>
++ <F N="../src/liborcus/ooxml_tokens.hpp"/>
++ <F N="../src/liborcus/ooxml_tokens.inl"/>
++- <F N="../src/liborcus/ooxml_tokens.inl"/>
++- <F N="../src/liborcus/ooxml_types.cpp"/>
++ <F N="../src/liborcus/ooxml_types.cpp"/>
++ <F N="../src/liborcus/ooxml_types.hpp"/>
++- <F N="../src/liborcus/ooxml_types.hpp"/>
++ <F N="../src/liborcus/opc_context.cpp"/>
++- <F N="../src/liborcus/opc_context.cpp"/>
++- <F N="../src/liborcus/opc_context.hpp"/>
++ <F N="../src/liborcus/opc_context.hpp"/>
++ <F N="../src/liborcus/opc_reader.cpp"/>
++- <F N="../src/liborcus/opc_reader.cpp"/>
++- <F N="../src/liborcus/opc_reader.hpp"/>
++ <F N="../src/liborcus/opc_reader.hpp"/>
++ <F N="../src/liborcus/opc_token_constants.hpp"/>
++- <F N="../src/liborcus/opc_token_constants.hpp"/>
++ <F N="../src/liborcus/opc_token_constants.inl"/>
++- <F N="../src/liborcus/opc_token_constants.inl"/>
++- <F N="../src/liborcus/opc_tokens.inl"/>
++ <F N="../src/liborcus/opc_tokens.inl"/>
++ <F N="../src/liborcus/orcus_csv.cpp"/>
++- <F N="../src/liborcus/orcus_csv.cpp"/>
++- <F N="../src/liborcus/orcus_gnumeric.cpp"/>
++ <F N="../src/liborcus/orcus_gnumeric.cpp"/>
++- <F N="../src/liborcus/orcus_import_xlsx.cpp"/>
+++ <F N="../src/liborcus/orcus_import_ods.cpp"/>
++ <F N="../src/liborcus/orcus_import_xlsx.cpp"/>
++ <F N="../src/liborcus/orcus_ods.cpp"/>
++- <F N="../src/liborcus/orcus_ods.cpp"/>
++- <F N="../src/liborcus/orcus_xls_xml.cpp"/>
++ <F N="../src/liborcus/orcus_xls_xml.cpp"/>
++ <F N="../src/liborcus/orcus_xlsx.cpp"/>
++- <F N="../src/liborcus/orcus_xlsx.cpp"/>
++- <F N="../src/liborcus/orcus_xml.cpp"/>
++ <F N="../src/liborcus/orcus_xml.cpp"/>
++ <F N="../src/liborcus/session_context.cpp"/>
++- <F N="../src/liborcus/session_context.cpp"/>
++ <F N="../src/liborcus/session_context.hpp"/>
++- <F N="../src/liborcus/session_context.hpp"/>
++- <F N="../src/liborcus/spreadsheet_interface.cpp"/>
++ <F N="../src/liborcus/spreadsheet_interface.cpp"/>
++ <F N="../src/liborcus/spreadsheet_types.cpp"/>
++- <F N="../src/liborcus/spreadsheet_types.cpp"/>
++- <F N="../src/liborcus/xls_xml_context.cpp"/>
+++ <F N="../src/liborcus/string_helper.cpp"/>
+++ <F N="../src/liborcus/string_helper.hpp"/>
++ <F N="../src/liborcus/xls_xml_context.cpp"/>
++ <F N="../src/liborcus/xls_xml_context.hpp"/>
++- <F N="../src/liborcus/xls_xml_context.hpp"/>
++ <F N="../src/liborcus/xls_xml_detection_handler.cpp"/>
++- <F N="../src/liborcus/xls_xml_detection_handler.cpp"/>
++- <F N="../src/liborcus/xls_xml_detection_handler.hpp"/>
++ <F N="../src/liborcus/xls_xml_detection_handler.hpp"/>
++ <F N="../src/liborcus/xls_xml_handler.cpp"/>
++- <F N="../src/liborcus/xls_xml_handler.cpp"/>
++- <F N="../src/liborcus/xls_xml_handler.hpp"/>
++ <F N="../src/liborcus/xls_xml_handler.hpp"/>
++ <F N="../src/liborcus/xls_xml_namespace_types.cpp"/>
++- <F N="../src/liborcus/xls_xml_namespace_types.cpp"/>
++ <F N="../src/liborcus/xls_xml_namespace_types.hpp"/>
++- <F N="../src/liborcus/xls_xml_namespace_types.hpp"/>
++- <F N="../src/liborcus/xls_xml_token_constants.hpp"/>
++ <F N="../src/liborcus/xls_xml_token_constants.hpp"/>
++ <F N="../src/liborcus/xls_xml_token_constants.inl"/>
++- <F N="../src/liborcus/xls_xml_token_constants.inl"/>
++- <F N="../src/liborcus/xls_xml_tokens.cpp"/>
++ <F N="../src/liborcus/xls_xml_tokens.cpp"/>
++ <F N="../src/liborcus/xls_xml_tokens.hpp"/>
++- <F N="../src/liborcus/xls_xml_tokens.hpp"/>
++ <F N="../src/liborcus/xls_xml_tokens.inl"/>
++- <F N="../src/liborcus/xls_xml_tokens.inl"/>
++- <F N="../src/liborcus/xlsx_autofilter_context.cpp"/>
++ <F N="../src/liborcus/xlsx_autofilter_context.cpp"/>
++ <F N="../src/liborcus/xlsx_autofilter_context.hpp"/>
++- <F N="../src/liborcus/xlsx_autofilter_context.hpp"/>
++ <F N="../src/liborcus/xlsx_conditional_format_context.cpp"/>
++ <F N="../src/liborcus/xlsx_conditional_format_context.hpp"/>
++ <F N="../src/liborcus/xlsx_context.cpp"/>
++- <F N="../src/liborcus/xlsx_context.cpp"/>
++- <F N="../src/liborcus/xlsx_context.hpp"/>
++ <F N="../src/liborcus/xlsx_context.hpp"/>
++ <F N="../src/liborcus/xlsx_handler.cpp"/>
++- <F N="../src/liborcus/xlsx_handler.cpp"/>
++- <F N="../src/liborcus/xlsx_handler.hpp"/>
++ <F N="../src/liborcus/xlsx_handler.hpp"/>
++ <F N="../src/liborcus/xlsx_helper.cpp"/>
++ <F N="../src/liborcus/xlsx_helper.hpp"/>
++ <F N="../src/liborcus/xlsx_pivot_context.cpp"/>
++- <F N="../src/liborcus/xlsx_pivot_context.cpp"/>
++- <F N="../src/liborcus/xlsx_pivot_context.hpp"/>
++ <F N="../src/liborcus/xlsx_pivot_context.hpp"/>
++ <F N="../src/liborcus/xlsx_revision_context.cpp"/>
++- <F N="../src/liborcus/xlsx_revision_context.cpp"/>
++ <F N="../src/liborcus/xlsx_revision_context.hpp"/>
++- <F N="../src/liborcus/xlsx_revision_context.hpp"/>
++- <F N="../src/liborcus/xlsx_session_data.cpp"/>
++ <F N="../src/liborcus/xlsx_session_data.cpp"/>
++ <F N="../src/liborcus/xlsx_session_data.hpp"/>
++- <F N="../src/liborcus/xlsx_session_data.hpp"/>
++- <F N="../src/liborcus/xlsx_sheet_context.cpp"/>
++ <F N="../src/liborcus/xlsx_sheet_context.cpp"/>
++ <F N="../src/liborcus/xlsx_sheet_context.hpp"/>
++- <F N="../src/liborcus/xlsx_sheet_context.hpp"/>
++ <F N="../src/liborcus/xlsx_sheet_context_test.cpp"/>
++- <F N="../src/liborcus/xlsx_sheet_context_test.cpp"/>
++- <F N="../src/liborcus/xlsx_table_context.cpp"/>
++ <F N="../src/liborcus/xlsx_table_context.cpp"/>
++ <F N="../src/liborcus/xlsx_table_context.hpp"/>
++- <F N="../src/liborcus/xlsx_table_context.hpp"/>
++- <F N="../src/liborcus/xlsx_types.cpp"/>
++ <F N="../src/liborcus/xlsx_types.cpp"/>
++ <F N="../src/liborcus/xlsx_types.hpp"/>
++- <F N="../src/liborcus/xlsx_types.hpp"/>
++ <F N="../src/liborcus/xlsx_workbook_context.cpp"/>
++- <F N="../src/liborcus/xlsx_workbook_context.cpp"/>
++- <F N="../src/liborcus/xlsx_workbook_context.hpp"/>
++ <F N="../src/liborcus/xlsx_workbook_context.hpp"/>
++ <F N="../src/liborcus/xml_context_base.cpp"/>
++- <F N="../src/liborcus/xml_context_base.cpp"/>
++- <F N="../src/liborcus/xml_context_base.hpp"/>
++ <F N="../src/liborcus/xml_context_base.hpp"/>
++ <F N="../src/liborcus/xml_context_global.cpp"/>
++- <F N="../src/liborcus/xml_context_global.cpp"/>
++ <F N="../src/liborcus/xml_context_global.hpp"/>
++- <F N="../src/liborcus/xml_context_global.hpp"/>
++- <F N="../src/liborcus/xml_map_tree.cpp"/>
++ <F N="../src/liborcus/xml_map_tree.cpp"/>
++ <F N="../src/liborcus/xml_map_tree.hpp"/>
++- <F N="../src/liborcus/xml_map_tree.hpp"/>
++- <F N="../src/liborcus/xml_map_tree_test.cpp"/>
++ <F N="../src/liborcus/xml_map_tree_test.cpp"/>
++ <F N="../src/liborcus/xml_simple_stream_handler.cpp"/>
++- <F N="../src/liborcus/xml_simple_stream_handler.cpp"/>
++ <F N="../src/liborcus/xml_simple_stream_handler.hpp"/>
++- <F N="../src/liborcus/xml_simple_stream_handler.hpp"/>
++- <F N="../src/liborcus/xml_stream_handler.cpp"/>
++ <F N="../src/liborcus/xml_stream_handler.cpp"/>
++ <F N="../src/liborcus/xml_stream_handler.hpp"/>
++- <F N="../src/liborcus/xml_stream_handler.hpp"/>
++- <F N="../src/liborcus/xml_stream_parser.cpp"/>
++ <F N="../src/liborcus/xml_stream_parser.cpp"/>
++ <F N="../src/liborcus/xml_stream_parser.hpp"/>
++- <F N="../src/liborcus/xml_stream_parser.hpp"/>
++ <F N="../src/liborcus/xml_structure_tree.cpp"/>
++- <F N="../src/liborcus/xml_structure_tree.cpp"/>
++- <F N="../src/liborcus/xml_structure_tree_test.cpp"/>
++ <F N="../src/liborcus/xml_structure_tree_test.cpp"/>
++ <F N="../src/liborcus/yaml_document_tree.cpp"/>
++ <F N="../src/liborcus/yaml_document_tree_test.cpp"/>
++ </Folder>
++ <Folder Name="mso">
++ <F N="../src/mso/encryption_info.cpp"/>
++- <F N="../src/mso/encryption_info.cpp"/>
++ </Folder>
++ <Folder Name="parser">
++ <F N="../src/parser/base64.cpp"/>
++- <F N="../src/parser/base64.cpp"/>
++- <F N="../src/parser/base64_test.cpp"/>
++ <F N="../src/parser/base64_test.cpp"/>
++ <F N="../src/parser/cell_buffer.cpp"/>
++- <F N="../src/parser/cell_buffer.cpp"/>
++- <F N="../src/parser/css_parser_base.cpp"/>
++ <F N="../src/parser/css_parser_base.cpp"/>
++ <F N="../src/parser/css_types.cpp"/>
++ <F N="../src/parser/csv_parser_base.cpp"/>
++@@ -565,6 +425,7 @@
++ <F N="../src/parser/yaml_parser_base.cpp"/>
++ <F N="../src/parser/zip_archive.cpp"/>
++ <F N="../src/parser/zip_archive_stream.cpp"/>
+++ <F N="../src/parser/zip_archive_test.cpp"/>
++ </Folder>
++ <Folder Name="python">
++ <F N="../src/python/json.cpp"/>
++@@ -597,7 +458,6 @@
++ <F N="../src/orcus_json_main.cpp"/>
++ <F N="../src/orcus_mso_encryption.cpp"/>
++ <F N="../src/orcus_ods_main.cpp"/>
++- <F N="../src/orcus_test_common.cpp"/>
++ <F N="../src/orcus_test_csv.cpp"/>
++ <F N="../src/orcus_test_ods.cpp"/>
++ <F N="../src/orcus_test_xls_xml.cpp"/>
++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<dom_tree_impl>(cxt)) {}
+++ mp_impl(orcus::make_unique<dom_tree_impl>(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<element>(ns, name_safe));
+++ p->child_nodes.push_back(orcus::make_unique<element>(ns, name_safe));
++ p = static_cast<element*>(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<content>(val2));
+++ p->child_nodes.push_back(orcus::make_unique<content>(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<sax::doctype_declaration>(dtd); // make a copy.
+++ mp_impl->m_doctype = orcus::make_unique<sax::doctype_declaration>(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<scope>(string(), mp_impl->m_root));
+++ scopes.push_back(orcus::make_unique<scope>(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<scope>(elem_name.str()));
+++ scopes.push_back(orcus::make_unique<scope>(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_array>());
+++ json_value* jv = push_value(orcus::make_unique<json_value_array>());
++ assert(jv && jv->type == node_t::array);
++ m_stack.push_back(parser_stack(jv));
++ }
++ else
++ {
++- m_root = make_unique<json_value_array>();
+++ m_root = orcus::make_unique<json_value_array>();
++ 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_object>());
+++ json_value* jv = push_value(orcus::make_unique<json_value_object>());
++ assert(jv && jv->type == node_t::object);
++ m_stack.push_back(parser_stack(jv));
++ }
++ else
++ {
++- m_root = make_unique<json_value_object>();
+++ m_root = orcus::make_unique<json_value_object>();
++ m_stack.push_back(parser_stack(m_root.get()));
++ }
++ }
++@@ -504,17 +503,17 @@ public:
++
++ void boolean_true()
++ {
++- push_value(make_unique<json_value>(node_t::boolean_true));
+++ push_value(orcus::make_unique<json_value>(node_t::boolean_true));
++ }
++
++ void boolean_false()
++ {
++- push_value(make_unique<json_value>(node_t::boolean_false));
+++ push_value(orcus::make_unique<json_value>(node_t::boolean_false));
++ }
++
++ void null()
++ {
++- push_value(make_unique<json_value>(node_t::null));
+++ push_value(orcus::make_unique<json_value>(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<json_value_string>(s));
+++ push_value(orcus::make_unique<json_value_string>(s));
++ }
++
++ void number(double val)
++ {
++- push_value(make_unique<json_value_number>(val));
+++ push_value(orcus::make_unique<json_value_number>(val));
++ }
++
++ void swap(std::unique_ptr<json_value>& 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<impl>(jv)) {}
++-node::node(const node& other) : mp_impl(make_unique<impl>(other.mp_impl->m_node)) {}
+++node::node(const json_value* jv) : mp_impl(orcus::make_unique<impl>(jv)) {}
+++node::node(const node& other) : mp_impl(orcus::make_unique<impl>(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<string_pool> m_own_pool;
++ string_pool& m_pool;
++
++- impl() : m_own_pool(make_unique<string_pool>()), m_pool(*m_own_pool) {}
+++ impl() : m_own_pool(orcus::make_unique<string_pool>()), m_pool(*m_own_pool) {}
++ impl(string_pool& pool) : m_pool(pool) {}
++ };
++
++-json_document_tree::json_document_tree() : mp_impl(make_unique<impl>()) {}
++-json_document_tree::json_document_tree(string_pool& pool) : mp_impl(make_unique<impl>(pool)) {}
+++json_document_tree::json_document_tree() : mp_impl(orcus::make_unique<impl>()) {}
+++json_document_tree::json_document_tree(string_pool& pool) : mp_impl(orcus::make_unique<impl>(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<json_document_tree> get_doc_tree(const char* filepath)
++ cout << "--- original" << endl;
++ cout << strm << endl;
++
++- auto doc = make_unique<json_document_tree>();
+++ auto doc = orcus::make_unique<json_document_tree>();
++ 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<ods_session_data&>(*get_session_context().mp_data);
++ ods_data.m_formulas.push_back(
++- make_unique<ods_session_data::formula>(
+++ orcus::make_unique<ods_session_data::formula>(
++ 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<const char*>(&buffer[0]), buffer.size());
++
++- auto handler = make_unique<xml_simple_stream_handler>(
+++ auto handler = orcus::make_unique<xml_simple_stream_handler>(
++ 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<gnumeric_content_xml_handler>(
+++ auto handler = orcus::make_unique<gnumeric_content_xml_handler>(
++ 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<styles_context>(cxt, odf_tokens, styles_map, styles);
+++ auto context = orcus::make_unique<styles_context>(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<xlsx_table_xml_handler>(cxt, ooxml_tokens, *table);
+++ auto handler = orcus::make_unique<xlsx_table_xml_handler>(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<xls_xml_handler>(
+++ auto handler = orcus::make_unique<xls_xml_handler>(
++ 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<xml_simple_stream_handler>(
+++ auto handler = orcus::make_unique<xml_simple_stream_handler>(
++ 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<const char*>(&buffer[0]), buffer.size());
++
++- auto handler = make_unique<xlsx_sheet_xml_handler>(
+++ auto handler = orcus::make_unique<xlsx_sheet_xml_handler>(
++ 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<const char*>(&buffer[0]), buffer.size());
++
++- auto handler = make_unique<xml_simple_stream_handler>(
+++ auto handler = orcus::make_unique<xml_simple_stream_handler>(
++ 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<const char*>(&buffer[0]), buffer.size());
++
++- auto handler = make_unique<xml_simple_stream_handler>(
+++ auto handler = orcus::make_unique<xml_simple_stream_handler>(
++ 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<xlsx_table_xml_handler>(mp_impl->m_cxt, ooxml_tokens, *table);
+++ auto handler = orcus::make_unique<xlsx_table_xml_handler>(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<xlsx_pivot_cache_def_xml_handler>(mp_impl->m_cxt, ooxml_tokens);
+++ auto handler = orcus::make_unique<xlsx_pivot_cache_def_xml_handler>(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<xlsx_pivot_cache_rec_xml_handler>(mp_impl->m_cxt, ooxml_tokens);
+++ auto handler = orcus::make_unique<xlsx_pivot_cache_rec_xml_handler>(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<xlsx_pivot_table_xml_handler>(mp_impl->m_cxt, ooxml_tokens);
+++ auto handler = orcus::make_unique<xlsx_pivot_table_xml_handler>(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<const char*>(&buffer[0]), buffer.size());
++
++- auto handler = make_unique<xml_simple_stream_handler>(
+++ auto handler = orcus::make_unique<xml_simple_stream_handler>(
++ 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<const char*>(&buffer[0]), buffer.size());
++
++- auto handler = make_unique<xml_simple_stream_handler>(
+++ auto handler = orcus::make_unique<xml_simple_stream_handler>(
++ 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<scope>(root)); // root element
+++ scopes.push_back(orcus::make_unique<scope>(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<scope>(child_elem));
+++ scopes.push_back(orcus::make_unique<scope>(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<xlsx_session_data::shared_formula>(
+++ orcus::make_unique<xlsx_session_data::shared_formula>(
++ 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<xlsx_session_data::formula>(
+++ orcus::make_unique<xlsx_session_data::formula>(
++ 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<xlsx_session_data::formula>(
+++ orcus::make_unique<xlsx_session_data::formula>(
++ 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<xlsx_session_data::shared_formula>(
+++ orcus::make_unique<xlsx_session_data::shared_formula>(
++ 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<element>(
+++ orcus::make_unique<element>(
++ 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<attribute>(
+++ orcus::make_unique<attribute>(
++ 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<element>(
+++ orcus::make_unique<element>(
++ 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<scope>(entity_name(), false, ref));
+++ scopes.push_back(orcus::make_unique<scope>(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<scope>(this_elem.name, this_elem.prop->repeat));
+++ scopes.push_back(orcus::make_unique<scope>(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_sequence>());
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value_sequence>());
++ assert(yv && yv->type == node_t::sequence);
++ m_stack.push_back(parser_stack(yv));
++ }
++ else
++ {
++- m_root = make_unique<yaml_value_sequence>();
+++ m_root = orcus::make_unique<yaml_value_sequence>();
++ 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_map>());
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value_map>());
++ assert(yv && yv->type == node_t::map);
++ m_stack.push_back(parser_stack(yv));
++ }
++ else
++ {
++- m_root = make_unique<yaml_value_map>();
+++ m_root = orcus::make_unique<yaml_value_map>();
++ m_stack.push_back(parser_stack(m_root.get()));
++ }
++ }
++@@ -319,11 +319,11 @@ public:
++
++ if (m_root)
++ {
++- yaml_value* yv = push_value(make_unique<yaml_value_string>(p, n));
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value_string>(p, n));
++ assert(yv && yv->type == node_t::string);
++ }
++ else
++- m_root = make_unique<yaml_value_string>(p, n);
+++ m_root = orcus::make_unique<yaml_value_string>(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<yaml_value_number>(val));
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value_number>(val));
++ assert(yv && yv->type == node_t::number);
++ }
++ else
++- m_root = make_unique<yaml_value_number>(val);
+++ m_root = orcus::make_unique<yaml_value_number>(val);
++ }
++
++ void boolean_true()
++@@ -343,11 +343,11 @@ public:
++ assert(m_in_document);
++ if (m_root)
++ {
++- yaml_value* yv = push_value(make_unique<yaml_value>(node_t::boolean_true));
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value>(node_t::boolean_true));
++ assert(yv && yv->type == node_t::boolean_true);
++ }
++ else
++- m_root = make_unique<yaml_value>(node_t::boolean_true);
+++ m_root = orcus::make_unique<yaml_value>(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<yaml_value>(node_t::boolean_false));
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value>(node_t::boolean_false));
++ assert(yv && yv->type == node_t::boolean_false);
++ }
++ else
++- m_root = make_unique<yaml_value>(node_t::boolean_false);
+++ m_root = orcus::make_unique<yaml_value>(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<yaml_value>(node_t::null));
+++ yaml_value* yv = push_value(orcus::make_unique<yaml_value>(node_t::null));
++ assert(yv && yv->type == node_t::null);
++ }
++ else
++- m_root = make_unique<yaml_value>(node_t::null);
+++ m_root = orcus::make_unique<yaml_value>(node_t::null);
++ }
++
++ void swap(std::vector<document_root_type>& 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<impl>(yv)) {}
++-node::node(const node& other) : mp_impl(make_unique<impl>(other.mp_impl->m_node)) {}
+++node::node(const yaml_value* yv) : mp_impl(orcus::make_unique<impl>(yv)) {}
+++node::node(const node& other) : mp_impl(orcus::make_unique<impl>(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<impl>()) {}
+++yaml_document_tree::yaml_document_tree() : mp_impl(orcus::make_unique<impl>()) {}
++ 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<sax_ns_parser_attribute> 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<json_config> parse_json_args(int argc, char** argv)
++ return nullptr;
++ }
++
++- std::unique_ptr<json_config> config = make_unique<json_config>();
+++ std::unique_ptr<json_config> config = orcus::make_unique<json_config>();
++
++ if (vm.count("input"))
++ config->input_path = vm["input"].as<string>();
++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<json_document_tree> load_doc(const std::string& strm, const json_config& config)
++ {
++- std::unique_ptr<json_document_tree> doc(make_unique<json_document_tree>());
+++ std::unique_ptr<json_document_tree> doc(orcus::make_unique<json_document_tree>());
++ 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<yaml_config> parse_yaml_args(int argc, char** argv)
++ return nullptr;
++ }
++
++- std::unique_ptr<yaml_config> config = make_unique<yaml_config>();
+++ std::unique_ptr<yaml_config> config = orcus::make_unique<yaml_config>();
++
++ if (vm.count("input"))
++ config->input_path = vm["input"].as<string>();
++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<impl>()) {}
+++ ::orcus::parser_base(p, n), mp_impl(orcus::make_unique<impl>()) {}
++
++ 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<impl>()),
+++ mp_impl(orcus::make_unique<impl>()),
++ 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<impl>()) {}
+++string_pool::string_pool() : mp_impl(orcus::make_unique<impl>()) {}
++
++ string_pool::~string_pool()
++ {
++@@ -82,7 +82,7 @@ pair<pstring, bool> 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<string>(str, n));
+++ mp_impl->m_store.push_back(orcus::make_unique<string>(str, n));
++ pair<string_set_type::iterator,bool> 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<size_
++ const size_t parser_base::scope_empty = std::numeric_limits<size_t>::max() - 2;
++
++ parser_base::parser_base(const char* p, size_t n) :
++- ::orcus::parser_base(p, n), mp_impl(make_unique<impl>()) {}
+++ ::orcus::parser_base(p, n), mp_impl(orcus::make_unique<impl>()) {}
++
++ 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<sheet_t>(mp_impl->m_sheets.size());
++
++ mp_impl->m_sheets.push_back(
++- make_unique<sheet_item>(
+++ orcus::make_unique<sheet_item>(
++ *this, sheet_name_safe, sheet_index, row_size, col_size));
++
++ mp_impl->m_context.append_sheet(
++--
++2.4.5
++
+Index: libreoffice-5.1.2.2/external/liborcus/0001-Get-it-to-build-on-Windows.patch
+===================================================================
+--- /dev/null
++++ libreoffice-5.1.2.2/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 <kohei.yoshida at gmail.com>
++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<yaml_value> 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 <cassert>
++ #include <iostream>
++ #include <vector>
+++#include <algorithm>
++
++ 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
++
+Index: libreoffice-5.1.2.2/external/liborcus/ExternalPackage_liborcus.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/external/liborcus/ExternalPackage_liborcus.mk
++++ libreoffice-5.1.2.2/external/liborcus/ExternalPackage_liborcus.mk
+@@ -12,11 +12,11 @@ $(eval $(call gb_ExternalPackage_Externa
+ $(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:
+Index: libreoffice-5.1.2.2/external/liborcus/ExternalProject_liborcus.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/external/liborcus/ExternalProject_liborcus.mk
++++ libreoffice-5.1.2.2/external/liborcus/ExternalProject_liborcus.mk
+@@ -13,6 +13,7 @@ $(eval $(call gb_ExternalProject_use_aut
+
+ $(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_targ
+ , \
+ --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_targ
+ $(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 \
+ ) \
+ )
+
+Index: libreoffice-5.1.2.2/external/liborcus/Library_orcus-parser.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/external/liborcus/Library_orcus-parser.mk
++++ libreoffice-5.1.2.2/external/liborcus/Library_orcus-parser.mk
+@@ -39,6 +39,8 @@ $(eval $(call gb_Library_add_generated_e
+ 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_e
+ 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 \
+ ))
+Index: libreoffice-5.1.2.2/external/liborcus/Library_orcus.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/external/liborcus/Library_orcus.mk
++++ libreoffice-5.1.2.2/external/liborcus/Library_orcus.mk
+@@ -13,6 +13,7 @@ $(eval $(call gb_Library_use_unpacked,or
+
+ $(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_e
+ 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_e
+ 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_e
+ 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:
+Index: libreoffice-5.1.2.2/external/liborcus/UnpackedTarball_liborcus.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/external/liborcus/UnpackedTarball_liborcus.mk
++++ libreoffice-5.1.2.2/external/liborcus/UnpackedTarball_liborcus.mk
+@@ -16,8 +16,15 @@ $(eval $(call gb_UnpackedTarball_set_pat
+ $(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:
+Index: libreoffice-5.1.2.2/external/liborcus/fix-crash-ooo55043-1.patch.0
+===================================================================
+--- libreoffice-5.1.2.2.orig/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.");
+-
+Index: libreoffice-5.1.2.2/external/liborcus/unusedheader.patch.0
+===================================================================
+--- libreoffice-5.1.2.2.orig/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 <iostream>
+- #include <vector>
+-
+--#include <boost/thread/mutex.hpp>
+--
+- using namespace std;
+-
+- namespace orcus {
+Index: libreoffice-5.1.2.2/external/liborcus/windows-constants-hack.patch
+===================================================================
+--- /dev/null
++++ libreoffice-5.1.2.2/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 {
++
+Index: libreoffice-5.1.2.2/sc/Library_scfilt.mk
+===================================================================
+--- libreoffice-5.1.2.2.orig/sc/Library_scfilt.mk
++++ libreoffice-5.1.2.2/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 \
+Index: libreoffice-5.1.2.2/sc/source/filter/inc/orcusinterface.hxx
+===================================================================
+--- libreoffice-5.1.2.2.orig/sc/source/filter/inc/orcusinterface.hxx
++++ libreoffice-5.1.2.2/sc/source/filter/inc/orcusinterface.hxx
+@@ -381,6 +381,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,
+@@ -431,6 +432,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;
+ };
+
+Index: libreoffice-5.1.2.2/sc/source/filter/orcus/filterdetect.cxx
+===================================================================
+--- libreoffice-5.1.2.2.orig/sc/source/filter/orcus/filterdetect.cxx
++++ libreoffice-5.1.2.2/sc/source/filter/orcus/filterdetect.cxx
+@@ -93,7 +93,7 @@ OUString OrcusFormatDetect::detect(css::
+ }
+
+ orcus::format_t eFormat = orcus::detect(reinterpret_cast<const unsigned char*>(aContent.getStr()), aContent.getLength());
+- if (eFormat == orcus::format_gnumeric)
++ if (eFormat == orcus::format_t::gnumeric)
+ return OUString("Gnumeric XML");
+
+ return OUString();
+Index: libreoffice-5.1.2.2/sc/source/filter/orcus/interface.cxx
+===================================================================
+--- libreoffice-5.1.2.2.orig/sc/source/filter/orcus/interface.cxx
++++ libreoffice-5.1.2.2/sc/source/filter/orcus/interface.cxx
+@@ -55,7 +55,7 @@ void ScOrcusGlobalSettings::set_default_
+
+ 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,
+ {
+ 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(
+ {
+ 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 getCalc
+ 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_d
+ {
+ 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:
+@@ -948,15 +948,15 @@ void ScOrcusStyles::set_font_underline(o
+ {
+ 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;
+ }
+@@ -1020,6 +1020,12 @@ void ScOrcusStyles::set_border_style(orc
+ // 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,
+@@ -1187,6 +1193,11 @@ void ScOrcusStyles::set_cell_style_built
+ 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);
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/libreoffice.git/commitdiff/ff5c65178585c673048fde7e5a95e5bdacd7d546
More information about the pld-cvs-commit
mailing list