allow disabling liblangtag for internal libetonyek

Change-Id: I3a649f3460759cbcd290cef2e90398b2868983a9
This commit is contained in:
Caolán McNamara 2017-02-21 11:24:02 +00:00
parent 45fd903d5e
commit dceb440f6f
3 changed files with 132 additions and 3 deletions

View file

@ -11581,10 +11581,8 @@ if test "$enable_liblangtag" = "yes" -o "$enable_liblangtag" = ""; then
fi
AC_DEFINE(ENABLE_LIBLANGTAG)
else
if test "x$SYSTEM_ETONYEK" = "x"; then
AC_MSG_ERROR([internal libetonyek requires liblangtag])
fi
AC_MSG_RESULT([no])
LIBLANGTAG_CFLAGS="-DDISABLE_LIBLANGTAG"
fi
AC_SUBST(ENABLE_LIBLANGTAG)
AC_SUBST(SYSTEM_LIBLANGTAG)

View file

@ -24,6 +24,7 @@ ifneq ($(OS),MACOSX)
ifneq ($(OS),WNT)
$(eval $(call gb_UnpackedTarball_add_patches,libetonyek,\
external/libetonyek/libetonyek-bundled-soname.patch.0 \
external/libetonyek/libetonyek-support-disable-liblangtag.patch.0 \
))
endif
endif

View file

@ -0,0 +1,130 @@
--- src/lib/IWORKLanguageManager.cpp.orig 2017-02-21 10:28:39.646017140 +0000
+++ src/lib/IWORKLanguageManager.cpp 2017-02-21 10:29:26.601817549 +0000
@@ -12,7 +12,9 @@
#include <cstdlib>
#include <stdexcept>
+#if !defined(DISABLE_LIBLANGTAG)
#include <liblangtag/langtag.h>
+#endif
#include "libetonyek_utils.h"
@@ -27,6 +29,7 @@
using std::string;
+#if !defined(DISABLE_LIBLANGTAG)
namespace
{
@@ -56,6 +59,7 @@
}
}
+#endif
struct IWORKLanguageManager::LangDB
{
@@ -67,6 +71,7 @@
IWORKLanguageManager::LangDB::LangDB()
: m_db()
{
+#if !defined(DISABLE_LIBLANGTAG)
shared_ptr<lt_lang_db_t> langDB(lt_db_get_lang(), lt_lang_db_unref);
shared_ptr<lt_iter_t> it(LT_ITER_INIT(langDB.get()), lt_iter_finish);
lt_pointer_t key(0);
@@ -77,6 +82,7 @@
lt_lang_t *const lang = reinterpret_cast<lt_lang_t *>(value);
m_db[lt_lang_get_name(lang)] = tag;
}
+#endif
}
IWORKLanguageManager::IWORKLanguageManager()
@@ -102,6 +108,10 @@
if (invIt != m_invalidTags.end())
return "";
+#if defined(DISABLE_LIBLANGTAG)
+ m_invalidTags.insert(tag);
+ return "";
+#else
const shared_ptr<lt_tag_t> &langTag = parseTag(tag);
if (!langTag)
{
@@ -114,6 +124,7 @@
addProperties(fullTag);
return fullTag;
+#endif
}
const std::string IWORKLanguageManager::addLanguage(const std::string &lang)
@@ -134,6 +145,10 @@
return "";
}
+#if defined(DISABLE_LIBLANGTAG)
+ m_invalidLangs.insert(lang);
+ return "";
+#else
const shared_ptr<lt_tag_t> &langTag = parseTag(langIt->second);
if (!langTag)
throw std::logic_error("cannot parse tag that came from liblangtag language DB");
@@ -143,6 +158,7 @@
addProperties(fullTag);
return fullTag;
+#endif
}
const std::string IWORKLanguageManager::addLocale(const std::string &locale)
@@ -156,6 +172,9 @@
if (invIt != m_invalidLocales.end())
return "";
+#if defined(DISABLE_LIBLANGTAG)
+ return "";
+#else
lt_error_t *error = 0;
const shared_ptr<lt_tag_t> tag(lt_tag_convert_from_locale_string(locale.c_str(), &error), lt_tag_unref);
if ((error && lt_error_is_set(error, LT_ERR_ANY)) || !tag)
@@ -170,14 +189,19 @@
addProperties(fullTag);
return fullTag;
+#endif
}
const std::string IWORKLanguageManager::getLanguage(const std::string &tag) const
{
+#if defined(DISABLE_LIBLANGTAG)
+ return "";
+#else
const shared_ptr<lt_tag_t> &langTag = parseTag(tag);
if (!langTag)
throw std::logic_error("cannot parse tag that has been successfully parsed before");
return lt_lang_get_name(lt_tag_get_language(langTag.get()));
+#endif
}
const IWORKLanguageManager::LangDB &IWORKLanguageManager::getLangDB() const
@@ -189,6 +213,9 @@
void IWORKLanguageManager::addProperties(const std::string &tag)
{
+#if defined(DISABLE_LIBLANGTAG)
+ return;
+#else
const shared_ptr<lt_tag_t> &langTag = parseTag(tag);
if (!langTag)
throw std::logic_error("cannot parse tag that has been successfully parsed before");
@@ -205,6 +232,7 @@
props.insert("fo:script", lt_script_get_tag(script));
m_propsMap[tag] = props;
+#endif
}
void IWORKLanguageManager::writeProperties(const std::string &tag, librevenge::RVNGPropertyList &props) const