Character group database support added
This commit is contained in:
parent
f2f0b007c4
commit
6e4cd60152
@ -27,6 +27,12 @@ ZRCola::DBSource::DBSource()
|
||||
|
||||
ZRCola::DBSource::~DBSource()
|
||||
{
|
||||
if (m_pCharacterGroup1)
|
||||
m_pCharacterGroup1.Release();
|
||||
|
||||
if (m_comCharacterGroup)
|
||||
m_comCharacterGroup.Release();
|
||||
|
||||
if (m_db)
|
||||
m_db->Close();
|
||||
|
||||
@ -53,6 +59,23 @@ bool ZRCola::DBSource::Open(LPCTSTR filename)
|
||||
// Database open and ready.
|
||||
m_filename = filename;
|
||||
m_locale = _create_locale(LC_ALL, "Slovenian_Slovenia.1250");
|
||||
|
||||
wxASSERT_MSG(!m_comCharacterGroup, wxT("ADO command already created"));
|
||||
|
||||
// Create ADO command(s).
|
||||
wxVERIFY(SUCCEEDED(::CoCreateInstance(CLSID_CADOCommand, NULL, CLSCTX_ALL, IID_IADOCommand, (LPVOID*)&m_comCharacterGroup)));
|
||||
wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_ActiveConnection(ATL::CComVariant(m_db))));
|
||||
wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandType(adCmdText)));
|
||||
wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandText(ATL::CComBSTR(L"SELECT [Znak] FROM [VRS_SkupineZnakov] WHERE [Skupina]=? ORDER BY [Rang] ASC, [Znak] ASC"))));
|
||||
{
|
||||
// Create and add command parameters.
|
||||
ATL::CComPtr<ADOParameters> params;
|
||||
wxVERIFY(SUCCEEDED(m_comCharacterGroup->get_Parameters(¶ms)));
|
||||
wxASSERT_MSG(!m_pCharacterGroup1, wxT("ADO command parameter already created"));
|
||||
wxVERIFY(SUCCEEDED(m_comCharacterGroup->CreateParameter(ATL::CComBSTR(L"@Skupina"), adVarWChar, adParamInput, 50, ATL::CComVariant(DISP_E_PARAMNOTFOUND, VT_ERROR), &m_pCharacterGroup1)));
|
||||
wxVERIFY(SUCCEEDED(params->Append(m_pCharacterGroup1)));
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
_ftprintf(stderr, wxT("%s: error ZCC0011: Could not open database (0x%x).\n"), (LPCTSTR)filename, hr);
|
||||
@ -504,3 +527,92 @@ bool ZRCola::DBSource::GetLanguageCharacter(const ATL::CComPtr<ADORecordset>& rs
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ZRCola::DBSource::SelectCharacterGroups(ATL::CComPtr<ADORecordset>& rs) const
|
||||
{
|
||||
// Create a new recordset.
|
||||
if (rs) rs.Release();
|
||||
wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false);
|
||||
|
||||
// Open it.
|
||||
if (FAILED(rs->Open(ATL::CComVariant(
|
||||
L"SELECT DISTINCT [id], [Skupina], [opis_en], [Rang], [prikazano] "
|
||||
L"FROM [VRS_SkupinaZnakov] "
|
||||
L"ORDER BY [Rang], [opis_en]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText)))
|
||||
{
|
||||
_ftprintf(stderr, wxT("%s: error ZCC0090: Error loading character groups from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str());
|
||||
LogErrors();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ZRCola::DBSource::GetCharacterGroup(const ATL::CComPtr<ADORecordset>& rs, chrgrp& cg) const
|
||||
{
|
||||
wxASSERT_MSG(rs, wxT("recordset is empty"));
|
||||
|
||||
ATL::CComPtr<ADOFields> flds;
|
||||
wxVERIFY(SUCCEEDED(rs->get_Fields(&flds)));
|
||||
std::wstring id;
|
||||
|
||||
{
|
||||
ATL::CComPtr<ADOField> f;
|
||||
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"id"), &f)));
|
||||
wxCHECK(GetValue(f, cg.id), false);
|
||||
}
|
||||
|
||||
{
|
||||
ATL::CComPtr<ADOField> f;
|
||||
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Skupina"), &f)));
|
||||
wxCHECK(GetValue(f, id), false);
|
||||
}
|
||||
|
||||
{
|
||||
ATL::CComPtr<ADOField> f;
|
||||
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Rang"), &f)));
|
||||
wxCHECK(GetValue(f, cg.rank), false);
|
||||
}
|
||||
|
||||
{
|
||||
ATL::CComPtr<ADOField> f;
|
||||
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"prikazano"), &f)));
|
||||
wxCHECK(GetValue(f, cg.show), false);
|
||||
}
|
||||
|
||||
{
|
||||
ATL::CComPtr<ADOField> f;
|
||||
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"opis_en"), &f)));
|
||||
wxCHECK(GetValue(f, cg.name), false);
|
||||
}
|
||||
|
||||
// Read character list from database.
|
||||
wxVERIFY(SUCCEEDED(m_pCharacterGroup1->put_Value(ATL::CComVariant(id.c_str()))));
|
||||
ATL::CComPtr<ADORecordset> rs_chars;
|
||||
wxVERIFY(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs_chars)));
|
||||
wxVERIFY(SUCCEEDED(rs_chars->put_CursorLocation(adUseClient)));
|
||||
wxVERIFY(SUCCEEDED(rs_chars->put_CursorType(adOpenForwardOnly)));
|
||||
wxVERIFY(SUCCEEDED(rs_chars->put_LockType(adLockReadOnly)));
|
||||
if (FAILED(rs_chars->Open(ATL::CComVariant(m_comCharacterGroup), ATL::CComVariant(DISP_E_PARAMNOTFOUND, VT_ERROR)))) {
|
||||
_ftprintf(stderr, wxT("%s: error ZCC0100: Error loading character group characters from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str());
|
||||
LogErrors();
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
cg.chars.clear();
|
||||
ATL::CComPtr<ADOFields> flds;
|
||||
wxVERIFY(SUCCEEDED(rs_chars->get_Fields(&flds)));
|
||||
ATL::CComPtr<ADOField> f;
|
||||
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Znak"), &f)));
|
||||
for (VARIANT_BOOL eof = VARIANT_TRUE; SUCCEEDED(rs_chars->get_EOF(&eof)) && !eof; rs_chars->MoveNext()) {
|
||||
wchar_t c;
|
||||
wxCHECK(GetUnicodeCharacter(f, c), false);
|
||||
cg.chars += c;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -39,9 +39,9 @@ namespace ZRCola {
|
||||
///
|
||||
class translation {
|
||||
public:
|
||||
wchar_t chr; ///< Composed character
|
||||
std::wstring str; ///< Decomposed string
|
||||
int rank; ///< Decomposition rank
|
||||
wchar_t chr; ///< Composed character
|
||||
std::wstring str; ///< Decomposed string
|
||||
int rank; ///< Decomposition rank
|
||||
};
|
||||
|
||||
|
||||
@ -85,6 +85,20 @@ namespace ZRCola {
|
||||
ZRCola::langid_t lang; ///< Language ID
|
||||
};
|
||||
|
||||
|
||||
///
|
||||
/// Character group
|
||||
///
|
||||
class chrgrp {
|
||||
public:
|
||||
int id; ///< Character group ID
|
||||
int rank; ///< Character group rank
|
||||
bool show; ///< Show initially
|
||||
std::wstring name; ///< Character group name
|
||||
std::wstring chars; ///< Character group characters
|
||||
};
|
||||
|
||||
|
||||
public:
|
||||
DBSource();
|
||||
virtual ~DBSource();
|
||||
@ -328,9 +342,37 @@ namespace ZRCola {
|
||||
///
|
||||
bool GetLanguageCharacter(const ATL::CComPtr<ADORecordset>& rs, langchar& lc) const;
|
||||
|
||||
|
||||
///
|
||||
/// Returns character groups
|
||||
///
|
||||
/// \param[out] rs Recordset with results
|
||||
///
|
||||
/// \returns
|
||||
/// - true when query succeeds
|
||||
/// - false otherwise
|
||||
///
|
||||
bool SelectCharacterGroups(ATL::CComPtr<ADORecordset>& rs) const;
|
||||
|
||||
|
||||
///
|
||||
/// Returns character group data
|
||||
///
|
||||
/// \param[in] rs Recordset with results
|
||||
/// \param[out] cg Character group
|
||||
///
|
||||
/// \returns
|
||||
/// - true when succeeded
|
||||
/// - false otherwise
|
||||
///
|
||||
bool GetCharacterGroup(const ATL::CComPtr<ADORecordset>& rs, chrgrp& cg) const;
|
||||
|
||||
protected:
|
||||
std::basic_string<TCHAR> m_filename; ///< Database filename
|
||||
ATL::CComPtr<ADOConnection> m_db; ///< Database
|
||||
_locale_t m_locale; ///< Database locale
|
||||
|
||||
ATL::CComPtr<ADOCommand> m_comCharacterGroup; ///< ADO Command for GetCharacterGroup subquery
|
||||
ATL::CComPtr<ADOParameter> m_pCharacterGroup1; ///< \c m_comCharacterGroup parameter
|
||||
};
|
||||
};
|
||||
|
@ -243,6 +243,56 @@ inline std::ostream& operator <<(std::ostream& stream, const ZRCola::langchar_db
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Writes character group database to a stream
|
||||
///
|
||||
/// \param[in] stream Output stream
|
||||
/// \param[in] db Character group database
|
||||
///
|
||||
/// \returns The stream \p stream
|
||||
///
|
||||
inline std::ostream& operator <<(std::ostream& stream, const ZRCola::chrgrp_db &db)
|
||||
{
|
||||
unsigned __int32 count;
|
||||
|
||||
// Write index count.
|
||||
ZRCola::keyseq_db::indexChr::size_type ks_count = db.idxRnk.size();
|
||||
#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__)
|
||||
// 4G check
|
||||
if (ks_count > 0xffffffff) {
|
||||
stream.setstate(std::ios_base::failbit);
|
||||
return stream;
|
||||
}
|
||||
#endif
|
||||
if (stream.fail()) return stream;
|
||||
count = (unsigned __int32)ks_count;
|
||||
stream.write((const char*)&count, sizeof(count));
|
||||
|
||||
// Write rank index.
|
||||
if (stream.fail()) return stream;
|
||||
stream.write((const char*)db.idxRnk.data(), sizeof(unsigned __int32)*count);
|
||||
|
||||
// Write data count.
|
||||
std::vector<unsigned __int16>::size_type data_count = db.data.size();
|
||||
#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__)
|
||||
// 4G check
|
||||
if (data_count > 0xffffffff) {
|
||||
stream.setstate(std::ios_base::failbit);
|
||||
return stream;
|
||||
}
|
||||
#endif
|
||||
if (stream.fail()) return stream;
|
||||
count = (unsigned __int32)data_count;
|
||||
stream.write((const char*)&count, sizeof(count));
|
||||
|
||||
// Write data.
|
||||
if (stream.fail()) return stream;
|
||||
stream.write((const char*)db.data.data(), sizeof(unsigned __int16)*count);
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Main function
|
||||
///
|
||||
@ -549,6 +599,64 @@ int _tmain(int argc, _TCHAR *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// Get character groups.
|
||||
ATL::CComPtr<ADORecordset> rs;
|
||||
if (src.SelectCharacterGroups(rs)) {
|
||||
size_t count = src.GetRecordsetCount(rs);
|
||||
if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition)
|
||||
ZRCola::DBSource::chrgrp cg;
|
||||
ZRCola::chrgrp_db db;
|
||||
|
||||
// Preallocate memory.
|
||||
db.idxRnk.reserve(count);
|
||||
db.data .reserve(count*4);
|
||||
|
||||
// Parse character groups and build index and data.
|
||||
while (!ZRCola::DBSource::IsEOF(rs)) {
|
||||
// Read character group from the database.
|
||||
if (src.GetCharacterGroup(rs, cg)) {
|
||||
// Add character group to index and data.
|
||||
unsigned __int32 idx = db.data.size();
|
||||
wxASSERT_MSG((int)0xffff8000 <= cg.id && cg.id <= (int)0x00007fff, wxT("character group ID out of bounds"));
|
||||
db.data.push_back((unsigned __int16)cg.id);
|
||||
wxASSERT_MSG((int)0xffff8000 <= cg.rank && cg.rank <= (int)0x00007fff, wxT("character group rank out of bounds"));
|
||||
db.data.push_back((unsigned __int16)cg.rank);
|
||||
db.data.push_back(cg.show ? ZRCola::chrgrp_db::chrgrp::SHOW : 0);
|
||||
std::wstring::size_type n_name = cg.name.length();
|
||||
wxASSERT_MSG(n_name <= 0xffff, wxT("character group name too long"));
|
||||
db.data.push_back((unsigned __int16)n_name);
|
||||
std::wstring::size_type n_char = cg.chars.length();
|
||||
wxASSERT_MSG(n_char <= 0xffff, wxT("too many character group characters"));
|
||||
db.data.push_back((unsigned __int16)n_char);
|
||||
for (std::wstring::size_type i = 0; i < n_name; i++)
|
||||
db.data.push_back(cg.name[i]);
|
||||
for (std::wstring::size_type i = 0; i < n_char; i++)
|
||||
db.data.push_back(cg.chars[i]);
|
||||
db.idxRnk.push_back(idx);
|
||||
if (build_pot)
|
||||
pot.insert(cg.name);
|
||||
} else
|
||||
has_errors = true;
|
||||
|
||||
wxVERIFY(SUCCEEDED(rs->MoveNext()));
|
||||
}
|
||||
|
||||
// Sort indices.
|
||||
db.idxRnk.sort();
|
||||
|
||||
// Write character groups to file.
|
||||
dst << ZRCola::chrgrp_rec(db);
|
||||
} else {
|
||||
_ftprintf(stderr, wxT("%s: error ZCC0015: Error getting character group count from database or too many character groups.\n"), (LPCTSTR)filenameIn.c_str());
|
||||
has_errors = true;
|
||||
}
|
||||
} else {
|
||||
_ftprintf(stderr, wxT("%s: error ZCC0014: Error getting character groups from database. Please make sure the file is ZRCola.zrc compatible.\n"), (LPCTSTR)filenameIn.c_str());
|
||||
has_errors = true;
|
||||
}
|
||||
}
|
||||
|
||||
stdex::idrec::close<ZRCola::recordid_t, ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>(dst, dst_start);
|
||||
|
||||
if (dst.fail()) {
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include <zrcola/language.h>
|
||||
#include <zrcola/translate.h>
|
||||
#include <zrcolaui/chargroup.h>
|
||||
#include <zrcolaui/keyboard.h>
|
||||
|
||||
#include <wx/app.h>
|
||||
@ -41,6 +42,7 @@
|
||||
#include <initguid.h> // GUID helper to prevent LNK2001 errors (unresolved external symbol IID_IADO...)
|
||||
#include <adoint.h>
|
||||
#include <adoid.h>
|
||||
#include <atlcomcli.h>
|
||||
|
||||
#include <tchar.h>
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\include\zrcolaui\chargroup.h" />
|
||||
<ClInclude Include="..\include\zrcolaui\common.h" />
|
||||
<ClInclude Include="..\include\zrcolaui\keyboard.h" />
|
||||
<ClInclude Include="..\src\stdafx.h" />
|
||||
|
@ -32,6 +32,9 @@
|
||||
<ClInclude Include="..\include\zrcolaui\keyboard.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\zrcolaui\chargroup.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\res\libZRColaUI.rc">
|
||||
|
166
lib/libZRColaUI/include/zrcolaui/chargroup.h
Normal file
166
lib/libZRColaUI/include/zrcolaui/chargroup.h
Normal file
@ -0,0 +1,166 @@
|
||||
/*
|
||||
Copyright 2015-2016 Amebis
|
||||
|
||||
This file is part of ZRCola.
|
||||
|
||||
ZRCola is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ZRCola 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "common.h"
|
||||
#include <zrcola/common.h>
|
||||
|
||||
#include <stdex/idrec.h>
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4200)
|
||||
#pragma warning(disable: 4251)
|
||||
#pragma warning(disable: 4512)
|
||||
|
||||
|
||||
namespace ZRCola {
|
||||
///
|
||||
/// Character group database
|
||||
///
|
||||
class ZRCOLAUI_API chrgrp_db {
|
||||
public:
|
||||
#pragma pack(push)
|
||||
#pragma pack(2)
|
||||
///
|
||||
/// Character group data
|
||||
///
|
||||
struct chrgrp {
|
||||
enum flags_t {
|
||||
SHOW = 1<<0, ///< Show initially
|
||||
};
|
||||
|
||||
unsigned __int16 id; ///< Character group id
|
||||
unsigned __int16 rank; ///< Character group rank
|
||||
unsigned __int16 flags; ///< Character group flags (bitwise combination of \c flags_t flags)
|
||||
unsigned __int16 name_len; ///< Character group name length in \c data
|
||||
unsigned __int16 char_len; ///< Character list length in \c data
|
||||
wchar_t data[]; ///< Character group name and character list
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
///
|
||||
/// Rank index
|
||||
///
|
||||
class indexRnk : public index<unsigned __int16, unsigned __int32, chrgrp>
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the index
|
||||
///
|
||||
/// \param[in] h Reference to vector holding the data
|
||||
///
|
||||
indexRnk(_In_ std::vector<unsigned __int16> &h) : index<unsigned __int16, unsigned __int32, chrgrp>(h) {}
|
||||
|
||||
///
|
||||
/// Compares two character groups by rank (for searching)
|
||||
///
|
||||
/// \param[in] a Pointer to character group
|
||||
/// \param[in] b Pointer to second character group
|
||||
///
|
||||
/// \returns
|
||||
/// - <0 when a < b
|
||||
/// - =0 when a == b
|
||||
/// - >0 when a > b
|
||||
///
|
||||
virtual int compare(_In_ const chrgrp &a, _In_ const chrgrp &b) const
|
||||
{
|
||||
if (a.rank < b.rank) return -1;
|
||||
else if (a.rank > b.rank) return +1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
///
|
||||
/// Compares two character groups by rank (for sorting)
|
||||
///
|
||||
/// \param[in] a Pointer to character group
|
||||
/// \param[in] b Pointer to second character group
|
||||
///
|
||||
/// \returns
|
||||
/// - <0 when a < b
|
||||
/// - =0 when a == b
|
||||
/// - >0 when a > b
|
||||
///
|
||||
virtual int compare_sort(_In_ const chrgrp &a, _In_ const chrgrp &b) const
|
||||
{
|
||||
if (a.rank < b.rank) return -1;
|
||||
else if (a.rank > b.rank) return +1;
|
||||
|
||||
int r = _wcsncoll(a.data, b.data, std::min<unsigned __int16>(a.name_len, b.name_len));
|
||||
if (r != 0) return r;
|
||||
if (a.name_len < b.name_len) return -1;
|
||||
else if (a.name_len > b.name_len) return +1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
} idxRnk; ///< Rank index
|
||||
|
||||
std::vector<unsigned __int16> data; ///< Character groups data
|
||||
|
||||
public:
|
||||
///
|
||||
/// Constructs the database
|
||||
///
|
||||
inline chrgrp_db() : idxRnk(data) {}
|
||||
};
|
||||
|
||||
|
||||
typedef ZRCOLAUI_API stdex::idrec::record<chrgrp_db, recordid_t, recordsize_t, ZRCOLA_RECORD_ALIGN> chrgrp_rec;
|
||||
};
|
||||
|
||||
|
||||
const ZRCola::recordid_t stdex::idrec::record<ZRCola::chrgrp_db, ZRCola::recordid_t, ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>::id = *(ZRCola::recordid_t*)"CGR";
|
||||
|
||||
|
||||
///
|
||||
/// Reads character group database from a stream
|
||||
///
|
||||
/// \param[in] stream Input stream
|
||||
/// \param[out] db Character group database
|
||||
///
|
||||
/// \returns The stream \p stream
|
||||
///
|
||||
inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::chrgrp_db &db)
|
||||
{
|
||||
unsigned __int32 count;
|
||||
|
||||
// Read index count.
|
||||
stream.read((char*)&count, sizeof(count));
|
||||
if (!stream.good()) return stream;
|
||||
|
||||
// Read rank index.
|
||||
db.idxRnk.resize(count);
|
||||
stream.read((char*)db.idxRnk.data(), sizeof(unsigned __int32)*count);
|
||||
if (!stream.good()) return stream;
|
||||
|
||||
// Read data count.
|
||||
stream.read((char*)&count, sizeof(count));
|
||||
if (!stream.good()) return stream;
|
||||
|
||||
// Read data.
|
||||
db.data.resize(count);
|
||||
stream.read((char*)db.data.data(), sizeof(unsigned __int16)*count);
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
#pragma warning(pop)
|
@ -45,9 +45,9 @@ namespace ZRCola {
|
||||
///
|
||||
struct keyseq {
|
||||
enum modifiers_t {
|
||||
SHIFT = 1<<0, ///< SHIFT key was pressed
|
||||
CTRL = 1<<1, ///< CTRL key was pressed
|
||||
ALT = 1<<2, ///< ALT key was pressed
|
||||
SHIFT = 1<<0, ///< SHIFT key was pressed
|
||||
CTRL = 1<<1, ///< CTRL key was pressed
|
||||
ALT = 1<<2, ///< ALT key was pressed
|
||||
};
|
||||
|
||||
wchar_t chr; ///< Character
|
||||
|
@ -20,6 +20,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../../include/zrcola.h"
|
||||
#include "../include/zrcolaui/chargroup.h"
|
||||
#include "../include/zrcolaui/keyboard.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
Binary file not shown.
@ -5,11 +5,14 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: ZRColaCompile 2.0-alpha5\n"
|
||||
"X-Generator: ZRColaCompile 2.0-alpha6\n"
|
||||
|
||||
msgid "Albanian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Arrows"
|
||||
msgstr ""
|
||||
|
||||
msgid "Belarusian"
|
||||
msgstr ""
|
||||
|
||||
@ -19,9 +22,24 @@ msgstr ""
|
||||
msgid "Bosnian – Latinic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Combine"
|
||||
msgstr ""
|
||||
|
||||
msgid "Combine Above"
|
||||
msgstr ""
|
||||
|
||||
msgid "Combine Below"
|
||||
msgstr ""
|
||||
|
||||
msgid "Combine Over"
|
||||
msgstr ""
|
||||
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
@ -34,6 +52,9 @@ msgstr ""
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Eva"
|
||||
msgstr ""
|
||||
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
@ -49,6 +70,9 @@ msgstr ""
|
||||
msgid "Irish Gaelic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Joined"
|
||||
msgstr ""
|
||||
|
||||
msgid "Kashubian"
|
||||
msgstr ""
|
||||
|
||||
@ -58,6 +82,165 @@ msgstr ""
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter A"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter B"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter C"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter D"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter E"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter F"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter G"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter H"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter I"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter J"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter K"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter L"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter M"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter N"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter O"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter P"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter Q"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter R"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter S"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter T"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter U"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter V"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter W"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter X"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter Y"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter Z"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter a"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter b"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter c"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter e"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter f"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter g"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter h"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter i"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter j"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter k"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter l"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter m"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter n"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter o"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter p"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter q"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter r"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter t"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter u"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter v"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter w"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter x"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter y"
|
||||
msgstr ""
|
||||
|
||||
msgid "Letter z"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ligatures"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lithuanian"
|
||||
msgstr ""
|
||||
|
||||
@ -67,6 +250,12 @@ msgstr ""
|
||||
msgid "Maltese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Metric"
|
||||
msgstr ""
|
||||
|
||||
msgid "Modified"
|
||||
msgstr ""
|
||||
|
||||
msgid "Moldavian – Cyrillic"
|
||||
msgstr ""
|
||||
|
||||
@ -76,12 +265,54 @@ msgstr ""
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 0"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 1"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 4"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 5"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 6"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 7"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 8"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number 9"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbers - Circled"
|
||||
msgstr ""
|
||||
|
||||
msgid "Parentheses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
@ -106,9 +337,54 @@ msgstr ""
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Special Characters"
|
||||
msgstr ""
|
||||
|
||||
msgid "Strokes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Surrounded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol !"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol ("
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol )"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol +"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol ,"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol -"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol :"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol ;"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol <"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol ="
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol >"
|
||||
msgstr ""
|
||||
|
||||
msgid "Symbol ?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@ -17,6 +17,9 @@ msgstr ""
|
||||
msgid "Albanian"
|
||||
msgstr "albanščina"
|
||||
|
||||
msgid "Arrows"
|
||||
msgstr "Puščice"
|
||||
|
||||
msgid "Belarusian"
|
||||
msgstr "beloruščina"
|
||||
|
||||
@ -26,9 +29,24 @@ msgstr "bosanščina – cirilica"
|
||||
msgid "Bosnian – Latinic"
|
||||
msgstr "bosanščina – latinica"
|
||||
|
||||
msgid "Combine"
|
||||
msgstr "Kombinirano"
|
||||
|
||||
msgid "Combine Above"
|
||||
msgstr "Kombinirano zgoraj"
|
||||
|
||||
msgid "Combine Below"
|
||||
msgstr "Kombinirano spodaj"
|
||||
|
||||
msgid "Combine Over"
|
||||
msgstr "Kombinirano prečrtano"
|
||||
|
||||
msgid "Croatian"
|
||||
msgstr "hrvaščina"
|
||||
|
||||
msgid "Currencies"
|
||||
msgstr "Valute"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr "češčina"
|
||||
|
||||
@ -41,6 +59,9 @@ msgstr "angleščina"
|
||||
msgid "Estonian"
|
||||
msgstr "estonščina"
|
||||
|
||||
msgid "Eva"
|
||||
msgstr "Eva"
|
||||
|
||||
msgid "French"
|
||||
msgstr "francoščina"
|
||||
|
||||
@ -56,6 +77,9 @@ msgstr "madžarščina"
|
||||
msgid "Irish Gaelic"
|
||||
msgstr "irščina"
|
||||
|
||||
msgid "Joined"
|
||||
msgstr "Povezano"
|
||||
|
||||
msgid "Kashubian"
|
||||
msgstr "kašubščina"
|
||||
|
||||
@ -65,6 +89,165 @@ msgstr "latinščina"
|
||||
msgid "Latvian"
|
||||
msgstr "letonščina"
|
||||
|
||||
msgid "Letter A"
|
||||
msgstr "Črka A"
|
||||
|
||||
msgid "Letter B"
|
||||
msgstr "Črka B"
|
||||
|
||||
msgid "Letter C"
|
||||
msgstr "Črka C"
|
||||
|
||||
msgid "Letter D"
|
||||
msgstr "Črka D"
|
||||
|
||||
msgid "Letter E"
|
||||
msgstr "Črka E"
|
||||
|
||||
msgid "Letter F"
|
||||
msgstr "Črka f"
|
||||
|
||||
msgid "Letter G"
|
||||
msgstr "Črka G"
|
||||
|
||||
msgid "Letter H"
|
||||
msgstr "Črka H"
|
||||
|
||||
msgid "Letter I"
|
||||
msgstr "Črka I"
|
||||
|
||||
msgid "Letter J"
|
||||
msgstr "Črka J"
|
||||
|
||||
msgid "Letter K"
|
||||
msgstr "Črka K"
|
||||
|
||||
msgid "Letter L"
|
||||
msgstr "Črka L"
|
||||
|
||||
msgid "Letter M"
|
||||
msgstr "Črka M"
|
||||
|
||||
msgid "Letter N"
|
||||
msgstr "Črka N"
|
||||
|
||||
msgid "Letter O"
|
||||
msgstr "Črka O"
|
||||
|
||||
msgid "Letter P"
|
||||
msgstr "Črka P"
|
||||
|
||||
msgid "Letter Q"
|
||||
msgstr "Črka Q"
|
||||
|
||||
msgid "Letter R"
|
||||
msgstr "Črka R"
|
||||
|
||||
msgid "Letter S"
|
||||
msgstr "Črka S"
|
||||
|
||||
msgid "Letter T"
|
||||
msgstr "Črka T"
|
||||
|
||||
msgid "Letter U"
|
||||
msgstr "Črka U"
|
||||
|
||||
msgid "Letter V"
|
||||
msgstr "Črka V"
|
||||
|
||||
msgid "Letter W"
|
||||
msgstr "Črka W"
|
||||
|
||||
msgid "Letter X"
|
||||
msgstr "Črka X"
|
||||
|
||||
msgid "Letter Y"
|
||||
msgstr "Črka Y"
|
||||
|
||||
msgid "Letter Z"
|
||||
msgstr "Črka Z"
|
||||
|
||||
msgid "Letter a"
|
||||
msgstr "Črka a"
|
||||
|
||||
msgid "Letter b"
|
||||
msgstr "Črka b"
|
||||
|
||||
msgid "Letter c"
|
||||
msgstr "Črka c"
|
||||
|
||||
msgid "Letter d"
|
||||
msgstr "Črka d"
|
||||
|
||||
msgid "Letter e"
|
||||
msgstr "Črka e"
|
||||
|
||||
msgid "Letter f"
|
||||
msgstr "Črka f"
|
||||
|
||||
msgid "Letter g"
|
||||
msgstr "Črka g"
|
||||
|
||||
msgid "Letter h"
|
||||
msgstr "Črka h"
|
||||
|
||||
msgid "Letter i"
|
||||
msgstr "Črka i"
|
||||
|
||||
msgid "Letter j"
|
||||
msgstr "Črka j"
|
||||
|
||||
msgid "Letter k"
|
||||
msgstr "Črka k"
|
||||
|
||||
msgid "Letter l"
|
||||
msgstr "Črka l"
|
||||
|
||||
msgid "Letter m"
|
||||
msgstr "Črka m"
|
||||
|
||||
msgid "Letter n"
|
||||
msgstr "Črka n"
|
||||
|
||||
msgid "Letter o"
|
||||
msgstr "Črka o"
|
||||
|
||||
msgid "Letter p"
|
||||
msgstr "Črka p"
|
||||
|
||||
msgid "Letter q"
|
||||
msgstr "Črka q"
|
||||
|
||||
msgid "Letter r"
|
||||
msgstr "Črka r"
|
||||
|
||||
msgid "Letter s"
|
||||
msgstr "Črka s"
|
||||
|
||||
msgid "Letter t"
|
||||
msgstr "Črka t"
|
||||
|
||||
msgid "Letter u"
|
||||
msgstr "Črka u"
|
||||
|
||||
msgid "Letter v"
|
||||
msgstr "Črka v"
|
||||
|
||||
msgid "Letter w"
|
||||
msgstr "Črka w"
|
||||
|
||||
msgid "Letter x"
|
||||
msgstr "Črka x"
|
||||
|
||||
msgid "Letter y"
|
||||
msgstr "Črka y"
|
||||
|
||||
msgid "Letter z"
|
||||
msgstr "Črka z"
|
||||
|
||||
msgid "Ligatures"
|
||||
msgstr "Ligature"
|
||||
|
||||
msgid "Lithuanian"
|
||||
msgstr "litovščina"
|
||||
|
||||
@ -74,6 +257,12 @@ msgstr "makedonščina"
|
||||
msgid "Maltese"
|
||||
msgstr "malteščina"
|
||||
|
||||
msgid "Metric"
|
||||
msgstr "Metrično"
|
||||
|
||||
msgid "Modified"
|
||||
msgstr "Spremenjeno"
|
||||
|
||||
msgid "Moldavian – Cyrillic"
|
||||
msgstr "moldavščina – cirilica"
|
||||
|
||||
@ -83,12 +272,54 @@ msgstr "moldavščina – latinica"
|
||||
msgid "Norwegian"
|
||||
msgstr "norveščina"
|
||||
|
||||
msgid "Number 0"
|
||||
msgstr "Številka 0"
|
||||
|
||||
msgid "Number 1"
|
||||
msgstr "Številka 1"
|
||||
|
||||
msgid "Number 2"
|
||||
msgstr "Številka 2"
|
||||
|
||||
msgid "Number 3"
|
||||
msgstr "Številka 3"
|
||||
|
||||
msgid "Number 4"
|
||||
msgstr "Številka 4"
|
||||
|
||||
msgid "Number 5"
|
||||
msgstr "Številka 5"
|
||||
|
||||
msgid "Number 6"
|
||||
msgstr "Številka 6"
|
||||
|
||||
msgid "Number 7"
|
||||
msgstr "Številka 7"
|
||||
|
||||
msgid "Number 8"
|
||||
msgstr "Številka 8"
|
||||
|
||||
msgid "Number 9"
|
||||
msgstr "Številka 9"
|
||||
|
||||
msgid "Numbers"
|
||||
msgstr "Številke"
|
||||
|
||||
msgid "Numbers - Circled"
|
||||
msgstr "Številke - obkroženo"
|
||||
|
||||
msgid "Parentheses"
|
||||
msgstr "Oklepaji"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "poljščina"
|
||||
|
||||
msgid "Portuguese"
|
||||
msgstr "portugalščina"
|
||||
|
||||
msgid "Quotes"
|
||||
msgstr "Narekovaji"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr "romunščina"
|
||||
|
||||
@ -113,9 +344,54 @@ msgstr "lužiščini"
|
||||
msgid "Spanish"
|
||||
msgstr "španščina"
|
||||
|
||||
msgid "Special Characters"
|
||||
msgstr "Posebni znaki"
|
||||
|
||||
msgid "Strokes"
|
||||
msgstr "Poševnica"
|
||||
|
||||
msgid "Surrounded"
|
||||
msgstr "Obkroženi"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "švedščina"
|
||||
|
||||
msgid "Symbol !"
|
||||
msgstr "Simbol !"
|
||||
|
||||
msgid "Symbol ("
|
||||
msgstr "Simbol ("
|
||||
|
||||
msgid "Symbol )"
|
||||
msgstr "Simbol )"
|
||||
|
||||
msgid "Symbol +"
|
||||
msgstr "Simbol +"
|
||||
|
||||
msgid "Symbol ,"
|
||||
msgstr "Simbol ,"
|
||||
|
||||
msgid "Symbol -"
|
||||
msgstr "Simbol -"
|
||||
|
||||
msgid "Symbol :"
|
||||
msgstr "Simbol :"
|
||||
|
||||
msgid "Symbol ;"
|
||||
msgstr "Simbol ;"
|
||||
|
||||
msgid "Symbol <"
|
||||
msgstr "Simbol <"
|
||||
|
||||
msgid "Symbol ="
|
||||
msgstr "Simbol ="
|
||||
|
||||
msgid "Symbol >"
|
||||
msgstr "Simbol >"
|
||||
|
||||
msgid "Symbol ?"
|
||||
msgstr "Simbol ?"
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr "turščina"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user