From 6e4cd60152c8286f46fb95592f1fab7d8931ca96 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Wed, 4 May 2016 15:49:51 +0200 Subject: [PATCH] Character group database support added --- ZRColaCompile/dbsource.cpp | 112 +++++++ ZRColaCompile/dbsource.h | 48 ++- ZRColaCompile/main.cpp | 108 +++++++ ZRColaCompile/stdafx.h | 2 + lib/libZRColaUI/build/libZRColaUI.vcxproj | 1 + .../build/libZRColaUI.vcxproj.filters | 3 + lib/libZRColaUI/include/zrcolaui/chargroup.h | 166 +++++++++++ lib/libZRColaUI/include/zrcolaui/keyboard.h | 6 +- lib/libZRColaUI/src/stdafx.h | 1 + output/data/ZRCola.zrcdb | Bin 124584 -> 132992 bytes output/locale/ZRCola-zrcdb.pot | 278 +++++++++++++++++- output/locale/sl_SI/ZRCola-zrcdb.mo | Bin 2207 -> 5879 bytes output/locale/sl_SI/ZRCola-zrcdb.po | 276 +++++++++++++++++ 13 files changed, 994 insertions(+), 7 deletions(-) create mode 100644 lib/libZRColaUI/include/zrcolaui/chargroup.h diff --git a/ZRColaCompile/dbsource.cpp b/ZRColaCompile/dbsource.cpp index efbe97c..d85bb64 100644 --- a/ZRColaCompile/dbsource.cpp +++ b/ZRColaCompile/dbsource.cpp @@ -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 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& rs return true; } + + +bool ZRCola::DBSource::SelectCharacterGroups(ATL::CComPtr& 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& rs, chrgrp& cg) const +{ + wxASSERT_MSG(rs, wxT("recordset is empty")); + + ATL::CComPtr flds; + wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); + std::wstring id; + + { + ATL::CComPtr f; + wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"id"), &f))); + wxCHECK(GetValue(f, cg.id), false); + } + + { + ATL::CComPtr f; + wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Skupina"), &f))); + wxCHECK(GetValue(f, id), false); + } + + { + ATL::CComPtr f; + wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Rang"), &f))); + wxCHECK(GetValue(f, cg.rank), false); + } + + { + ATL::CComPtr f; + wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"prikazano"), &f))); + wxCHECK(GetValue(f, cg.show), false); + } + + { + ATL::CComPtr 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 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 flds; + wxVERIFY(SUCCEEDED(rs_chars->get_Fields(&flds))); + ATL::CComPtr 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; +} diff --git a/ZRColaCompile/dbsource.h b/ZRColaCompile/dbsource.h index 6240e1d..6409544 100644 --- a/ZRColaCompile/dbsource.h +++ b/ZRColaCompile/dbsource.h @@ -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& rs, langchar& lc) const; + + /// + /// Returns character groups + /// + /// \param[out] rs Recordset with results + /// + /// \returns + /// - true when query succeeds + /// - false otherwise + /// + bool SelectCharacterGroups(ATL::CComPtr& 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& rs, chrgrp& cg) const; + protected: std::basic_string m_filename; ///< Database filename ATL::CComPtr m_db; ///< Database _locale_t m_locale; ///< Database locale + + ATL::CComPtr m_comCharacterGroup; ///< ADO Command for GetCharacterGroup subquery + ATL::CComPtr m_pCharacterGroup1; ///< \c m_comCharacterGroup parameter }; }; diff --git a/ZRColaCompile/main.cpp b/ZRColaCompile/main.cpp index 927a321..5b20532 100644 --- a/ZRColaCompile/main.cpp +++ b/ZRColaCompile/main.cpp @@ -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::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 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(dst, dst_start); if (dst.fail()) { diff --git a/ZRColaCompile/stdafx.h b/ZRColaCompile/stdafx.h index 145b02e..186fe8f 100644 --- a/ZRColaCompile/stdafx.h +++ b/ZRColaCompile/stdafx.h @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -41,6 +42,7 @@ #include // GUID helper to prevent LNK2001 errors (unresolved external symbol IID_IADO...) #include #include +#include #include diff --git a/lib/libZRColaUI/build/libZRColaUI.vcxproj b/lib/libZRColaUI/build/libZRColaUI.vcxproj index 5b4e48a..0870684 100644 --- a/lib/libZRColaUI/build/libZRColaUI.vcxproj +++ b/lib/libZRColaUI/build/libZRColaUI.vcxproj @@ -28,6 +28,7 @@ + diff --git a/lib/libZRColaUI/build/libZRColaUI.vcxproj.filters b/lib/libZRColaUI/build/libZRColaUI.vcxproj.filters index 605e170..f3ccc22 100644 --- a/lib/libZRColaUI/build/libZRColaUI.vcxproj.filters +++ b/lib/libZRColaUI/build/libZRColaUI.vcxproj.filters @@ -32,6 +32,9 @@ Header Files + + Header Files + diff --git a/lib/libZRColaUI/include/zrcolaui/chargroup.h b/lib/libZRColaUI/include/zrcolaui/chargroup.h new file mode 100644 index 0000000..5b8105e --- /dev/null +++ b/lib/libZRColaUI/include/zrcolaui/chargroup.h @@ -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 . +*/ + +#pragma once + +#include "common.h" +#include + +#include +#include +#include + +#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 + { + public: + /// + /// Constructs the index + /// + /// \param[in] h Reference to vector holding the data + /// + indexRnk(_In_ std::vector &h) : index(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(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 data; ///< Character groups data + + public: + /// + /// Constructs the database + /// + inline chrgrp_db() : idxRnk(data) {} + }; + + + typedef ZRCOLAUI_API stdex::idrec::record chrgrp_rec; +}; + + +const ZRCola::recordid_t stdex::idrec::record::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) diff --git a/lib/libZRColaUI/include/zrcolaui/keyboard.h b/lib/libZRColaUI/include/zrcolaui/keyboard.h index 905f73f..72e28d7 100644 --- a/lib/libZRColaUI/include/zrcolaui/keyboard.h +++ b/lib/libZRColaUI/include/zrcolaui/keyboard.h @@ -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 diff --git a/lib/libZRColaUI/src/stdafx.h b/lib/libZRColaUI/src/stdafx.h index 171035c..fc42830 100644 --- a/lib/libZRColaUI/src/stdafx.h +++ b/lib/libZRColaUI/src/stdafx.h @@ -20,6 +20,7 @@ #pragma once #include "../../../include/zrcola.h" +#include "../include/zrcolaui/chargroup.h" #include "../include/zrcolaui/keyboard.h" #include diff --git a/output/data/ZRCola.zrcdb b/output/data/ZRCola.zrcdb index 3c59455ae6e0c45854f2aa3bfea425888a5635b8..84d22cfe492f395f3fb6eee2845f0d4590e59a7e 100644 GIT binary patch delta 8496 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 delta 21 dcmZqZ=U8!;ojoeZnPI^*#zyw7?2HSa0RU9E2i*Vw diff --git a/output/locale/ZRCola-zrcdb.pot b/output/locale/ZRCola-zrcdb.pot index 09d19b9..d3dd158 100644 --- a/output/locale/ZRCola-zrcdb.pot +++ b/output/locale/ZRCola-zrcdb.pot @@ -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 "" diff --git a/output/locale/sl_SI/ZRCola-zrcdb.mo b/output/locale/sl_SI/ZRCola-zrcdb.mo index d7392cfbedaa66ffad59fc1f5859efe4a824ce22..1030158e7f42ae6396fbe6fff8765f607779a4c1 100644 GIT binary patch literal 5879 zcmZwJ4~!gD9S86SBGf~r{86idOoi5#cCUB6(q6B39UJ6%V&&_Oyz5782>LAibd-U#o77$WLnDE)aHN`IeX`}lejp#}GApJ6Z zl%9jqpYKBH-w)yWtCac)#L!UvWP>wqe@d(v}Q2KQi%JX>w%KlG7Ip2@yOHl6b z75X~8Os~+l={r+~2sMIWLM(?{u(^lADm zeV+c5{(`BCi>O7H(GJ>8x6mClNB7esv;yV*)uFt%X_&lU zw$DO&&)y>Qega;i|KRrPaWWaFi=gbkly-6b7AWT%p$E9V1m*fi z=?r~Q3Oi`);opDZC2axGboF-x97&S#cQ z2$5+(A2o?u)Urk^*Pis z)N&O5lu|2DD^VF#J8BiG1J#LIjp{ z87P1M;PX|dQ2SBx{mK|Tgp%Lh&!fJ8I*dAkvQhGl$g&S5=BY=l>~!F`u2Y=1a>$Mx59_jit>Adt zX!RBR##{?$^rxEJMjJX%*}%u4xI{J%0__zY9jfe%E>_ewbSA8*ey{8%hLNB2uD@Zc z?XqhHII$}S59pub5O_(sDY(m8Z$An1}swTK5)J(urPam&uLfwR;CIlvgCPXI0 zCNxZ#GU1pB( ztP>PnbTwz=BZw-vi%{kK>|FPQ01e*ui~nCe9M09mC(!llrG8V zo1d-~eAilR!ZH(AesnC`i9nWL~jh`al%WShF-D6>0W=uC6+1sodvco7d z9@t*!+L0ghSb3-Bd)AmggU4)b45if`B&{uWO&6T7J#;p;4cT5fw#zy*uI*Zn)t78p zX_eY7U;eGMcG)%0sahKyZ^D1S1ADB{J)9qG8y+0)pSy$3_Kvo!??o5}nepj5`W)$F z(W<(OyWU_G@m@k5_3jzpp6Q<3PdY!LgG|3y#Gv=eJyv(YiQ4vO2DGPx^saI~URq>z zws*I$Ysk#){1T0t`;h}0x?~Q( z+`=g{4VW_1fGIN#m@?CVDKib2GSh%5GYyzB(|{>64VW_1fGIN#n-%_6GM9}pYfd`N GZvPJxY%-Go delta 987 zcmXxjPe{{Y9LMozW!l`PZElu-Qu_z1D2Qn1X+aP{5_BmtRt{Ya1)XLP4G+=9h49qP z5gvpBJC$Kjhd}EZ>=qV5P=`81hq?sy{`~g!foHGp^E|)j|Fb_w9>vR_5)BU>=>WN# zd@AJJ2`p~mhm_sw+;;58W;}yQyntX)p%TrZd13PG3; zUttvATDgWA@FQxVFQ^54H-B4wsKL2*>cg1AKGb*_)IzeTey33zIgc9e5++^QxoZU4 z$qcH)9BKfM`mky)nNQ6X)OWA(C8zcdwSid%iQ#?hzyQ4|8HFA9=4;Xtnz-7CKJd zu^yn3CRehz8pN7VkGY4eYt=%Pc9XTaJ!JOf667v-uD)~PAnCzzjX~1Cfj1UBE^Z{) z!9LtU-b^}`xC;HntGTg4Zp{B|&NNMo=SqqTkzPL+IqKg;I{a#^$A67w;)CPG!sMtM z9G@snjZEby^Zt3u<;I)&VQQZ}Y5frLmH0qpbYeQUzPMH?jOF~H#4&#*k@b%gX@4tu f(ASa)zZ?%^+E-KEel2x7y1qD_AKvV+(cbkR?w4-a diff --git a/output/locale/sl_SI/ZRCola-zrcdb.po b/output/locale/sl_SI/ZRCola-zrcdb.po index c47c267..18b79d2 100644 --- a/output/locale/sl_SI/ZRCola-zrcdb.po +++ b/output/locale/sl_SI/ZRCola-zrcdb.po @@ -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"