Replace Unicode character categories with blocks

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman
2025-11-14 12:05:35 +01:00
parent 1ba71443f5
commit e8f39da602
23 changed files with 179 additions and 641 deletions

View File

@@ -613,44 +613,6 @@ bool ZRCola::DBSource::GetLanguage(const com_obj<ADOField>& f, ZRCola::langid_t&
}
bool ZRCola::DBSource::GetChrCat(const com_obj<ADOField>& f, chrcatid_t& cc) const
{
wxASSERT_MSG(f.valid(), wxT("field is empty"));
variant v;
wxVERIFY(SUCCEEDED(f->get_Value(&v)));
if (V_VT(&v) != VT_NULL) {
wxCHECK(SUCCEEDED(v.change_type(VT_BSTR)), false);
// Parse the field.
size_t n = wcsnlen(V_BSTR(&v), ::SysStringLen(V_BSTR(&v)));
if (n < 1 || 2 < n) {
bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname)));
_ftprintf(stderr, wxT("%s: error ZCC0110: Syntax error in \"%.*ls\" field (\"%.*ls\"). Character category ID must be one (1) or two (2) characters long.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v));
return false;
}
for (size_t i = 0;; i++) {
if (i < sizeof(cc)) {
if (i < n) {
wchar_t c = V_BSTR(&v)[i];
if ((unsigned short)c > 0x7f) {
bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname)));
_ftprintf(stderr, wxT("%s: error ZCC0111: Syntax error in \"%.*ls\" field (\"%.*ls\"). Character category ID must contain ASCII characters only.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v));
return false;
}
cc.data[i] = (char)c;
} else
cc.data[i] = 0;
} else
break;
}
} else
memset(cc.data, 0, sizeof(cc));
return true;
}
bool ZRCola::DBSource::GetTagNames(const winstd::com_obj<ADOField>& f, LCID lcid, list<wstring>& names) const
{
wxASSERT_MSG(f.valid(), wxT("field is empty"));
@@ -1242,7 +1204,7 @@ bool ZRCola::DBSource::SelectCharacters(com_obj<ADORecordset>& rs) const
// Open it.
if (FAILED(rs->Open(variant(
L"SELECT DISTINCT [znak], [opis_en], [kat], [znak_v], [znak_m] "
L"SELECT DISTINCT [znak], [opis_en], [znak_v], [znak_m] "
L"FROM [VRS_CharList] "
L"WHERE "
L"[aktiven]=1 AND " // Active characters only
@@ -1303,12 +1265,6 @@ bool ZRCola::DBSource::GetCharacter(const com_obj<ADORecordset>& rs, character&
}
}
{
com_obj<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"kat"), &f)));
wxCHECK(GetChrCat(f, chr.second.cat), false);
}
return true;
}
@@ -1375,57 +1331,6 @@ bool ZRCola::DBSource::GetCharacterBlock(const com_obj<ADORecordset>& rs, chrblk
}
bool ZRCola::DBSource::SelectCharacterCategories(com_obj<ADORecordset>& rs) const
{
// Create a new recordset.
rs.free();
wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false);
// Open it.
if (FAILED(rs->Open(variant(
L"SELECT DISTINCT [kat], [opis_en], [Rang] "
L"FROM [VRS_CharCategory] "
L"WHERE [kat]<>'g' " // Ignore "Other, Control" category!
L"ORDER BY [Rang], [opis_en]"), variant((IDispatch*)m_db), adOpenStatic, adLockReadOnly, adCmdText)))
{
_ftprintf(stderr, wxT("%s: error ZCC0130: Error loading character categories from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str());
LogErrors();
return false;
}
return true;
}
bool ZRCola::DBSource::GetCharacterCategory(const com_obj<ADORecordset>& rs, chrcat& cc) const
{
wxASSERT_MSG(rs.valid(), wxT("recordset is empty"));
com_obj<ADOFields> flds;
wxVERIFY(SUCCEEDED(rs->get_Fields(&flds)));
{
com_obj<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"kat"), &f)));
wxCHECK(GetChrCat(f, cc.cat), false);
}
{
com_obj<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Rang"), &f)));
wxCHECK(GetValue(f, cc.rank), false);
}
{
com_obj<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"opis_en"), &f)));
wxCHECK(GetValue(f, cc.name), false);
}
return true;
}
bool ZRCola::DBSource::SelectCharacterTags(winstd::com_obj<ADORecordset>& rs) const
{
// Create a new recordset.