[Scummvm-git-logs] scummvm master -> 3925f993b513a32834bee0a898a8b5c7a068f1d4
sev-
noreply at scummvm.org
Thu Sep 12 22:11:44 UTC 2024
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
ed5f0b1912 GRIM: Support unicode TTF
d229bd51a3 CREATE_ENCODING: Import Chinese charmap from hanziconv
cc3e15ff43 COMMON: Add t2s table to encoding.dat
510d97dae8 COMMON: Fix bug when using old encoding.dat
fb045768e3 COMMON: Support transcoding Traditional Chinese to Simplified
949eab7d21 DETECTOR: Support kADFlagCanTranscodeTraditionalChineseToSimplified
3925f993b5 GRIM: Support transcoding Monkey4 from Traditional to Simplified Chinese
Commit: ed5f0b1912c5888109ad41170f927e54105efcbf
https://github.com/scummvm/scummvm/commit/ed5f0b1912c5888109ad41170f927e54105efcbf
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
GRIM: Support unicode TTF
Changed paths:
engines/grim/font.cpp
engines/grim/font.h
diff --git a/engines/grim/font.cpp b/engines/grim/font.cpp
index cbdfe83b250..ce81ced03a2 100644
--- a/engines/grim/font.cpp
+++ b/engines/grim/font.cpp
@@ -423,12 +423,27 @@ void FontTTF::loadTTF(const Common::String &filename, Common::SeekableReadStream
#else
_font = nullptr;
#endif
+ _isUnicode = false;
+}
+
+void FontTTF::loadTTFFromArchive(const Common::String &filename, int size) {
+ _filename = filename;
+ _size = size;
+#ifdef USE_FREETYPE2
+ _font = Graphics::loadTTFFontFromArchive(filename, size, Graphics::kTTFSizeModeCharacter, 0, Graphics::kTTFRenderModeLight);
+#else
+ _font = nullptr;
+#endif
+ _isUnicode = true;
}
int FontTTF::getKernedStringLength(const Common::String &text) const {
if (g_grim->getGameLanguage() == Common::KO_KOR) {
return _font->getStringWidth(convertToU32String(text.c_str(), Common::kWindows949));
}
+ if (_isUnicode) {
+ return _font->getStringWidth(text.decode(Common::CodePage::kUtf8));
+ }
return _font->getStringWidth(text);
}
@@ -441,7 +456,13 @@ void FontTTF::render(Graphics::Surface &surface, const Common::String ¤tLi
surface.create(width, height, pixelFormat);
surface.fillRect(Common::Rect(0, 0, width, height), colorKey);
_font->drawString(&surface, u32CurrentLine, 0, 0, width, 0xFFFFFFFF);
+ } else if (_isUnicode) {
+ Common::Rect bbox = _font->getBoundingBox(currentLine.decode(Common::CodePage::kUtf8));
+
+ surface.create(bbox.right, bbox.bottom, pixelFormat);
+ surface.fillRect(Common::Rect(0, 0, bbox.right, bbox.bottom), colorKey);
+ _font->drawString(&surface, currentLine.decode(Common::CodePage::kUtf8), 0, 0, bbox.right, 0xFFFFFFFF);
} else {
Common::Rect bbox = _font->getBoundingBox(currentLine);
diff --git a/engines/grim/font.h b/engines/grim/font.h
index 5e6ca1d634d..f7c676633d2 100644
--- a/engines/grim/font.h
+++ b/engines/grim/font.h
@@ -131,6 +131,7 @@ private:
class FontTTF : public Font, public PoolObject<FontTTF> {
public:
void loadTTF(const Common::String &filename, Common::SeekableReadStream *data, int size);
+ void loadTTFFromArchive(const Common::String &filename, int size);
static int32 getStaticTag() { return MKTAG('T', 'T', 'F', ' '); }
int getPoolId() const override { return getId(); }
@@ -153,6 +154,7 @@ public:
private:
Graphics::Font *_font;
+ bool _isUnicode;
int _size;
};
Commit: d229bd51a31e6e88f42d7779cd608bb71d474662
https://github.com/scummvm/scummvm/commit/d229bd51a31e6e88f42d7779cd608bb71d474662
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
CREATE_ENCODING: Import Chinese charmap from hanziconv
Changed paths:
A devtools/create_encoding/hanzi_charmap.py
diff --git a/devtools/create_encoding/hanzi_charmap.py b/devtools/create_encoding/hanzi_charmap.py
new file mode 100644
index 00000000000..0262c85f3d6
--- /dev/null
+++ b/devtools/create_encoding/hanzi_charmap.py
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2014 Bernard Yue
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from __future__ import unicode_literals, absolute_import
+import textwrap
+
+
+cuhk_traditional = ''.join(textwrap.dedent("""
+è²è»å¤¾è¦å£¯å¦å
é·æ±å²¡æç³¾ä¾ä¾å
©éåäºè»çè¨è¨è¨é£é¢¨è² è²ééè»è»ç´ç´
ç´ç´ç´ç´ç´ç´å¾
+ååååå帥éçºéä¿ä¿ é åå¡ç½ç¹è²¡è²¢ååååå«åååè»ç´ç´¡ç´ç´ç´ç´ç´ç´ç´ç´ç´ç´ç´
+ç´å³¶å³½å³½å³´éééééå鬥è¨è¨è¨è¨è¨è¨è¨è¨è¿´æµ¹æ¶éå¾åº«é¦¬çè±æ°£è»è»å«éééé£å¸«ææ¸
+çæ¾è
è¦é»è¡¹è¨è¨ªè¨£è¨¥è¨è¨è¨¢è¨©è¨±è¨å å
å¡å·è»è»åæçµç´¬çµç´¿ç´±ç´¼ç´ºç´¹ç´³ç´°ç´²çµçµç¢éå
+å´ååµå¾å¾ éµé§é£é©é¹éºé¤é·ç£æµé³é¸é°è帶帳é é å´¬å´åå販貫貨貧貪責婦å©å©ä¹¾ææ²æ
+æ«ææ¨æå®è¦è¦è¦åååè¯èé£¢æ¢æ¢æ¢å°å°è淶淪淺淵é£éå¢åååé¹µéº¥é³¥ç½æ°«æ®ºè¡ç´ç¿ç¾
+éµéæ¬å¼µç¾æç¡æ¡æ»æ¶æ±ææ²è²³è³è²¶è²¸è²»è²´è³è²ºè²·è²¿è²°è²¼è²½è²¯ééééééé£éé¥éé§éé
+éé¦éé¾å ±å ´å å ¯ååå¢åã³çæ®å»æ¸¬æ¸¢æºæ¸¦æ¸¾æ¹¯æ¹è©è©è©è¨¶è©è©è©è¨´è©è©è©è©è©è¨ºè¦ç¡¨ç¡¤
+ç¡¯æ£æ£æ£¡æ£æ£§åµå´å®å¬åªåå²çµ°çµ¦çµçµ³çµçµçµçµçµ¡çµ¨çµ²çµ±çµ¢è
è
è¹ééé½é¦±é¦®é¦ç¼å¾©è»²è»¤è»»
+軺軼軫軸媯媧é é é
é å£ºç«æ®ææå¹¾éééééé²ç屿®¼çåµåååèæ¬½é飥åå¹å¹ç¡éé
+å°æ°¬ç¶é²è¤ææ´æ·æ¾é é é é é é é é ç¶ç¶ç¶çµ¹ç¶ç¶ç¶ç¶éé¢é¸éé¿é·éé³é´éé¬é®é¹éé
+éé°éééé¾éºéé¦è£è£è£è£æ»æºæ»
溮溳æºè©«è©²è©¬è©¿è©è©±è©¼è©°èªèªèªè©®è©©è©¦è©³è©¡è©¢è©£èª
è
¸è
¡
+è
¦è
«é¦³é¦´é£é£¿é£¯é£ªé£©é£²é£«å³å
ååå¾å·åå´åµèè¢èè§ééééç¶éææ¶æé»ç
©ç
ç
¢ç
ç
¬æ¥
+æ¥µæ¥æ¥æ¥¨é³¬é³©è³
è³è³è³è³è³è³å¹¹ååååå©åèå¯å½æç¿çèºèç§ç¯è¼è¼
軾è¼è¼å¡å¡å¡å¡å¡¢
+塤å¡å£¼çäºåª½çç»ç
黽å¯è¾²ç¾¥ç¾©å·°è
æ²èå¢ç«ªéééææçºååééçé¨éºééé±é©é»é¿é¸
+é¬é ééé£é«é
ééé¶é¥é¦ééªé骯èªèª èªèª¥èª¨èª¡èªèªèªèª¦èªªèª£èª¤èªèªç¾åå¶åååååæ
ª
+æ
æ
æ
£æ
³æ
¶æ
æ
æ¼æ»»æ»æ¼¢æ»¸æ»¬æ¼¸æ¼£æ¼æ»·æ»¿æ»²æ»æ¼æ¼²æ»¯æ¼¬é£½é¤é¤é£¼é£¾é¤é£´ç¶³ç¶¢ç¶½ç·ç¶±ç¶¸ç·ç·ç¶¾
+ç¶¹ç¶ ç¶¿ç¶ºç¶£ç¶¬ç¶°ç¶²ç¶ç¶«ç·ç¶ç¶»ç·ç¶´è³è³è³é§æ»æææ³ææ¶æºæ¢å¡µå¢å¡¹ç¨±ç¨®ç¢ç¢¸ç¢©ééé å°å¥ª
+奬奩罰é¥é£é¨é¡é¤é©ä¦å¨å¥åååçç鳳鳴鳶éè¼è¼è¼è¶è¶æ§æ¦æ¦¿æ§æ¦®å¹å¹å夥夢ç¦ç¦ç¦é
+ç£ç¡ç®ç¸å±èé é å¶å¶å¶çå±¢çªç²ç£éº¼éº½é½æ§çç寢實å»é¢¯é¢±å£½èºåå窪窩è覡åå©èå«ç
+æ®è£½çé¨éé¼é¤éé¯éé¦éé°éé©éªéé³é±é»éé·é
é¹é¥åå¸å©å°å®å´ååµå¯é¤é¤é¤é¤ææ¯
+ç½·ç½µé´é³¾é´é´è¼©è¼¥è¼è¼è¼ªè¼¦è¼è¼å¹£å¹æ½·æ¾æ¼¿æ¾æ½æ½°æ¾æ½æ½¤æ½¿æ½¯æ½ç·¨ç· ç·ç·±ç·©ç·ç·ç·ç·´ç·¬ç·²ç·¡
+緦緹緯ç·ç·ç·£ç·»æ¨æ¨
æ§³æ¨æ¨æ§§æ¨æ¨£æ¨å½å½æ¥æ£æ«æææææ²æ³ææ¯å±¤è³è³§è³¦è³¡è³«è³¤è³è³£è³ ä¼
+è³è³¢è³¬è³ªè³å¬å«¿å¬å¬å«µå«»è«èª¿èª¹èª²è«è«è«èª¶èª°è«è«è«èª¼è«è«è«è«å» 廢廣å»å»¡å¾¹å¾µé½è¡è¡ä¦é«
+é¬éé±ç¡ç§çé²é§é°éææ¤æææ
®æ«æ
¤æ
«æ®æ²æå°æµæ¸å¢®å¢³å¢é«®ç¯ç¯é´é¯é·èèè è麩è¤é§
+é§é§é§é§é§é§é§é§é§é é ¡é ¦é颳åååååèè·èè¬è¦èµè翬å¹åååååè¸å¶ å¶å¶å¶¢é寬
+審寫å²çç©ç¢¼ç¢ºç£é¬§ç¤çª®ç±æ¯¿æ®¤èè¸è¦é©è±èæ«çºééé¶é¯ééé é¼é®é¦é¸ééé¸ééé³é©
+éé¢é«ééééå¯å å¹å¸å²é§¡å¥å¦å¬¡å¬è«³è«¤è«¶è«¦è«è«·è«±è«¢è««è¬è«¾è«è¬è«§è«è«¼è«ºè¬è«è«è«®è«¸é¤
+é¤é¤é¤é¤çé®é®é®é®é®é®é®é®£é®è¾¦ææææ¶ææååååç©ç©ç©ç©èè¼èèè輳輻輯輸ç¸ç¸
+ç¸ç¸ç¸ç¸ç¸§ç¸£ç¸ç¸ç¸ç¸ç¸ç¸é¶é½é¿é¹é¼é»é¾ç££ç£§ç£èµ¬é´é´£é´é´é´é´é´¨é´¦é´é²é¼é·é¸éºç¾çç
+çççæææ¿ææææ»æ¾æææ®«æ®¨æ¾±æ¾®æ¾ æ¿æ¾¾æ¾¦æ¾¤æ¿çªµçª¶çªºç¨çªç«ç¯¤ç¯©ç¯è³è³µè³´å¥®é¾é§é§±é§¢
+é ·é °é ¸é »é ²é é ¹é ¤æ¨ºæ©æ¨¸æ©æ©æ¨¹æ©¢ç£ç¡åè墾å£ççç褲é¶é´æææææ·é¾ç»ç®ç§èèè¢è©
+親覦é¨éªå¸å¶¨å¶§è¸´ç¦¦éæ°ééé¤éééé°éµéé¨ééé¬é¥é¶éééºé¾æç¦ç°é´¯é´¿é´°é´´é´»éµé´·
+éµéµéééééé幫è¬è¬è¬è¬è¬è¬è¬è¬è¬è¬è¬è¬ è¬
篳ç°ç°è½èè¯è£è®èè¦èæ¿±æ¿æ¿æ¿«æ¿æ¿æ¾
+æ¿æ¿¤æ¿°æ¯æ±æ æ¬æ°é¤
餷餶館é¤é¤é¤¡ç¦ç´ççè°è¯è³è²ç¦ªååªé½æªæªæªæªæª¢æª£é¨é§¿é§¸éè½è¾è
+è¿ççççé»ç³ç³ç¸«ç¸¾ç¸²ç¸ç¸·ç¸µç¹ç¸¹ç¸´ç¹
縮總縱縶賻購賽賺尷覯覬è½è½è¼¿è½
è¼¾é®é®«é®é®¦é®ªé®®
+é®é®ºèè»èèéééååç²ç°ç£¯ç£½è±è¥è¥è¤³è¤¸è¤»ç¯å±¨é¢¶é¡è§åµé¸ææ®®çè¨å¶ºå¶¸å¶¼è¬ææ¨å½å¬ª
+嬰çè¹è¶¨éº¯éæ²å£é±é»¿é½æ°é¡é¡é¡é¡é¡éµéµéµ éµéµéµ¡éµé謳è¬è¬¹è¬¾è¬¬è¬¨è¬«æºæ·æ´ææ¾æ»ææ²
+éé¬ééµé¸é§é¦é¿é³éªéä¥é¢é°é®é¡æè¹è¹£æª³æ«æª»æª¸æª¯æ®¯èèå¢ç«ç«
è¬è²è£è¯èè©è¢èèè
+èªèèèééééå²ç¤éééééç°ç°¡ç°£ç°«é¼çæ¿ºçæ¿¾æ¿¼æ¿¾ççæ·ææ£è±é¯é¯é¯é¯é¯ç·çµæ¸
+穢穡ç¼é¬é«ç¼ç¾è¦²èé¨é¨é¨é¨
å£å£éºä¡èµè¶è·è®ç¦®çç³§éç¹ç¹ç¹ç¹ç¹ååè½è½ç¿¹é¦è»é¬è§´å¬¸
+é鬩餳æè³¾è´è´
ç¤éµªé¶é¶é¶é¶é¶éµ¬éµ®éµ²è¥è¥ è¥é°é¢ééé¡ééé¤ééé¹é©éééé¨ééçç
+ç¨çç§ç餺餾é¥é¤¿é¤¼è¾è è¶è»è
鯧é¯é¯¡é¯¨é¯¤é¯ªé¯¢é¯°é¯é¯«é¯æ²æ·æ¶å¯µç禱禰é¡é¡é¡é¡æ«æ«æ«æ«
+æ«æ«çç¢éé¬å£å£¢å£å£ç¹¯ç¹ªç¹«ç¹ç¹®ç¹³ç¹°ç¹©ç¹¡ç¹¹èèè¦èèèè·ç©«ç©©èèèèèèèèè½è½è½
+æ èé¢é£å¦å¨å®éºç°¾ç°½é£é¢¼æé´å»¬æ°ç¾
ç¾çé¾é¨é¨è¹ºè¹»çç½è¦·å¸ç¸çºç»çééé§å´è´è´è´é°
+鯿é°é°é°é°é¯½é°é°é°é°é¶é¶¿é·é¶¡é¶é¶ªé¶¥é¶é¶©é½é½£é½é½¡é½ é½å¯¶è¾®ç¹½ç¹¼ç¹¾æææé¡éæºæ¸æ«¬æ«ªæ«³
+櫨櫧ç±ç±è§¸é»¨ééé¨éµé§é«é¦ééééºé·é é¥éé¯ç«èºç¤¬ç¤¦ç¤ªç¤«è±¶èºèèèè©è¦è¦ºç¤ç¢ç¥é¥
+é¥
é¥é¥ç«¶å³å´å¶å·ç¾ç²ç°è¥¤é¨®é¨«é¨·é¨¸é¨°é¨¶é¨æ¨æ§ççèé¡¢ç¼éºµè¹é£è è è´è´éç³°ç§é¹¹é¿é¾è¯
+è°è«ç½é©é©é©é©é¨¾é©é©
ä±è¥¬è¥ªè¾¯é£é¶¬é¶»é¶´é·é¶ºé¶¼é·é·é¶¯æã©³æé¹ºçºçºçºçºçºéºé¸é¶é³é®éµé¿
+é²èºèºèºçç顧顥鰥é°é°é°é°£é°¨é°§é°®ä±·è½è·è´è½é½æ®²è´æ¼æ¾æ«¸æ¬æ«»é¥é¥é¥è è £ç©ç§æè¦½çå·
+åºç³²ç¤±é«è¡åååé¢é¥é½èèªè¥è屬齦çç«é°²é°¾é°¹é°³é°±é°»é°µé°·é°¼é±é±
é·é·é·é·é·ééééé
+æ¢æ¤å
åå顫襯襲齪齬éé糴覿å·å·è®è®
é¾é¾é©é©é©æ¡é½ç±ç± ç±ç±çççè¶èºè¢èèèèè
+è轢轡é
è¾è½è«åå¿çç«æ¬è´ç½å»å¼å½é¥è ¨é¬ç¬ç®çèºèºè®è®è®è®é£éé¥é éé±é±é±é±é±é±
+çºçºçºè ±ãåé½é·¦é·²é·¯é·ºé·¥é·³é·¸æªæ£é©é©é©èèèééæè½¤æ¬æ¬é»´ç±¤é¡¬é¡¯æ¬é«é«èºé¥é¨ç°è¢
+çéééé壩é«é¬¢è ¶è®è®è®è®ç²ç±ç±ªè´çé±é± é±§é±£ç¾é¹¼é¹½æ¬éé·¿é¸é·¹é¸é¡°é齲齷è·é©åé籩
+籬籮躥躡鱨é±è§é»é«éé²é°æ¬é¡±è è¿è »ç³¶å»³é¼ç£éçºé¹é·é¥éç¤é©¢é黶趲躦ç鱷鱸è®è®é»·é©¥
+驤çºèºªé¸é¾é¼é¿é½é¡³é¡´ç§é
éé鿬鏿é¸é©ªé¬±é±ºé¸é¸é¥¢ç±²
+""").split())
+
+cuhk_simplified = ''.join(textwrap.dedent("""
+è´è½¦å¤¹è§å£®å¦å¿é¿ä¸åæçº æ¥ä»ä¸¤é¨åäºè½§ç¶è®¢è®£è®¡é£é£è´è´éé轨å纥红纪纫纨纡约纣å
+å²åå
ååå¸
é©ä¸ºé¦ç³»ä¾ 页ååçç财贡ä»ä¼¥ä¸ªä¿©ä¼¦ä»¬å¬åå纯纺纷级纳纽纰纴纱纾纹çºçº¼
+纸å²å´å³¡å²éééééå»æè®§è®°è®¦è®«è®ªè®¨è®¯è®åæµæ³¾éå¾åºé©¬äº©å²æ°è½«è½©åéªéééµå¸æ¶ä¹¦
+乿èè§åªåªè®¹è®¿è¯è®·è®¼è®¾ä£è®»è®¸è®¶å©ååæ§è½è½¯åºè´¥ç»ä·ç»ç»ç»ç»ç»ç»ç»
ç»ç»ç»ç»æ¯éå
+ä¾§ä¼ä¾¦ä»å¾éééééééé产æ
ééé´å¤å¸¦å¸é¡¶é¡·å²½å²å¨å¡è´©è´¯è´§è´«è´ªè´£å¦å¨å¨
å¹²ã§å·æ¡
+æªæ«èæåè§è§
è§å¦å½åµååºé¥¥æ§æ¡æå°ä¸è«æ¶æ²¦æµ
æ¸è¿è¿å¡å¯é®åå¤éº¦é¸çµæ°¢ææ¯çä¹ ç°
+é®é±¼æ©å¼ 伿¼æ±æ¶æ»é·æ¼æ¬æ½è´°è´²è´¬è´·è´¹è´µè´ºè´¶ä¹°è´¸è´³è´´è´»è´®é¯ééééé«éé©é¬é§éªé é®
+é¤éé䥺æ¥åºåå°§å¤ä¼§å®¶ä¼ãç¬æ®åæµæ²¨æ²©æ¶¡æµæ±¤æµè¯è¯è¯è¯è®µè¯è¯è¯è¯è¯è¯
è¯è¯è¯è§ç ç¡
+ç æ¨æ ãæ£æ åååä¹ä¸§ãåç»ç»ç»ç»ç»ç»ç»ç»ç»ç»ä¸ç»ç»è¨è¾èéé¶é³é©®å¯é©åå¤è½±è½·è½²
+è½ºè½¶è½¸è½´å¦«å¨²é¡¸é¡ºé¡¹é¡»å£¶ç»æ¥æ£æ¬å é´å¼éµé°é²è¿çå¯å£³å°å²å³èåèé¦é§é¥¦å´å¸å¸§æ 乡é
+寻氩ç¹äºè®ç±ææºå¿¾é¢é¡¿é¢é¢é¢é¡½é¡¼é¢ç»ç» ç»ç»¢ç»¥ç»¨ç»¡ç»£ééµé¹éé¿é´é¾é¶ééé¼ééé·é
+é³ééé½ééé°éºé²è¡¥éè¢
è£
æ²§æ²çæµæ¶¢å诧该è¯è¯è¯¡è¯è¯è¯å¤¸è¯è¯è¯ è¯è¯è¯¦è¯©è¯¢è¯£è¯è è¶
+èè¿é©°é©¯é¥¬é¥³é¥é¥ªé¥¨é¥®é¥«ä¼ ä»
å»ä½¥å¾ä¼¤ä½£ä¼åºè¼èèèè¾¾è¿è¿è¿å½é±½æ£æ¢æçµç¦ç¼èççæ«
+ææ¨ä¸æ¡¢å«é¸ èµ
贾贿èµèµè´¼èµå¹²åååå¬å¢åå·æ±æ±ä¼ç²ç®è±è¬ç¬èè¾è¾è½¼è½½è½¾å²ååæ¶å
+åè壸çä¹±å¦ç¸ç²ç®é»¾å®åç¾ä¹å·¯èå²å£å¿ç«é¬é§é¹æ¸æç·ååé¨é¸çéµéé³é«éé¥é¬éªé°
+éééé¨é·é¯éé£è¡éé±éé¶éé¢è®è¯¶è¯è¯è¯°è¯²è¯«è¯³è¯®è®¤è¯µè¯´è¯¬è¯¯è¯±è¯å°ååå°å½åå¹å§æ
+ææ¨æ¯æåºææ¸æ²¤æµæ¶¤æ±æµæ²ªæ¸æ¶æºå¤æ»¡æ¸è¥æ¸æ¶¨æ»æ¸é¥±é¥¸é¥¹é¥²é¥°é¥»é¥´ç»·ç»¸ç»°ç»¯çº²çº¶ç»²ç´§ç»«
+绺绿绵绮绻绶绾ç½ç»´çº¿ç»ªç»¼ç»½ç¼ç¼å®¾èµèµé©³æºæ¼æ´æ æææç
å°å«å ç§°ç§ç ç ç¡ééè¿å¯¹å¤º
+å¥å¥ç½éééºéåé½ä¦¶å¾ä¾¥ä»ä¾¨ä¼ªç¯ç¡å¤é¸£é¸¢é¨è¾
è½»è¾èµ¶èµµæè°·æ¡¤æªè£å¸¼å¸»å伿¢¦ç¥¸ç¥ç¥¯é
+ç尽笺ç²å®è±é¢é¢åµå²å´è¦å±¡çç±çä¹ä¹é½æçè§å¯å®åº¼é£å°å¯¿å°å¾å¢æ´¼çªé»è§ååä¸å¦ªç±
+æ®å¶çéé¡éééééééééééºééé½éé¤ééééæ¶ååå½å å·ååå¸é¥µé¥ºé¥·å
»æ¬§æ®´
+ç½¢éªé¸¨ä´é¸¦é¸©è¾è¾è¾è¾è½®è¾è¾è¾å¸å¸æ»æ¶§æµæµæ´æºæ¶æ³¼æ¶¦æ¶ æµé¢ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç»ç¼
ç¼ç¼
+ç¼ç¼çº¬çº¿ç¼ç¼è´æ ææ¡¨ä¹æ¥¼æ¤ æ¢æ ·æ¡©å«å¼¹æ¨æ¸æå»æ¢ææ ææ¿æ¦æå±èµèµèµèµèµè´±èµåèµä
+èµè´¤è´¦è´¨èµå©µå©³å¨å¨å¦©å¨´è°è°è¯½è¯¾è°
论请è°è°è°è°è¯¿è°è¯¹è¯¤è°è¯¼ååºå¹¿åºåºå½»å¾é½¿å²å«ä¦·é
+éé¾é
ç®ççé¸éé»éæ®æ¤æ¦æèæ¯æ«ææå®ªå¿§å¯¼ææ°å åå åèç®§é²é²é±¿è¤è
è¶ä麸å¤é©¸
+驾驹驽驷驶éªé©¼é©µé©»é¢é¢é¢å·©å®å½å¿åå§åèè¤è¬ä¸èè´å¶ç¿ä»·ä¿ä¾©ä¾¬ä»ªäº¿è·µå³¤å´åµå³£é宽
+审ååçè¹ç ç¡®ç¡é¹çç©·çæ¯µæ®èèè¾éç«å
´æç±éé表éé¤ééé¢é¢é¦é¯ééé¼å½éé°é
+é«é±éé¨é®é±é¥å³åå½å¨åéªååå«å«±è°è°è°è°è°è®½è®³è¯¨è°è°è¯ºè°è°è°è°è°è°è°è°è°è°è¯¸é¥¿
+饽é¦é¦ä½ç¯é²
é²é²é²é²é²é²ä²é²åæ«æ³åå¿æ¿åºå§ä¾ªä¿¦å°½ä
积稣é¢è±èçèªè³è¾è¾è¾è¾ç¼ç¼
+ç¼ç¼£ç¼ç¼ç»¦å¿ç¼¢è¦ç¼ç¼ç»ç¼éééééééç¢ç¢ç 赪鸱鸪鸰鸲鸵鸮é¸é¸¯é¸³è¿è¾½è¿ééç½ç¯ç
+ç§ç«ç¨æ
æ¡æ¡æ®ã§æ³æææ¥æ©æ®ã±®æ·æµæ¸æµã³ 滪泽æµçªçªçª¥ç¬ç¯çç¬ççèµèµèµå¥é¾éªéªéª
+é¢é¢é¢é¢é¢å¤´é¢é¢æ¡¦æºæ´æ¡¥æ¡¡æ æ¤ççå举å¦åçäç裤ééºåæææåé¾ççå¢èè³è¤è
»
+亲è§éé©å¦å³å³è¸å¾¡é
æé¿é·é¸éé»é
é¾é®é´éé
éé¹é²é¶éé¡ééæ§ç·ç¯é¸¸é¸½é¸¹é¸»é¸¿ä´ä´
+鸺鸼æ¿ééééé±å¸®è°¤è°è®²è°è°§è°¦è°¡è°¥èªè°¢è°è°£è¯çç¯ç®¦èåèèè²èèè«æ»¨æµæµæ»¥èæ³æ¶©
+æ¹¿æ¶æ½æææ¤ææ§é¥¼é¦é¦é¦é¦é¥¯é¦
ç¿ç©è¥çèªèè¸å£°ç¦
å¿ä¼é¾æ½æ¡£æ¡§æ§æ£æ¨¯éªéªéªä¸èèè¸
+èç
ç¨çç«ç¹ç²ªç³ç¼ç»©ç¼§ç¼¡ç¼ç¼¦ç¼ªç¼¥çº¤ç¼«ç¼©æ»çºµçµ·èµè´èµèµå°´è§è§æ¯è¾èè¾è¾é²é²é²é²é²é²
+é²é²èè¼è¨è°è¿è¿é©ååè·çç¶ç¡è°è£¥è£¥è£¢è¤äºµç«å±¦é£é¢äºå±é¶ææ®äºä¸´å²åµå±¿è§èæ¹å¼¥å«
+å©´å¢è·è¶æ²è½æåéé¼ææ¯¡é¢é¢é¢é¢é¢é¹
é¹é¹é¹é¹é¹é¹è¿©è®´è°«è°¨è°©è°¬è°è°ªææ·æ©æµæ°ææ
æ·
+éééééé éééé¼éä¦é¨éééæ¯è·¸è¹æ§ææ§æ å°æ®¡èèä¸çªçªèè«è®è²èè¡èè¨èè
+èè§è¸è¸é鸡åæå¨ç¡é¯éé¿éé箪ç®ç¯ç®«å¬æ¸æº
æµæ³¸æ³ºæ»¤æ²æ³»ææ¼æä¸°é² 鲧鲩鲤鲨ç·çå½
+ç§½ç©çé
±å»ç¬çè§æ§éªéªéªéªå¹åéäè©èèè¢ç¤¼ç ç²®éç¼ç»ç¼®ç¼¯ç»åå®è¾è½¬ç¿ç§èº¯æ¾è§å©¶
+éªé饧欤èµè´½èµç¢é¹é¹é¸«é¹ä´é¹é¹é¹é¹è¢è£è££ééé²ééé¿é¾éééµéªé©éæéé¾éè¾¹çªæ¿
+æ¿æ²¥æ³·æ½é¦é¦é¦é¦é¥©è¾è¿èèè鲳鲷鲱鲸鲲鲮鲵鲶é²é²°é²»æ©ææå® ç´ç¥·ç¥¢é¢ ç±»é¢¡æ¿æ¤æ 橹æ¦
+橼æ ççå
³è¡ååååç¼³ç»ç³»è§ç¼°ç¼´ç¼²ç»³ç»£ç»èèèå§è·èè£è·ç¨³è®¥è°²è°±è°¯è¯è°è°®è¯è½¿è¾è¾
+æ·è
离é¾ååå丽å¸ç¾é£é£æ¢éåºæ°ç½ç½´èåºéªéªè··ç¡ç¼çºè§åå
½çç®çé¬é«é¾å£èµèµèµ é³
+é³ä² é²½é³é³é²«ä²¡é³
é³é²é¹é¹é¹é¹é¹ä´é¹é¹é¹é¾
åºé¾é¾é¾é¾å®è¾«ç¼¤ç»§ç¼±ææ¦æééå¿æ¬æ¦æ¥æ
+æ æ§ ç¹ç¯®è§¦å
é«é¦éé§éééé¹é£é䥽é¤é¨ä¦
éä¦çª¦è¶¸ç¾ç¿ç ºç ¾è±®è åè©èè¨è°è§çççé¦
+é¦é¦é¦ç«å¾ä¸¥å¤å²¿æ¾æ½å¼¥è¤´éªéªéªéªè
¾é©ºéªæ½è§ççèªé¢çé¢èé£è´è¾èµ¡èµ¢éå¢çºå¸åä¶®è¯
+议谵ç½éªéª éªéª¢éª¡è¦é©±ä¬æè¢è¾©é£é¸§é¹é¹¤é¸¡é¹¡é¹£ä´é¹èºæºã§æé¹¾ç¼ 纩累缬ç»ééé®éé°éé±
+é¯è¸è·»è·æ²£æ» 顾颢é³é³é³é³é²¥é³ä²¢é³ä²£è½°æ¤è°´èªèµæ¼èµæ§æ
æ¦æ 樱é¦é¥¶é¦è¡èçç¬æè§ç俪
+å©ç²ç »é«
èå«å£åè¾é¼éäè®è¯èºå±é¾çç¶é³é³é²£é³é²¢é³é³é²¦é³é³é³é¸¥é¹¨é¹¥é¹§é¸·éé²é¬é´é¸
+ææåå°å颤衬è¢é¾é¾éç¼°ç±´è§å·
峦读è°é¾é¾éª
éªéªæ¬¢éç±ç¬¼ç®ç®¨æ¼æ´æ»©èèºèè¦è¹è²èè
+è´è½¹è¾é¦èå¬è»å¨åªç¡çªæèµåå¥ä¿¨å¼¯é£¨èé¡»ç£ç¾ç¿è¸¯è¸¬åé ä©è©é³é´é¥éé§é³é³é³é³é²é³
+æçº¤ç¼¨èãèé½é¹ªé¹«é¹©é¹é¸¶é¹é¹¬æ
ææéªé©¿å
°è¹èé¦é»æè½³æ ¾æ¤¤éç¾é¢¥æ¾æä½èè·¹é¤é¥çè
+çéåé³çµåé«é¬èè°è°¶è°°è®©ç«ç«ç°èµ£çé²é²é³¢é³£ç¾ç¡·çæ½é
¿ä´ä´é¹°é¹¯é¢¦åé¾é¾è³éª¤å±å笾
+篱箩蹿è¹é²¿é²è§é»é«é§é¶é¥æ¦é¢
èèè®ç²å
鼿¹¾è¡
ç¼µé©éé¦é¯æ»¦é©´é
¾é»¡è¶±èºç©é³é²è° 谳黩骥
+骧ç¼èºé¸¬é®é£å¿é»é¢é¢§æ»é
½é¢ä¦éæ£é¹¦æé¹³éªé鲡é¹é¸¾é¦å
+""").split())
+
+extra_traditional = ''.join(textwrap.dedent("""
+è鬨ç 颻è¥ééæä¸ç¥æ°³æ¼µåª¼é¥é¯é½è¯çºæ¹å¥ç·å¯§èè¼é°©è«è´éè²é®ç¤è¼çºå
é 廩æç¾¨é¤å¥§
+棲é¶é¤±é¯é¤ç¿½éåæºç¼½è¨èæé ´è¼è¢å¥ä½é 齧詵æç¢å±å¶½ééçé£é¤æ¸å ¿èç
¥é¤éé£éé禿
+é¨è¥´æ¢è´éè²²æ½ç¡å¢å½ç¥¿é¨æè°è²é³²æ§å£é¢æµå·¹é½é¸ç¹ç彥糸é¢åéå¤ ç¦éªé¯·èå¢¶ç°¹é½æ±è
+åªéæ
ç¿å«å§ç© æ««å»é°çåéµé®¶åæ·æ©«ä¸¦æ£¬æªæäºæèçè©ä½æéæ¸é¶¤é¶²æ¯æçµéå
§å»ç½é¸
+éé° é¨¤é¦¹è颸éºç½è®ç¿é©ç·¶èç®è¤å´ 嬤åªçæ³é¡ç¹¢é強彿ç©è
³è崢溫é¦è±¬é½¶å¼èå´åéé©
+åªç°·å¼æ£éèç¾è¼¬åæè½çå½ é»å£ªç¶è´ç¨æª®æµé¡å±éµ·è²é靿·©è¹ç¶é·æ£è¨èºé±èºé¶¹è´é®çå´³
+å
驿¿æ·¨é§°åæ¾©ç¹æè±ç¡å¨åè¥ç´µé¼´å»æ
è´ç²µæ¶è³å¼³å
æ¡æ»¾çºçç«è¤é©¦åé®ç¨ç
飣湧éçå±
+å»ä¿é¼èºé½ç§éçµæ§¨é»²é¯´æ¿ç¨è å¯å¶´è¥ç®è¸è¾èç鮿¦ªç³æ·ç·é®³åè»éç
æ²çæ¶¼æª¾é±æ¥å¬é¤
+éç´®åµç
蹤è§é°èªå¶®å³é¥å»é¡è§¶é¨éº
å ç´è¿é¯è£¡éæ°¹çèºå±å»å棶éé¸çé»è© æ·¥é¬çç²é¯µè
+湣驫鱯åéè¤é綯çµè«¡å±è»¹æ±ºç©è é±çåå鵯é¼çª¯æ´¶é·çé跡幬éæéè¸æ¨é³§é ®ç櫥鷫ç°é¢®
+éé°ç¨
ç©éå²å»é½å±è¦¥é¬®æé±¤è¹ 颺è§å³è»ååéå®®ç°ä¾¶æ¼ç¤éé´¬éééå¡å°æ¤æ©æ¼è¥å±
+""").split())
+
+extra_simplified = ''.join(textwrap.dedent("""
+è·é¹æ½é£å¹é鳿
ä¸¢ç¦æ°²æºåªªé¥¥é²¬é¾è¬çåå¥ç»¬å®èè¾é³è±è¼éè´ é²ç¶è¾çå
é½å»ªæ»ç¾¡é奥
+æ éç³é²¯é©ç¿é´åçéµè® è
½æé¢è¾è¡®å«ä¼«éå®è¯æ£äº§å±å²³é½éå¥éé¦å碱ççééè¥æ²ç¢¹ç§
+é²è¥æ èµé¶èµæ½ç´å伪ç¦éªåå¨å
¹é¸¤èå±é±¾æ
åºé鹲绷ç¬å½¦çºé£æ°é夿½´åé³è
å¯ç鏿±¡ç¬
+å±é¡æ¦çè¢
å§ç§¾æ©¥åé²¾çªå£é¹é²ªåæ³ªæ¨ªå¹¶æ¡æª©æäºæè¶ç¬è¯ç²æ¢é£æ¶£é¹é¹æ¯æç»é å
å´ç¾é¹±
+é»é³éªé©²èé£é²ç¡
èµä¸¬éª£ç¼èçè¢å²½å¬·å çåµé¢ç¼éå¼ºå´ææ»è嵴峥温è
¼çªè
å¿èå´å°é²é
+广ªåå¼éèèè¾å¤æºè¾çå½éµå¡ç»¤èµç梼æ·éå°¸é¹ç«éé²´åè¼ç¼é¹æ¸è®±è¹°é
¦è é¹ èµé²äºåµ
+å´éªæ²µåéªå£æ³¶è¥æè³ç¡å¨±å¤è±çº»é¼¹å¦æ èµç²¤æ·èµå¼ªå
æ¦æ»é¢£æ³¸ç°è£éª¦æé²ç¦ç饤æ¶è
çå±
+å®ä¿£é³è·é½ç±¼é¥ç»¦æ¤é»ªé²ºæ®ç§èå¬å²å§çè¹è°«èç°é²æ©ç
³åç»±é²åè½ªé¼æ»¢æ²¡ç®åèé²¼è»åµé¥¾
+éæå¯ç
踪èé³å¿å´å´é¦å©é¢è§¯éªçå´çº®èé²éé¬å¼çè·¶ç´å¨å¥æ¢¾éé¹´ç¦é»åæ¸ç¬å é¢é²¹ç¯
+æéªé³ 没é§è£é绹çè°¥å¢è½µå³ç¨èé³ååå¯é¹é¼çªæ±¹é¹¢çé´è¿¹å¸±é«æé¦è¯ªæ«å«é¢ç橱é¹å¼é£
+迳é³ç¨è°·é¬äº¸å¢é¾åè§éå¹é³¡è·é£èåèå¼åé
宫ç±ä¾£æ¸ç¡é©é¸´é³æ¸¸éå¢å§æ¡ æ¬äºè¢¯å±
+""").split())
+
+simplified_charmap = cuhk_simplified + extra_simplified
+traditional_charmap = cuhk_traditional + extra_traditional
Commit: cc3e15ff43013ff8dc5698ae1be4e94756899d89
https://github.com/scummvm/scummvm/commit/cc3e15ff43013ff8dc5698ae1be4e94756899d89
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
COMMON: Add t2s table to encoding.dat
Changed paths:
devtools/create_encoding/create_encoding.py
dists/engine-data/encoding.dat
diff --git a/devtools/create_encoding/create_encoding.py b/devtools/create_encoding/create_encoding.py
index c6c3d1822e5..f15b0262635 100755
--- a/devtools/create_encoding/create_encoding.py
+++ b/devtools/create_encoding/create_encoding.py
@@ -2,6 +2,7 @@
# encoding: utf-8
import struct
+from hanzi_charmap import simplified_charmap, traditional_charmap
def merge_ranges(*ranges):
# Use a set for efficient lookup
@@ -31,7 +32,12 @@ def processtable(inputfilename, outfile, highrange, lowrange):
for (k, v) in sorted(res.items()):
outfile.write(struct.pack("<H", v))
-
+def process_hanzi_t2s(outfile):
+ l = min(len(traditional_charmap), len(simplified_charmap))
+ outfile.write(struct.pack("<i", l))
+ for i in range(l):
+ outfile.write(struct.pack("<HH", ord(traditional_charmap[i]), ord(simplified_charmap[i])))
+
encdat = open("encoding.dat", "wb")
encdat.write(b'SCVMENCD')
# version
@@ -66,7 +72,10 @@ tables = [
FILE: "CP936.TXT",
HIGH: range(0x81, 0xFF),
LOW: merge_ranges(range(0x40, 0x7f), range(0x80, 0xff))
- }
+ },
+ {
+ FILE: "hanzi_charmap.py"
+ },
]
# number of tables
@@ -76,8 +85,14 @@ curofs = 16 + 4 * len(tables)
for v in tables:
encdat.write(struct.pack("<i", curofs))
- curofs += len(v[HIGH]) * len(v[LOW]) * 2
+ if v[FILE] == "hanzi_charmap.py":
+ curofs += min(len(traditional_charmap), len(simplified_charmap)) * 4 + 4
+ else:
+ curofs += len(v[HIGH]) * len(v[LOW]) * 2
for v in tables:
- processtable(v[FILE], encdat, v[HIGH], v[LOW])
+ if v[FILE] == "hanzi_charmap.py":
+ process_hanzi_t2s(encdat)
+ else:
+ processtable(v[FILE], encdat, v[HIGH], v[LOW])
diff --git a/dists/engine-data/encoding.dat b/dists/engine-data/encoding.dat
index a9841515eee..c143223495d 100644
Binary files a/dists/engine-data/encoding.dat and b/dists/engine-data/encoding.dat differ
Commit: 510d97dae8e518dc41167319f591e9bea8744917
https://github.com/scummvm/scummvm/commit/510d97dae8e518dc41167319f591e9bea8744917
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
COMMON: Fix bug when using old encoding.dat
Changed paths:
common/str-enc.cpp
diff --git a/common/str-enc.cpp b/common/str-enc.cpp
index 5ed8dd2724b..11faeb2f344 100644
--- a/common/str-enc.cpp
+++ b/common/str-enc.cpp
@@ -137,8 +137,11 @@ static void loadCJKTables() {
return;
}
+ int ver = f.readUint32LE();
+ int num_tables = f.readUint32LE();
+
// Version and number of tables.
- if (f.readUint32LE() != 0 || f.readUint32LE() < 3) {
+ if (ver != 0 || num_tables < 3) {
warning("encoding.dat is of incompatible version. Support for CJK is disabled");
return;
}
@@ -146,8 +149,10 @@ static void loadCJKTables() {
windows932ConversionTable = loadCJKTable(f, 0, 47 * 192);
windows949ConversionTable = loadCJKTable(f, 1, 0x7e * 0xb2);
windows950ConversionTable = loadCJKTable(f, 2, 89 * 157);
- johabConversionTable = loadCJKTable(f, 3, 80 * 188);
- windows936ConversionTable = loadCJKTable(f, 4, 126 * 190);
+ if (num_tables >= 4)
+ johabConversionTable = loadCJKTable(f, 3, 80 * 188);
+ if (num_tables >= 5)
+ windows936ConversionTable = loadCJKTable(f, 4, 126 * 190);
}
void releaseCJKTables() {
Commit: fb045768e3ccb7904eb581bfc80512cc2cd366fc
https://github.com/scummvm/scummvm/commit/fb045768e3ccb7904eb581bfc80512cc2cd366fc
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
COMMON: Support transcoding Traditional Chinese to Simplified
Changed paths:
common/str-enc.cpp
common/ustr.h
diff --git a/common/str-enc.cpp b/common/str-enc.cpp
index 11faeb2f344..81d7e67afc6 100644
--- a/common/str-enc.cpp
+++ b/common/str-enc.cpp
@@ -102,6 +102,7 @@ static const uint16 *windows950ConversionTable = 0;
static uint16 *windows950ReverseConversionTable = 0;
static const uint16 *johabConversionTable = 0;
static const uint16 *johabReverseConversionTable = 0;
+static const uint16 *traditional2SimplifiedChineseConversionTable = 0;
static const uint16 *loadCJKTable(File &f, int idx, size_t sz) {
f.seek(16 + idx * 4);
@@ -116,6 +117,23 @@ static const uint16 *loadCJKTable(File &f, int idx, size_t sz) {
return res;
}
+static void loadChineseT2S(File &f) {
+ f.seek(16 + 5 * 4);
+ uint32 off = f.readUint32LE();
+ f.seek(off);
+ uint16 *res = new uint16[0x10000];
+ for (uint i = 0; i < 0x10000; i++) {
+ res[i] = i;
+ }
+ uint32 num_entries = f.readUint32LE();
+ for (uint i = 0; i < num_entries; i++) {
+ uint16 t = f.readUint16LE();
+ uint16 s = f.readUint16LE();
+ res[t] = s;
+ }
+ traditional2SimplifiedChineseConversionTable = res;
+}
+
static void loadCJKTables() {
File f;
@@ -153,6 +171,8 @@ static void loadCJKTables() {
johabConversionTable = loadCJKTable(f, 3, 80 * 188);
if (num_tables >= 5)
windows936ConversionTable = loadCJKTable(f, 4, 126 * 190);
+ if (num_tables >= 6)
+ loadChineseT2S(f);
}
void releaseCJKTables() {
@@ -1213,4 +1233,22 @@ StringEncodingResult U32String::encode(String &outString, CodePage page, char er
return outString.encodeInternal(*this, page, errorChar);
}
+U32String U32String::transcodeChineseT2S() const {
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ if (!traditional2SimplifiedChineseConversionTable)
+ return *this;
+
+ U32String simplified;
+ for (uint32 i = 0; i < size(); i++) {
+ uint32 ch = _str[i];
+ if (ch >= 0x10000)
+ simplified += ch;
+ else
+ simplified += traditional2SimplifiedChineseConversionTable[ch];
+ }
+ return simplified;
+}
+
} // End of namespace Common
diff --git a/common/ustr.h b/common/ustr.h
index ee130ae6fbf..977d2d7858b 100644
--- a/common/ustr.h
+++ b/common/ustr.h
@@ -187,6 +187,9 @@ public:
/** Transform a U32String into UTF-16 representation (native encoding). The result must be freed. */
uint16 *encodeUTF16Native(uint *len = nullptr) const;
+ /** Transform Traditional Chinese string into Simplified. */
+ U32String transcodeChineseT2S() const;
+
private:
static U32String formatInternal(const U32String *fmt, ...);
Commit: 949eab7d212e6d9c1953378146af0f43b2ec227f
https://github.com/scummvm/scummvm/commit/949eab7d212e6d9c1953378146af0f43b2ec227f
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
DETECTOR: Support kADFlagCanTranscodeTraditionalChineseToSimplified
Changed paths:
engines/advancedDetector.cpp
engines/advancedDetector.h
diff --git a/engines/advancedDetector.cpp b/engines/advancedDetector.cpp
index 893cf80cbcd..4c6124e2cec 100644
--- a/engines/advancedDetector.cpp
+++ b/engines/advancedDetector.cpp
@@ -769,7 +769,8 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
// Do not even bother to look at entries which do not have matching
// language and platform (if specified).
if ((language != Common::UNK_LANG && g->language != Common::UNK_LANG && g->language != language
- && !(language == Common::EN_ANY && (g->flags & ADGF_ADDENGLISH))) ||
+ && !(language == Common::EN_ANY && (g->flags & ADGF_ADDENGLISH))
+ && !(language == Common::Language::ZH_CHN && g->language == Common::Language::ZH_TWN && (_flags & kADFlagCanTranscodeTraditionalChineseToSimplified))) ||
(platform != Common::kPlatformUnknown && g->platform != Common::kPlatformUnknown && g->platform != platform)) {
continue;
}
diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h
index 6647952cb32..5a23074c5ea 100644
--- a/engines/advancedDetector.h
+++ b/engines/advancedDetector.h
@@ -383,6 +383,11 @@ enum ADFlags {
* of detected games.
*/
kADFlagCanPlayUnknownVariants = (1 << 3),
+
+ /**
+ * Indicates engine's ability to play a variant of a Traditional Chinese game while transcoding it on-the-fly to Simplified.
+ */
+ kADFlagCanTranscodeTraditionalChineseToSimplified = (1 << 4),
};
Commit: 3925f993b513a32834bee0a898a8b5c7a068f1d4
https://github.com/scummvm/scummvm/commit/3925f993b513a32834bee0a898a8b5c7a068f1d4
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2024-09-13T00:11:38+02:00
Commit Message:
GRIM: Support transcoding Monkey4 from Traditional to Simplified Chinese
Changed paths:
engines/grim/detection.cpp
engines/grim/grim.cpp
engines/grim/grim.h
engines/grim/localize.cpp
diff --git a/engines/grim/detection.cpp b/engines/grim/detection.cpp
index 5f4029784f3..e02b0bba45c 100644
--- a/engines/grim/detection.cpp
+++ b/engines/grim/detection.cpp
@@ -702,6 +702,7 @@ class GrimMetaEngineDetection : public AdvancedMetaEngineDetection<Grim::GrimGam
public:
GrimMetaEngineDetection() : AdvancedMetaEngineDetection(Grim::gameDescriptions, grimGames) {
_guiOptions = GUIO_NOMIDI;
+ _flags |= kADFlagCanTranscodeTraditionalChineseToSimplified;
}
PlainGameDescriptor findGame(const char *gameid) const override {
@@ -729,6 +730,17 @@ public:
return debugFlagList;
}
+ DetectedGame toDetectedGame(const ADDetectedGame &adGame, ADDetectedGameExtraInfo *extraInfo) const override {
+ DetectedGame game = AdvancedMetaEngineDetection::toDetectedGame(adGame, extraInfo);
+ GrimGameType gameID = reinterpret_cast<const GrimGameDescription *>(adGame.desc)->gameType;
+
+ if (gameID == GType_MONKEY4 && adGame.desc->language == Common::Language::ZH_TWN) {
+ game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(Common::ZH_TWN));
+ game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(Common::ZH_CHN));
+ }
+
+ return game;
+ }
};
} // End of namespace Grim
diff --git a/engines/grim/grim.cpp b/engines/grim/grim.cpp
index 88e78d23c0f..ee82206dcf8 100644
--- a/engines/grim/grim.cpp
+++ b/engines/grim/grim.cpp
@@ -403,11 +403,19 @@ Common::Error GrimEngine::run() {
}
if (getGameType() == GType_MONKEY4 && getGameLanguage() == Common::Language::ZH_TWN) {
- Common::File img, imgmap;
- if (img.open("font.tga") && imgmap.open("map.bin")) {
- BitmapFont *f = new BitmapFont();
- f->loadTGA("font.tga", &imgmap, &img);
+ _transcodeChineseToSimplified = ConfMan.hasKey("language") && (Common::parseLanguage(ConfMan.get("language")) == Common::Language::ZH_CHN);
+
+ if (_transcodeChineseToSimplified) {
+ FontTTF *f = new FontTTF();
+ f->loadTTFFromArchive("NotoSansSC-Regular.otf", 1200);
_overrideFont = f;
+ } else {
+ Common::File img, imgmap;
+ if (img.open("font.tga") && imgmap.open("map.bin")) {
+ BitmapFont *f = new BitmapFont();
+ f->loadTGA("font.tga", &imgmap, &img);
+ _overrideFont = f;
+ }
}
}
diff --git a/engines/grim/grim.h b/engines/grim/grim.h
index c71b3c13a1f..b6e9ed777b6 100644
--- a/engines/grim/grim.h
+++ b/engines/grim/grim.h
@@ -293,6 +293,7 @@ public:
int _cursorX = 0;
int _cursorY = 0;
bool _isUtf8 = false;
+ bool _transcodeChineseToSimplified = false;
Font *_overrideFont = nullptr;
};
diff --git a/engines/grim/localize.cpp b/engines/grim/localize.cpp
index 012b1c04518..6f015e325a2 100644
--- a/engines/grim/localize.cpp
+++ b/engines/grim/localize.cpp
@@ -158,6 +158,11 @@ Localizer::Localizer() {
_entries[last_entry = Common::String(line, tab - line)] = Common::String(tab + 1, (nextline - tab - 2));
}
}
+ if (g_grim->_transcodeChineseToSimplified && g_grim->_isUtf8) {
+ for (Common::StringMap::iterator it = _entries.begin(); it != _entries.end(); it++) {
+ it->_value = it->_value.decode(Common::CodePage::kUtf8).transcodeChineseT2S().encode(Common::CodePage::kUtf8);
+ }
+ }
delete[] data;
}
More information about the Scummvm-git-logs
mailing list