From f74c576fdb6c009d49c99638ba3364abf5e7206a Mon Sep 17 00:00:00 2001 From: gir489 <100792176+gir489returns@users.noreply.github.com> Date: Thu, 22 Feb 2024 10:53:04 -0500 Subject: [PATCH] Implemented GetGlyphRangesChineseSimplifiedOfficial (#2756) --- src/renderer/font_mgr.cpp | 35 ++++++++++++++++++++++++++++++++++- src/renderer/font_mgr.hpp | 1 + 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/renderer/font_mgr.cpp b/src/renderer/font_mgr.cpp index efaff6eb..51c4ff1e 100644 --- a/src/renderer/font_mgr.cpp +++ b/src/renderer/font_mgr.cpp @@ -124,12 +124,45 @@ namespace big return {}; } + const ImWchar* font_mgr::GetGlyphRangesChineseSimplifiedOfficial() + { + // Store all official characters for Simplified Chinese. + // Sourced from https://en.wikipedia.org/wiki/Table_of_General_Standard_Chinese_Characters + // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.) + static const short accumulative_offsets_from_0x4E00[] = {0, 1, 2, 4, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 4, 2, 1, 2, 3, 1, 2, 3, 2, 2, 4, 1, 1, 1, 2, 1, 4, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 3, 1, 1, 1, 1, 1, 5, 3, 7, 1, 2, 5, 6, 8, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 2, 1, 4, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 4, 1, 2, 1, 2, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1, 4, 1, 1, 2, 2, 1, 1, 3, 2, 1, 1, 4, 2, 1, 2, 1, 1, 4, 2, 2, 2, 7, 1, 1, 1, 2, 1, 1, 1, 1, 6, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 3, 2, 3, 7, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 4, 3, 3, 1, 3, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 4, 1, 2, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3, 2, 1, 1, 1, 1, 1, 2, 2, 1, 5, 1, 4, 6, 4, 1, 1, 5, 3, 1, 1, 1, 1, 6, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 4, 14, 1, 2, 3, 1, 1, 1, 3, 1, 1, 2, 2, 1, 2, 4, 1, 1, 1, 1, 1, 2, 1, 1, 6, 6, 1, 1, 2, 3, 2, 4, 1, 4, 2, 1, 4, 2, 5, 2, 5, 4, 7, 1, 3, 2, 4, 1, 4, 3, 1, 1, 3, 2, 3, 1, 4, 5, 3, 14, 2, 2, 1, 1, 3, 6, 8, 1, 12, 7, 1, 5, 2, 4, 12, 1, 5, 1, 1, 2, 3, 2, 6, 11, 1, 4, 7, 15, 5, 13, 1, 11, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 4, 3, 1, 1, 4, 2, 6, 3, 3, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 4, 3, 1, 3, 1, 2, 3, 2, 1, 2, 2, 2, 1, 4, 2, 2, 1, 7, 2, 1, 1, 1, 1, 1, 2, 1, 1, 4, 1, 1, 3, 4, 2, 1, 2, 2, 1, 3, 2, 2, 5, 3, 2, 3, 1, 3, 7, 2, 2, 1, 3, 3, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 3, 1, 3, 1, 4, 1, 1, 1, 1, 1, 2, 3, 4, 4, 1, 2, 1, 1, 1, 2, 3, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 5, 1, 1, 1, 3, 1, 3, 1, 1, 6, 2, 1, 2, 4, 2, 2, 1, 5, 3, 11, 2, 2, 1, 2, 4, 8, 3, 8, 2, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 4, 1, 1, 9, 2, 1, 4, 4, 2, 2, 2, 3, 2, 2, 2, 2, 2, 5, 1, 4, 12, 10, 4, 1, 1, 5, 1, 2, 5, 2, 1, 5, 1, 1, 2, 3, 1, 3, 1, 2, 3, 4, 4, 11, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 4, 1, 2, 1, 1, 2, 1, 1, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 5, 3, 2, 1, 1, 3, 2, 1, 1, 8, 1, 2, 2, 3, 2, 3, 1, 2, 1, 2, 1, 5, 13, 3, 1, 2, 1, 4, 1, 1, 1, 1, 1, 1, 1, 4, 3, 1, 1, 1, 1, 1, 1, 1, 4, 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 4, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 4, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 2, 1, 1, 1, 2, 3, 3, 1, 1, 2, 1, 5, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 6, 1, 1, 2, 2, 9, 1, 1, 2, 1, 1, 1, 3, 1, 1, 3, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 1, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2, 1, 4, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 7, 2, 1, 2, 2, 5, 1, 2, 6, 1, 1, 3, 7, 2, 3, 2, 1, 1, 3, 3, 2, 2, 1, 1, 1, 2, 2, 2, 5, 2, 1, 2, 2, 1, 2, 3, 1, 6, 5, 1, 6, 5, 3, 1, 1, 1, 3, 1, 1, 1, 1, 2, 4, 1, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 4, 2, 3, 4, 1, 3, 1, 2, 5, 3, 10, 2, 2, 2, 2, 2, 2, 1, 6, 1, 4, 3, 1, 3, 1, 1, 1, 1, 2, 6, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 1, 2, 2, 6, 1, 2, 1, 7, 1, 3, 2, 1, 9, 2, 1, 3, 1, 2, 2, 1, 3, 5, 1, 4, 1, 2, 2, 3, 2, 4, 1, 2, 5, 5, 1, 1, 6, 3, 1, 1, 3, 6, 2, 4, 1, 1, 1, 1, 5, 5, 5, 1, 8, 1, 1, 8, 1, 4, 7, 9, 10, 2, 8, 5, 14, 10, 6, 1, 3, 1, 1, 1, 1, 2, 7, 2, 3, 1, 3, 1, 2, 2, 1, 3, 1, 1, 4, 1, 2, 2, 1, 1, 2, 4, 9, 3, 3, 3, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 6, 1, 1, 3, 2, 2, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 3, 4, 4, 1, 1, 5, 1, 1, 2, 2, 3, 1, 1, 1, 1, 3, 1, 2, 4, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 3, 2, 4, 1, 3, 1, 3, 1, 4, 1, 2, 1, 3, 2, 1, 2, 1, 1, 1, 3, 2, 1, 4, 6, 1, 2, 2, 5, 1, 3, 1, 1, 2, 1, 5, 1, 3, 1, 2, 2, 1, 1, 1, 2, 1, 4, 4, 5, 2, 1, 3, 3, 1, 2, 6, 2, 3, 7, 1, 1, 6, 1, 1, 6, 1, 4, 3, 4, 5, 1, 7, 6, 1, 5, 13, 2, 1, 2, 2, 3, 1, 7, 2, 1, 2, 3, 1, 1, 4, 1, 2, 2, 3, 2, 1, 19, 5, 4, 12, 4, 15, 7, 1, 2, 2, 3, 3, 2, 1, 11, 3, 6, 2, 1, 4, 1, 1, 3, 1, 2, 3, 5, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 1, 1, 1, 2, 5, 1, 2, 3, 1, 1, 2, 3, 1, 2, 2, 1, 1, 1, 1, 1, 2, 6, 1, 1, 3, 8, 6, 1, 2, 2, 1, 4, 4, 1, 1, 1, 2, 1, 1, 2, 3, 5, 1, 3, 1, 1, 1, 5, 5, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 3, 7, 2, 3, 8, 2, 2, 1, 5, 1, 1, 1, 1, 3, 1, 2, 2, 1, 1, 5, 1, 1, 3, 4, 2, 3, 5, 3, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 5, 2, 5, 4, 3, 1, 3, 2, 4, 8, 1, 2, 1, 1, 6, 4, 6, 3, 1, 2, 1, 8, 3, 2, 4, 2, 2, 2, 3, 3, 1, 8, 1, 1, 1, 1, 3, 1, 1, 3, 3, 2, 2, 12, 1, 3, 4, 1, 3, 12, 3, 4, 1, 1, 2, 3, 6, 3, 1, 2, 5, 3, 6, 2, 1, 1, 2, 2, 2, 4, 1, 2, 3, 3, 1, 1, 2, 4, 12, 12, 13, 1, 4, 10, 7, 8, 3, 8, 1, 5, 11, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 3, 1, 2, 4, 1, 2, 2, 5, 3, 4, 2, 1, 1, 2, 1, 1, 2, 1, 3, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 4, 3, 1, 1, 1, 2, 1, 4, 1, 1, 2, 1, 2, 1, 1, 1, 5, 4, 2, 1, 10, 1, 1, 2, 3, 1, 3, 6, 2, 8, 1, 1, 1, 1, 3, 2, 3, 2, 3, 1, 5, 2, 3, 1, 1, 2, 2, 2, 1, 5, 2, 1, 2, 1, 2, 2, 5, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 3, 1, 1, 1, 4, 4, 5, 2, 1, 2, 2, 1, 9, 2, 8, 1, 2, 2, 1, 2, 1, 6, 2, 2, 1, 3, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 5, 1, 2, 1, 1, 4, 2, 2, 2, 1, 5, 2, 2, 1, 1, 1, 7, 7, 5, 1, 1, 2, 6, 2, 1, 1, 1, 1, 1, 2, 3, 3, 1, 10, 4, 1, 1, 1, 1, 1, 2, 1, 5, 2, 4, 2, 2, 4, 1, 3, 1, 2, 3, 2, 1, 2, 4, 1, 6, 2, 7, 1, 1, 2, 4, 2, 3, 1, 1, 2, 8, 2, 2, 1, 2, 12, 2, 1, 3, 3, 2, 14, 3, 8, 5, 1, 6, 4, 2, 7, 12, 5, 14, 2, 2, 4, 16, 1, 3, 1, 3, 1, 1, 1, 1, 2, 3, 1, 2, 1, 1, 1, 3, 6, 1, 3, 1, 1, 2, 1, 2, 4, 3, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 4, 5, 1, 1, 5, 1, 3, 6, 1, 3, 1, 1, 5, 2, 1, 7, 8, 1, 1, 5, 3, 3, 1, 8, 8, 1, 1, 2, 2, 2, 1, 1, 1, 2, 5, 2, 1, 3, 1, 4, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 4, 1, 1, 1, 6, 4, 2, 2, 1, 1, 1, 1, 3, 2, 8, 3, 1, 1, 6, 1, 1, 3, 3, 2, 13, 2, 12, 1, 3, 5, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 4, 2, 2, 2, 2, 1, 3, 4, 1, 2, 3, 1, 1, 1, 1, 4, 2, 2, 5, 2, 1, 1, 2, 4, 18, 1, 2, 1, 1, 1, 5, 2, 3, 2, 2, 1, 2, 1, 2, 1, 3, 1, 2, 4, 2, 2, 1, 4, 1, 1, 2, 1, 2, 1, 1, 1, 1, 5, 2, 3, 2, 1, 1, 2, 1, 5, 7, 2, 3, 1, 7, 2, 5, 1, 6, 2, 1, 3, 3, 1, 2, 1, 1, 1, 4, 1, 1, 1, 4, 1, 2, 1, 3, 3, 3, 1, 2, 1, 3, 2, 2, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 3, 1, 1, 3, 2, 1, 1, 3, 2, 1, 1, 3, 1, 4, 1, 1, 1, 1, 1, 1, 4, 6, 6, 1, 3, 2, 1, 1, 8, 2, 3, 2, 1, 1, 1, 4, 1, 3, 5, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 3, 3, 2, 1, 1, 1, 1, 1, 2, 4, 1, 2, 2, 1, 3, 1, 5, 2, 2, 4, 1, 2, 2, 1, 2, 1, 3, 2, 3, 1, 1, 2, 1, 1, 1, 2, 4, 3, 1, 9, 1, 1, 3, 1, 3, 3, 3, 1, 3, 1, 1, 1, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, 2, 3, 1, 6, 1, 2, 3, 2, 1, 4, 1, 1, 1, 4, 1, 5, 5, 1, 3, 1, 2, 1, 4, 2, 18, 7, 2, 2, 2, 2, 3, 4, 8, 5, 3, 2, 1, 4, 1, 3, 5, 2, 20, 3, 6, 1, 4, 14, 1, 1, 3, 1, 10, 3, 4, 4, 6, 2, 1, 6, 1, 2, 18, 15, 10, 7, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 4, 2, 1, 1, 1, 1, 5, 2, 1, 1, 5, 1, 3, 6, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 4, 3, 3, 5, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 1, 3, 1, 5, 1, 7, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 2, 1, 3, 3, 1, 5, 4, 4, 2, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 2, 1, 5, 1, 1, 1, 2, 1, 5, 1, 1, 5, 3, 2, 3, 4, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 4, 3, 7, 1, 3, 5, 1, 2, 1, 3, 2, 1, 1, 1, 1, 1, 5, 9, 1, 2, 1, 1, 4, 2, 4, 1, 1, 7, 1, 3, 1, 2, 3, 2, 5, 1, 1, 1, 2, 2, 1, 1, 2, 4, 2, 6, 2, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 3, 1, 3, 1, 2, 2, 2, 6, 2, 3, 4, 2, 1, 2, 3, 1, 10, 1, 2, 6, 1, 3, 6, 1, 2, 2, 5, 2, 1, 1, 1, 3, 6, 1, 3, 1, 2, 1, 1, 7, 1, 2, 2, 1, 5, 4, 2, 1, 7, 6, 3, 4, 3, 1, 1, 1, 1, 2, 5, 3, 2, 4, 3, 3, 9, 2, 4, 7, 4, 1, 4, 5, 2, 1, 2, 10, 1, 3, 1, 3, 5, 6, 5, 3, 1, 1, 2, 5, 2, 1, 2, 2, 4, 2, 3, 8, 1, 2, 2, 6, 6, 4, 2, 2, 25, 1, 9, 9, 6, 13, 6, 3, 1, 7, 2, 1, 2, 2, 1, 1, 6, 3, 1, 3, 3, 2, 3, 1, 1, 3, 2, 2, 1, 4, 1, 3, 3, 2, 1, 4, 2, 2, 3, 16, 4, 1, 4, 1, 2, 4, 2, 2, 1, 1, 2, 1, 1, 3, 1, 2, 2, 2, 2, 2, 1, 6, 3, 3, 1, 4, 2, 1, 1, 1, 5, 1, 2, 1, 1, 2, 4, 1, 7, 2, 2, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 3, 1, 1, 1, 4, 4, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 4, 2, 1, 1, 3, 2, 2, 5, 1, 1, 3, 1, 2, 1, 1, 1, 1, 1, 2, 1, 4, 1, 2, 1, 2, 2, 2, 2, 1, 3, 1, 1, 1, 3, 2, 1, 3, 4, 4, 2, 1, 2, 5, 5, 4, 1, 1, 6, 10, 1, 6, 4, 2, 1, 1, 3, 5, 1, 9, 4, 13, 2, 1, 1, 9, 3, 7, 2, 1, 1, 3, 2, 3, 2, 1, 1, 8, 1, 2, 2, 2, 1, 3, 1, 1, 2, 4, 2, 2, 7, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 3, 2, 3, 3, 2, 1, 1, 2, 2, 1, 3, 2, 1, 1, 1, 2, 2, 1, 3, 3, 2, 1, 1, 1, 4, 2, 1, 1, 1, 3, 2, 1, 2, 1, 2, 2, 4, 1, 2, 1, 2, 3, 1, 2, 2, 2, 2, 3, 5, 2, 1, 2, 2, 1, 1, 4, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 8, 2, 1, 4, 2, 5, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 3, 4, 3, 3, 1, 1, 2, 1, 3, 6, 2, 1, 5, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, 6, 2, 2, 8, 1, 8, 1, 1, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 2, 1, 2, 8, 2, 2, 1, 6, 3, 4, 4, 9, 2, 1, 3, 1, 1, 5, 2, 1, 3, 1, 1, 7, 1, 1, 1, 1, 1, 1, 7, 2, 2, 3, 2, 1, 2, 3, 2, 6, 3, 1, 4, 2, 1, 1, 2, 2, 1, 4, 4, 1, 1, 1, 1, 3, 1, 4, 1, 5, 2, 1, 2, 1, 1, 1, 12, 1, 4, 6, 3, 3, 4, 4, 1, 4, 2, 3, 16, 2, 3, 2, 1, 3, 1, 2, 3, 3, 3, 1, 1, 3, 1, 8, 1, 1, 3, 6, 1, 1, 1, 1, 1, 1, 1, 4, 4, 3, 1, 1, 5, 1, 11, 1, 3, 2, 3, 1, 3, 3, 4, 6, 2, 7, 2, 2, 2, 4, 6, 1, 1, 3, 1, 13, 4, 1, 11, 2, 11, 13, 1, 7, 2, 7, 2, 5, 2, 4, 8, 1, 6, 3, 9, 1, 7, 1, 2, 3, 3, 4, 1, 11, 8, 3, 4, 4, 10, 2, 1, 6, 7, 2, 9, 2, 1, 26, 60, 30, 1, 1, 1, 1, 3, 11, 6, 1, 1, 1, 3, 5, 2, 1, 1, 2, 3, 13, 9, 1, 1, 1, 1, 1, 3, 15, 2, 1, 5, 1, 1, 1, 2, 1, 2, 1, 1, 2, 5, 1, 3, 4, 1, 6, 2, 7, 9, 1, 1, 2, 8, 2, 1, 3, 6, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 6, 9, 1, 4, 4, 2, 4, 4, 8, 1, 1, 6, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 4, 2, 1, 2, 2, 1, 1, 1, 1, 4, 1, 1, 2, 2, 4, 6, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 5, 4, 1, 2, 4, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 2, 3, 2, 2, 2, 3, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 1, 4, 1, 1, 1, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 2, 5, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 2, 4, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 3, 2, 1, 3, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 3, 3, 3, 1, 3, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 3, 4, 1, 2, 2, 1, 2, 1, 2, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 3, 1, 2, 1, 1, 1, 1, 2, 2, 3, 1, 4, 6, 2, 1, 3, 1, 3, 1, 1, 2, 1, 2, 1, 1, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, 1, 3, 2, 1, 3, 7, 1, 4, 1, 1, 1, 4, 1, 3, 2, 5, 2, 1, 3, 1, 1, 1, 1, 1, 3, 2, 5, 1, 2, 1, 2, 2, 1, 3, 2, 2, 1, 9, 5, 2, 1, 1, 2, 1, 3, 3, 3, 3, 2, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 2, 2, 4, 2, 2, 7, 1, 5, 4, 1, 3, 2, 1, 2, 2, 3, 1, 1, 2, 4, 8, 3, 4, 2, 10, 1, 2, 2, 2, 1, 1, 2, 4, 2, 1, 8, 2, 2, 2, 1, 1, 2, 3, 1, 1, 3, 5, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 4, 1, 1, 3, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 4, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 9, 5, 9, 4, 2, 1, 2, 4, 4, 1, 1, 1, 10, 4, 2, 3, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 2, 1, 2, 8, 1, 4, 2, 2, 7, 2, 4, 2, 1, 3, 4, 3, 4, 1, 4, 2, 1, 3, 2, 2, 1, 1, 4, 2, 4, 1, 3, 1, 1, 13, 1, 5, 4, 2, 3, 3, 6, 1, 2, 3, 3, 1, 3, 2, 7, 2, 6, 1, 12, 2, 1, 8, 5, 1, 29, 1, 4, 3, 6, 1, 8, 14, 4, 4, 3, 12, 4, 3, 15, 13, 2, 2, 1, 5, 1, 2, 4, 2, 1, 1, 5, 1, 3, 1, 2, 2, 4, 2, 1, 1, 2, 1, 3, 1, 2, 4, 8, 1, 1, 1, 1, 2, 2, 4, 1, 1, 2, 1, 1, 3, 1, 1, 1, 5, 2, 10, 4, 1, 2, 1, 1, 2, 1, 4, 2, 1, 1, 1, 2, 1, 1, 2, 7, 1, 2, 1, 1, 2, 9, 3, 1, 2, 4, 3, 2, 1, 1, 1, 1, 1, 2, 2, 8, 9, 1, 1, 5, 11, 2, 2, 5, 1, 1, 2, 5, 9, 2, 1, 5, 2, 1, 1, 6, 4, 1, 1, 4, 2, 3, 7, 3, 3, 5, 5, 4, 1, 2, 1, 3, 1, 5, 3, 4, 9, 4, 2, 8, 7, 1, 3, 1, 5, 1, 5, 6, 5, 2, 7, 11, 13, 1, 13, 6, 3, 2, 9, 2, 2, 4, 1, 4, 1, 1, 1, 1, 2, 2, 2, 2, 1, 5, 1, 4, 1, 5, 4, 3, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 5, 1, 3, 3, 4, 1, 1, 3, 1, 1, 1, 3, 3, 3, 1, 2, 2, 3, 13, 9, 4, 3, 1, 4, 2, 1, 1, 1, 8, 1, 1, 1, 4, 1, 4, 1, 2, 2, 5, 2, 4, 1, 2, 1, 7, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 5, 2, 1, 3, 3, 4, 7, 1, 1, 4, 1, 1, 1, 3, 1, 3, 4, 1, 1, 1, 2, 1, 1, 1, 3, 3, 2, 1, 4, 1, 14, 3, 2, 5, 9, 12, 1, 2, 5, 10, 5, 1, 3, 2, 2, 3, 3, 1, 1, 2, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 3, 2, 2, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 3, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 3, 2, 3, 2, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 6, 1, 4, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 6, 4, 1, 1, 1, 1, 1, 1, 11, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 5, 1, 4, 1, 3, 1, 2, 3, 1, 7, 2, 1, 2, 3, 1, 1, 3, 3, 2, 2, 6, 4, 2, 1, 1, 5, 2, 1, 1, 1, 2, 2, 3, 1, 8, 6, 18, 4, 2, 4, 2, 2, 2, 1, 1, 2, 8, 1, 5, 2, 1, 4, 4, 5, 9, 2, 2, 2, 4, 1, 2, 2, 3, 2, 4, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 3, 2, 5, 3, 3, 1, 2, 1, 5, 2, 3, 1, 1, 1, 8, 1, 1, 4, 2, 3, 3, 2, 4, 1, 6, 2, 2, 3, 7, 2, 1, 1, 3, 2, 1, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 4, 1, 1, 1, 2, 1, 1, 1, 3, 5, 1, 1, 1, 3, 3, 3, 4, 1, 1, 2, 1, 1, 2, 1, 5, 1, 3, 5, 3, 3, 1, 1, 2, 2, 1, 4, 2, 4, 5, 2, 1, 1, 2, 4, 1, 2, 2, 1, 1, 3, 1, 1, 2, 3, 3, 1, 1, 3, 4, 2, 1, 1, 3, 9, 1, 7, 2, 1, 5, 2, 5, 8, 4, 9, 3, 2, 1, 1, 3, 2, 2, 1, 1, 3, 3, 3, 2, 2, 1, 3, 2, 3, 6, 2, 7, 1, 3, 1, 2, 11, 3, 3, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 4, 6, 1, 8, 1, 2, 1, 2, 3, 1, 1, 3, 2, 3, 3, 3, 1, 1, 1, 1, 2, 12, 1, 5, 1, 2, 4, 2, 1, 3, 1, 2, 6, 1, 1, 1, 2, 2, 4, 1, 2, 1, 3, 7, 2, 1, 9, 1, 6, 1, 1, 2, 1, 2, 3, 1, 13, 4, 1, 1, 1, 4, 1, 6, 1, 1, 1, 3, 1, 13, 1, 2, 3, 2, 2, 1, 1, 1, 1, 3, 3, 2, 6, 2, 2, 14, 10, 4, 1, 2, 4, 1, 2, 2, 2, 2, 1, 1, 1, 2, 3, 3, 2, 3, 1, 2, 1, 1, 1, 1, 2, 2, 3, 3, 1, 4, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 3, 2, 2, 4, 1, 1, 1, 2, 4, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 4, 2, 3, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 3, 13, 1, 1, 1, 1, 14, 3, 4, 4, 1, 1, 3, 1, 1, 1, 2, 2, 4, 1, 2, 1, 1, 3, 2, 2, 2, 2, 1, 8, 1, 1, 1, 1, 2, 3, 5, 3, 4, 4, 1, 1, 4, 1, 4, 1, 4, 3, 5, 7, 4, 6, 2, 3, 2, 2, 6, 4, 7, 7, 11, 22, 1, 5, 2, 2, 2, 1, 2, 3, 1, 1, 1, 1, 1, 3, 1, 1, 3, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 5, 2, 3, 5, 1, 2, 2, 2, 2, 1, 3, 1, 5, 1, 4, 3, 2, 4, 2, 1, 9, 3, 12, 6, 1, 1, 2, 1, 2, 1, 2, 3, 3, 2, 2, 4, 1, 3, 3, 7, 4, 1, 2, 1, 2, 2, 1, 1, 2, 1, 8, 3, 2, 1, 2, 2, 1, 3, 5, 1, 1, 1, 3, 3, 3, 2, 1, 4, 2, 3, 16, 4, 2, 2, 1, 1, 2, 5, 2, 11, 6, 2, 3, 3, 17, 4, 2, 1, 1, 1, 1, 5, 1, 1, 2, 1, 1, 3, 2, 3, 1, 3, 1, 3, 1, 1, 1, 4, 1, 2, 1, 3, 2, 1, 2, 4, 1, 6, 5, 7, 12, 6, 5, 2, 1, 5, 1, 1, 3, 2, 1, 5, 2, 2, 10, 1, 3, 2, 4, 1, 2, 2, 2, 1, 4, 2, 3, 1, 4, 2, 3, 2, 4, 1, 1, 2, 2, 1, 1, 2, 1, 2, 2, 5, 2, 2, 2, 2, 5, 2, 2, 2, 1, 3, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 3, 2, 2, 1, 1, 8, 3, 1, 3, 1, 1, 2, 2, 1, 2, 2, 5, 8, 3, 3, 1, 1, 1, 1, 5, 5, 1, 4, 1, 1, 1, 1, 1, 1, 1, 4, 3, 4, 9, 5, 1, 5, 5, 2, 6, 1, 3, 4, 4, 1, 4, 4, 1, 2, 6, 5, 2, 5, 4, 2, 2, 1, 3, 6, 1, 7, 2, 1, 7, 3, 6, 8, 7, 1, 1, 12, 24, 14, 1, 7, 1, 1, 12, 8, 1, 3, 2, 1, 4, 1, 1, 1, 3, 2, 1, 5, 4, 3, 1, 1, 6, 3, 1, 1, 1, 2, 4, 2, 1, 2, 2, 1, 5, 3, 1, 1, 2, 3, 3, 1, 8, 7, 6, 6, 15, 22, 2, 5, 4, 4, 45, 18, 9, 47, 8, 114, 2, 25, 6, 3, 3, 59, 25, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 8, 2, 1, 8, 3, 1, 3, 1, 2, 1, 2, 5, 2, 1, 6, 1, 1, 4, 3, 1, 2, 2, 3, 4, 1, 3, 9, 2, 2, 3, 2, 1, 1, 1, 4, 3, 1, 1, 2, 3, 3, 8, 1, 1, 1, 6, 1, 3, 1, 2, 1, 1, 1, 1, 2, 3, 2, 2, 2, 6, 1, 3, 1, 1, 1, 4, 1, 1, 4, 1, 3, 5, 1, 1, 1, 2, 4, 4, 1, 2, 2, 1, 2, 1, 1, 1, 1, 4, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, 4, 2, 2, 1, 1, 1, 1, 1, 1, 6, 1, 2, 2, 1, 1, 1, 3, 2, 2, 3, 1, 3, 4, 1, 1, 1, 5, 2, 4, 2, 15, 1, 7, 14, 4, 1, 2, 1, 2, 2, 1, 7, 3, 2, 2, 1, 2, 2, 1, 1, 1, 2, 1, 4, 1, 1, 2, 1, 1, 2, 1, 2, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 8, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 5, 4, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 4, 1, 10, 3, 3, 2, 1, 4, 2, 6, 1, 7, 2, 2, 1, 1, 4, 1, 1, 1, 1, 1, 3, 1, 1, 6, 5, 2, 1, 1, 4, 1, 1, 1, 1, 3, 5, 1, 1, 1, 1, 1, 1, 1, 2, 6, 2, 5, 2, 7, 1, 2, 1, 1, 9, 2, 11, 7, 1, 5, 2, 1, 3, 4, 2, 5, 11, 7, 4, 3, 2, 1, 6, 1, 7, 1, 2, 2, 1, 1, 2, 1, 1, 6, 1, 3, 2, 2, 7, 1, 2, 1, 1, 2, 1, 2, 5, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 6, 1, 2, 2, 2, 3, 1, 9, 2, 5, 9, 6, 1, 1, 2, 1, 1, 6, 3, 1, 1, 3, 1, 1, 4, 2, 1, 2, 1, 1, 2, 1, 5, 1, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 3, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 4, 4, 2, 3, 3, 2, 2, 3, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 3, 1, 1, 1, 10, 1, 3, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 3, 1, 2, 1, 2, 1, 2, 6, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 8, 1, 3, 5, 4, 1, 5, 1, 2, 1, 1, 1, 2, 8, 1, 1, 1, 5, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 3, 2, 2, 1, 2, 1, 2, 5, 2, 2, 4, 1, 2, 1, 1, 4, 4, 1, 6, 1, 1, 7, 3, 1, 4, 2, 1, 2, 5, 1, 1, 1, 1, 2, 7, 2, 2, 1, 6, 1, 1, 1, 1, 1, 1, 8, 2, 5, 1, 3, 1, 9, 8, 3, 5, 1, 2, 1, 1, 1, 5, 2, 6, 2, 1, 1, 3, 1, 2, 1, 1, 1, 2, 2, 8, 2, 3, 1, 1, 2, 1, 2, 2, 7, 2, 3, 3, 2, 7, 7, 2, 1, 2, 4, 1, 1, 1, 2, 2, 2, 1, 2, 3, 2, 1, 3, 2, 1, 1, 2, 3, 7, 2, 1, 2, 1, 2, 1, 6, 4, 12, 3, 1, 3, 5, 2, 2, 5, 2, 4, 3, 5, 2, 10, 1, 11, 1, 1, 1, 1, 1, 1, 6, 5, 1, 1, 12, 1, 2, 5, 6, 4, 8, 2, 2, 5, 1, 1, 3, 3, 3, 1, 2, 8, 12, 1, 6, 2, 4, 2, 4, 1, 1, 3, 4, 1, 1, 6, 2, 8, 6, 1, 3, 2, 7, 3, 1, 4, 2, 2, 1, 18, 4, 6, 12, 5, 2, 15, 2, 15, 4, 18, 1, 1, 1, 1, 1, 1, 6, 4, 4, 2, 7, 1, 2, 3, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 1, 1, 1, 6, 2, 7, 1, 6, 1, 3, 1, 1, 1, 2, 3, 1, 1, 1, 2, 2, 4, 6, 3, 1, 2, 1, 2, 1, 1, 3, 1, 1, 1, 3, 4, 1, 2, 3, 1, 5, 5, 4, 1, 2, 1, 1, 1, 1, 4, 1, 5, 2, 2, 1, 4, 1, 1, 1, 3, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 3, 1, 1, 2, 4, 5, 3, 3, 3, 4, 3, 1, 8, 1, 1, 3, 2, 5, 4, 1, 1, 7, 3, 1, 1, 9, 2, 2, 2, 2, 5, 1, 1, 1, 4, 1, 2, 3, 3, 2, 10, 8, 1, 3, 5, 3, 1, 1, 2, 2, 2, 2, 5, 3, 3, 6, 4, 1, 4, 2, 1, 9, 5, 5, 5, 1, 3, 11, 5, 5, 7, 1, 8, 2, 1, 11, 1, 16, 7, 3, 4, 3, 1, 1, 7, 1, 1, 4, 2, 3, 2, 7, 1, 1, 1, 2, 3, 1, 2, 1, 2, 2, 2, 5, 6, 1, 1, 2, 1, 2, 1, 1, 2, 3, 2, 5, 4, 1, 5, 6, 2, 6, 1, 2, 2, 2, 6, 5, 5, 1, 3, 1, 2, 1, 5, 4, 2, 1, 3, 1, 2, 4, 3, 1, 1, 1, 3, 8, 1, 2, 1, 4, 1, 3, 2, 4, 8, 6, 2, 1, 2, 4, 1, 1, 4, 2, 4, 5, 1, 4, 1, 4, 2, 11, 3, 17, 5, 2, 2, 1, 7, 5, 16, 4, 2, 2, 3, 59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 4, 4, 2, 2, 1, 4, 2, 1, 5, 2, 2, 2, 2, 12, 1, 4, 3, 19, 36, 10, 23, 26, 16, 1, 9, 116, 95, 6, 53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 2, 5, 1, 2, 3, 9, 5, 7, 1, 6, 2, 1, 3, 5, 5, 1, 1, 8, 3, 1, 3, 1, 2, 8, 4, 133, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 2, 3, 3, 1, 1, 1, 1, 10, 3, 1, 5, 1, 6, 3, 11, 4, 12, 2, 2, 1, 1, 3, 2, 2, 2, 1, 3, 1, 1, 2, 5, 1, 2, 1, 1, 1, 5, 1, 3, 1, 2, 1, 1, 4, 1, 4, 2, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 8, 4, 1, 2, 3, 3, 2, 9, 1, 1, 3, 1, 3, 3, 1, 2, 2, 1, 2, 4, 1, 3, 1, 3, 3, 1, 1, 2, 1, 2, 1, 1, 1, 1, 5, 1, 1, 7, 1, 2, 6, 4, 3, 3, 1, 2, 1, 2, 2, 2, 6, 1, 1, 1, 2, 4, 2, 8, 1, 4, 8, 2, 13, 1, 3, 3, 8, 172, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 5, 1, 2, 5, 1, 8, 4, 1, 1, 2, 1, 2, 1, 2, 1, 6, 2, 1, 2, 1, 1, 3, 1, 2, 1, 1, 1, 1, 3, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 3, 4, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 3, 1, 2, 1, 1, 1, 1, 1, 4, 7, 1, 1, 5, 1, 1, 2, 3, 1, 2, 3, 1, 2, 2, 1, 6, 2, 1, 1, 1, 1, 4, 1, 3, 7, 1, 2, 3, 5, 1, 6, 1, 4, 4, 2, 1, 2, 1, 5, 3, 6, 2, 2, 2, 1, 1, 2, 2, 3, 1, 1, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 4, 1, 1, 1, 2, 4, 3, 1, 1, 1, 4, 1, 2, 2, 1, 1, 2, 1, 2, 2, 5, 4, 5, 1, 1, 1, 2, 1, 1, 1, 7, 5, 6, 1, 1, 1, 2, 2, 2, 2, 1, 8, 4, 2, 8, 9, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 5, 3, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 1, 6, 2, 2, 2, 1, 1, 3, 1, 1, 8, 1, 7, 6, 2, 3, 1, 1, 5, 1, 5, 4, 9, 2, 1, 2, 1, 1, 1, 1, 1, 11, 152, 26, 32, 24, 2, 118, 44, 37, 59, 12, 104, 45, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 105, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 3, 2, 9, 4, 3, 1, 1, 1, 1, 1, 5, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 3, 1, 6, 3, 1, 2, 1, 2, 3, 1, 1, 1, 2, 6, 2, 1, 1, 1, 12, 2, 1, 2, 3, 2, 2, 1, 4, 3, 1, 1, 3, 11, 2, 7, 3, 3, 3, 1, 2, 1, 1, 2, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 3, 3, 11, 8, 1, 1, 5, 2, 2, 3, 1, 2, 5, 2, 1, 3, 1, 1, 1, 1, 1, 4, 1, 1, 4, 3, 6, 2, 10, 2, 3, 3, 2, 6, 1, 5, 20, 1, 3, 3, 2, 3, 2, 1, 1, 3, 4, 3, 4, 3, 1, 2, 2, 2, 2, 1, 2, 2, 4, 6, 2, 4, 1, 2, 4, 8, 1, 2, 4, 1, 3, 1, 1, 1, 1, 3, 1, 1, 14, 36, 1, 1, 1, 1, 1, 1, 1, 6, 2, 1, 127, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 5, 1, 8, 1, 37, 3, 30, 38, 1, 16, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 7, 2, 1, 196, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 5, 1, 1, 2, 2, 4, 1, 1, 1, 2, 6, 1, 2, 3, 2, 5, 9, 1, 4, 5, 2, 2, 10, 2, 2, 6, 5, 7, 3, 1, 5, 7, 4, 12, 3, 4, 1, 4, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 296, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 315, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 2, 5, 1, 3, 6, 1, 1, 3, 7, 2, 7, 18, 1, 2, 2, 1, 6, 3, 2, 4, 1, 1, 2, 3, 4, 3, 1, 1, 2, 1, 1, 1, 3, 2, 2, 1, 5, 10, 2, 1, 2, 13, 2, 1, 2, 2, 1, 4, 2, 7, 2, 7, 2, 1, 3, 2, 6, 2, 2, 2, 1, 3, 6, 2, 7, 1, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, 1, 4, 1, 2, 43, 1, 1}; + static ImWchar base_ranges[] = // not zero-terminated + { + 0x0020, + 0x00FF, // Basic Latin + Latin Supplement + 0x3000, + 0x30FF, // Punctuations, Hiragana, Katakana + 0x31F0, + 0x31FF, // Katakana Phonetic Extensions + 0xFF00, + 0xFFEF, // Half-width characters + }; + static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = {0}; + if (!full_ranges[0]) + { + memcpy(full_ranges, base_ranges, sizeof(base_ranges)); + ImWchar* out_ranges = full_ranges + IM_ARRAYSIZE(base_ranges); + int base_codepoint = 0x4E00; + for (int n = 0; n < IM_ARRAYSIZE(accumulative_offsets_from_0x4E00); n++, out_ranges += 2) + { + out_ranges[0] = out_ranges[1] = (ImWchar)(base_codepoint + accumulative_offsets_from_0x4E00[n]); + base_codepoint += accumulative_offsets_from_0x4E00[n]; + } + out_ranges[0] = 0; + } + return &full_ranges[0]; + } + const ImWchar* font_mgr::get_imgui_alphabet_type() { auto& io = ImGui::GetIO(); switch (m_require_extra) { - case eAlphabetType::CHINESE: return io.Fonts->GetGlyphRangesChineseFull(); + case eAlphabetType::CHINESE: return GetGlyphRangesChineseSimplifiedOfficial(); case eAlphabetType::CYRILLIC: return io.Fonts->GetGlyphRangesCyrillic(); case eAlphabetType::JAPANESE: return io.Fonts->GetGlyphRangesJapanese(); case eAlphabetType::KOREAN: return io.Fonts->GetGlyphRangesKorean(); diff --git a/src/renderer/font_mgr.hpp b/src/renderer/font_mgr.hpp index af1a9425..7c342a24 100644 --- a/src/renderer/font_mgr.hpp +++ b/src/renderer/font_mgr.hpp @@ -34,6 +34,7 @@ namespace big void rebuild(); file get_available_font_file_for_alphabet_type(); + const ImWchar* GetGlyphRangesChineseSimplifiedOfficial(); const ImWchar* get_imgui_alphabet_type(); }; }