From cd2aa12d3c8589926ce3997b9c933dbf1bb6413b Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Thu, 25 May 2023 12:18:34 +0300 Subject: [PATCH] Add Proper Unicode Glyph Ranges for Each Language --- .../autorun/MHR_Overlay/Misc/language.lua | 42 +++++++++++++++++-- .../autorun/MHR_Overlay/Misc/utils.lua | 8 ++++ .../MHR_Overlay/UI/customization_menu.lua | 25 ++++++++--- .../data/MHR Overlay/languages/en-us.json | 7 +++- .../data/MHR Overlay/languages/ja-jp.json | 17 +++++++- .../data/MHR Overlay/languages/ko-kr.json | 17 +++++++- .../data/MHR Overlay/languages/ru-ru.json | 13 +++++- .../data/MHR Overlay/languages/zh-cn.json | 17 +++++++- .../data/MHR Overlay/languages/zh-tw.json | 17 +++++++- 9 files changed, 148 insertions(+), 15 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 824517e..6924d73 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -36,11 +36,47 @@ local package = package; this.language_folder = "MHR Overlay\\languages\\"; +--[[ + EXAMPLE: + unicode_glyph_ranges = { + 0x0020, 0x00FF, -- Basic Latin + Latin Supplement + 0x2000, 0x206F, -- General Punctuation + 0x3000, 0x30FF, -- CJK Symbols and Punctuations, Hiragana, Katakana + 0x31F0, 0x31FF, -- Katakana Phonetic Extensions + 0x4e00, 0x9FAF, -- CJK Ideograms + 0xFF00, 0xFFEF, -- Half-width characters + 0 + }, +]] + +--[[ + EXAMPLE: + unicode_glyph_ranges = { + 0x0020, 0x00FF, -- Basic Latin + Latin Supplement + 0x0400, 0x052F, -- Cyrillic + 0x2000, 0x206F, -- General Punctuation + 0xFF00, 0xFFEF, -- Half-width characters + 0 + }, +]] + +--[[ + EXAMPLE: + unicode_glyph_ranges = { + 0x0020, 0x00FF, -- Basic Latin + Latin Supplement + 0x1100, 0x11FF, -- Hangul Jamo + 0x2000, 0x206F, -- General Punctuation + 0x3130, 0x318F, -- Hangul Compatibility Jamo + 0xAC00, 0xD7AF, -- Hangul Syllables + 0xFF00, 0xFFEF, -- Half-width characters + 0 + }, +]] + this.current_language = {}; - - this.default_language = { - font_name = "NotoSansKR-Bold.otf", + font_name = "", + unicode_glyph_ranges = {0}, parts = { head = "Head", neck = "Neck", diff --git a/reframework/autorun/MHR_Overlay/Misc/utils.lua b/reframework/autorun/MHR_Overlay/Misc/utils.lua index fbbfac2..119b94c 100644 --- a/reframework/autorun/MHR_Overlay/Misc/utils.lua +++ b/reframework/autorun/MHR_Overlay/Misc/utils.lua @@ -215,6 +215,14 @@ function this.number.round(value) return math.floor(value + 0.5); end +function this.number.is_odd(value) + return value % 2 ~= 0; +end + +function this.number.is_even(value) + return value % 2 == 0; +end + function this.string.trim(str) return str:match("^%s*(.-)%s*$"); end diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index 319cf41..dd53e6b 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -62,7 +62,7 @@ local ValueType = ValueType; local package = package; this.font = nil; -this.font_range = {0x1, 0xFFFF, 0}; +this.full_font_range = {0x1, 0xFFFF, 0}; this.is_opened = false; this.status = "OK"; @@ -146,8 +146,22 @@ this.menu_font_changed = false; this.config_name_input = ""; function this.reload_font(pop_push) - this.font = imgui.load_font(language.current_language.font_name, - config.current_config.global_settings.menu_font.size, this.font_range); + local cached_language = language.current_language; + + local font_range = cached_language.unicode_glyph_ranges; + + if cached_language.font_name == "" then + font_range = nil; + + elseif cached_language.unicode_glyph_ranges == nil + or utils.table.is_empty(cached_language.unicode_glyph_ranges) + or #cached_language.unicode_glyph_ranges == 1 + or not utils.number.is_odd(#cached_language.unicode_glyph_ranges) then + + font_range = this.full_font_range; + end + + this.font = imgui.load_font(cached_language.font_name, config.current_config.global_settings.menu_font.size, font_range); if pop_push then imgui.pop_font(); @@ -321,17 +335,18 @@ function this.draw() imgui.set_next_window_pos(this.window_position, 1 << 3, this.window_pivot); imgui.set_next_window_size(this.window_size, 1 << 3); + imgui.push_font(this.font); + this.is_opened = imgui.begin_window( language.current_language.customization_menu.mod_name .. " v" .. config.current_config.version, this.is_opened, this.window_flags); if not this.is_opened then + imgui.pop_font(); imgui.end_window(); return; end - imgui.push_font(this.font); - local config_changed = false; local language_changed = false; local modifiers_changed = false; diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index ace05d7..2ec45ac 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -303,7 +303,7 @@ "y": "Y", "z": "Z" }, - "font_name": "NotoSansKR-Bold.otf", + "font_name": "", "parts": { "abdomen": "Abdomen", "amatsu_unknown": "?", @@ -372,5 +372,8 @@ "wingclaw": "Wingclaw", "wingclaws": "Wingclaws", "wings": "Wings" - } + }, + "unicode_glyph_ranges": [ + 0 + ] } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/ja-jp.json b/reframework/data/MHR Overlay/languages/ja-jp.json index 90d931f..03883da 100644 --- a/reframework/data/MHR Overlay/languages/ja-jp.json +++ b/reframework/data/MHR Overlay/languages/ja-jp.json @@ -372,5 +372,20 @@ "wingclaw": "翼爪", "wingclaws": "Wingclaws", "wings": "翼" - } + }, + "unicode_glyph_ranges": [ + 32, + 255, + 8192, + 8303, + 12288, + 12543, + 12784, + 12799, + 19968, + 40879, + 65280, + 65519, + 0 + ] } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 54e3f18..f80bb4e 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -372,5 +372,20 @@ "wingclaw": "날개발톱", "wingclaws": "날개발톱", "wings": "날개" - } + }, + "unicode_glyph_ranges": [ + 32, + 255, + 4352, + 4607, + 8192, + 8303, + 12592, + 12687, + 44032, + 55215, + 65280, + 65519, + 0 + ] } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index 1ac324f..da4659c 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -372,5 +372,16 @@ "wingclaw": "Крыло-коготь", "wingclaws": "Крыло-коготь", "wings": "Крылья" - } + }, + "unicode_glyph_ranges": [ + 32, + 255, + 1024, + 1241, + 8192, + 8303, + 65280, + 65519, + 0 + ] } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index 00d37fd..fa4b3fc 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -372,5 +372,20 @@ "wingclaw": "翼爪", "wingclaws": "翼爪", "wings": "翼" - } + }, + "unicode_glyph_ranges": [ + 32, + 255, + 8192, + 8303, + 12288, + 12543, + 12784, + 12799, + 19968, + 40879, + 65280, + 65519, + 0 + ] } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index b88aa25..9c094ca 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -372,5 +372,20 @@ "wingclaw": "翼爪", "wingclaws": "翼爪", "wings": "翅膀" - } + }, + "unicode_glyph_ranges": [ + 32, + 255, + 8192, + 8303, + 12288, + 12543, + 12784, + 12799, + 19968, + 40879, + 65280, + 65519, + 0 + ] } \ No newline at end of file