Compare commits
85 Commits
Author | SHA1 | Date | |
---|---|---|---|
37196ab4f5 | |||
e96a627c55 | |||
7f2c209a06 | |||
b1a3eb23c7 | |||
35b8b389ff | |||
d8493554cd | |||
a40e730bf0 | |||
056b1c3087 | |||
7127b8ea31 | |||
82906899de | |||
566d40bd05 | |||
6a8cd1ec80 | |||
b0db806f5e | |||
439dcb35d1 | |||
ad07539cb6 | |||
a7c1481f87 | |||
c7bc2d0aa6 | |||
2bbad80235 | |||
ffe11b17b5 | |||
0daae5af37 | |||
2f1f6a6c83 | |||
f8393e3d77 | |||
40c4d65669 | |||
7d866b183b | |||
b13f77ce95 | |||
cb324389e4 | |||
2de62b1636 | |||
afb137edee | |||
d4fdd62916 | |||
ac63e5a957 | |||
b8aa592b19 | |||
325b9334b5 | |||
f547fbc601 | |||
0e2678f09e | |||
e78bbc9c3b | |||
f523d12fa1 | |||
c6f844775f | |||
450c18198a | |||
ad57071515 | |||
f6d0323485 | |||
004958f464 | |||
09117d68a6 | |||
04eea84f8a | |||
685ffedb53 | |||
f74e9930c1 | |||
a05e62f1d3 | |||
3aba608001 | |||
fa59e71fe3 | |||
839c6fc1e6 | |||
ff509ed6b5 | |||
ca3239f0ff | |||
eb0911d3c0 | |||
a7c7a3f40c | |||
a6f0357ad8 | |||
35eb472e6b | |||
ba4ff3cd42 | |||
9709cc2845 | |||
f35e49dc8b | |||
9a307978b5 | |||
bd01e250b2 | |||
8bb1049cf0 | |||
52391d9a08 | |||
823390d28b | |||
eedab7da56 | |||
63fda12c99 | |||
5cc005583c | |||
6b856314d0 | |||
b581b7a8b1 | |||
0bfa44e6bb | |||
5c05dc6eb6 | |||
7a2845fef3 | |||
5b71b776a7 | |||
2bd3b4c3b9 | |||
b90ce09c5e | |||
04a1b95372 | |||
3c65720188 | |||
335fdbf949 | |||
5637381ca6 | |||
082773fdc9 | |||
3c9ace0bbe | |||
7ea4072724 | |||
3e9f7d6478 | |||
46a3a13311 | |||
47d3884af3 | |||
1f498ab916 |
18
.gitmodules
vendored
18
.gitmodules
vendored
@ -1,18 +1,24 @@
|
|||||||
[submodule "lib/stdex"]
|
[submodule "lib/stdex"]
|
||||||
path = lib/stdex
|
path = lib/stdex
|
||||||
url = https://github.com/Amebis/stdex.git
|
url = https://git.amebis.si/Amebis/stdex.git
|
||||||
[submodule "lib/WinStd"]
|
[submodule "lib/WinStd"]
|
||||||
path = lib/WinStd
|
path = lib/WinStd
|
||||||
url = https://github.com/Amebis/WinStd.git
|
url = https://git.amebis.si/Amebis/WinStd.git
|
||||||
[submodule "lib/wxExtend"]
|
[submodule "lib/wxExtend"]
|
||||||
path = lib/wxExtend
|
path = lib/wxExtend
|
||||||
url = https://github.com/Amebis/wxExtend.git
|
url = https://git.amebis.si/Amebis/wxExtend.git
|
||||||
[submodule "MSI/MSIBuild"]
|
[submodule "MSI/MSIBuild"]
|
||||||
path = MSI/MSIBuild
|
path = MSI/MSIBuild
|
||||||
url = https://github.com/Amebis/MSIBuild.git
|
url = https://git.amebis.si/Amebis/MSIBuild.git
|
||||||
[submodule "MSI/MSICA"]
|
[submodule "MSI/MSICA"]
|
||||||
path = MSI/MSICA
|
path = MSI/MSICA
|
||||||
url = https://github.com/Amebis/MSICA.git
|
url = https://git.amebis.si/Amebis/MSICA.git
|
||||||
[submodule "Updater"]
|
[submodule "Updater"]
|
||||||
path = Updater
|
path = Updater
|
||||||
url = https://github.com/Amebis/Updater.git
|
url = https://git.amebis.si/Amebis/Updater.git
|
||||||
|
[submodule "lib/oatpp"]
|
||||||
|
path = lib/oatpp
|
||||||
|
url = https://github.com/oatpp/oatpp.git
|
||||||
|
[submodule "lib/oatpp-swagger"]
|
||||||
|
path = lib/oatpp-swagger
|
||||||
|
url = https://github.com/oatpp/oatpp-swagger.git
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 05edc2b598f7ea9683cf01c65d74aec264a02ab1
|
Subproject commit b8364dea81f39b321d726317a9dcbf6b13a455e0
|
@ -1 +1 @@
|
|||||||
Subproject commit f98cfef1e7a38bea6ab70547712f4ad2d930d06a
|
Subproject commit f989fdc827d8fa731977d1771097cf038a50e145
|
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# Copyright © 1991-2021 Amebis
|
# Copyright © 1991-2022 Amebis
|
||||||
|
|
||||||
!INCLUDE "..\..\include\MSIBuildCfg.mak"
|
!INCLUDE "..\..\include\MSIBuildCfg.mak"
|
||||||
!INCLUDE "..\MSIBuild\Makefile"
|
!INCLUDE "..\MSIBuild\Makefile"
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,5 +1,6 @@
|
|||||||
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Simon Rozman <simon@rozman.si>, 2018
|
# Simon Rozman <simon@rozman.si>, 2022
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -8,7 +9,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2018-09-19 08:59+0200\n"
|
"POT-Creation-Date: 2018-09-19 08:59+0200\n"
|
||||||
"PO-Revision-Date: 2018-09-19 07:19+0000\n"
|
"PO-Revision-Date: 2018-09-19 07:19+0000\n"
|
||||||
"Last-Translator: Simon Rozman <simon@rozman.si>, 2018\n"
|
"Last-Translator: Simon Rozman <simon@rozman.si>, 2022\n"
|
||||||
"Language-Team: German (Germany) (https://www.transifex.com/amebis/teams/91592/de_DE/)\n"
|
"Language-Team: German (Germany) (https://www.transifex.com/amebis/teams/91592/de_DE/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -3468,8 +3469,8 @@ msgstr ""
|
|||||||
#: en_US.Win32.Release.Control-2.idtx:5 en_US.Win32.Release.Control-2.idtx:12
|
#: en_US.Win32.Release.Control-2.idtx:5 en_US.Win32.Release.Control-2.idtx:12
|
||||||
#: en_US.x64.Debug.Control-2.idtx:5 en_US.x64.Debug.Control-2.idtx:12
|
#: en_US.x64.Debug.Control-2.idtx:5 en_US.x64.Debug.Control-2.idtx:12
|
||||||
#: en_US.x64.Release.Control-2.idtx:5 en_US.x64.Release.Control-2.idtx:12
|
#: en_US.x64.Release.Control-2.idtx:5 en_US.x64.Release.Control-2.idtx:12
|
||||||
msgid "binUIHeader.bmp"
|
msgid "UIHeader.bmp"
|
||||||
msgstr "binUIHeader.bmp"
|
msgstr "UIHeader.bmp"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:6 en_US.Win32.Release.Control-2.idtx:6
|
#: en_US.Win32.Debug.Control-2.idtx:6 en_US.Win32.Release.Control-2.idtx:6
|
||||||
#: en_US.x64.Debug.Control-2.idtx:6 en_US.x64.Release.Control-2.idtx:6
|
#: en_US.x64.Debug.Control-2.idtx:6 en_US.x64.Release.Control-2.idtx:6
|
||||||
@ -3522,8 +3523,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:14 en_US.Win32.Release.Control-2.idtx:14
|
#: en_US.Win32.Debug.Control-2.idtx:14 en_US.Win32.Release.Control-2.idtx:14
|
||||||
#: en_US.x64.Debug.Control-2.idtx:14 en_US.x64.Release.Control-2.idtx:14
|
#: en_US.x64.Debug.Control-2.idtx:14 en_US.x64.Release.Control-2.idtx:14
|
||||||
msgid "binfontsubst.bmp"
|
msgid "fontsubst.bmp"
|
||||||
msgstr "binfontsubst.bmp"
|
msgstr "fontsubst.bmp"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:15 en_US.Win32.Release.Control-2.idtx:15
|
#: en_US.Win32.Debug.Control-2.idtx:15 en_US.Win32.Release.Control-2.idtx:15
|
||||||
#: en_US.x64.Debug.Control-2.idtx:15 en_US.x64.Release.Control-2.idtx:15
|
#: en_US.x64.Debug.Control-2.idtx:15 en_US.x64.Release.Control-2.idtx:15
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Simon Rozman <simon@rozman.si>, 2018
|
# Simon Rozman <simon@rozman.si>, 2022
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -8,7 +9,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2018-09-19 08:59+0200\n"
|
"POT-Creation-Date: 2018-09-19 08:59+0200\n"
|
||||||
"PO-Revision-Date: 2018-09-19 07:19+0000\n"
|
"PO-Revision-Date: 2018-09-19 07:19+0000\n"
|
||||||
"Last-Translator: Simon Rozman <simon@rozman.si>, 2018\n"
|
"Last-Translator: Simon Rozman <simon@rozman.si>, 2022\n"
|
||||||
"Language-Team: Russian (Russia) (https://www.transifex.com/amebis/teams/91592/ru_RU/)\n"
|
"Language-Team: Russian (Russia) (https://www.transifex.com/amebis/teams/91592/ru_RU/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -3468,8 +3469,8 @@ msgstr ""
|
|||||||
#: en_US.Win32.Release.Control-2.idtx:5 en_US.Win32.Release.Control-2.idtx:12
|
#: en_US.Win32.Release.Control-2.idtx:5 en_US.Win32.Release.Control-2.idtx:12
|
||||||
#: en_US.x64.Debug.Control-2.idtx:5 en_US.x64.Debug.Control-2.idtx:12
|
#: en_US.x64.Debug.Control-2.idtx:5 en_US.x64.Debug.Control-2.idtx:12
|
||||||
#: en_US.x64.Release.Control-2.idtx:5 en_US.x64.Release.Control-2.idtx:12
|
#: en_US.x64.Release.Control-2.idtx:5 en_US.x64.Release.Control-2.idtx:12
|
||||||
msgid "binUIHeader.bmp"
|
msgid "UIHeader.bmp"
|
||||||
msgstr "binUIHeader.bmp"
|
msgstr "UIHeader.bmp"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:6 en_US.Win32.Release.Control-2.idtx:6
|
#: en_US.Win32.Debug.Control-2.idtx:6 en_US.Win32.Release.Control-2.idtx:6
|
||||||
#: en_US.x64.Debug.Control-2.idtx:6 en_US.x64.Release.Control-2.idtx:6
|
#: en_US.x64.Debug.Control-2.idtx:6 en_US.x64.Release.Control-2.idtx:6
|
||||||
@ -3542,8 +3543,8 @@ msgstr "[DlgTitleFont]Шрифт «00 ZRCola» в «ZRCola»"
|
|||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:14 en_US.Win32.Release.Control-2.idtx:14
|
#: en_US.Win32.Debug.Control-2.idtx:14 en_US.Win32.Release.Control-2.idtx:14
|
||||||
#: en_US.x64.Debug.Control-2.idtx:14 en_US.x64.Release.Control-2.idtx:14
|
#: en_US.x64.Debug.Control-2.idtx:14 en_US.x64.Release.Control-2.idtx:14
|
||||||
msgid "binfontsubst.bmp"
|
msgid "fontsubst.bmp"
|
||||||
msgstr "binfontsubst.bmp"
|
msgstr "fontsubst.bmp"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:15 en_US.Win32.Release.Control-2.idtx:15
|
#: en_US.Win32.Debug.Control-2.idtx:15 en_US.Win32.Release.Control-2.idtx:15
|
||||||
#: en_US.x64.Debug.Control-2.idtx:15 en_US.x64.Release.Control-2.idtx:15
|
#: en_US.x64.Debug.Control-2.idtx:15 en_US.x64.Release.Control-2.idtx:15
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Simon Rozman <simon@rozman.si>, 2018
|
# Simon Rozman <simon@rozman.si>, 2022
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -8,7 +9,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2018-09-19 08:59+0200\n"
|
"POT-Creation-Date: 2018-09-19 08:59+0200\n"
|
||||||
"PO-Revision-Date: 2018-09-19 07:19+0000\n"
|
"PO-Revision-Date: 2018-09-19 07:19+0000\n"
|
||||||
"Last-Translator: Simon Rozman <simon@rozman.si>, 2018\n"
|
"Last-Translator: Simon Rozman <simon@rozman.si>, 2022\n"
|
||||||
"Language-Team: Slovenian (Slovenia) (https://www.transifex.com/amebis/teams/91592/sl_SI/)\n"
|
"Language-Team: Slovenian (Slovenia) (https://www.transifex.com/amebis/teams/91592/sl_SI/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -3468,8 +3469,8 @@ msgstr ""
|
|||||||
#: en_US.Win32.Release.Control-2.idtx:5 en_US.Win32.Release.Control-2.idtx:12
|
#: en_US.Win32.Release.Control-2.idtx:5 en_US.Win32.Release.Control-2.idtx:12
|
||||||
#: en_US.x64.Debug.Control-2.idtx:5 en_US.x64.Debug.Control-2.idtx:12
|
#: en_US.x64.Debug.Control-2.idtx:5 en_US.x64.Debug.Control-2.idtx:12
|
||||||
#: en_US.x64.Release.Control-2.idtx:5 en_US.x64.Release.Control-2.idtx:12
|
#: en_US.x64.Release.Control-2.idtx:5 en_US.x64.Release.Control-2.idtx:12
|
||||||
msgid "binUIHeader.bmp"
|
msgid "UIHeader.bmp"
|
||||||
msgstr "binUIHeader.bmp"
|
msgstr "UIHeader.bmp"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:6 en_US.Win32.Release.Control-2.idtx:6
|
#: en_US.Win32.Debug.Control-2.idtx:6 en_US.Win32.Release.Control-2.idtx:6
|
||||||
#: en_US.x64.Debug.Control-2.idtx:6 en_US.x64.Release.Control-2.idtx:6
|
#: en_US.x64.Debug.Control-2.idtx:6 en_US.x64.Release.Control-2.idtx:6
|
||||||
@ -3503,9 +3504,9 @@ msgstr ""
|
|||||||
"Roman;}Times New Roman CE;}}{\\colortbl "
|
"Roman;}Times New Roman CE;}}{\\colortbl "
|
||||||
";\\red0\\green0\\blue255;}{\\*\\generator Msftedit "
|
";\\red0\\green0\\blue255;}{\\*\\generator Msftedit "
|
||||||
"5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\i\\f0\\fs22 "
|
"5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\i\\f0\\fs22 "
|
||||||
"Besedilo je bilo pripravljeno z vna\\'9aalnim sistemom ZRCola (http://zrcola"
|
"Besedilo je bilo pripravljeno z vna\\'9aalnim sistemom ZRCola "
|
||||||
".zrc-sazu.si), ki ga je na Znanstvenoraziskovalnem centru SAZU v Ljubljani "
|
"(http://zrcola.zrc-sazu.si), ki ga je na Znanstvenoraziskovalnem centru SAZU"
|
||||||
"(http://www.zrc-sazu.si) razvil Peter Weiss.\\i0\\f1\\par}"
|
" v Ljubljani (http://www.zrc-sazu.si) razvil Peter Weiss.\\i0\\f1\\par}"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:9 en_US.Win32.Release.Control-2.idtx:9
|
#: en_US.Win32.Debug.Control-2.idtx:9 en_US.Win32.Release.Control-2.idtx:9
|
||||||
#: en_US.x64.Debug.Control-2.idtx:9 en_US.x64.Release.Control-2.idtx:9
|
#: en_US.x64.Debug.Control-2.idtx:9 en_US.x64.Release.Control-2.idtx:9
|
||||||
@ -3535,8 +3536,8 @@ msgstr "[DlgTitleFont]\"00 ZRCola\" v pisavo \"ZRCola\""
|
|||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:14 en_US.Win32.Release.Control-2.idtx:14
|
#: en_US.Win32.Debug.Control-2.idtx:14 en_US.Win32.Release.Control-2.idtx:14
|
||||||
#: en_US.x64.Debug.Control-2.idtx:14 en_US.x64.Release.Control-2.idtx:14
|
#: en_US.x64.Debug.Control-2.idtx:14 en_US.x64.Release.Control-2.idtx:14
|
||||||
msgid "binfontsubst.bmp"
|
msgid "fontsubst.bmp"
|
||||||
msgstr "binfontsubst.bmp"
|
msgstr "fontsubst.bmp"
|
||||||
|
|
||||||
#: en_US.Win32.Debug.Control-2.idtx:15 en_US.Win32.Release.Control-2.idtx:15
|
#: en_US.Win32.Debug.Control-2.idtx:15 en_US.Win32.Release.Control-2.idtx:15
|
||||||
#: en_US.x64.Debug.Control-2.idtx:15 en_US.x64.Release.Control-2.idtx:15
|
#: en_US.x64.Debug.Control-2.idtx:15 en_US.x64.Release.Control-2.idtx:15
|
||||||
|
BIN
MakefileLang.mak
BIN
MakefileLang.mak
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
MakefilePlat.mak
BIN
MakefilePlat.mak
Binary file not shown.
Binary file not shown.
@ -1,4 +1,4 @@
|
|||||||
# ZRCola
|
# ZRCola
|
||||||
|
|
||||||
A Microsoft Windows application for composing texts using a wide range of Slavic (and general) letters from or beyond Unicode.
|
A Microsoft Windows application for composing texts using a wide range of Slavic (and general) letters from or beyond Unicode.
|
||||||
|
|
||||||
@ -56,6 +56,10 @@ Use Microsoft NMAKE to build the project. The resulting files can be found in ou
|
|||||||
|
|
||||||
The `/ls` flag can be appended to the commands above to reduce NMAKE's verbosity. You can combine multiple targets (e.g. nmake Unregister Clean). Please, see NMAKE reference for further reading.
|
The `/ls` flag can be appended to the commands above to reduce NMAKE's verbosity. You can combine multiple targets (e.g. nmake Unregister Clean). Please, see NMAKE reference for further reading.
|
||||||
|
|
||||||
|
## Building and installing ZRCola webservice
|
||||||
|
|
||||||
|
ZRCola is also available as a Linux web-service. See [ZRColaWS/README.md](ZRColaWS/README.md) for instructions.
|
||||||
|
|
||||||
## Translating ZRCola
|
## Translating ZRCola
|
||||||
Instructions how to translate ZRCola to your language can be found [here](LOCALIZATION.md).
|
Instructions how to translate ZRCola to your language can be found [here](LOCALIZATION.md).
|
||||||
|
|
||||||
|
2
Updater
2
Updater
@ -1 +1 @@
|
|||||||
Subproject commit 0ba186c9846ca05a4b867ac8842ce8b7ace25d15
|
Subproject commit a98ef46c5d38dec796dcb78f48240c17f743e3af
|
30
ZRCola.sln
30
ZRCola.sln
@ -18,12 +18,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRCola", "lib\libZRCola\
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRColaUI", "lib\libZRColaUI\build\libZRColaUI.vcxproj", "{C0A84BD2-3870-4CD6-B281-0AB322E3C579}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRColaUI", "lib\libZRColaUI\build\libZRColaUI.vcxproj", "{C0A84BD2-3870-4CD6-B281-0AB322E3C579}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stdex", "lib\stdex\build\stdex.vcxproj", "{518777CC-0A59-4415-A12A-82751ED75343}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Updater", "Updater\Updater\build\Updater.vcxproj", "{990D8CF9-4457-4DC0-AA18-4968EF434741}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Updater", "Updater\Updater\build\Updater.vcxproj", "{990D8CF9-4457-4DC0-AA18-4968EF434741}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinStd", "lib\WinStd\build\WinStd.vcxproj", "{47399D91-7EB9-41DE-B521-514BA5DB0C43}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|ARM64 = Debug|ARM64
|
Debug|ARM64 = Debug|ARM64
|
||||||
@ -82,18 +78,6 @@ Global
|
|||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|Win32.Build.0 = Release|Win32
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|Win32.Build.0 = Release|Win32
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x64.ActiveCfg = Release|x64
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x64.ActiveCfg = Release|x64
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x64.Build.0 = Release|x64
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x64.Build.0 = Release|x64
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|ARM64.Build.0 = Debug|ARM64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|ARM64.ActiveCfg = Release|ARM64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|ARM64.Build.0 = Release|ARM64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|x64.Build.0 = Release|x64
|
|
||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|ARM64.Build.0 = Debug|ARM64
|
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|Win32.ActiveCfg = Debug|Win32
|
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
@ -106,18 +90,6 @@ Global
|
|||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|Win32.Build.0 = Release|Win32
|
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|Win32.Build.0 = Release|Win32
|
||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x64.ActiveCfg = Release|x64
|
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x64.ActiveCfg = Release|x64
|
||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x64.Build.0 = Release|x64
|
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x64.Build.0 = Release|x64
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|ARM64.Build.0 = Debug|ARM64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|ARM64.ActiveCfg = Release|ARM64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|ARM64.Build.0 = Release|ARM64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -126,9 +98,7 @@ Global
|
|||||||
{D3E29951-D9F5-486D-A167-20AE8E90B1FA} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
{D3E29951-D9F5-486D-A167-20AE8E90B1FA} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
||||||
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
|
||||||
{990D8CF9-4457-4DC0-AA18-4968EF434741} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
{990D8CF9-4457-4DC0-AA18-4968EF434741} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {EECB5329-0607-4D77-8BC0-48BD8C08BEF9}
|
SolutionGuid = {EECB5329-0607-4D77-8BC0-48BD8C08BEF9}
|
||||||
|
Binary file not shown.
BIN
ZRCola/ZRCola.rc
BIN
ZRCola/ZRCola.rc
Binary file not shown.
@ -108,9 +108,6 @@
|
|||||||
<ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj">
|
<ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj">
|
||||||
<Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project>
|
<Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\lib\WinStd\build\WinStd.vcxproj">
|
|
||||||
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
|
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
|
||||||
<Project>{D3E29951-D9F5-486D-A167-20AE8E90B1FA}</Project>
|
<Project>{D3E29951-D9F5-486D-A167-20AE8E90B1FA}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -46,7 +46,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <stdex/idrec.h>
|
#include <zrcola/idrec.h>
|
||||||
|
|
||||||
#if defined(__WXMSW__)
|
#if defined(__WXMSW__)
|
||||||
#include <Msi.h>
|
#include <Msi.h>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -82,7 +82,7 @@ bool ZRColaApp::OnInit()
|
|||||||
ZRCola::recordid_t id;
|
ZRCola::recordid_t id;
|
||||||
if (!stdex::idrec::read_id(dat, id, size)) break;
|
if (!stdex::idrec::read_id(dat, id, size)) break;
|
||||||
|
|
||||||
if (id == ZRCola::translation_rec::id) {
|
if (id == ZRCola::translation_rec::id()) {
|
||||||
dat >> ZRCola::translation_rec(m_t_db);
|
dat >> ZRCola::translation_rec(m_t_db);
|
||||||
if (dat.good()) {
|
if (dat.good()) {
|
||||||
has_translation_data = true;
|
has_translation_data = true;
|
||||||
@ -90,61 +90,61 @@ bool ZRColaApp::OnInit()
|
|||||||
wxFAIL_MSG(wxT("Error reading translation data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading translation data from ZRCola.zrcdb."));
|
||||||
m_t_db.clear();
|
m_t_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::transet_rec::id) {
|
} else if (id == ZRCola::transet_rec::id()) {
|
||||||
dat >> ZRCola::transet_rec(m_ts_db);
|
dat >> ZRCola::transet_rec(m_ts_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading translation set data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading translation set data from ZRCola.zrcdb."));
|
||||||
m_ts_db.clear();
|
m_ts_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::transeq_rec::id) {
|
} else if (id == ZRCola::transeq_rec::id()) {
|
||||||
dat >> ZRCola::transeq_rec(m_tsq_db);
|
dat >> ZRCola::transeq_rec(m_tsq_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading translation sequence data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading translation sequence data from ZRCola.zrcdb."));
|
||||||
m_tsq_db.clear();
|
m_tsq_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::langchar_rec::id) {
|
} else if (id == ZRCola::langchar_rec::id()) {
|
||||||
dat >> ZRCola::langchar_rec(m_lc_db);
|
dat >> ZRCola::langchar_rec(m_lc_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
|
||||||
m_lc_db.clear();
|
m_lc_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::language_rec::id) {
|
} else if (id == ZRCola::language_rec::id()) {
|
||||||
dat >> ZRCola::language_rec(m_lang_db);
|
dat >> ZRCola::language_rec(m_lang_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
|
||||||
m_lang_db.clear();
|
m_lang_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::keyseq_rec::id) {
|
} else if (id == ZRCola::keyseq_rec::id()) {
|
||||||
dat >> ZRCola::keyseq_rec(m_ks_db);
|
dat >> ZRCola::keyseq_rec(m_ks_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading key sequences data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading key sequences data from ZRCola.zrcdb."));
|
||||||
m_ks_db.clear();
|
m_ks_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::character_rec::id) {
|
} else if (id == ZRCola::character_rec::id()) {
|
||||||
dat >> ZRCola::character_rec(m_chr_db);
|
dat >> ZRCola::character_rec(m_chr_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading character data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading character data from ZRCola.zrcdb."));
|
||||||
m_chr_db.clear();
|
m_chr_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::chrcat_rec::id) {
|
} else if (id == ZRCola::chrcat_rec::id()) {
|
||||||
dat >> ZRCola::chrcat_rec(m_cc_db);
|
dat >> ZRCola::chrcat_rec(m_cc_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading character category data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading character category data from ZRCola.zrcdb."));
|
||||||
m_cc_db.clear();
|
m_cc_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::chrtag_rec::id) {
|
} else if (id == ZRCola::chrtag_rec::id()) {
|
||||||
dat >> ZRCola::chrtag_rec(m_ct_db);
|
dat >> ZRCola::chrtag_rec(m_ct_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading character tag data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading character tag data from ZRCola.zrcdb."));
|
||||||
m_ct_db.clear();
|
m_ct_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::tagname_rec::id) {
|
} else if (id == ZRCola::tagname_rec::id()) {
|
||||||
dat >> ZRCola::tagname_rec(m_tn_db);
|
dat >> ZRCola::tagname_rec(m_tn_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading tag name data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading tag name data from ZRCola.zrcdb."));
|
||||||
m_tn_db.clear();
|
m_tn_db.clear();
|
||||||
}
|
}
|
||||||
} else if (id == ZRCola::highlight_rec::id) {
|
} else if (id == ZRCola::highlight_rec::id()) {
|
||||||
dat >> ZRCola::highlight_rec(m_h_db);
|
dat >> ZRCola::highlight_rec(m_h_db);
|
||||||
if (!dat.good()) {
|
if (!dat.good()) {
|
||||||
wxFAIL_MSG(wxT("Error reading highlight data from ZRCola.zrcdb."));
|
wxFAIL_MSG(wxT("Error reading highlight data from ZRCola.zrcdb."));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -82,7 +82,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
winstd::win_handle<NULL> m_running; ///< Global Win32 event to determine if another instance of ZRCola is already running
|
winstd::event m_running; ///< Global Win32 event to determine if another instance of ZRCola is already running
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -148,11 +148,11 @@ void wxZRColaCharacterCatalogPanel::Update()
|
|||||||
wxArrayShort(reinterpret_cast<const short*>(cg.chrshow()), reinterpret_cast<const short*>(cg.chrshow_end())));
|
wxArrayShort(reinterpret_cast<const short*>(cg.chrshow()), reinterpret_cast<const short*>(cg.chrshow_end())));
|
||||||
} else {
|
} else {
|
||||||
// Select frequently used characters only.
|
// Select frequently used characters only.
|
||||||
const wchar_t *src = cg.chrlst();
|
const auto *src = cg.chrlst();
|
||||||
const unsigned __int16 *shown = cg.chrshow();
|
const uint16_t *shown = cg.chrshow();
|
||||||
wxArrayString chars;
|
wxArrayString chars;
|
||||||
for (size_t i = 0, i_end = cg.chrlst_len(), j = 0; i < i_end; j++) {
|
for (size_t i = 0, i_end = cg.chrlst_len(), j = 0; i < i_end; j++) {
|
||||||
for (unsigned __int16 k = 0, mask = shown[j]; k < 16 && i < i_end; k++, mask >>= 1) {
|
for (uint16_t k = 0, mask = shown[j]; k < 16 && i < i_end; k++, mask >>= 1) {
|
||||||
size_t len = wcsnlen(src + i, i_end - i);
|
size_t len = wcsnlen(src + i, i_end - i);
|
||||||
if (mask & 1)
|
if (mask & 1)
|
||||||
chars.Add(wxString(src + i, len));
|
chars.Add(wxString(src + i, len));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -110,7 +110,7 @@ wxString wxZRColaCharGrid::GetToolTipText(int idx)
|
|||||||
const auto &chr = m_chars[idx];
|
const auto &chr = m_chars[idx];
|
||||||
|
|
||||||
// See if this character has a key sequence registered.
|
// See if this character has a key sequence registered.
|
||||||
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(wchar_t)*chr.length()]);
|
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(ZRCola::char_t)*chr.length()]);
|
||||||
ks->ZRCola::keyseq_db::keyseq::keyseq(NULL, 0, chr.data(), chr.length());
|
ks->ZRCola::keyseq_db::keyseq::keyseq(NULL, 0, chr.data(), chr.length());
|
||||||
ZRCola::keyseq_db::indexKey::size_type start;
|
ZRCola::keyseq_db::indexKey::size_type start;
|
||||||
if (app->m_ks_db.idxChr.find(*ks, start)) {
|
if (app->m_ks_db.idxChr.find(*ks, start)) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -13,7 +13,7 @@
|
|||||||
wxIMPLEMENT_DYNAMIC_CLASS(wxZRColaUTF16CharValidator, wxValidator);
|
wxIMPLEMENT_DYNAMIC_CLASS(wxZRColaUTF16CharValidator, wxValidator);
|
||||||
|
|
||||||
|
|
||||||
wxZRColaUTF16CharValidator::wxZRColaUTF16CharValidator(wchar_t *val) :
|
wxZRColaUTF16CharValidator::wxZRColaUTF16CharValidator(ZRCola::char_t *val) :
|
||||||
m_val(val),
|
m_val(val),
|
||||||
wxValidator()
|
wxValidator()
|
||||||
{
|
{
|
||||||
@ -58,11 +58,11 @@ bool wxZRColaUTF16CharValidator::TransferFromWindow()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool wxZRColaUTF16CharValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, wchar_t *val_out)
|
bool wxZRColaUTF16CharValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, ZRCola::char_t *val_out)
|
||||||
{
|
{
|
||||||
const wxStringCharType *buf = val_in;
|
const wxStringCharType *buf = val_in;
|
||||||
|
|
||||||
wchar_t chr = 0;
|
ZRCola::char_t chr = 0;
|
||||||
for (size_t i = i_start;;) {
|
for (size_t i = i_start;;) {
|
||||||
if (i >= i_end) {
|
if (i >= i_end) {
|
||||||
// End of Unicode found.
|
// End of Unicode found.
|
||||||
@ -156,7 +156,7 @@ bool wxZRColaUnicodeDumpValidator::Parse(const wxString &val_in, size_t i_start,
|
|||||||
wxString str;
|
wxString str;
|
||||||
for (size_t i = i_start;;) {
|
for (size_t i = i_start;;) {
|
||||||
const wxStringCharType *buf_next;
|
const wxStringCharType *buf_next;
|
||||||
wchar_t chr;
|
ZRCola::char_t chr;
|
||||||
if ((buf_next = wmemchr(buf + i, L'+', i_end - i)) != NULL) {
|
if ((buf_next = wmemchr(buf + i, L'+', i_end - i)) != NULL) {
|
||||||
// Unicode dump separator found.
|
// Unicode dump separator found.
|
||||||
if (!wxZRColaUTF16CharValidator::Parse(val_in, i, buf_next - buf, ctrl, parent, &chr))
|
if (!wxZRColaUTF16CharValidator::Parse(val_in, i, buf_next - buf, ctrl, parent, &chr))
|
||||||
@ -242,7 +242,7 @@ void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
|
|||||||
|
|
||||||
m_gridPreview->SetCellValue(0, 0, m_char);
|
m_gridPreview->SetCellValue(0, 0, m_char);
|
||||||
|
|
||||||
std::unique_ptr<ZRCola::character_db::character> ch((ZRCola::character_db::character*)new char[sizeof(ZRCola::character_db::character) + sizeof(wchar_t)*m_char.length()]);
|
std::unique_ptr<ZRCola::character_db::character> ch((ZRCola::character_db::character*)new char[sizeof(ZRCola::character_db::character) + sizeof(ZRCola::char_t)*m_char.length()]);
|
||||||
ch->ZRCola::character_db::character::character(m_char.data(), m_char.length());
|
ch->ZRCola::character_db::character::character(m_char.data(), m_char.length());
|
||||||
ZRCola::character_db::indexChr::size_type ch_start;
|
ZRCola::character_db::indexChr::size_type ch_start;
|
||||||
if (app->m_chr_db.idxChr.find(*ch, ch_start)) {
|
if (app->m_chr_db.idxChr.find(*ch, ch_start)) {
|
||||||
@ -251,7 +251,7 @@ void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
|
|||||||
m_description->SetValue(wxString(chr.desc(), chr.desc_len()));
|
m_description->SetValue(wxString(chr.desc(), chr.desc_len()));
|
||||||
{
|
{
|
||||||
// See if this character has a key sequence registered.
|
// See if this character has a key sequence registered.
|
||||||
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(wchar_t)*m_char.length()]);
|
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(ZRCola::char_t)*m_char.length()]);
|
||||||
ks->ZRCola::keyseq_db::keyseq::keyseq(NULL, 0, m_char.data(), m_char.length());
|
ks->ZRCola::keyseq_db::keyseq::keyseq(NULL, 0, m_char.data(), m_char.length());
|
||||||
ZRCola::keyseq_db::indexKey::size_type ks_start;
|
ZRCola::keyseq_db::indexKey::size_type ks_start;
|
||||||
if (app->m_ks_db.idxChr.find(*ks, ks_start)) {
|
if (app->m_ks_db.idxChr.find(*ks, ks_start)) {
|
||||||
@ -284,7 +284,7 @@ void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
|
|||||||
|
|
||||||
// Find character tags.
|
// Find character tags.
|
||||||
std::list<std::wstring> tag_names;
|
std::list<std::wstring> tag_names;
|
||||||
std::unique_ptr<ZRCola::chrtag_db::chrtag> ct((ZRCola::chrtag_db::chrtag*)new char[sizeof(ZRCola::chrtag_db::chrtag) + sizeof(wchar_t)*m_char.length()]);
|
std::unique_ptr<ZRCola::chrtag_db::chrtag> ct((ZRCola::chrtag_db::chrtag*)new char[sizeof(ZRCola::chrtag_db::chrtag) + sizeof(ZRCola::char_t)*m_char.length()]);
|
||||||
ct->ZRCola::chrtag_db::chrtag::chrtag(m_char.data(), m_char.length());
|
ct->ZRCola::chrtag_db::chrtag::chrtag(m_char.data(), m_char.length());
|
||||||
ZRCola::chrtag_db::indexChr::size_type ct_start, ct_end;
|
ZRCola::chrtag_db::indexChr::size_type ct_start, ct_end;
|
||||||
if (app->m_ct_db.idxChr.find(*ct, ct_start, ct_end)) {
|
if (app->m_ct_db.idxChr.find(*ct, ct_start, ct_end)) {
|
||||||
@ -301,7 +301,7 @@ void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
|
|||||||
// Add name to the list.
|
// Add name to the list.
|
||||||
tag_names.push_back(std::wstring(tn.name(), tn.name_end()));
|
tag_names.push_back(std::wstring(tn.name(), tn.name_end()));
|
||||||
break;
|
break;
|
||||||
} else if (ZRCola::tagname_db::tagname::CompareName(m_locale, name->data(), (unsigned __int16)name->length(), tn.name(), tn.name_len()) == 0)
|
} else if (ZRCola::tagname_db::tagname::CompareName(m_locale, name->data(), (uint16_t)name->length(), tn.name(), tn.name_len()) == 0)
|
||||||
// Name is already on the list.
|
// Name is already on the list.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -718,7 +718,7 @@ wxThread::ExitCode wxZRColaCharSelect::SearchThread::Entry()
|
|||||||
|
|
||||||
{
|
{
|
||||||
// Search by tags: Get tags with given names. Then, get characters of found tags.
|
// Search by tags: Get tags with given names. Then, get characters of found tags.
|
||||||
std::map<ZRCola::tagid_t, unsigned __int16> hits_tag;
|
std::map<ZRCola::tagid_t, uint16_t> hits_tag;
|
||||||
if (!app->m_tn_db.Search(m_search.c_str(), m_parent->m_locale, hits_tag, TestDestroyS, this)) return (wxThread::ExitCode)1;
|
if (!app->m_tn_db.Search(m_search.c_str(), m_parent->m_locale, hits_tag, TestDestroyS, this)) return (wxThread::ExitCode)1;
|
||||||
if (!app->m_ct_db.Search(hits_tag, app->m_chr_db, m_cats, hits, TestDestroyS, this)) return (wxThread::ExitCode)1;
|
if (!app->m_ct_db.Search(hits_tag, app->m_chr_db, m_cats, hits, TestDestroyS, this)) return (wxThread::ExitCode)1;
|
||||||
}
|
}
|
||||||
@ -766,14 +766,14 @@ wxThread::ExitCode wxZRColaCharSelect::SearchThread::Entry()
|
|||||||
|
|
||||||
int __cdecl wxZRColaCharSelect::SearchThread::CompareHits(const void *a, const void *b)
|
int __cdecl wxZRColaCharSelect::SearchThread::CompareHits(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
const std::pair<ZRCola::charrank_t, wchar_t> *_a = (const std::pair<ZRCola::charrank_t, wchar_t>*)a;
|
const std::pair<ZRCola::charrank_t, ZRCola::char_t> *_a = (const std::pair<ZRCola::charrank_t, ZRCola::char_t>*)a;
|
||||||
const std::pair<ZRCola::charrank_t, wchar_t> *_b = (const std::pair<ZRCola::charrank_t, wchar_t>*)b;
|
const std::pair<ZRCola::charrank_t, ZRCola::char_t> *_b = (const std::pair<ZRCola::charrank_t, ZRCola::char_t>*)b;
|
||||||
|
|
||||||
if (_a->first > _b->first) return -1;
|
if (_a->first > _b->first) return -1;
|
||||||
else if (_a->first < _b->first) return 1;
|
if (_a->first < _b->first) return 1;
|
||||||
|
|
||||||
if (_a->second < _b->second) return -1;
|
if (_a->second < _b->second) return -1;
|
||||||
else if (_a->second > _b->second) return 1;
|
if (_a->second > _b->second) return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -843,7 +843,7 @@ bool wxPersistentZRColaCharSelect::Restore()
|
|||||||
for (wxStringTokenizer tok(str, wxT("|")); tok.HasMoreTokens(); ) {
|
for (wxStringTokenizer tok(str, wxT("|")); tok.HasMoreTokens(); ) {
|
||||||
wxString chr;
|
wxString chr;
|
||||||
for (wxStringTokenizer tok_chr(tok.GetNextToken(), wxT("+")); tok_chr.HasMoreTokens(); )
|
for (wxStringTokenizer tok_chr(tok.GetNextToken(), wxT("+")); tok_chr.HasMoreTokens(); )
|
||||||
chr += (wchar_t)_tcstoul(tok_chr.GetNextToken().c_str(), NULL, 16);
|
chr += (ZRCola::char_t)_tcstoul(tok_chr.GetNextToken().c_str(), NULL, 16);
|
||||||
val.Add(chr);
|
val.Add(chr);
|
||||||
}
|
}
|
||||||
wnd->m_gridRecent->SetCharacters(val);
|
wnd->m_gridRecent->SetCharacters(val);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -40,7 +40,7 @@ public:
|
|||||||
///
|
///
|
||||||
/// Construct the validator with a value to store data
|
/// Construct the validator with a value to store data
|
||||||
///
|
///
|
||||||
wxZRColaUTF16CharValidator(wchar_t *val = NULL);
|
wxZRColaUTF16CharValidator(ZRCola::char_t *val = NULL);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Copies this validator
|
/// Copies this validator
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -49,7 +49,7 @@ void wxZRColaComposerPanel::RestoreFromStateFile()
|
|||||||
wxFFile file(fileName, wxT("rb"));
|
wxFFile file(fileName, wxT("rb"));
|
||||||
if (file.IsOpened()) {
|
if (file.IsOpened()) {
|
||||||
// Load source text.
|
// Load source text.
|
||||||
unsigned __int64 n;
|
uint64_t n;
|
||||||
file.Read(&n, sizeof(n));
|
file.Read(&n, sizeof(n));
|
||||||
if (!file.Error()) {
|
if (!file.Error()) {
|
||||||
wxString source;
|
wxString source;
|
||||||
@ -98,9 +98,11 @@ void wxZRColaComposerPanel::SynchronizePanels()
|
|||||||
// ZRCola decompose first, then re-compose.
|
// ZRCola decompose first, then re-compose.
|
||||||
app->m_t_db.TranslateInv(app->m_mainWnd->m_composition_id, dst.data(), dst.size(), dst2, &map);
|
app->m_t_db.TranslateInv(app->m_mainWnd->m_composition_id, dst.data(), dst.size(), dst2, &map);
|
||||||
m_mapping.push_back(std::move(map));
|
m_mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
|
|
||||||
app->m_t_db.Translate(app->m_mainWnd->m_composition_id, dst2.data(), dst2.size(), dst, &map);
|
app->m_t_db.Translate(app->m_mainWnd->m_composition_id, dst2.data(), dst2.size(), dst, &map);
|
||||||
m_mapping.push_back(std::move(map));
|
m_mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Other translations
|
// Other translations
|
||||||
@ -109,7 +111,9 @@ void wxZRColaComposerPanel::SynchronizePanels()
|
|||||||
for (auto s = sets_begin; s != sets_end; ++s) {
|
for (auto s = sets_begin; s != sets_end; ++s) {
|
||||||
app->m_t_db.Translate(*s, dst.data(), dst.size(), dst2, &map);
|
app->m_t_db.Translate(*s, dst.data(), dst.size(), dst2, &map);
|
||||||
m_mapping.push_back(std::move(map));
|
m_mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
dst = std::move(dst2);
|
dst = std::move(dst2);
|
||||||
|
dst2.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_source->GetSelection(&m_selSource.first, &m_selSource.second);
|
m_source->GetSelection(&m_selSource.first, &m_selSource.second);
|
||||||
@ -144,18 +148,24 @@ void wxZRColaComposerPanel::SynchronizePanels()
|
|||||||
for (auto s = sets_end; (s--) != sets_begin;) {
|
for (auto s = sets_end; (s--) != sets_begin;) {
|
||||||
app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map);
|
app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map);
|
||||||
dst = std::move(dst2);
|
dst = std::move(dst2);
|
||||||
|
dst2.clear();
|
||||||
|
|
||||||
map.invert();
|
for (auto& m : map)
|
||||||
|
m.invert();
|
||||||
m_mapping.push_back(std::move(map));
|
m_mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (app->m_mainWnd->m_composition) {
|
if (app->m_mainWnd->m_composition) {
|
||||||
// ZRCola decompose.
|
// ZRCola decompose.
|
||||||
app->m_t_db.TranslateInv(app->m_mainWnd->m_composition_id, dst.data(), dst.size(), &app->m_lc_db, app->m_mainWnd->m_settings->m_lang, dst2, &map);
|
app->m_t_db.TranslateInv(app->m_mainWnd->m_composition_id, dst.data(), dst.size(), &app->m_lc_db, app->m_mainWnd->m_settings->m_lang, dst2, &map);
|
||||||
dst = std::move(dst2);
|
dst = std::move(dst2);
|
||||||
|
dst2.clear();
|
||||||
|
|
||||||
map.invert();
|
for (auto& m : map)
|
||||||
|
m.invert();
|
||||||
m_mapping.push_back(std::move(map));
|
m_mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_destination->GetSelection(&m_selDestination.first, &m_selDestination.second);
|
m_destination->GetSelection(&m_selDestination.first, &m_selDestination.second);
|
||||||
@ -195,16 +205,16 @@ void wxZRColaComposerPanel::OnSourcePaint(wxPaintEvent& event)
|
|||||||
m_selSource.second = to;
|
m_selSource.second = to;
|
||||||
|
|
||||||
m_sourceHex->SetSelection(
|
m_sourceHex->SetSelection(
|
||||||
m_selSourceHex.first = (long)m_mappingSourceHex.to_dst(from),
|
m_selSourceHex.first = (long)stdex::src2dst<size_t>(m_mappingSourceHex, from),
|
||||||
m_selSourceHex.second = (long)m_mappingSourceHex.to_dst(to ));
|
m_selSourceHex.second = (long)stdex::src2dst<size_t>(m_mappingSourceHex, to ));
|
||||||
|
|
||||||
m_destination->SetSelection(
|
m_destination->SetSelection(
|
||||||
m_selDestination.first = (long)MapToDestination(from),
|
m_selDestination.first = (long)MapToDestination(from),
|
||||||
m_selDestination.second = (long)MapToDestination(to ));
|
m_selDestination.second = (long)MapToDestination(to ));
|
||||||
|
|
||||||
m_destinationHex->SetSelection(
|
m_destinationHex->SetSelection(
|
||||||
m_selDestinationHex.first = (long)m_mappingDestinationHex.to_dst(m_selDestination.first ),
|
m_selDestinationHex.first = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.first ),
|
||||||
m_selDestinationHex.second = (long)m_mappingDestinationHex.to_dst(m_selDestination.second));
|
m_selDestinationHex.second = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,16 +232,16 @@ void wxZRColaComposerPanel::OnSourceHexPaint(wxPaintEvent& event)
|
|||||||
m_selSourceHex.second = to;
|
m_selSourceHex.second = to;
|
||||||
|
|
||||||
m_source->SetSelection(
|
m_source->SetSelection(
|
||||||
m_selSource.first = (long)m_mappingSourceHex.to_src(from),
|
m_selSource.first = (long)stdex::dst2src<size_t>(m_mappingSourceHex, from),
|
||||||
m_selSource.second = (long)m_mappingSourceHex.to_src(to ));
|
m_selSource.second = (long)stdex::dst2src<size_t>(m_mappingSourceHex, to ));
|
||||||
|
|
||||||
m_destination->SetSelection(
|
m_destination->SetSelection(
|
||||||
m_selDestination.first = (long)MapToDestination(m_selSource.first ),
|
m_selDestination.first = (long)MapToDestination(m_selSource.first ),
|
||||||
m_selDestination.second = (long)MapToDestination(m_selSource.second));
|
m_selDestination.second = (long)MapToDestination(m_selSource.second));
|
||||||
|
|
||||||
m_destinationHex->SetSelection(
|
m_destinationHex->SetSelection(
|
||||||
m_selDestinationHex.first = (long)m_mappingDestinationHex.to_dst(m_selDestination.first ),
|
m_selDestinationHex.first = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.first ),
|
||||||
m_selDestinationHex.second = (long)m_mappingDestinationHex.to_dst(m_selDestination.second));
|
m_selDestinationHex.second = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,16 +278,16 @@ void wxZRColaComposerPanel::OnDestinationPaint(wxPaintEvent& event)
|
|||||||
m_selDestination.second = to;
|
m_selDestination.second = to;
|
||||||
|
|
||||||
m_destinationHex->SetSelection(
|
m_destinationHex->SetSelection(
|
||||||
m_selDestinationHex.first = (long)m_mappingDestinationHex.to_dst(from),
|
m_selDestinationHex.first = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, from),
|
||||||
m_selDestinationHex.second = (long)m_mappingDestinationHex.to_dst(to ));
|
m_selDestinationHex.second = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, to ));
|
||||||
|
|
||||||
m_source->SetSelection(
|
m_source->SetSelection(
|
||||||
m_selSource.first = (long)MapToSource(from),
|
m_selSource.first = (long)MapToSource(from),
|
||||||
m_selSource.second = (long)MapToSource(to ));
|
m_selSource.second = (long)MapToSource(to ));
|
||||||
|
|
||||||
m_sourceHex->SetSelection(
|
m_sourceHex->SetSelection(
|
||||||
m_selSourceHex.first = (long)m_mappingSourceHex.to_dst(m_selSource.first ),
|
m_selSourceHex.first = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.first ),
|
||||||
m_selSourceHex.second = (long)m_mappingSourceHex.to_dst(m_selSource.second));
|
m_selSourceHex.second = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,16 +305,16 @@ void wxZRColaComposerPanel::OnDestinationHexPaint(wxPaintEvent& event)
|
|||||||
m_selDestinationHex.second = to;
|
m_selDestinationHex.second = to;
|
||||||
|
|
||||||
m_destination->SetSelection(
|
m_destination->SetSelection(
|
||||||
m_selDestination.first = (long)m_mappingDestinationHex.to_src(from),
|
m_selDestination.first = (long)stdex::dst2src<size_t>(m_mappingDestinationHex, from),
|
||||||
m_selDestination.second = (long)m_mappingDestinationHex.to_src(to ));
|
m_selDestination.second = (long)stdex::dst2src<size_t>(m_mappingDestinationHex, to ));
|
||||||
|
|
||||||
m_source->SetSelection(
|
m_source->SetSelection(
|
||||||
m_selSource.first = (long)MapToSource(m_selDestination.first ),
|
m_selSource.first = (long)MapToSource(m_selDestination.first ),
|
||||||
m_selSource.second = (long)MapToSource(m_selDestination.second));
|
m_selSource.second = (long)MapToSource(m_selDestination.second));
|
||||||
|
|
||||||
m_sourceHex->SetSelection(
|
m_sourceHex->SetSelection(
|
||||||
m_selSourceHex.first = (long)m_mappingSourceHex.to_dst(m_selSource.first ),
|
m_selSourceHex.first = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.first ),
|
||||||
m_selSourceHex.second = (long)m_mappingSourceHex.to_dst(m_selSource.second));
|
m_selSourceHex.second = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,8 +418,8 @@ void wxZRColaComposerPanel::SetHexValue(wxTextCtrl *wnd, std::pair<long, long> &
|
|||||||
|
|
||||||
wnd->SetValue(hex);
|
wnd->SetValue(hex);
|
||||||
wnd->SetSelection(
|
wnd->SetSelection(
|
||||||
range.first = (long)mapping.to_dst(from),
|
range.first = (long)stdex::src2dst<size_t>(mapping, from),
|
||||||
range.second = (long)mapping.to_dst(to ));
|
range.second = (long)stdex::src2dst<size_t>(mapping, to ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -97,7 +97,7 @@ protected:
|
|||||||
inline size_t wxZRColaComposerPanel::MapToDestination(_In_ size_t src) const
|
inline size_t wxZRColaComposerPanel::MapToDestination(_In_ size_t src) const
|
||||||
{
|
{
|
||||||
for (auto m = m_mapping.cbegin(), m_end = m_mapping.cend(); m != m_end; ++m)
|
for (auto m = m_mapping.cbegin(), m_end = m_mapping.cend(); m != m_end; ++m)
|
||||||
src = m->to_dst(src);
|
src = stdex::src2dst(*m, src);
|
||||||
|
|
||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
@ -106,7 +106,7 @@ inline size_t wxZRColaComposerPanel::MapToDestination(_In_ size_t src) const
|
|||||||
inline size_t wxZRColaComposerPanel::MapToSource(_In_ size_t dst) const
|
inline size_t wxZRColaComposerPanel::MapToSource(_In_ size_t dst) const
|
||||||
{
|
{
|
||||||
for (auto m = m_mapping.crbegin(), m_end = m_mapping.crend(); m != m_end; ++m)
|
for (auto m = m_mapping.crbegin(), m_end = m_mapping.crend(); m != m_end; ++m)
|
||||||
dst = m->to_src(dst);
|
dst = stdex::dst2src(*m, dst);
|
||||||
|
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///
|
///
|
||||||
|
Binary file not shown.
@ -66,9 +66,6 @@
|
|||||||
<ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj">
|
<ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj">
|
||||||
<Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project>
|
<Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\lib\WinStd\build\WinStd.vcxproj">
|
|
||||||
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
|
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj">
|
||||||
<Project>{D3E29951-D9F5-486D-A167-20AE8E90B1FA}</Project>
|
<Project>{D3E29951-D9F5-486D-A167-20AE8E90B1FA}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -42,7 +42,7 @@ void ZRCola::DBSource::character_bank::build_related()
|
|||||||
|
|
||||||
|
|
||||||
ZRCola::DBSource::character_bank::build_related_worker::build_related_worker(_In_ const character_bank *cb, _In_ iterator from, _In_ iterator to) :
|
ZRCola::DBSource::character_bank::build_related_worker::build_related_worker(_In_ const character_bank *cb, _In_ iterator from, _In_ iterator to) :
|
||||||
win_handle<INVALID_HANDLE_VALUE>((HANDLE)_beginthreadex(NULL, 0, process, this, CREATE_SUSPENDED, NULL)),
|
winstd::thread((HANDLE)_beginthreadex(NULL, 0, process, this, CREATE_SUSPENDED, NULL)),
|
||||||
m_heap(HeapCreate(0, 0, 0)),
|
m_heap(HeapCreate(0, 0, 0)),
|
||||||
m_cb(cb),
|
m_cb(cb),
|
||||||
m_from(from),
|
m_from(from),
|
||||||
@ -186,7 +186,7 @@ void ZRCola::DBSource::character_desc_idx::add_keywords(const set<wstring> &term
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ZRCola::DBSource::character_desc_idx::save(ZRCola::textindex<wchar_t, wchar_t, unsigned __int32> &idx) const
|
void ZRCola::DBSource::character_desc_idx::save(ZRCola::textindex<wchar_t, wchar_t, uint32_t> &idx) const
|
||||||
{
|
{
|
||||||
idx .clear();
|
idx .clear();
|
||||||
idx.keys .clear();
|
idx.keys .clear();
|
||||||
@ -205,7 +205,7 @@ void ZRCola::DBSource::character_desc_idx::save(ZRCola::textindex<wchar_t, wchar
|
|||||||
|
|
||||||
// Convert the index.
|
// Convert the index.
|
||||||
for (const_iterator i = cbegin(), i_end = cend(); i != i_end; ++i) {
|
for (const_iterator i = cbegin(), i_end = cend(); i != i_end; ++i) {
|
||||||
ZRCola::mappair_t<unsigned __int32> p = { idx.keys.size(), idx.values.size() };
|
ZRCola::mappair_t<uint32_t> p = { idx.keys.size(), idx.values.size() };
|
||||||
idx.push_back(p);
|
idx.push_back(p);
|
||||||
idx.keys.insert(idx.keys.end(), i->first.cbegin(), i->first.cend());
|
idx.keys.insert(idx.keys.end(), i->first.cbegin(), i->first.cend());
|
||||||
idx.values.insert(idx.values.end(), i->second.cbegin(), i->second.cend());
|
idx.values.insert(idx.values.end(), i->second.cbegin(), i->second.cend());
|
||||||
@ -670,7 +670,7 @@ bool ZRCola::DBSource::GetTagNames(const winstd::com_obj<ADOField>& f, LCID lcid
|
|||||||
// Add name to the list.
|
// Add name to the list.
|
||||||
names.push_back(std::move(name));
|
names.push_back(std::move(name));
|
||||||
break;
|
break;
|
||||||
} else if (ZRCola::tagname_db::tagname::CompareName(lcid, n->data(), (unsigned __int16)n->length(), name.data(), (unsigned __int16)name.length()) == CSTR_EQUAL) {
|
} else if (ZRCola::tagname_db::tagname::CompareName(lcid, n->data(), (uint16_t)n->length(), name.data(), (uint16_t)name.length()) == CSTR_EQUAL) {
|
||||||
// Name is already on the list.
|
// Name is already on the list.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -222,11 +222,11 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
class chrgrp {
|
class chrgrp {
|
||||||
public:
|
public:
|
||||||
short grp; ///< Character group ID
|
short grp; ///< Character group ID
|
||||||
short rank; ///< Rank
|
short rank; ///< Rank
|
||||||
std::wstring name; ///< Name
|
std::wstring name; ///< Name
|
||||||
std::vector<wchar_t> chars; ///< Characters (zero-delimited)
|
std::vector<wchar_t> chars; ///< Characters (zero-delimited)
|
||||||
std::vector<unsigned __int16> show; ///< Bit vector if particular character from \c chars is displayed initially
|
std::vector<uint16_t> show; ///< Bit vector if particular character from \c chars is displayed initially
|
||||||
|
|
||||||
inline chrgrp() : grp(0), rank(0) {}
|
inline chrgrp() : grp(0), rank(0) {}
|
||||||
};
|
};
|
||||||
@ -275,7 +275,7 @@ namespace ZRCola {
|
|||||||
void build_related();
|
void build_related();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
class build_related_worker : public winstd::win_handle<INVALID_HANDLE_VALUE>
|
class build_related_worker : public winstd::thread
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
build_related_worker(_In_ const character_bank *cb, _In_ iterator from, _In_ iterator to);
|
build_related_worker(_In_ const character_bank *cb, _In_ iterator from, _In_ iterator to);
|
||||||
@ -308,19 +308,12 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
/// Character description index key comparator
|
/// Character description index key comparator
|
||||||
///
|
///
|
||||||
struct character_desc_idx_less : public std::binary_function<std::wstring, std::wstring, bool>
|
struct character_desc_idx_less
|
||||||
{
|
{
|
||||||
inline bool operator()(const std::wstring& _Left, const std::wstring& _Right) const
|
inline bool operator()(const std::wstring& _Left, const std::wstring& _Right) const
|
||||||
{
|
{
|
||||||
size_t
|
auto &coll = std::use_facet<std::collate<wchar_t>>(std::locale());
|
||||||
_Left_len = _Left .size(),
|
return coll.compare(&*_Left.cbegin(), &*_Left.cend(), &*_Right.cbegin(), &*_Right.cend()) < 0;
|
||||||
_Right_len = _Right.size();
|
|
||||||
|
|
||||||
int r = _wcsncoll(_Left.c_str(), _Right.c_str(), std::min<size_t>(_Left_len, _Right_len));
|
|
||||||
if (r != 0 ) return r < 0;
|
|
||||||
else if (_Left_len < _Right_len) return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -340,7 +333,7 @@ namespace ZRCola {
|
|||||||
add_keywords(terms, chr, sub);
|
add_keywords(terms, chr, sub);
|
||||||
}
|
}
|
||||||
|
|
||||||
void save(ZRCola::textindex<wchar_t, wchar_t, unsigned __int32> &idx) const;
|
void save(ZRCola::textindex<wchar_t, wchar_t, uint32_t> &idx) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
inline void add_keyword(const std::wstring &term, const std::wstring &chr)
|
inline void add_keyword(const std::wstring &term, const std::wstring &chr)
|
||||||
@ -920,16 +913,16 @@ namespace ZRCola {
|
|||||||
|
|
||||||
inline ZRCola::translation_db& operator<<(_Inout_ ZRCola::translation_db &db, _In_ const ZRCola::DBSource::translation &rec)
|
inline ZRCola::translation_db& operator<<(_Inout_ ZRCola::translation_db &db, _In_ const ZRCola::DBSource::translation &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.set);
|
db.data.push_back((uint16_t)rec.set);
|
||||||
db.data.push_back((unsigned __int16)rec.dst.rank);
|
db.data.push_back((uint16_t)rec.dst.rank);
|
||||||
db.data.push_back((unsigned __int16)rec.src.rank);
|
db.data.push_back((uint16_t)rec.src.rank);
|
||||||
std::wstring::size_type n = rec.dst.str.length();
|
std::wstring::size_type n = rec.dst.str.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("destination overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("destination overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.src.str.length();
|
n += rec.src.str.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("source overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("source overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.dst.str.cbegin(), rec.dst.str.cend());
|
db.data.insert(db.data.end(), rec.dst.str.cbegin(), rec.dst.str.cend());
|
||||||
db.data.insert(db.data.end(), rec.src.str.cbegin(), rec.src.str.cend());
|
db.data.insert(db.data.end(), rec.src.str.cbegin(), rec.src.str.cend());
|
||||||
db.idxSrc.push_back(idx);
|
db.idxSrc.push_back(idx);
|
||||||
@ -941,14 +934,14 @@ inline ZRCola::translation_db& operator<<(_Inout_ ZRCola::translation_db &db, _I
|
|||||||
|
|
||||||
inline ZRCola::transet_db& operator<<(_Inout_ ZRCola::transet_db &db, _In_ const ZRCola::DBSource::transet &rec)
|
inline ZRCola::transet_db& operator<<(_Inout_ ZRCola::transet_db &db, _In_ const ZRCola::DBSource::transet &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.set);
|
db.data.push_back((uint16_t)rec.set);
|
||||||
std::wstring::size_type n = rec.src.length();
|
std::wstring::size_type n = rec.src.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("translation set source name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("translation set source name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.dst.length();
|
n += rec.dst.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("translation set destination name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("translation set destination name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.src.cbegin(), rec.src.cend());
|
db.data.insert(db.data.end(), rec.src.cbegin(), rec.src.cend());
|
||||||
db.data.insert(db.data.end(), rec.dst.cbegin(), rec.dst.cend());
|
db.data.insert(db.data.end(), rec.dst.cbegin(), rec.dst.cend());
|
||||||
db.idxTranSet.push_back(idx);
|
db.idxTranSet.push_back(idx);
|
||||||
@ -959,18 +952,18 @@ inline ZRCola::transet_db& operator<<(_Inout_ ZRCola::transet_db &db, _In_ const
|
|||||||
|
|
||||||
inline ZRCola::transeq_db& operator<<(_Inout_ ZRCola::transeq_db &db, _In_ const ZRCola::DBSource::transeq &rec)
|
inline ZRCola::transeq_db& operator<<(_Inout_ ZRCola::transeq_db &db, _In_ const ZRCola::DBSource::transeq &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.seq);
|
db.data.push_back((uint16_t)rec.seq);
|
||||||
db.data.push_back((unsigned __int16)rec.rank);
|
db.data.push_back((uint16_t)rec.rank);
|
||||||
std::wstring::size_type n = rec.name.length();
|
std::wstring::size_type n = rec.name.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("translation sequence name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("translation sequence name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.sets.size();
|
n += rec.sets.size();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("translation sequence sets overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("translation sequence sets overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.name.cbegin(), rec.name.cend());
|
db.data.insert(db.data.end(), rec.name.cbegin(), rec.name.cend());
|
||||||
for (auto s = rec.sets.cbegin(), s_end = rec.sets.cend(); s != s_end; ++s)
|
for (auto s = rec.sets.cbegin(), s_end = rec.sets.cend(); s != s_end; ++s)
|
||||||
db.data.push_back((unsigned __int16)*s);
|
db.data.push_back((uint16_t)*s);
|
||||||
db.idxTranSeq.push_back(idx);
|
db.idxTranSeq.push_back(idx);
|
||||||
db.idxRank .push_back(idx);
|
db.idxRank .push_back(idx);
|
||||||
|
|
||||||
@ -980,13 +973,13 @@ inline ZRCola::transeq_db& operator<<(_Inout_ ZRCola::transeq_db &db, _In_ const
|
|||||||
|
|
||||||
inline ZRCola::keyseq_db& operator<<(_Inout_ ZRCola::keyseq_db &db, _In_ const ZRCola::DBSource::keyseq &rec)
|
inline ZRCola::keyseq_db& operator<<(_Inout_ ZRCola::keyseq_db &db, _In_ const ZRCola::DBSource::keyseq &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
std::wstring::size_type n = rec.chr.length();
|
std::wstring::size_type n = rec.chr.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.seq.size() * sizeof(ZRCola::keyseq_db::keyseq::key_t) / sizeof(wchar_t);
|
n += rec.seq.size() * sizeof(ZRCola::keyseq_db::keyseq::key_t) / sizeof(wchar_t);
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("key sequence overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("key sequence overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
||||||
for (auto kc = rec.seq.cbegin(), kc_end = rec.seq.cend(); kc != kc_end; ++kc) {
|
for (auto kc = rec.seq.cbegin(), kc_end = rec.seq.cend(); kc != kc_end; ++kc) {
|
||||||
db.data.push_back(kc->key);
|
db.data.push_back(kc->key);
|
||||||
@ -1004,11 +997,11 @@ inline ZRCola::keyseq_db& operator<<(_Inout_ ZRCola::keyseq_db &db, _In_ const Z
|
|||||||
|
|
||||||
inline ZRCola::language_db& operator<<(_Inout_ ZRCola::language_db &db, _In_ const ZRCola::DBSource::language &rec)
|
inline ZRCola::language_db& operator<<(_Inout_ ZRCola::language_db &db, _In_ const ZRCola::DBSource::language &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.insert(db.data.end(), reinterpret_cast<const unsigned __int16*>(&rec.lang), reinterpret_cast<const unsigned __int16*>(&rec.lang + 1));
|
db.data.insert(db.data.end(), reinterpret_cast<const uint16_t*>(&rec.lang), reinterpret_cast<const uint16_t*>(&rec.lang + 1));
|
||||||
std::wstring::size_type n = rec.name.length();
|
std::wstring::size_type n = rec.name.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("language name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("language name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.name.cbegin(), rec.name.cend());
|
db.data.insert(db.data.end(), rec.name.cbegin(), rec.name.cend());
|
||||||
db.idxLang.push_back(idx);
|
db.idxLang.push_back(idx);
|
||||||
|
|
||||||
@ -1018,11 +1011,11 @@ inline ZRCola::language_db& operator<<(_Inout_ ZRCola::language_db &db, _In_ con
|
|||||||
|
|
||||||
inline ZRCola::langchar_db& operator<<(_Inout_ ZRCola::langchar_db &db, _In_ const ZRCola::DBSource::langchar &rec)
|
inline ZRCola::langchar_db& operator<<(_Inout_ ZRCola::langchar_db &db, _In_ const ZRCola::DBSource::langchar &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.insert(db.data.end(), reinterpret_cast<const unsigned __int16*>(&rec.lang), reinterpret_cast<const unsigned __int16*>(&rec.lang + 1));
|
db.data.insert(db.data.end(), reinterpret_cast<const uint16_t*>(&rec.lang), reinterpret_cast<const uint16_t*>(&rec.lang + 1));
|
||||||
std::wstring::size_type n = rec.chr.length();
|
std::wstring::size_type n = rec.chr.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
||||||
db.idxChr .push_back(idx);
|
db.idxChr .push_back(idx);
|
||||||
#ifdef ZRCOLA_LANGCHAR_LANG_IDX
|
#ifdef ZRCOLA_LANGCHAR_LANG_IDX
|
||||||
@ -1035,15 +1028,15 @@ inline ZRCola::langchar_db& operator<<(_Inout_ ZRCola::langchar_db &db, _In_ con
|
|||||||
|
|
||||||
inline ZRCola::chrgrp_db& operator<<(_Inout_ ZRCola::chrgrp_db &db, _In_ const ZRCola::DBSource::chrgrp &rec)
|
inline ZRCola::chrgrp_db& operator<<(_Inout_ ZRCola::chrgrp_db &db, _In_ const ZRCola::DBSource::chrgrp &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.grp);
|
db.data.push_back((uint16_t)rec.grp);
|
||||||
db.data.push_back((unsigned __int16)rec.rank);
|
db.data.push_back((uint16_t)rec.rank);
|
||||||
std::wstring::size_type n = rec.name.length();
|
std::wstring::size_type n = rec.name.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character group name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character group name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.chars.size();
|
n += rec.chars.size();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character group characters overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character group characters overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.name .cbegin(), rec.name .cend());
|
db.data.insert(db.data.end(), rec.name .cbegin(), rec.name .cend());
|
||||||
db.data.insert(db.data.end(), rec.chars.cbegin(), rec.chars.cend());
|
db.data.insert(db.data.end(), rec.chars.cbegin(), rec.chars.cend());
|
||||||
db.data.insert(db.data.end(), rec.show .cbegin(), rec.show .cend());
|
db.data.insert(db.data.end(), rec.show .cbegin(), rec.show .cend());
|
||||||
@ -1055,17 +1048,17 @@ inline ZRCola::chrgrp_db& operator<<(_Inout_ ZRCola::chrgrp_db &db, _In_ const Z
|
|||||||
|
|
||||||
inline ZRCola::character_db& operator<<(_Inout_ ZRCola::character_db &db, _In_ const ZRCola::DBSource::character &rec)
|
inline ZRCola::character_db& operator<<(_Inout_ ZRCola::character_db &db, _In_ const ZRCola::DBSource::character &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.insert(db.data.end(), reinterpret_cast<const unsigned __int16*>(&rec.second.cat), reinterpret_cast<const unsigned __int16*>(&rec.second.cat + 1));
|
db.data.insert(db.data.end(), reinterpret_cast<const uint16_t*>(&rec.second.cat), reinterpret_cast<const uint16_t*>(&rec.second.cat + 1));
|
||||||
std::wstring::size_type n = rec.first.length();
|
std::wstring::size_type n = rec.first.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.second.desc.length();
|
n += rec.second.desc.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character description overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character description overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
n += rec.second.rel.size();
|
n += rec.second.rel.size();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("related characters overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("related characters overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.first .cbegin(), rec.first .cend());
|
db.data.insert(db.data.end(), rec.first .cbegin(), rec.first .cend());
|
||||||
db.data.insert(db.data.end(), rec.second.desc.cbegin(), rec.second.desc.cend());
|
db.data.insert(db.data.end(), rec.second.desc.cbegin(), rec.second.desc.cend());
|
||||||
db.data.insert(db.data.end(), rec.second.rel .cbegin(), rec.second.rel .cend());
|
db.data.insert(db.data.end(), rec.second.rel .cbegin(), rec.second.rel .cend());
|
||||||
@ -1077,12 +1070,12 @@ inline ZRCola::character_db& operator<<(_Inout_ ZRCola::character_db &db, _In_ c
|
|||||||
|
|
||||||
inline ZRCola::chrcat_db& operator<<(_Inout_ ZRCola::chrcat_db &db, _In_ const ZRCola::DBSource::chrcat &rec)
|
inline ZRCola::chrcat_db& operator<<(_Inout_ ZRCola::chrcat_db &db, _In_ const ZRCola::DBSource::chrcat &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.insert(db.data.end(), reinterpret_cast<const unsigned __int16*>(&rec.cat), reinterpret_cast<const unsigned __int16*>(&rec.cat + 1));
|
db.data.insert(db.data.end(), reinterpret_cast<const uint16_t*>(&rec.cat), reinterpret_cast<const uint16_t*>(&rec.cat + 1));
|
||||||
db.data.push_back((unsigned __int16)rec.rank);
|
db.data.push_back((uint16_t)rec.rank);
|
||||||
std::wstring::size_type n = rec.name.length();
|
std::wstring::size_type n = rec.name.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character category name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character category name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.name.cbegin(), rec.name.cend());
|
db.data.insert(db.data.end(), rec.name.cbegin(), rec.name.cend());
|
||||||
db.idxChrCat.push_back(idx);
|
db.idxChrCat.push_back(idx);
|
||||||
db.idxRank .push_back(idx);
|
db.idxRank .push_back(idx);
|
||||||
@ -1093,11 +1086,11 @@ inline ZRCola::chrcat_db& operator<<(_Inout_ ZRCola::chrcat_db &db, _In_ const Z
|
|||||||
|
|
||||||
inline ZRCola::chrtag_db& operator<<(_Inout_ ZRCola::chrtag_db &db, _In_ const ZRCola::DBSource::chrtag &rec)
|
inline ZRCola::chrtag_db& operator<<(_Inout_ ZRCola::chrtag_db &db, _In_ const ZRCola::DBSource::chrtag &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.tag);
|
db.data.push_back((uint16_t)rec.tag);
|
||||||
std::wstring::size_type n = rec.chr.length();
|
std::wstring::size_type n = rec.chr.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
||||||
db.idxChr.push_back(idx);
|
db.idxChr.push_back(idx);
|
||||||
db.idxTag.push_back(idx);
|
db.idxTag.push_back(idx);
|
||||||
@ -1110,13 +1103,13 @@ inline ZRCola::tagname_db& operator<<(_Inout_ ZRCola::tagname_db &db, _In_ const
|
|||||||
{
|
{
|
||||||
for (auto ln = rec.names.cbegin(), ln_end = rec.names.cend(); ln != ln_end; ++ln) {
|
for (auto ln = rec.names.cbegin(), ln_end = rec.names.cend(); ln != ln_end; ++ln) {
|
||||||
for (auto nm = ln->second.cbegin(), nm_end = ln->second.cend(); nm != nm_end; ++nm) {
|
for (auto nm = ln->second.cbegin(), nm_end = ln->second.cend(); nm != nm_end; ++nm) {
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.tag);
|
db.data.push_back((uint16_t)rec.tag);
|
||||||
db.data.push_back(LOWORD(ln->first));
|
db.data.push_back(LOWORD(ln->first));
|
||||||
db.data.push_back(HIWORD(ln->first));
|
db.data.push_back(HIWORD(ln->first));
|
||||||
std::wstring::size_type n = nm->length();
|
std::wstring::size_type n = nm->length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("tag name overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("tag name overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), nm->cbegin(), nm->cend());
|
db.data.insert(db.data.end(), nm->cbegin(), nm->cend());
|
||||||
db.idxName.push_back(idx);
|
db.idxName.push_back(idx);
|
||||||
db.idxTag .push_back(idx);
|
db.idxTag .push_back(idx);
|
||||||
@ -1129,11 +1122,11 @@ inline ZRCola::tagname_db& operator<<(_Inout_ ZRCola::tagname_db &db, _In_ const
|
|||||||
|
|
||||||
inline ZRCola::highlight_db& operator<<(_Inout_ ZRCola::highlight_db &db, _In_ const ZRCola::DBSource::highlight &rec)
|
inline ZRCola::highlight_db& operator<<(_Inout_ ZRCola::highlight_db &db, _In_ const ZRCola::DBSource::highlight &rec)
|
||||||
{
|
{
|
||||||
unsigned __int32 idx = db.data.size();
|
uint32_t idx = db.data.size();
|
||||||
db.data.push_back((unsigned __int16)rec.set);
|
db.data.push_back((uint16_t)rec.set);
|
||||||
std::wstring::size_type n = rec.chr.length();
|
std::wstring::size_type n = rec.chr.length();
|
||||||
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
wxASSERT_MSG(n <= 0xffff, wxT("character overflow"));
|
||||||
db.data.push_back((unsigned __int16)n);
|
db.data.push_back((uint16_t)n);
|
||||||
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
db.data.insert(db.data.end(), rec.chr.cbegin(), rec.chr.cend());
|
||||||
db.idxChr.push_back(idx);
|
db.idxChr.push_back(idx);
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: ZRColaCompile\n"
|
"Project-Id-Version: ZRColaCompile\n"
|
||||||
"POT-Creation-Date: 2018-09-19 09:00+0200\n"
|
"POT-Creation-Date: 2022-02-17 13:30+0100\n"
|
||||||
"PO-Revision-Date: 2016-04-13 18:11+0200\n"
|
"PO-Revision-Date: 2016-04-13 18:11+0200\n"
|
||||||
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
|
||||||
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
|
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
|
||||||
@ -10,25 +10,25 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Generator: Poedit 2.1.1\n"
|
"X-Generator: Poedit 2.4.2\n"
|
||||||
"X-Poedit-Basepath: ..\n"
|
"X-Poedit-Basepath: ..\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
"X-Poedit-KeywordsList: _\n"
|
"X-Poedit-KeywordsList: _\n"
|
||||||
"X-Poedit-SearchPath-0: .\n"
|
"X-Poedit-SearchPath-0: .\n"
|
||||||
|
|
||||||
#: main.cpp:251
|
#: main.cpp:239
|
||||||
msgid "Show this help message"
|
msgid "Show this help message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: main.cpp:252
|
#: main.cpp:240
|
||||||
msgid "<input file>"
|
msgid "<Input file>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: main.cpp:253
|
#: main.cpp:241
|
||||||
msgid "<output file>"
|
msgid "<Output file>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: main.cpp:254
|
#: main.cpp:242
|
||||||
msgid "<output POT catalog>"
|
msgid "Output POT catalog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
@ -981,10 +981,10 @@ int _tmain(int argc, _TCHAR *argv[])
|
|||||||
<< "\"Content-Transfer-Encoding: 8bit\\n\"" << endl
|
<< "\"Content-Transfer-Encoding: 8bit\\n\"" << endl
|
||||||
<< "\"X-Generator: ZRColaCompile\\n\"" << endl;
|
<< "\"X-Generator: ZRColaCompile\\n\"" << endl;
|
||||||
|
|
||||||
wstring_convert<codecvt_utf8<wchar_t>> conv;
|
charset_encoder<wchar_t, char> conv(stdex::wchar_t_charset, charset_id::utf8);
|
||||||
for (auto p = pot.cbegin(); p != pot.cend(); ++p) {
|
for (auto p = pot.cbegin(); p != pot.cend(); ++p) {
|
||||||
// Convert UTF-16 to UTF-8 and escape.
|
// Convert UTF-16 to UTF-8 and escape.
|
||||||
string t(conv.to_bytes(*p)), u;
|
string t(conv.convert(*p)), u;
|
||||||
for (size_t i = 0, n = t.size(); i < n; i++) {
|
for (size_t i = 0, n = t.size(); i < n; i++) {
|
||||||
char c = t[i];
|
char c = t[i];
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2018-2021 Amebis
|
Copyright © 2018-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2018-2021 Amebis
|
Copyright © 2018-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -20,7 +20,7 @@
|
|||||||
#include <wx/intl.h>
|
#include <wx/intl.h>
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
|
||||||
#include <stdex/idrec.h>
|
#include <zrcola/idrec.h>
|
||||||
|
|
||||||
#include <WinStd/Common.h>
|
#include <WinStd/Common.h>
|
||||||
|
|
||||||
|
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -16,14 +16,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZRColaCompile", "ZRColaComp
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxExtend", "lib\wxExtend\build\wxExtendLib.vcxproj", "{D3E29951-D9F5-486D-A167-20AE8E90B1FA}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxExtend", "lib\wxExtend\build\wxExtendLib.vcxproj", "{D3E29951-D9F5-486D-A167-20AE8E90B1FA}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stdex", "lib\stdex\build\stdex.vcxproj", "{518777CC-0A59-4415-A12A-82751ED75343}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRColaUI", "lib\libZRColaUI\build\libZRColaUI.vcxproj", "{C0A84BD2-3870-4CD6-B281-0AB322E3C579}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRColaUI", "lib\libZRColaUI\build\libZRColaUI.vcxproj", "{C0A84BD2-3870-4CD6-B281-0AB322E3C579}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZRColaInstall", "ZRColaInstall\ZRColaInstall.vcxproj", "{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZRColaInstall", "ZRColaInstall\ZRColaInstall.vcxproj", "{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinStd", "lib\WinStd\build\WinStd.vcxproj", "{47399D91-7EB9-41DE-B521-514BA5DB0C43}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
@ -42,10 +38,6 @@ Global
|
|||||||
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|Win32.Build.0 = Debug|Win32
|
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|Win32.ActiveCfg = Release|Win32
|
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|Win32.Build.0 = Release|Win32
|
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|Win32.Build.0 = Release|Win32
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|Win32.ActiveCfg = Debug|Win32
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|Win32.Build.0 = Debug|Win32
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|Win32.ActiveCfg = Release|Win32
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
@ -54,10 +46,6 @@ Global
|
|||||||
{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}.Debug|Win32.Build.0 = Debug|Win32
|
{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}.Release|Win32.ActiveCfg = Release|Win32
|
{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}.Release|Win32.Build.0 = Release|Win32
|
{5BD95B95-38B0-4C7D-9471-F99CA1203DF4}.Release|Win32.Build.0 = Release|Win32
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -65,9 +53,7 @@ Global
|
|||||||
GlobalSection(NestedProjects) = preSolution
|
GlobalSection(NestedProjects) = preSolution
|
||||||
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
||||||
{D3E29951-D9F5-486D-A167-20AE8E90B1FA} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
{D3E29951-D9F5-486D-A167-20AE8E90B1FA} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
||||||
{518777CC-0A59-4415-A12A-82751ED75343} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
|
||||||
{C0A84BD2-3870-4CD6-B281-0AB322E3C579} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
{C0A84BD2-3870-4CD6-B281-0AB322E3C579} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
||||||
{47399D91-7EB9-41DE-B521-514BA5DB0C43} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F}
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {22B0355E-423C-4ACC-81F8-DAD72A8BEC0E}
|
SolutionGuid = {22B0355E-423C-4ACC-81F8-DAD72A8BEC0E}
|
||||||
|
3
ZRColaWS/.gitignore
vendored
Normal file
3
ZRColaWS/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/*.d
|
||||||
|
/*.o
|
||||||
|
/zrcolaws
|
91
ZRColaWS/Makefile
Normal file
91
ZRColaWS/Makefile
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
CPPFLAGS := $(CPPFLAGS) -I../lib/libZRCola/include -I../lib/stdex/include -I../lib/oatpp-swagger/src -I../lib/oatpp/src
|
||||||
|
LDFLAGS := $(LDFLAGS) -L../lib/libZRCola/lib -L../lib/oatpp-swagger/build/src -L../lib/oatpp/build/src
|
||||||
|
LDLIBS := $(LDLIBS) -lZRCola -loatpp-swagger -loatpp -lstdc++
|
||||||
|
SRCS := zrcolaws.cpp
|
||||||
|
|
||||||
|
include ../include/props.mak
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: zrcolaws
|
||||||
|
|
||||||
|
zrcolaws: \
|
||||||
|
../lib/oatpp/build/src/liboatpp.a \
|
||||||
|
../lib/oatpp-swagger/build/src/liboatpp-swagger.a \
|
||||||
|
../lib/libZRCola/lib/libZRCola.a \
|
||||||
|
$(OBJS)
|
||||||
|
$(CC) $(LDFLAGS) $(OBJS) -o $@ $(LDLIBS)
|
||||||
|
|
||||||
|
../lib/oatpp/build/src/liboatpp.a: ../lib/oatpp/build/Makefile
|
||||||
|
$(MAKE) $(MFLAGS) -C ../lib/oatpp/build
|
||||||
|
|
||||||
|
../lib/oatpp/build/Makefile: ../lib/oatpp/CMakeLists.txt
|
||||||
|
cmake -D OATPP_INSTALL=OFF -D OATPP_BUILD_TESTS=OFF -D OATPP_LINK_TEST_LIBRARY=OFF -S ../lib/oatpp -B ../lib/oatpp/build
|
||||||
|
|
||||||
|
../lib/oatpp-swagger/build/src/liboatpp-swagger.a: ../lib/oatpp-swagger/build/Makefile
|
||||||
|
$(MAKE) $(MFLAGS) -C ../lib/oatpp-swagger/build
|
||||||
|
|
||||||
|
../lib/oatpp-swagger/build/Makefile: ../lib/oatpp-swagger/CMakeLists.txt
|
||||||
|
cmake -D OATPP_INSTALL=OFF -D OATPP_BUILD_TESTS=OFF -D OATPP_MODULES_LOCATION=CUSTOM -D OATPP_DIR_SRC=${CURDIR}/../lib/oatpp/src -D OATPP_DIR_LIB=${CURDIR}/../lib/oatpp/build/src -S ../lib/oatpp-swagger -B ../lib/oatpp-swagger/build
|
||||||
|
|
||||||
|
../lib/libZRCola/lib/libZRCola.a:
|
||||||
|
$(MAKE) $(MFLAGS) -C ../lib/libZRCola/build
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install: zrcolaws ../output/data/ZRCola.zrcdb
|
||||||
|
install -d $(PREFIX)/bin/
|
||||||
|
install -m 755 zrcolaws $(PREFIX)/bin/
|
||||||
|
install -d $(PREFIX)/share/zrcola/
|
||||||
|
install -m 644 ../output/data/ZRCola.zrcdb $(PREFIX)/share/zrcola/
|
||||||
|
install -d $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/favicon-16x16.png $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/favicon-32x32.png $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/index.html $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/oauth2-redirect.html $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-bundle.js $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-bundle.js.map $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-es-bundle-core.js $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-es-bundle-core.js.map $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-es-bundle.js $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-es-bundle.js.map $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-standalone-preset.js $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui-standalone-preset.js.map $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui.css $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui.css.map $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui.js $(PREFIX)/share/zrcola/res/
|
||||||
|
install -m 644 ../lib/oatpp-swagger/res/swagger-ui.js.map $(PREFIX)/share/zrcola/res/
|
||||||
|
install -d $(PREFIX)/etc/sysconfig/
|
||||||
|
{ echo '#!/bin/sh'; \
|
||||||
|
echo ''; \
|
||||||
|
echo '# Interface to listen on. Default: localhost'; \
|
||||||
|
echo '#HOST=0.0.0.0'; \
|
||||||
|
echo ''; \
|
||||||
|
echo '# Port to listen on. Default: 54591'; \
|
||||||
|
echo '#PORT=54591'; \
|
||||||
|
echo ''; \
|
||||||
|
echo '# Additional zrcolaws command line options'; \
|
||||||
|
echo '#OPTIONS=-4'; \
|
||||||
|
} > $(PREFIX)/etc/sysconfig/zrcolaws
|
||||||
|
install -d $(PREFIX)/lib/systemd/system/
|
||||||
|
{ echo '[Unit]'; \
|
||||||
|
echo 'Description=ZRCola Web Service'; \
|
||||||
|
echo 'After=network.target'; \
|
||||||
|
echo ''; \
|
||||||
|
echo '[Service]'; \
|
||||||
|
echo 'Environment="HOST=localhost" "PORT=54591"'; \
|
||||||
|
echo 'EnvironmentFile=-$(PREFIX)/etc/sysconfig/zrcolaws'; \
|
||||||
|
echo 'DynamicUser=yes'; \
|
||||||
|
echo 'ExecStart=/usr/local/bin/zrcolaws --host $$HOST --port $$PORT $$OPTIONS'; \
|
||||||
|
echo 'Type=exec'; \
|
||||||
|
echo 'Restart=always'; \
|
||||||
|
echo ''; \
|
||||||
|
echo '[Install]'; \
|
||||||
|
echo 'WantedBy=multi-user.target'; \
|
||||||
|
echo 'RequiredBy=network.target'; \
|
||||||
|
} > $(PREFIX)/lib/systemd/system/zrcolaws.service
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
-rm -r *.{d,o} zrcolaws
|
||||||
|
|
||||||
|
include ../include/targets.mak
|
||||||
|
-include $(DEPS)
|
23
ZRColaWS/README.md
Normal file
23
ZRColaWS/README.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# ZRCola Web Service
|
||||||
|
|
||||||
|
## Building and Installation
|
||||||
|
|
||||||
|
1. Install prerequisites: `sudo dnf install git cmake gcc gcc-c++ make libatomic`
|
||||||
|
|
||||||
|
2. Clone this Git repository: `git clone --recursive https://github.com/Amebis/ZRCola.git`
|
||||||
|
|
||||||
|
3. Build ZRColaWS: `make -C ZRCola/ZRColaWS`
|
||||||
|
|
||||||
|
4. Install ZRColaWS: `sudo make -C ZRCola/ZRColaWS install`
|
||||||
|
|
||||||
|
5. Configure ZRColaWS by editing _/usr/local/etc/sysconfig/zrcolaws_
|
||||||
|
|
||||||
|
6. Start ZRColaWS: `sudo systemctl start zrcolaws.service`
|
||||||
|
|
||||||
|
7. Configure ZRColaWS for auto-start: `sudo systemctl enable zrcolaws.service`
|
||||||
|
|
||||||
|
8. Remember to open webservice port in firewall, should the service require external access.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Web service API documentation is available at _http://host:port/swagger/ui_.
|
73
ZRColaWS/appcomponent.hpp
Normal file
73
ZRColaWS/appcomponent.hpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../include/version.h"
|
||||||
|
#include "controller.hpp"
|
||||||
|
#include <oatpp-swagger/Model.hpp>
|
||||||
|
#include <oatpp-swagger/Resources.hpp>
|
||||||
|
#include <oatpp/core/base/CommandLineArguments.hpp>
|
||||||
|
#include <oatpp/core/macro/component.hpp>
|
||||||
|
#include <oatpp/network/Server.hpp>
|
||||||
|
#include <oatpp/network/tcp/server/ConnectionProvider.hpp>
|
||||||
|
#include <oatpp/parser/json/mapping/ObjectMapper.hpp>
|
||||||
|
#include <oatpp/web/server/HttpConnectionHandler.hpp>
|
||||||
|
|
||||||
|
class AppComponent
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
oatpp::network::Address m_address;
|
||||||
|
|
||||||
|
public:
|
||||||
|
AppComponent(const oatpp::network::Address& address) : m_address(address) {}
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, serverConnectionProvider)([this] {
|
||||||
|
return oatpp::network::tcp::server::ConnectionProvider::createShared({m_address.host, m_address.port, m_address.family});
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, httpRouter)([] {
|
||||||
|
return oatpp::web::server::HttpRouter::createShared();
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, serverConnectionHandler)([] {
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
|
||||||
|
return oatpp::web::server::HttpConnectionHandler::createShared(router);
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::data::mapping::ObjectMapper>, apiObjectMapper)([] {
|
||||||
|
auto serializerConfig = oatpp::parser::json::mapping::Serializer::Config::createShared();
|
||||||
|
serializerConfig->escapeFlags &= ~oatpp::parser::json::Utils::FLAG_ESCAPE_UTF8CHAR;
|
||||||
|
return oatpp::parser::json::mapping::ObjectMapper::createShared(
|
||||||
|
serializerConfig,
|
||||||
|
oatpp::parser::json::mapping::Deserializer::Config::createShared());
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::Server>, server)([] {
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, connectionProvider);
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, connectionHandler);
|
||||||
|
return oatpp::network::Server::createShared(connectionProvider, connectionHandler);
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::swagger::DocumentInfo>, swaggerDocumentInfo)([] {
|
||||||
|
oatpp::swagger::DocumentInfo::Builder builder;
|
||||||
|
builder
|
||||||
|
.setTitle("ZRCola Web Service")
|
||||||
|
.setDescription(
|
||||||
|
"ZRCola is an input system designed mainly, although not exclusively, for linguistic use. "
|
||||||
|
"It allows the user to combine basic letters with any diacritic marks and insert the resulting complex characters into the texts with ease.")
|
||||||
|
.setVersion(PRODUCT_VERSION_STR)
|
||||||
|
.setContactName("ZRCola")
|
||||||
|
.setContactUrl("https://zrcola.zrc-sazu.si/en/")
|
||||||
|
|
||||||
|
.setLicenseName("GNU General Public License, Version 3")
|
||||||
|
.setLicenseUrl("https://www.gnu.org/licenses/gpl-3.0.en.html");
|
||||||
|
return builder.build();
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::swagger::Resources>, swaggerResources)([] {
|
||||||
|
return oatpp::swagger::Resources::loadResources(PREFIX "/share/zrcola/res");
|
||||||
|
}());
|
||||||
|
};
|
243
ZRColaWS/controller.hpp
Normal file
243
ZRColaWS/controller.hpp
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../include/version.h"
|
||||||
|
#include "dto.hpp"
|
||||||
|
#include "iconverter.hpp"
|
||||||
|
#include "zrcolaws.hpp"
|
||||||
|
#include <zrcola/translate.h>
|
||||||
|
#include <oatpp/core/macro/codegen.hpp>
|
||||||
|
#include <oatpp/core/macro/component.hpp>
|
||||||
|
#include <oatpp/web/server/api/ApiController.hpp>
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_BEGIN(ApiController)
|
||||||
|
|
||||||
|
class Controller : public oatpp::web::server::api::ApiController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Controller(const std::shared_ptr<oatpp::data::mapping::ObjectMapper>& defaultObjectMapper, const oatpp::String &routerPrefix = nullptr) :
|
||||||
|
oatpp::web::server::api::ApiController(defaultObjectMapper, routerPrefix)
|
||||||
|
{}
|
||||||
|
|
||||||
|
ADD_CORS(getAbout)
|
||||||
|
ENDPOINT_INFO(getAbout) {
|
||||||
|
info->summary = "Returns service information";
|
||||||
|
info->addResponse<Object<dto::About>>(Status::CODE_200, "application/json");
|
||||||
|
}
|
||||||
|
ENDPOINT("GET", "/about", getAbout)
|
||||||
|
{
|
||||||
|
auto dto = dto::About::createShared();
|
||||||
|
dto->vendor = PRODUCT_CFG_VENDOR;
|
||||||
|
dto->application = PRODUCT_CFG_APPLICATION;
|
||||||
|
dto->version = PRODUCT_VERSION_STR;
|
||||||
|
return createDtoResponse(Status::CODE_200, dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD_CORS(getTranset)
|
||||||
|
ENDPOINT_INFO(getTranset) {
|
||||||
|
info->summary = "Lists supported translation sets";
|
||||||
|
info->description = "Each translation set describes a set of replacements that are performed to translate text from one script or encoding to another. ";
|
||||||
|
info->addResponse<oatpp::Vector<oatpp::Object<dto::TranSet>>>(Status::CODE_200, "application/json");
|
||||||
|
}
|
||||||
|
ENDPOINT("GET", "/transet", getTranset)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
utf16toutf8 c;
|
||||||
|
auto result = oatpp::Vector<oatpp::Object<dto::TranSet>>::createShared();
|
||||||
|
auto dto = dto::TranSet::createShared();
|
||||||
|
dto->set = ZRCOLA_TRANSETID_DEFAULT;
|
||||||
|
dto->src = "ZRCola Decomposed";
|
||||||
|
dto->dst = "ZRCola Composed";
|
||||||
|
result->push_back(dto);
|
||||||
|
for (size_t i = 0, n = ts_db.idxTranSet.size(); i < n; i++) {
|
||||||
|
const auto &ts = ts_db.idxTranSet[i];
|
||||||
|
dto = dto::TranSet::createShared();
|
||||||
|
dto->set = ts.set;
|
||||||
|
dto->src = c.convert(ts.src(), ts.src_len());
|
||||||
|
dto->dst = c.convert(ts.dst(), ts.dst_len());
|
||||||
|
result->push_back(dto);
|
||||||
|
}
|
||||||
|
dto = dto::TranSet::createShared();
|
||||||
|
dto->set = ZRCOLA_TRANSETID_UNICODE;
|
||||||
|
dto->src = "ZRCola Decomposed";
|
||||||
|
dto->dst = "Unicode";
|
||||||
|
result->push_back(dto);
|
||||||
|
return createDtoResponse(Status::CODE_200, result);
|
||||||
|
} catch (std::exception &ex) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "%s: %s", typeid(ex).name(), ex.what());
|
||||||
|
return ResponseFactory::createResponse(Status::CODE_500, ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD_CORS(getLanguage)
|
||||||
|
ENDPOINT_INFO(getLanguage) {
|
||||||
|
info->summary = "Lists supported languages";
|
||||||
|
info->description = "Each language describes a set of special characters that are specific to that language (e.g. č, š, ž in Slovenian, or ä, ö, ü in German).";
|
||||||
|
info->addResponse<oatpp::Vector<oatpp::Object<dto::Language>>>(Status::CODE_200, "application/json");
|
||||||
|
}
|
||||||
|
ENDPOINT("GET", "/language", getLanguage)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
utf16toutf8 c;
|
||||||
|
auto result = oatpp::Vector<oatpp::Object<dto::Language>>::createShared();
|
||||||
|
for (size_t i = 0, n = lang_db.idxLang.size(); i < n; i++) {
|
||||||
|
const auto &lang = lang_db.idxLang[i];
|
||||||
|
auto dto = dto::Language::createShared();
|
||||||
|
dto->lang = std::string(&lang.lang.data[0], strnlen(lang.lang.data, std::size(lang.lang.data)));
|
||||||
|
dto->name = c.convert(lang.name(), lang.name_len());
|
||||||
|
result->push_back(dto);
|
||||||
|
}
|
||||||
|
return createDtoResponse(Status::CODE_200, result);
|
||||||
|
} catch (std::exception &ex) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "%s: %s", typeid(ex).name(), ex.what());
|
||||||
|
return ResponseFactory::createResponse(Status::CODE_500, ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD_CORS(postTranslate)
|
||||||
|
ENDPOINT_INFO(postTranslate) {
|
||||||
|
info->summary = "Translate text";
|
||||||
|
info->description =
|
||||||
|
"Performs any number of supported translations (see /transet) on a given input text in a sequence. "
|
||||||
|
"Together with the output text, it also returns character index mapping between input and output texts.";
|
||||||
|
auto transet = oatpp::Vector<UInt16>::createShared();
|
||||||
|
transet->push_back(ZRCOLA_TRANSETID_DEFAULT);
|
||||||
|
auto dto = dto::TranslateIn::createShared();
|
||||||
|
dto->transet = transet;
|
||||||
|
dto->text = "To je test.";
|
||||||
|
info->addConsumes<Object<dto::TranslateIn>>("application/json")
|
||||||
|
.addExample("Perform ZRCola composition", dto);
|
||||||
|
info->addResponse<Object<dto::TranslateOut>>(Status::CODE_200, "application/json");
|
||||||
|
}
|
||||||
|
ENDPOINT("POST", "/translate", postTranslate, BODY_DTO(Object<dto::TranslateIn>, input))
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
utf8toutf16 cIn;
|
||||||
|
std::u16string dst, dst2;
|
||||||
|
if (input->text)
|
||||||
|
dst = cIn.convert(*input->text);
|
||||||
|
size_t src_len = dst.size();
|
||||||
|
std::vector<ZRCola::mapping_vector> mapping;
|
||||||
|
if (input->transet) {
|
||||||
|
ZRCola::mapping_vector map;
|
||||||
|
const auto ts_end = input->transet->cend();
|
||||||
|
for (auto ts = input->transet->cbegin(); ts != ts_end; ++ts) {
|
||||||
|
switch (*ts) {
|
||||||
|
case ZRCOLA_TRANSETID_DEFAULT:
|
||||||
|
case ZRCOLA_TRANSETID_UNICODE:
|
||||||
|
// Decompose first, then re-compose.
|
||||||
|
t_db.TranslateInv(*ts, dst.data(), dst.size(), dst2, &map);
|
||||||
|
mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
|
t_db.Translate(*ts, dst2.data(), dst2.size(), dst, &map);
|
||||||
|
mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
t_db.Translate(*ts, dst.data(), dst.size(), dst2, &map);
|
||||||
|
mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
|
dst = std::move(dst2);
|
||||||
|
dst2.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
utf16toutf8 cOut;
|
||||||
|
auto dto = dto::TranslateOut::createShared();
|
||||||
|
dto->text = cOut.convert(dst);
|
||||||
|
auto map = oatpp::Vector<oatpp::UInt32>::createShared();
|
||||||
|
auto m_end = mapping.cend();
|
||||||
|
for (size_t i = 0; i < src_len; ++i) {
|
||||||
|
auto j = i;
|
||||||
|
for (auto m = mapping.cbegin(); m != m_end; ++m)
|
||||||
|
j = m->to_dst(j);
|
||||||
|
map->push_back(j);
|
||||||
|
}
|
||||||
|
dto->map = map;
|
||||||
|
return createDtoResponse(Status::CODE_200, dto);
|
||||||
|
} catch (std::exception &ex) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "%s: %s", typeid(ex).name(), ex.what());
|
||||||
|
return ResponseFactory::createResponse(Status::CODE_500, ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD_CORS(postTranslateInv)
|
||||||
|
ENDPOINT_INFO(postTranslateInv) {
|
||||||
|
info->summary = "Inverse translate text";
|
||||||
|
info->description =
|
||||||
|
"Performs any number of supported translations (see /transet) on a given input text in a sequence in reverse. "
|
||||||
|
"Together with the output text, it also returns character index mapping between input and output texts.";
|
||||||
|
auto transet = oatpp::Vector<UInt16>::createShared();
|
||||||
|
transet->push_back(ZRCOLA_TRANSETID_DEFAULT);
|
||||||
|
auto dto = dto::TranslateIn::createShared();
|
||||||
|
dto->transet = transet;
|
||||||
|
dto->text = "T ťᵉⓢṭ.";
|
||||||
|
dto->lang = "slv";
|
||||||
|
info->addConsumes<Object<dto::TranslateIn>>("application/json")
|
||||||
|
.addExample("Perform ZRCola decomposition", dto);
|
||||||
|
info->addResponse<Object<dto::TranslateOut>>(Status::CODE_200, "application/json");
|
||||||
|
}
|
||||||
|
ENDPOINT("POST", "/translateInv", postTranslateInv, BODY_DTO(Object<dto::TranslateIn>, input))
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
utf8toutf16 cIn;
|
||||||
|
std::u16string dst, dst2;
|
||||||
|
ZRCola::langid_t lang;
|
||||||
|
if (input->text)
|
||||||
|
dst = cIn.convert(*input->text);
|
||||||
|
lang = input->lang->c_str();
|
||||||
|
size_t src_len = dst.size();
|
||||||
|
std::vector<ZRCola::mapping_vector> mapping;
|
||||||
|
if (input->transet) {
|
||||||
|
ZRCola::mapping_vector map;
|
||||||
|
const auto ts_begin = input->transet->cbegin();
|
||||||
|
for (auto ts = input->transet->cend(); (ts--) != ts_begin; ) {
|
||||||
|
switch (*ts) {
|
||||||
|
case ZRCOLA_TRANSETID_DEFAULT:
|
||||||
|
case ZRCOLA_TRANSETID_UNICODE:
|
||||||
|
t_db.TranslateInv(*ts, dst.data(), dst.size(), &lc_db, lang, dst2, &map);
|
||||||
|
dst = std::move(dst2);
|
||||||
|
dst2.clear();
|
||||||
|
map.invert();
|
||||||
|
mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
t_db.TranslateInv(*ts, dst.data(), dst.size(), dst2, &map);
|
||||||
|
dst = std::move(dst2);
|
||||||
|
dst2.clear();
|
||||||
|
map.invert();
|
||||||
|
mapping.push_back(std::move(map));
|
||||||
|
map.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
utf16toutf8 cOut;
|
||||||
|
auto dto = dto::TranslateOut::createShared();
|
||||||
|
dto->text = cOut.convert(dst);
|
||||||
|
auto map = oatpp::Vector<oatpp::UInt32>::createShared();
|
||||||
|
auto m_end = mapping.crend();
|
||||||
|
for (size_t i = 0; i < src_len; ++i) {
|
||||||
|
auto j = i;
|
||||||
|
for (auto m = mapping.crbegin(); m != m_end; ++m)
|
||||||
|
j = m->to_src(j);
|
||||||
|
map->push_back(j);
|
||||||
|
}
|
||||||
|
dto->map = map;
|
||||||
|
return createDtoResponse(Status::CODE_200, dto);
|
||||||
|
} catch (std::exception &ex) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "%s: %s", typeid(ex).name(), ex.what());
|
||||||
|
return ResponseFactory::createResponse(Status::CODE_500, ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_END(ApiController)
|
90
ZRColaWS/dto.hpp
Normal file
90
ZRColaWS/dto.hpp
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <oatpp/core/data/mapping/type/Object.hpp>
|
||||||
|
#include <oatpp/core/macro/codegen.hpp>
|
||||||
|
#include <oatpp/core/Types.hpp>
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_BEGIN(DTO)
|
||||||
|
|
||||||
|
namespace dto {
|
||||||
|
|
||||||
|
class About : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(About, DTO)
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(vendor) { info->description = "Application vendor"; }
|
||||||
|
DTO_FIELD(String, vendor);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(application) { info->description = "Application name"; }
|
||||||
|
DTO_FIELD(String, application);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(version) { info->description = "Application version"; }
|
||||||
|
DTO_FIELD(String, version);
|
||||||
|
};
|
||||||
|
|
||||||
|
class TranSet : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(TranSet, DTO)
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(set) { info->description = "Translation set ID"; }
|
||||||
|
DTO_FIELD(UInt16, set);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(src) { info->description = "Input transcript name in English"; }
|
||||||
|
DTO_FIELD(String, src);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(dst) { info->description = "Output transcript name in English"; }
|
||||||
|
DTO_FIELD(String, dst);
|
||||||
|
};
|
||||||
|
|
||||||
|
class Language : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(Language, DTO)
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(lang) { info->description = "Language ID"; }
|
||||||
|
DTO_FIELD(String, lang);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(name) { info->description = "Language name in English"; }
|
||||||
|
DTO_FIELD(String, name);
|
||||||
|
};
|
||||||
|
|
||||||
|
class TranslateIn : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(TranslateIn, DTO)
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(transet) {
|
||||||
|
info->description = "Array of one or multiple translation set IDs to perform translation on the text. When inverse translating, the translation sets are read in reverse order listed in this array. Use /transet to get IDs of all supported translation sets.";
|
||||||
|
info->required = true;
|
||||||
|
}
|
||||||
|
DTO_FIELD(Vector<UInt16>, transet);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(text) {
|
||||||
|
info->description = "Text to be translated";
|
||||||
|
info->required = true;
|
||||||
|
}
|
||||||
|
DTO_FIELD(String, text);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(lang) {
|
||||||
|
info->description = "Language ID of the text to be translated. This is used on inverse translating to skip decomposing language-specific common characters (e.g. č, š, ž in Slovenian, or ä, ö, ü in German). Use /language to get IDs of all supported languages.";
|
||||||
|
}
|
||||||
|
DTO_FIELD(String, lang) = "slv";
|
||||||
|
};
|
||||||
|
|
||||||
|
class TranslateOut : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(TranslateOut, DTO)
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(text) { info->description = "Translated text"; }
|
||||||
|
DTO_FIELD(String, text);
|
||||||
|
|
||||||
|
DTO_FIELD_INFO(map) { info->description = "Character index mapping between input and translated text. The map[i] value represents the index of the beginning of a character (in translated text) that translated from the character (in the input text) beginning at index i. All input indexes are measured in characters after input string is translated to UTF-16, and all output indexes are measured in characters before output string is translated from UTF-16."; }
|
||||||
|
DTO_FIELD(Vector<UInt32>, map);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_END(DTO)
|
75
ZRColaWS/iconverter.hpp
Normal file
75
ZRColaWS/iconverter.hpp
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdex/compat.hpp>
|
||||||
|
#include <iconv.h>
|
||||||
|
#include <cstring>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
inline static std::runtime_error errno_error(_In_z_ const char *file, _In_ int line, _In_z_ const char *func)
|
||||||
|
{
|
||||||
|
int _errno = errno;
|
||||||
|
return std::runtime_error(
|
||||||
|
std::string(file) + ":" + std::to_string(line) +
|
||||||
|
std::string(func) + " error " + std::to_string(_errno) + ": " +
|
||||||
|
std::strerror(_errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T_from, typename T_to>
|
||||||
|
class iconverter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
iconverter(_In_z_ const char* from, _In_z_ const char* to)
|
||||||
|
{
|
||||||
|
m_handle = iconv_open(to, from);
|
||||||
|
if (m_handle == (iconv_t)-1)
|
||||||
|
throw errno_error(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
|
~iconverter()
|
||||||
|
{
|
||||||
|
iconv_close(m_handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::basic_string<T_to> convert(_In_z_count_(count) const T_from* input, _In_ size_t count) const
|
||||||
|
{
|
||||||
|
T_to buf[0x100];
|
||||||
|
std::basic_string<T_to> result;
|
||||||
|
size_t inSize = sizeof(T_from) * count;
|
||||||
|
do {
|
||||||
|
T_to* output = &buf[0];
|
||||||
|
size_t outSize = sizeof(buf);
|
||||||
|
errno = 0;
|
||||||
|
iconv(m_handle, (char**)&input, &inSize, (char**)&output, &outSize);
|
||||||
|
if (errno)
|
||||||
|
throw errno_error(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
result.insert(result.end(), buf, (T_to*)((char*)buf + sizeof(buf) - outSize));
|
||||||
|
} while (inSize);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::basic_string<T_to> convert(_In_ const std::basic_string<T_from>& input)
|
||||||
|
{
|
||||||
|
return convert(input.c_str(), input.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
iconv_t m_handle;
|
||||||
|
};
|
||||||
|
|
||||||
|
class utf16toutf8 : public iconverter<char16_t, char>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
utf16toutf8() : iconverter("UTF-16LE", "UTF-8") {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class utf8toutf16 : public iconverter<char, char16_t>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
utf8toutf16() : iconverter("UTF-8", "UTF-16LE") {}
|
||||||
|
};
|
27
ZRColaWS/stdlogger.hpp
Normal file
27
ZRColaWS/stdlogger.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <oatpp/core/base/Environment.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
|
class StdLogger : public oatpp::base::Logger
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::mutex m_lock;
|
||||||
|
|
||||||
|
public:
|
||||||
|
StdLogger() {}
|
||||||
|
|
||||||
|
void log(v_uint32 priority, const std::string& tag, const std::string& message) override
|
||||||
|
{
|
||||||
|
if (!isLogPriorityEnabled(priority))
|
||||||
|
return;
|
||||||
|
std::lock_guard<std::mutex> guard(m_lock);
|
||||||
|
(priority < oatpp::base::Logger::PRIORITY_W ? std::cout : std::cerr) << tag << ": " << message << std::endl;
|
||||||
|
}
|
||||||
|
};
|
176
ZRColaWS/zrcolaws.cpp
Normal file
176
ZRColaWS/zrcolaws.cpp
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "appcomponent.hpp"
|
||||||
|
#include "controller.hpp"
|
||||||
|
#include "stdlogger.hpp"
|
||||||
|
#include "zrcolaws.hpp"
|
||||||
|
#include <oatpp-swagger/Controller.hpp>
|
||||||
|
#include <oatpp/core/base/CommandLineArguments.hpp>
|
||||||
|
#include <oatpp/network/Server.hpp>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace ZRCola;
|
||||||
|
|
||||||
|
translation_db t_db;
|
||||||
|
transet_db ts_db;
|
||||||
|
// transeq_db tsq_db;
|
||||||
|
langchar_db lc_db;
|
||||||
|
language_db lang_db;
|
||||||
|
// character_db chr_db;
|
||||||
|
// chrcat_db cc_db;
|
||||||
|
// chrtag_db ct_db;
|
||||||
|
// tagname_db tn_db;
|
||||||
|
// highlight_db h_db;
|
||||||
|
|
||||||
|
static void load_database()
|
||||||
|
{
|
||||||
|
fstream dat(PREFIX "/share/zrcola/ZRCola.zrcdb", ios_base::in | ios_base::binary);
|
||||||
|
if (!dat.good())
|
||||||
|
throw runtime_error(PREFIX "/share/zrcola/ZRCola.zrcdb not found or cannot be opened.");
|
||||||
|
|
||||||
|
if (!stdex::idrec::find<recordid_t, recordsize_t, ZRCOLA_RECORD_ALIGN>(dat, ZRCOLA_DB_ID, sizeof(recordid_t)))
|
||||||
|
throw runtime_error(PREFIX "/share/zrcola/ZRCola.zrcdb is not a valid ZRCola database.");
|
||||||
|
|
||||||
|
recordsize_t size;
|
||||||
|
dat.read((char*)&size, sizeof(recordsize_t));
|
||||||
|
if (dat.good()) {
|
||||||
|
bool has_translation_data = false;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
recordid_t id;
|
||||||
|
if (!stdex::idrec::read_id(dat, id, size)) break;
|
||||||
|
|
||||||
|
if (id == translation_rec::id()) {
|
||||||
|
dat >> translation_rec(t_db);
|
||||||
|
if (dat.good()) {
|
||||||
|
has_translation_data = true;
|
||||||
|
} else {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "Error reading translation data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
t_db.clear();
|
||||||
|
}
|
||||||
|
} else if (id == transet_rec::id()) {
|
||||||
|
dat >> transet_rec(ts_db);
|
||||||
|
if (!dat.good()) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "Error reading translation set data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
ts_db.clear();
|
||||||
|
}
|
||||||
|
// } else if (id == transeq_rec::id()) {
|
||||||
|
// dat >> transeq_rec(tsq_db);
|
||||||
|
// if (!dat.good()) {
|
||||||
|
// OATPP_LOGE(__FUNCTION__, "Error reading translation sequence data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
// tsq_db.clear();
|
||||||
|
// }
|
||||||
|
} else if (id == langchar_rec::id()) {
|
||||||
|
dat >> langchar_rec(lc_db);
|
||||||
|
if (!dat.good()) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "Error reading language character data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
lc_db.clear();
|
||||||
|
}
|
||||||
|
} else if (id == language_rec::id()) {
|
||||||
|
dat >> language_rec(lang_db);
|
||||||
|
if (!dat.good()) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "Error reading language character data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
lang_db.clear();
|
||||||
|
}
|
||||||
|
// } else if (id == character_rec::id()) {
|
||||||
|
// dat >> character_rec(chr_db);
|
||||||
|
// if (!dat.good()) {
|
||||||
|
// OATPP_LOGE(__FUNCTION__, "Error reading character data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
// chr_db.clear();
|
||||||
|
// }
|
||||||
|
// } else if (id == chrcat_rec::id()) {
|
||||||
|
// dat >> chrcat_rec(cc_db);
|
||||||
|
// if (!dat.good()) {
|
||||||
|
// OATPP_LOGE(__FUNCTION__, "Error reading character category data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
// cc_db.clear();
|
||||||
|
// }
|
||||||
|
// } else if (id == chrtag_rec::id()) {
|
||||||
|
// dat >> chrtag_rec(ct_db);
|
||||||
|
// if (!dat.good()) {
|
||||||
|
// OATPP_LOGE(__FUNCTION__, "Error reading character tag data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
// ct_db.clear();
|
||||||
|
// }
|
||||||
|
// } else if (id == tagname_rec::id()) {
|
||||||
|
// dat >> tagname_rec(tn_db);
|
||||||
|
// if (!dat.good()) {
|
||||||
|
// OATPP_LOGE(__FUNCTION__, "Error reading tag name data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
// tn_db.clear();
|
||||||
|
// }
|
||||||
|
// } else if (id == highlight_rec::id()) {
|
||||||
|
// dat >> highlight_rec(h_db);
|
||||||
|
// if (!dat.good()) {
|
||||||
|
// OATPP_LOGE(__FUNCTION__, "Error reading highlight data from " PREFIX "/share/zrcola/ZRCola.zrcdb.");
|
||||||
|
// h_db.clear();
|
||||||
|
// }
|
||||||
|
} else
|
||||||
|
stdex::idrec::ignore<recordsize_t, ZRCOLA_RECORD_ALIGN>(dat);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!has_translation_data)
|
||||||
|
throw runtime_error(PREFIX "/share/zrcola/ZRCola.zrcdb has no translation data.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sig_handler(int s)
|
||||||
|
{
|
||||||
|
OATPP_LOGD(__FUNCTION__, "Caught signal %d", s);
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::Server>, server);
|
||||||
|
server->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, const char* argv[])
|
||||||
|
{
|
||||||
|
auto logger = std::make_shared<StdLogger>();
|
||||||
|
oatpp::base::Environment::init(logger);
|
||||||
|
try {
|
||||||
|
{
|
||||||
|
oatpp::base::CommandLineArguments cmdArgs(argc, argv);
|
||||||
|
if (cmdArgs.hasArgument("-?") || cmdArgs.hasArgument("--help")) {
|
||||||
|
cerr << "ZRColaWS " << PRODUCT_VERSION_STR << " Copyright © 2022 Amebis" << endl;
|
||||||
|
cerr << endl;
|
||||||
|
cerr << argv[0] << " [--host <interface name>] [--port <port number>] [-4|-6]" << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
load_database();
|
||||||
|
|
||||||
|
struct sigaction sigIntHandler;
|
||||||
|
sigIntHandler.sa_handler = sig_handler;
|
||||||
|
sigemptyset(&sigIntHandler.sa_mask);
|
||||||
|
sigIntHandler.sa_flags = 0;
|
||||||
|
sigaction(SIGINT, &sigIntHandler, NULL);
|
||||||
|
|
||||||
|
oatpp::String host = cmdArgs.getNamedArgumentValue("--host", "localhost");
|
||||||
|
v_uint16 port = oatpp::utils::conversion::strToInt32(cmdArgs.getNamedArgumentValue("--port", "54591"));
|
||||||
|
oatpp::network::Address::Family family = oatpp::network::Address::UNSPEC;
|
||||||
|
if (cmdArgs.hasArgument("-4"))
|
||||||
|
family = oatpp::network::Address::IP_4;
|
||||||
|
else if (cmdArgs.hasArgument("-6"))
|
||||||
|
family = oatpp::network::Address::IP_6;
|
||||||
|
AppComponent components({host, port, family});
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::data::mapping::ObjectMapper>, objectMapper);
|
||||||
|
auto controller = std::make_shared<Controller>(objectMapper);
|
||||||
|
router->addController(controller);
|
||||||
|
auto swaggerController = oatpp::swagger::Controller::createShared(controller->getEndpoints());
|
||||||
|
router->addController(swaggerController);
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, connectionProvider);
|
||||||
|
OATPP_LOGI(__FUNCTION__, "Server " PRODUCT_VERSION_STR " starting on %s:%s",
|
||||||
|
connectionProvider->getProperty("host").getData(), connectionProvider->getProperty("port").getData());
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::Server>, server);
|
||||||
|
server->run();
|
||||||
|
OATPP_LOGI(__FUNCTION__, "Server stopped");
|
||||||
|
}
|
||||||
|
oatpp::base::Environment::destroy();
|
||||||
|
} catch (exception &ex) {
|
||||||
|
OATPP_LOGE(__FUNCTION__, "%s: %s", typeid(ex).name(), ex.what());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
24
ZRColaWS/zrcolaws.hpp
Normal file
24
ZRColaWS/zrcolaws.hpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../include/version.h"
|
||||||
|
#include <zrcola/idrec.h>
|
||||||
|
|
||||||
|
#ifndef PREFIX
|
||||||
|
#define PREFIX "/usr/local"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern ZRCola::translation_db t_db;
|
||||||
|
extern ZRCola::transet_db ts_db;
|
||||||
|
// extern ZRCola::transeq_db tsq_db;
|
||||||
|
extern ZRCola::langchar_db lc_db;
|
||||||
|
extern ZRCola::language_db lang_db;
|
||||||
|
// extern ZRCola::character_db chr_db;
|
||||||
|
// extern ZRCola::chrcat_db cc_db;
|
||||||
|
// extern ZRCola::chrtag_db ct_db;
|
||||||
|
// extern ZRCola::tagname_db tn_db;
|
||||||
|
// extern ZRCola::highlight_db h_db;
|
@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2017-2021 Amebis
|
Copyright © 2017-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<package>
|
<package>
|
||||||
<job id="CanoPerm">
|
<job id="CanoPerm">
|
||||||
<runtime>
|
<runtime>
|
||||||
<description>Generates character index permutations - Amebis, Copyright © 2017-2021</description>
|
<description>Generates character index permutations - Amebis, Copyright © 2017-2022</description>
|
||||||
<unnamed name="<Pattern>" required="true" helpstring="Cannonical form (X=unmoveable character; 0-9=moveable character, characters of the same number must preserve global order of appearance; maximum 10 characters)"/>
|
<unnamed name="<Pattern>" required="true" helpstring="Cannonical form (X=unmoveable character; 0-9=moveable character, characters of the same number must preserve global order of appearance; maximum 10 characters)"/>
|
||||||
<example>
|
<example>
|
||||||
Example:
|
Example:
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<package>
|
<package>
|
||||||
<job id="InstFont">
|
<job id="InstFont">
|
||||||
<runtime>
|
<runtime>
|
||||||
<description>Installs font - Amebis, Copyright © 2016-2021</description>
|
<description>Installs font - Amebis, Copyright © 2016-2022</description>
|
||||||
<unnamed name="<Shortcut.lnk>" required="true" helpstring="Shortcut file to create"/>
|
<unnamed name="<Shortcut.lnk>" required="true" helpstring="Shortcut file to create"/>
|
||||||
<example>
|
<example>
|
||||||
Example:
|
Example:
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 1991-2021 Amebis
|
Copyright © 1991-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<package>
|
<package>
|
||||||
<job id="MkLnk">
|
<job id="MkLnk">
|
||||||
<runtime>
|
<runtime>
|
||||||
<description>Creates shortcut to a program - Amebis, Copyright © 1991-2021</description>
|
<description>Creates shortcut to a program - Amebis, Copyright © 1991-2022</description>
|
||||||
<unnamed name="<Shortcut.lnk>" required="true" helpstring="Shortcut file to create"/>
|
<unnamed name="<Shortcut.lnk>" required="true" helpstring="Shortcut file to create"/>
|
||||||
<unnamed name="<Target>" required="true" helpstring="Target file the shortcut invokes"/>
|
<unnamed name="<Target>" required="true" helpstring="Target file the shortcut invokes"/>
|
||||||
<named name="A" type="string" required="false" helpstring="Command line arguments"/>
|
<named name="A" type="string" required="false" helpstring="Command line arguments"/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<package>
|
<package>
|
||||||
<job id="CharImport">
|
<job id="CharImport">
|
||||||
|
1
include/.gitignore
vendored
1
include/.gitignore
vendored
@ -1,2 +1 @@
|
|||||||
/UpdaterKeypair.txt
|
|
||||||
/UpdaterKeyPrivate.bin
|
/UpdaterKeyPrivate.bin
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="PropertySheets">
|
<ImportGroup Label="PropertySheets">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="PropertySheets" />
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="PropertySheets" />
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="PropertySheets">
|
<ImportGroup Label="PropertySheets">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
@ -31,6 +31,7 @@
|
|||||||
<DisableSpecificWarnings>4100;4505</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4100;4505</DisableSpecificWarnings>
|
||||||
<SupportJustMyCode>false</SupportJustMyCode>
|
<SupportJustMyCode>false</SupportJustMyCode>
|
||||||
<EnablePREfast>true</EnablePREfast>
|
<EnablePREfast>true</EnablePREfast>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
17
include/props.mak
Normal file
17
include/props.mak
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
ifeq ($(PREFIX),)
|
||||||
|
PREFIX := /usr/local
|
||||||
|
endif
|
||||||
|
CPPFLAGS := $(CPPFLAGS) -MMD -MP -DPREFIX='"$(PREFIX)"'
|
||||||
|
ifeq ($(CFG),Debug)
|
||||||
|
CPPFLAGS := $(CPPFLAGS) -D_DEBUG
|
||||||
|
CFLAGS := $(CFLAGS) -Og -g
|
||||||
|
CXXFLAGS := $(CXXFLAGS) -Og -g
|
||||||
|
else
|
||||||
|
CPPFLAGS := $(CPPFLAGS) -DNDEBUG
|
||||||
|
CFLAGS := $(CFLAGS) -O3 -fdata-sections -ffunction-sections
|
||||||
|
CXXFLAGS := $(CXXFLAGS) -O3 -fdata-sections -ffunction-sections
|
||||||
|
LDFLAGS := $(LDFLAGS) -Wl,--gc-sections
|
||||||
|
endif
|
||||||
|
|
||||||
|
OBJS := $(SRCS:%=%.o)
|
||||||
|
DEPS := $(OBJS:.o=.d)
|
5
include/targets.mak
Normal file
5
include/targets.mak
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
%.h.gch: %.h
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -x c++-header -o $@ -c $<
|
||||||
|
|
||||||
|
%.cpp.o: %.cpp
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -9,7 +9,7 @@
|
|||||||
// Product version as a single DWORD
|
// Product version as a single DWORD
|
||||||
// Note: Used for version comparison within C/C++ code.
|
// Note: Used for version comparison within C/C++ code.
|
||||||
//
|
//
|
||||||
#define PRODUCT_VERSION 0x02050500
|
#define PRODUCT_VERSION 0x02070100
|
||||||
|
|
||||||
//
|
//
|
||||||
// Product version by components
|
// Product version by components
|
||||||
@ -18,27 +18,27 @@
|
|||||||
// separately.
|
// separately.
|
||||||
//
|
//
|
||||||
#define PRODUCT_VERSION_MAJ 2
|
#define PRODUCT_VERSION_MAJ 2
|
||||||
#define PRODUCT_VERSION_MIN 5
|
#define PRODUCT_VERSION_MIN 7
|
||||||
#define PRODUCT_VERSION_REV 5
|
#define PRODUCT_VERSION_REV 1
|
||||||
#define PRODUCT_VERSION_BUILD 0
|
#define PRODUCT_VERSION_BUILD 0
|
||||||
|
|
||||||
//
|
//
|
||||||
// Human readable product version and build year for UI
|
// Human readable product version and build year for UI
|
||||||
//
|
//
|
||||||
#define PRODUCT_VERSION_STR "2.5.5"
|
#define PRODUCT_VERSION_STR "2.7.1"
|
||||||
#define PRODUCT_BUILD_YEAR_STR "2021"
|
#define PRODUCT_BUILD_YEAR_STR "2024"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Numerical version presentation for ProductVersion propery in
|
// Numerical version presentation for ProductVersion propery in
|
||||||
// MSI packages (syntax: N.N[.N[.N]])
|
// MSI packages (syntax: N.N[.N[.N]])
|
||||||
//
|
//
|
||||||
#define PRODUCT_VERSION_INST "2.5.5"
|
#define PRODUCT_VERSION_INST "2.7.1"
|
||||||
|
|
||||||
//
|
//
|
||||||
// The product code for ProductCode property in MSI packages
|
// The product code for ProductCode property in MSI packages
|
||||||
// Replace with new on every version change, regardless how minor it is.
|
// Replace with new on every version change, regardless how minor it is.
|
||||||
//
|
//
|
||||||
#define PRODUCT_VERSION_GUID "{109805EF-6EB5-4F43-A05A-82B3862E16B5}"
|
#define PRODUCT_VERSION_GUID "{9423BEC3-3159-4130-8C3E-48D5DE24D48A}"
|
||||||
|
|
||||||
//
|
//
|
||||||
// The product vendor and application name for configuration keeping.
|
// The product vendor and application name for configuration keeping.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2016-2021 Amebis
|
Copyright © 2016-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="PropertySheets">
|
<ImportGroup Label="PropertySheets">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 1991-2021 Amebis
|
Copyright © 1991-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(POCompileBeforeTargets)' == '' and '$(POCompileAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
|
<PropertyGroup Condition="'$(POCompileBeforeTargets)' == '' and '$(POCompileAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 1991-2021 Amebis
|
Copyright © 1991-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 1991-2021 Amebis
|
Copyright © 1991-2022 Amebis
|
||||||
-->
|
-->
|
||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
|
||||||
<Rule Name="POCompile" PageTemplate="tool" DisplayName="PO Compiler" SwitchPrefix="--" Order="200">
|
<Rule Name="POCompile" PageTemplate="tool" DisplayName="PO Compiler" SwitchPrefix="--" Order="200">
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 27f3946c4feaaf5a9387366a41262d3e97ea08d9
|
Subproject commit 6dead076a2e48e7f561c6e72e027c48ffcbb07be
|
33
lib/libZRCola/build/Makefile
Normal file
33
lib/libZRCola/build/Makefile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
CPPFLAGS := $(CPPFLAGS) -I../../stdex/include
|
||||||
|
SRCS := \
|
||||||
|
../src/character.cpp \
|
||||||
|
../src/common.cpp \
|
||||||
|
../src/highlight.cpp \
|
||||||
|
../src/language.cpp \
|
||||||
|
../src/mapping.cpp \
|
||||||
|
../src/pch.cpp \
|
||||||
|
../src/tag.cpp \
|
||||||
|
../src/translate.cpp
|
||||||
|
|
||||||
|
include ../../../include/props.mak
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: ../lib/libZRCola.a
|
||||||
|
|
||||||
|
../lib/libZRCola.a: ../src/pch.h.gch $(OBJS)
|
||||||
|
$(AR) $(ARFLAGS) $@ $(OBJS)
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: ../test/test
|
||||||
|
../test/test
|
||||||
|
|
||||||
|
../test/test: ../lib/libZRCola.a
|
||||||
|
$(CXX) $(CPPFLAGS) -I../../stdex/include -I../include $(CXXFLAGS) -L../lib -o $@ ../test/test.cpp -lstdc++ -lZRCola
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
-rm -r ../src/*.{d,gch,o} ../lib/libZRCola.a ../test/*.d ../test/test
|
||||||
|
|
||||||
|
include ../../../include/targets.mak
|
||||||
|
-include $(DEPS)
|
||||||
|
-include ../test/test.d
|
@ -66,7 +66,6 @@
|
|||||||
<ClCompile Include="..\src\common.cpp" />
|
<ClCompile Include="..\src\common.cpp" />
|
||||||
<ClCompile Include="..\src\highlight.cpp" />
|
<ClCompile Include="..\src\highlight.cpp" />
|
||||||
<ClCompile Include="..\src\language.cpp" />
|
<ClCompile Include="..\src\language.cpp" />
|
||||||
<ClCompile Include="..\src\mapping.cpp" />
|
|
||||||
<ClCompile Include="..\src\pch.cpp">
|
<ClCompile Include="..\src\pch.cpp">
|
||||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -14,9 +14,6 @@
|
|||||||
<ClCompile Include="..\src\pch.cpp">
|
<ClCompile Include="..\src\pch.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\mapping.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\translate.cpp">
|
<ClCompile Include="..\src\translate.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/*
|
/*
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
Copyright © 2015-2021 Amebis
|
Copyright © 2015-2022 Amebis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdex/idrec.h>
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <istream>
|
#include <istream>
|
||||||
|
#include <locale>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <vector>
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable: 4200)
|
#pragma warning(disable: 4200)
|
||||||
@ -29,11 +29,16 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
typedef double charrank_t;
|
typedef double charrank_t;
|
||||||
|
|
||||||
inline bool ispua(_In_ wchar_t c)
|
inline bool ispua(_In_ char_t c)
|
||||||
{
|
{
|
||||||
return L'\ue000' <= c && c <= L'\uf8ff';
|
return u'\ue000' <= c && c <= u'\uf8ff';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
size_t wcslen(_In_z_ const char_t* str);
|
||||||
|
size_t wcsnlen(_In_z_count_(count) const char_t* str, _In_ size_t count);
|
||||||
|
#endif
|
||||||
|
|
||||||
#pragma pack(push)
|
#pragma pack(push)
|
||||||
#pragma pack(2)
|
#pragma pack(2)
|
||||||
///
|
///
|
||||||
@ -177,13 +182,13 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
struct character {
|
struct character {
|
||||||
public:
|
public:
|
||||||
chrcatid_t cat; ///> Character category ID
|
chrcatid_t cat; ///> Character category ID
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
unsigned __int16 chr_to; ///< Character end in \c data
|
uint16_t chr_to; ///< Character end in \c data
|
||||||
unsigned __int16 desc_to; ///< Character description end in \c data
|
uint16_t desc_to; ///< Character description end in \c data
|
||||||
unsigned __int16 rel_to; ///< Related characters end in \c data
|
uint16_t rel_to; ///< Related characters end in \c data
|
||||||
wchar_t data[]; ///< Character, character description
|
char_t data[]; ///< Character, character description
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline character(_In_ const character &other);
|
inline character(_In_ const character &other);
|
||||||
@ -202,47 +207,47 @@ namespace ZRCola {
|
|||||||
/// \param[in] rel_len Number of UTF-16 characters in \p rel (including zero delimiters)
|
/// \param[in] rel_len Number of UTF-16 characters in \p rel (including zero delimiters)
|
||||||
///
|
///
|
||||||
inline character(
|
inline character(
|
||||||
_In_opt_z_count_(chr_len) const wchar_t *chr = NULL,
|
_In_opt_z_count_(chr_len) const char_t *chr = NULL,
|
||||||
_In_opt_ size_t chr_len = 0,
|
_In_opt_ size_t chr_len = 0,
|
||||||
_In_opt_ chrcatid_t cat = chrcatid_t::blank,
|
_In_opt_ chrcatid_t cat = chrcatid_t::blank,
|
||||||
_In_opt_z_count_(desc_len) const wchar_t *desc = NULL,
|
_In_opt_z_count_(desc_len) const char_t *desc = NULL,
|
||||||
_In_opt_ size_t desc_len = 0,
|
_In_opt_ size_t desc_len = 0,
|
||||||
_In_opt_z_count_(rel_len) const wchar_t *rel = NULL,
|
_In_opt_z_count_(rel_len) const char_t *rel = NULL,
|
||||||
_In_opt_ size_t rel_len = 0)
|
_In_opt_ size_t rel_len = 0)
|
||||||
{
|
{
|
||||||
this->cat = cat;
|
this->cat = cat;
|
||||||
this->chr_to = static_cast<unsigned __int16>(chr_len);
|
this->chr_to = static_cast<uint16_t>(chr_len);
|
||||||
if (chr && chr_len) memcpy(this->data, chr, sizeof(wchar_t)*chr_len);
|
if (chr && chr_len) memcpy(this->data, chr, sizeof(char_t)*chr_len);
|
||||||
this->desc_to = static_cast<unsigned __int16>(this->chr_to + desc_len);
|
this->desc_to = static_cast<uint16_t>(this->chr_to + desc_len);
|
||||||
if (desc && desc_len) memcpy(this->data + this->chr_to, desc, sizeof(wchar_t)*desc_len);
|
if (desc && desc_len) memcpy(this->data + this->chr_to, desc, sizeof(char_t)*desc_len);
|
||||||
this->rel_to = static_cast<unsigned __int16>(this->desc_to + rel_len);
|
this->rel_to = static_cast<uint16_t>(this->desc_to + rel_len);
|
||||||
if (rel && rel_len) memcpy(this->data + this->desc_to, rel, sizeof(wchar_t)*rel_len);
|
if (rel && rel_len) memcpy(this->data + this->desc_to, rel, sizeof(char_t)*rel_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const wchar_t* chr () const { return data; };
|
inline const char_t* chr () const { return data; };
|
||||||
inline wchar_t* chr () { return data; };
|
inline char_t* chr () { return data; };
|
||||||
inline const wchar_t* chr_end() const { return data + chr_to; };
|
inline const char_t* chr_end() const { return data + chr_to; };
|
||||||
inline wchar_t* chr_end() { return data + chr_to; };
|
inline char_t* chr_end() { return data + chr_to; };
|
||||||
inline unsigned __int16 chr_len() const { return chr_to; };
|
inline uint16_t chr_len() const { return chr_to; };
|
||||||
|
|
||||||
inline const wchar_t* desc () const { return data + chr_to; };
|
inline const char_t* desc () const { return data + chr_to; };
|
||||||
inline wchar_t* desc () { return data + chr_to; };
|
inline char_t* desc () { return data + chr_to; };
|
||||||
inline const wchar_t* desc_end() const { return data + desc_to; };
|
inline const char_t* desc_end() const { return data + desc_to; };
|
||||||
inline wchar_t* desc_end() { return data + desc_to; };
|
inline char_t* desc_end() { return data + desc_to; };
|
||||||
inline unsigned __int16 desc_len() const { return desc_to - chr_to; };
|
inline uint16_t desc_len() const { return desc_to - chr_to; };
|
||||||
|
|
||||||
inline const wchar_t* rel () const { return data + desc_to; };
|
inline const char_t* rel () const { return data + desc_to; };
|
||||||
inline wchar_t* rel () { return data + desc_to; };
|
inline char_t* rel () { return data + desc_to; };
|
||||||
inline const wchar_t* rel_end() const { return data + rel_to; };
|
inline const char_t* rel_end() const { return data + rel_to; };
|
||||||
inline wchar_t* rel_end() { return data + rel_to; };
|
inline char_t* rel_end() { return data + rel_to; };
|
||||||
inline unsigned __int16 rel_len() const { return rel_to - desc_to; };
|
inline uint16_t rel_len() const { return rel_to - desc_to; };
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Character index
|
/// Character index
|
||||||
///
|
///
|
||||||
class indexChr : public index<unsigned __int16, unsigned __int32, character>
|
class indexChr : public index<uint16_t, uint32_t, character>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -250,7 +255,7 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
/// \param[in] h Reference to vector holding the data
|
/// \param[in] h Reference to vector holding the data
|
||||||
///
|
///
|
||||||
indexChr(_In_ std::vector<unsigned __int16> &h) : index<unsigned __int16, unsigned __int32, character>(h) {}
|
indexChr(_In_ std::vector<uint16_t> &h) : index<uint16_t, uint32_t, character>(h) {}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Compares two characters by ID (for searching)
|
/// Compares two characters by ID (for searching)
|
||||||
@ -272,9 +277,9 @@ namespace ZRCola {
|
|||||||
}
|
}
|
||||||
} idxChr; ///< Character index
|
} idxChr; ///< Character index
|
||||||
|
|
||||||
textindex<wchar_t, wchar_t, unsigned __int32> idxDsc; ///< Description index
|
textindex<char_t, char_t, uint32_t> idxDsc; ///< Description index
|
||||||
textindex<wchar_t, wchar_t, unsigned __int32> idxDscSub; ///< Description index (sub-terms)
|
textindex<char_t, char_t, uint32_t> idxDscSub; ///< Description index (sub-terms)
|
||||||
std::vector<unsigned __int16> data; ///< Character data
|
std::vector<uint16_t> data; ///< Character data
|
||||||
|
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -303,7 +308,7 @@ namespace ZRCola {
|
|||||||
/// \param[in ] fn_abort Pointer to function to periodically test for search cancellation
|
/// \param[in ] fn_abort Pointer to function to periodically test for search cancellation
|
||||||
/// \param[in ] cookie Cookie for \p fn_abort call
|
/// \param[in ] cookie Cookie for \p fn_abort call
|
||||||
///
|
///
|
||||||
bool Search(_In_z_ const wchar_t *str, _In_ const std::set<chrcatid_t> &cats, _Inout_ std::map<std::wstring, charrank_t> &hits, _Inout_ std::map<std::wstring, charrank_t> &hits_sub, _In_opt_ bool (__cdecl *fn_abort)(void *cookie) = NULL, _In_opt_ void *cookie = NULL) const;
|
bool Search(_In_z_ const char_t *str, _In_ const std::set<chrcatid_t> &cats, _Inout_ std::map<string_t, charrank_t> &hits, _Inout_ std::map<string_t, charrank_t> &hits_sub, _In_opt_ bool (__cdecl *fn_abort)(void *cookie) = NULL, _In_opt_ void *cookie = NULL) const;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Get character category
|
/// Get character category
|
||||||
@ -315,20 +320,99 @@ namespace ZRCola {
|
|||||||
/// - Character category if character found
|
/// - Character category if character found
|
||||||
/// - `ZRCola::chrcatid_t::blank` otherwise
|
/// - `ZRCola::chrcatid_t::blank` otherwise
|
||||||
///
|
///
|
||||||
inline chrcatid_t GetCharCat(_In_z_count_(len) const wchar_t *chr, _In_ const size_t len) const
|
inline chrcatid_t GetCharCat(_In_z_count_(len) const char_t *chr, _In_ const size_t len) const
|
||||||
{
|
{
|
||||||
assert(len <= 0xffff);
|
assert(len <= 0xffff);
|
||||||
std::unique_ptr<character> c((character*)new char[sizeof(character) + sizeof(wchar_t)*len]);
|
std::unique_ptr<character> c((character*)new char[sizeof(character) + sizeof(char_t)*len]);
|
||||||
c->character::character(chr, len);
|
new (c.get()) character(chr, len);
|
||||||
indexChr::size_type start;
|
indexChr::size_type start;
|
||||||
return idxChr.find(*c, start) ? idxChr[start].cat : chrcatid_t::blank;
|
return idxChr.find(*c, start) ? idxChr[start].cat : chrcatid_t::blank;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Writes character database to a stream
|
||||||
|
///
|
||||||
|
/// \param[in] stream Output stream
|
||||||
|
/// \param[in] db Character database
|
||||||
|
///
|
||||||
|
/// \returns The stream \p stream
|
||||||
|
///
|
||||||
|
friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const character_db &db)
|
||||||
|
{
|
||||||
|
// Write character index.
|
||||||
|
if (stream.fail()) return stream;
|
||||||
|
stream << db.idxChr;
|
||||||
|
|
||||||
|
// Write description index.
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
stream << db.idxDsc;
|
||||||
|
|
||||||
|
// Write sub-term description index.
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
stream << db.idxDscSub;
|
||||||
|
|
||||||
|
// Write data count.
|
||||||
|
auto 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;
|
||||||
|
uint32_t count = (uint32_t)data_count;
|
||||||
|
stream.write((const char*)&count, sizeof(count));
|
||||||
|
|
||||||
|
// Write data.
|
||||||
|
if (stream.fail()) return stream;
|
||||||
|
stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast<std::streamsize>(count));
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Reads character database from a stream
|
||||||
|
///
|
||||||
|
/// \param[in ] stream Input stream
|
||||||
|
/// \param[out] db Character database
|
||||||
|
///
|
||||||
|
/// \returns The stream \p stream
|
||||||
|
///
|
||||||
|
friend std::istream& operator >>(_In_ std::istream& stream, _Out_ character_db& db)
|
||||||
|
{
|
||||||
|
// Read character index.
|
||||||
|
stream >> db.idxChr;
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
// Read description index.
|
||||||
|
stream >> db.idxDsc;
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
// Read sub-term description index.
|
||||||
|
stream >> db.idxDscSub;
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
// Read data count.
|
||||||
|
uint32_t count;
|
||||||
|
stream.read((char*)&count, sizeof(count));
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
if (count) {
|
||||||
|
// Read data.
|
||||||
|
db.data.resize(count);
|
||||||
|
stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast<std::streamsize>(count));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
db.data.clear();
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef stdex::idrec::record<character_db, recordid_t, recordsize_t, ZRCOLA_RECORD_ALIGN> character_rec;
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Character category database
|
/// Character category database
|
||||||
///
|
///
|
||||||
@ -341,12 +425,12 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
struct chrcat {
|
struct chrcat {
|
||||||
public:
|
public:
|
||||||
chrcatid_t cat; ///< Character category ID
|
chrcatid_t cat; ///< Character category ID
|
||||||
unsigned __int16 rank; ///< Character category rank
|
uint16_t rank; ///< Character category rank
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
unsigned __int16 name_to; ///< Character category name end in \c data
|
uint16_t name_to; ///< Character category name end in \c data
|
||||||
wchar_t data[]; ///< Character category name
|
char_t data[]; ///< Character category name
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline chrcat(_In_ const chrcat &other);
|
inline chrcat(_In_ const chrcat &other);
|
||||||
@ -362,29 +446,29 @@ namespace ZRCola {
|
|||||||
/// \param[in] name_len Number of UTF-16 characters in \p name
|
/// \param[in] name_len Number of UTF-16 characters in \p name
|
||||||
///
|
///
|
||||||
inline chrcat(
|
inline chrcat(
|
||||||
_In_opt_ chrcatid_t cat = chrcatid_t::blank,
|
_In_opt_ chrcatid_t cat = chrcatid_t::blank,
|
||||||
_In_opt_ unsigned __int16 rank = 0,
|
_In_opt_ uint16_t rank = 0,
|
||||||
_In_opt_z_count_(name_len) const wchar_t *name = NULL,
|
_In_opt_z_count_(name_len) const char_t *name = NULL,
|
||||||
_In_opt_ size_t name_len = 0)
|
_In_opt_ size_t name_len = 0)
|
||||||
{
|
{
|
||||||
this->cat = cat;
|
this->cat = cat;
|
||||||
this->rank = rank;
|
this->rank = rank;
|
||||||
this->name_to = static_cast<unsigned __int16>(name_len);
|
this->name_to = static_cast<uint16_t>(name_len);
|
||||||
if (name && name_len) memcpy(this->data, name, sizeof(wchar_t)*name_len);
|
if (name && name_len) memcpy(this->data, name, sizeof(char_t)*name_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const wchar_t* name () const { return data; };
|
inline const char_t* name () const { return data; };
|
||||||
inline wchar_t* name () { return data; };
|
inline char_t* name () { return data; };
|
||||||
inline const wchar_t* name_end() const { return data + name_to; };
|
inline const char_t* name_end() const { return data + name_to; };
|
||||||
inline wchar_t* name_end() { return data + name_to; };
|
inline char_t* name_end() { return data + name_to; };
|
||||||
inline unsigned __int16 name_len() const { return name_to; };
|
inline uint16_t name_len() const { return name_to; };
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Character category index
|
/// Character category index
|
||||||
///
|
///
|
||||||
class indexChrCat : public index<unsigned __int16, unsigned __int32, chrcat>
|
class indexChrCat : public index<uint16_t, uint32_t, chrcat>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -392,7 +476,7 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
/// \param[in] h Reference to vector holding the data
|
/// \param[in] h Reference to vector holding the data
|
||||||
///
|
///
|
||||||
indexChrCat(_In_ std::vector<unsigned __int16> &h) : index<unsigned __int16, unsigned __int32, chrcat>(h) {}
|
indexChrCat(_In_ std::vector<uint16_t> &h) : index<uint16_t, uint32_t, chrcat>(h) {}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Compares two character categories by ID (for searching)
|
/// Compares two character categories by ID (for searching)
|
||||||
@ -407,8 +491,8 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
virtual int compare(_In_ const chrcat &a, _In_ const chrcat &b) const
|
virtual int compare(_In_ const chrcat &a, _In_ const chrcat &b) const
|
||||||
{
|
{
|
||||||
if (a.cat < b.cat) return -1;
|
if (a.cat < b.cat) return -1;
|
||||||
else if (a.cat > b.cat) return 1;
|
if (a.cat > b.cat) return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -417,7 +501,7 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
/// Rank index
|
/// Rank index
|
||||||
///
|
///
|
||||||
class indexRank : public index<unsigned __int16, unsigned __int32, chrcat>
|
class indexRank : public index<uint16_t, uint32_t, chrcat>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -425,7 +509,7 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
/// \param[in] h Reference to vector holding the data
|
/// \param[in] h Reference to vector holding the data
|
||||||
///
|
///
|
||||||
indexRank(_In_ std::vector<unsigned __int16> &h) : index<unsigned __int16, unsigned __int32, chrcat>(h) {}
|
indexRank(_In_ std::vector<uint16_t> &h) : index<uint16_t, uint32_t, chrcat>(h) {}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Compares two character categories by ID (for searching)
|
/// Compares two character categories by ID (for searching)
|
||||||
@ -440,8 +524,8 @@ namespace ZRCola {
|
|||||||
///
|
///
|
||||||
virtual int compare(_In_ const chrcat &a, _In_ const chrcat &b) const
|
virtual int compare(_In_ const chrcat &a, _In_ const chrcat &b) const
|
||||||
{
|
{
|
||||||
if (a.rank < b.rank) return -1;
|
if (a.rank < b.rank) return -1;
|
||||||
else if (a.rank > b.rank) return +1;
|
if (a.rank > b.rank) return +1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -462,19 +546,12 @@ namespace ZRCola {
|
|||||||
if (a.rank < b.rank) return -1;
|
if (a.rank < b.rank) return -1;
|
||||||
else if (a.rank > b.rank) return +1;
|
else if (a.rank > b.rank) return +1;
|
||||||
|
|
||||||
unsigned __int16
|
auto &coll = std::use_facet<std::collate<char_t>>(std::locale());
|
||||||
a_name_len = a.name_len(),
|
return coll.compare(a.name(), a.name_end(), b.name(), b.name_end());
|
||||||
b_name_len = b.name_len();
|
|
||||||
int r = _wcsncoll(a.name(), b.name(), 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;
|
|
||||||
}
|
}
|
||||||
} idxRank; ///< Rank index
|
} idxRank; ///< Rank index
|
||||||
|
|
||||||
std::vector<unsigned __int16> data; ///< Character category data
|
std::vector<uint16_t> data; ///< Character category data
|
||||||
|
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -491,168 +568,81 @@ namespace ZRCola {
|
|||||||
idxRank .clear();
|
idxRank .clear();
|
||||||
data .clear();
|
data .clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Writes character category database to a stream
|
||||||
|
///
|
||||||
|
/// \param[in] stream Output stream
|
||||||
|
/// \param[in] db Character category database
|
||||||
|
///
|
||||||
|
/// \returns The stream \p stream
|
||||||
|
///
|
||||||
|
friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const chrcat_db& db)
|
||||||
|
{
|
||||||
|
// Write character category index.
|
||||||
|
if (stream.fail()) return stream;
|
||||||
|
stream << db.idxChrCat;
|
||||||
|
|
||||||
|
// Write rank index.
|
||||||
|
if (stream.fail()) return stream;
|
||||||
|
stream << db.idxRank;
|
||||||
|
|
||||||
|
// Write data count.
|
||||||
|
auto 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;
|
||||||
|
uint32_t count = (uint32_t)data_count;
|
||||||
|
stream.write((const char*)&count, sizeof(count));
|
||||||
|
|
||||||
|
// Write data.
|
||||||
|
if (stream.fail()) return stream;
|
||||||
|
stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast<std::streamsize>(count));
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Reads character category database from a stream
|
||||||
|
///
|
||||||
|
/// \param[in ] stream Input stream
|
||||||
|
/// \param[out] db Character category database
|
||||||
|
///
|
||||||
|
/// \returns The stream \p stream
|
||||||
|
///
|
||||||
|
friend std::istream& operator >>(_In_ std::istream& stream, _Out_ chrcat_db& db)
|
||||||
|
{
|
||||||
|
// Read character category index.
|
||||||
|
stream >> db.idxChrCat;
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
// Read rank index.
|
||||||
|
stream >> db.idxRank;
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
// Read data count.
|
||||||
|
uint32_t count;
|
||||||
|
stream.read((char*)&count, sizeof(count));
|
||||||
|
if (!stream.good()) return stream;
|
||||||
|
|
||||||
|
if (count) {
|
||||||
|
// Read data.
|
||||||
|
db.data.resize(count);
|
||||||
|
stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast<std::streamsize>(count));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
db.data.clear();
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef stdex::idrec::record<chrcat_db, recordid_t, recordsize_t, ZRCOLA_RECORD_ALIGN> chrcat_rec;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const ZRCola::recordid_t ZRCola::character_rec::id = *(ZRCola::recordid_t*)"CHR";
|
|
||||||
const ZRCola::recordid_t ZRCola::chrcat_rec ::id = *(ZRCola::recordid_t*)"CCT";
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Reads character database from a stream
|
|
||||||
///
|
|
||||||
/// \param[in ] stream Input stream
|
|
||||||
/// \param[out] db Character database
|
|
||||||
///
|
|
||||||
/// \returns The stream \p stream
|
|
||||||
///
|
|
||||||
inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::character_db &db)
|
|
||||||
{
|
|
||||||
// Read character index.
|
|
||||||
stream >> db.idxChr;
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
// Read description index.
|
|
||||||
stream >> db.idxDsc;
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
// Read sub-term description index.
|
|
||||||
stream >> db.idxDscSub;
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
// Read data count.
|
|
||||||
unsigned __int32 count;
|
|
||||||
stream.read((char*)&count, sizeof(count));
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
if (count) {
|
|
||||||
// Read data.
|
|
||||||
db.data.resize(count);
|
|
||||||
stream.read((char*)db.data.data(), sizeof(unsigned __int16)*static_cast<std::streamsize>(count));
|
|
||||||
} else
|
|
||||||
db.data.clear();
|
|
||||||
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Writes character database to a stream
|
|
||||||
///
|
|
||||||
/// \param[in] stream Output stream
|
|
||||||
/// \param[in] db Character database
|
|
||||||
///
|
|
||||||
/// \returns The stream \p stream
|
|
||||||
///
|
|
||||||
inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::character_db &db)
|
|
||||||
{
|
|
||||||
// Write character index.
|
|
||||||
if (stream.fail()) return stream;
|
|
||||||
stream << db.idxChr;
|
|
||||||
|
|
||||||
// Write description index.
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
stream << db.idxDsc;
|
|
||||||
|
|
||||||
// Write sub-term description index.
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
stream << db.idxDscSub;
|
|
||||||
|
|
||||||
// Write data count.
|
|
||||||
auto 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;
|
|
||||||
unsigned __int32 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)*static_cast<std::streamsize>(count));
|
|
||||||
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Writes character category database to a stream
|
|
||||||
///
|
|
||||||
/// \param[in] stream Output stream
|
|
||||||
/// \param[in] db Character category database
|
|
||||||
///
|
|
||||||
/// \returns The stream \p stream
|
|
||||||
///
|
|
||||||
inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::chrcat_db &db)
|
|
||||||
{
|
|
||||||
// Write character category index.
|
|
||||||
if (stream.fail()) return stream;
|
|
||||||
stream << db.idxChrCat;
|
|
||||||
|
|
||||||
// Write rank index.
|
|
||||||
if (stream.fail()) return stream;
|
|
||||||
stream << db.idxRank;
|
|
||||||
|
|
||||||
// Write data count.
|
|
||||||
auto 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;
|
|
||||||
unsigned __int32 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)*static_cast<std::streamsize>(count));
|
|
||||||
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Reads character category database from a stream
|
|
||||||
///
|
|
||||||
/// \param[in ] stream Input stream
|
|
||||||
/// \param[out] db Character category database
|
|
||||||
///
|
|
||||||
/// \returns The stream \p stream
|
|
||||||
///
|
|
||||||
inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::chrcat_db &db)
|
|
||||||
{
|
|
||||||
// Read character category index.
|
|
||||||
stream >> db.idxChrCat;
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
// Read rank index.
|
|
||||||
stream >> db.idxRank;
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
// Read data count.
|
|
||||||
unsigned __int32 count;
|
|
||||||
stream.read((char*)&count, sizeof(count));
|
|
||||||
if (!stream.good()) return stream;
|
|
||||||
|
|
||||||
if (count) {
|
|
||||||
// Read data.
|
|
||||||
db.data.resize(count);
|
|
||||||
stream.read((char*)db.data.data(), sizeof(unsigned __int16)*static_cast<std::streamsize>(count));
|
|
||||||
} else
|
|
||||||
db.data.clear();
|
|
||||||
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user