/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2013 Intel Corporation
*
* This library is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see .
*
* Authors: Tristan Van Berkom
*/
#include "evolution-data-server-config.h"
#include "e-transliterator-private.h"
/* C++ standard library */
#include
#include
/* system headers */
#ifdef HAVE_CODESET
#include
#endif
#include
/* ICU headers */
#include
using icu::Transliterator;
using icu::UnicodeString;
struct _ETransliterator {
Transliterator *priv;
};
/* Create a Transliterator for the source and target
* language stripts
*/
ETransliterator *
_e_transliterator_cxx_new (const gchar *transliterator_id)
{
UErrorCode status = U_ZERO_ERROR;
ETransliterator *transliterator;
g_return_val_if_fail (transliterator_id != NULL, NULL);
transliterator = g_slice_new (ETransliterator);
transliterator->priv = Transliterator::createInstance (transliterator_id, UTRANS_FORWARD, status);
return transliterator;
}
/* Frees an ETransliterator and it's associated resources
*/
void
_e_transliterator_cxx_free (ETransliterator *transliterator)
{
if (transliterator) {
delete transliterator->priv;
g_slice_free (ETransliterator, transliterator);
}
}
/* Transliterates 'str' and returns the new allocated result
*/
gchar *
_e_transliterator_cxx_transliterate (ETransliterator *transliterator,
const gchar *str)
{
UnicodeString transform;
std::string sourceUTF8;
std::string targetUTF8;
g_return_val_if_fail (transliterator != NULL, NULL);
g_return_val_if_fail (str != NULL, NULL);
sourceUTF8 = str;
transform = icu::UnicodeString::fromUTF8 (sourceUTF8);
transliterator->priv->transliterate (transform);
targetUTF8 = transform.toUTF8String (targetUTF8);
return g_strdup (targetUTF8.c_str());
}