Decomposition can omit language specific characters now

This commit is contained in:
Simon Rozman 2016-04-11 13:28:19 +02:00
parent b7f3305019
commit f735bd5bee
4 changed files with 26 additions and 5 deletions

View File

@ -44,7 +44,12 @@
/// ///
/// Database IDs /// Database IDs
/// ///
#define ZRCOLA_DB_ID (*(ZRCola::recordid_t*)"ZRC") #define ZRCOLA_DB_ID (*(ZRCola::recordid_t*)"ZRC")
///
/// Unknown language ID
///
#define ZRCOLA_LANG_VOID " "
namespace ZRCola { namespace ZRCola {

View File

@ -20,6 +20,7 @@
#pragma once #pragma once
#include "common.h" #include "common.h"
#include "language.h"
#include <stdex/idrec.h> #include <stdex/idrec.h>
#include <istream> #include <istream>
@ -216,7 +217,22 @@ namespace ZRCola {
/// \param[out] output Output string (UTF-16) /// \param[out] output Output string (UTF-16)
/// \param[out] map The vector of source to destination index mappings (optional) /// \param[out] map The vector of source to destination index mappings (optional)
/// ///
void Decompose(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map = NULL) const; inline void Decompose(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map = NULL) const
{
Decompose(input, inputMax, NULL, ZRCOLA_LANG_VOID, output, map);
}
///
/// Decomposes string according ommiting language specific characters
///
/// \param[in] input Input string (UTF-16)
/// \param[in] inputMax Length of the input string in characters. Can be (size_t)-1 if \p input is zero terminated.
/// \param[in] lc_db Language character database
/// \param[in] lang Language ID
/// \param[out] output Output string (UTF-16)
/// \param[out] map The vector of source to destination index mappings (optional)
///
void Decompose(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _In_opt_ const langchar_db *lc_db, _In_opt_ langid_t lang, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map = NULL) const;
}; };

View File

@ -20,6 +20,6 @@
#include "stdafx.h" #include "stdafx.h"
void ZRCOLA_API ZRCola::Normalize(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map) void ZRCola::Normalize(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map)
{ {
} }

View File

@ -102,7 +102,7 @@ void ZRCola::translation_db::Compose(_In_z_count_(inputMax) const wchar_t* input
} }
void ZRCOLA_API ZRCola::translation_db::Decompose(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map) const void ZRCola::translation_db::Decompose(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _In_ const langchar_db *lc_db, _In_ langid_t lang, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map) const
{ {
assert(input || inputMax == 0); assert(input || inputMax == 0);
@ -131,7 +131,7 @@ void ZRCOLA_API ZRCola::translation_db::Decompose(_In_z_count_(inputMax) const w
else if (decompSrc < c) l = m + 1; else if (decompSrc < c) l = m + 1;
else { else {
// Character found. // Character found.
if (trans.str_len && trans.str[0] != L'#') { if (trans.str_len && trans.str[0] != L'#' && (!lc_db || !lc_db->IsLocalCharacter(c, lang))) {
// Append decomposed sequence. // Append decomposed sequence.
output.append(trans.str, trans.str_len); output.append(trans.str, trans.str_len);
i++; i++;