diff --git a/LICENSE.md b/LICENSE.md
index 40187b50ef..fa98770365 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -51,6 +51,7 @@ The JUCE modules contain the following dependencies:
- [pnglib](modules/juce_graphics/image_formats/pnglib/) ([zlib](modules/juce_graphics/image_formats/pnglib/LICENSE))
- [zlib](modules/juce_core/zip/zlib/) ([zlib](modules/juce_core/zip/zlib/README))
- [HarfBuzz](modules/juce_graphics/fonts/harfbuzz/) ([Old MIT](modules/juce_graphics/fonts/harfbuzz/COPYING))
+- [SheenBidi](modules/juce_graphics/unicode/sheenbidi/) ([Apache](modules/juce_graphics/unicode/sheenbidi/LICENSE))
The JUCE examples are licensed under the terms of the
[ISC license](http://www.isc.org/downloads/software-support-policy/isc-license/).
diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
index d2520ca3af..27d23efe8c 100644
--- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
@@ -2009,6 +2009,63 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
@@ -4532,6 +4589,63 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index a3e4c63663..0349ea5a3a 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -2438,6 +2438,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -4294,6 +4354,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
index 6c78977a6a..9bf5d6a59f 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
@@ -656,6 +656,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -3199,6 +3208,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -7452,6 +7521,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index 4639697cbe..937f773550 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -2438,6 +2438,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -4294,6 +4354,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
index 2723ab3ada..0f33186307 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
@@ -656,6 +656,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -3199,6 +3208,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -7452,6 +7521,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
index fdf3797898..c00f7ec7a5 100644
--- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
@@ -1771,6 +1771,63 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
@@ -3977,6 +4034,63 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index 3cb9bc7ff1..a403603304 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -2131,6 +2131,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -3765,6 +3825,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
index 4233bb534d..56801c42ce 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
@@ -566,6 +566,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2743,6 +2752,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -6507,6 +6576,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
index 629033acca..3377f5661f 100644
--- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
@@ -1901,6 +1901,63 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
@@ -4260,6 +4317,63 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index 64b241c518..0c25718475 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -2265,6 +2265,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -3998,6 +4058,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
index dc70c1118d..aeb323208b 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
@@ -608,6 +608,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2950,6 +2959,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -6942,6 +7011,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index f26b71b6b9..a6c7f7ed8a 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -2265,6 +2265,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -3998,6 +4058,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
index 7a99af45e0..715904f32c 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
@@ -608,6 +608,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2950,6 +2959,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -6942,6 +7011,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
index 4fda1442e7..dcab1649b7 100644
--- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
@@ -1790,6 +1790,63 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
@@ -4076,6 +4133,63 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c"
+ "../../../../../modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp"
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index ac84525b1a..742a0277ed 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -2152,6 +2152,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -3863,6 +3923,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
index 84c9a998c3..de09128e7c 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
@@ -575,6 +575,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2797,6 +2806,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -6669,6 +6738,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
index 38bfe3a085..1e05457ea9 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
@@ -1303,6 +1303,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -2574,6 +2634,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
index 5f75044d02..db9b059b98 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
@@ -278,6 +278,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -1645,6 +1654,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -4326,6 +4395,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
index 54adb21988..02675e95dc 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
@@ -1303,6 +1303,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -2574,6 +2634,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
index 1a5651db86..6303317a51 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
@@ -278,6 +278,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -1645,6 +1654,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -4326,6 +4395,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index 9cdd0819f1..56fe90cc68 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -2273,6 +2273,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -4094,6 +4154,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
index b7defed24b..bf125a9f70 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -608,6 +608,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2971,6 +2980,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -7056,6 +7125,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index 475a390681..84e947a713 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -2273,6 +2273,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -4094,6 +4154,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
index 4484789bc6..d0d9db42d7 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -608,6 +608,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2971,6 +2980,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -7056,6 +7125,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
index e161c73e8c..70fe96bf4e 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
@@ -2151,6 +2151,66 @@
true
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
true
@@ -3839,6 +3899,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
index 60dbf1a0b2..54711a48eb 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
@@ -569,6 +569,15 @@
{160D9882-0F68-278D-C5F9-8960FD7421D2}
+
+ {0CB19E25-4E0F-3B63-F005-249DA1602485}
+
+
+ {26969BB2-447E-3386-5885-61B4896FAA0E}
+
+
+ {5B44DF93-8EE9-BAF5-0B3B-30AE9E58A3F1}
+
{A4846E15-C7B2-BB61-80BA-E284529F3AAA}
@@ -2794,6 +2803,66 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics\unicode
@@ -6636,6 +6705,117 @@
JUCE Modules\juce_graphics\placement
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Headers
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
+
+ JUCE Modules\juce_graphics\unicode\sheenbidi\Source
+
JUCE Modules\juce_graphics
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h
new file mode 100644
index 0000000000..15758de64c
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBAlgorithm.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2016-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_ALGORITHM_H
+#define _SB_PUBLIC_ALGORITHM_H
+
+#include "SBBase.h"
+#include "SBBidiType.h"
+#include "SBCodepointSequence.h"
+#include "SBParagraph.h"
+
+typedef struct _SBAlgorithm *SBAlgorithmRef;
+
+/**
+ * Creates an algorithm object for the specified code point sequence. The source string inside the
+ * code point sequence should not be freed until the algorithm object is in use.
+ *
+ * @param codepointSequence
+ * The code point sequence to apply bidirectional algorithm on.
+ * @return
+ * A reference to an algorithm object if the call was successful, NULL otherwise.
+ */
+SBAlgorithmRef SBAlgorithmCreate(const SBCodepointSequence *codepointSequence);
+
+/**
+ * Returns a direct pointer to the bidirectional types of code units, stored in the algorithm
+ * object.
+ *
+ * @param algorithm
+ * The algorithm object from which to access the bidirectional types of code units.
+ * @return
+ * A valid pointer to an array of SBBidiType structures, whose length will be equal to that of
+ * string buffer.
+ */
+const SBBidiType *SBAlgorithmGetBidiTypesPtr(SBAlgorithmRef algorithm);
+
+/**
+ * Determines the boundary of first paragraph within the specified range.
+ *
+ * The boundary of the paragraph occurs after a code point whose bidirectional type is Paragraph
+ * Separator (B), or at the suggestedLength if no such code point exists before it. The exception to
+ * this rule is when a Carriage Return (CR) is followed by a Line Feed (LF). Both CR and LF are
+ * paragraph separators, but in that case, the boundary of the paragraph is considered after LF code
+ * point.
+ *
+ * @param algorithm
+ * The algorithm object to use for determining paragraph boundary.
+ * @param paragraphOffset
+ * The index to the first code unit of the paragraph in source string.
+ * @param suggestedLength
+ * The number of code units covering the suggested length of the paragraph.
+ * @param acutalLength
+ * The actual length of the first paragraph, including the paragraph separator, within the
+ * given range.
+ * @param separatorLength
+ * On output, the length of paragraph separator. This parameter can be set to NULL if not
+ * needed.
+ */
+void SBAlgorithmGetParagraphBoundary(SBAlgorithmRef algorithm,
+ SBUInteger paragraphOffset, SBUInteger suggestedLength,
+ SBUInteger *acutalLength, SBUInteger *separatorLength);
+
+/**
+ * Creates a paragraph object processed with Unicode Bidirectional Algorithm.
+ *
+ * This function processes only first paragraph starting at paragraphOffset with length less than or
+ * equal to suggestedLength, in accordance with Rule P1 of Unicode Bidirectional Algorithm.
+ *
+ * The paragraph level is determined by applying Rules P2-P3 and embedding levels are resolved by
+ * applying Rules X1-I2.
+ *
+ * @param algorithm
+ * The algorithm object to use for creating the desired paragraph.
+ * @param paragraphOffset
+ * The index to the first code unit of the paragraph in source string.
+ * @param suggestedLength
+ * The number of code units covering the suggested length of the paragraph.
+ * @param baseLevel
+ * The desired base level of the paragraph. Rules P2-P3 would be ignored if it is neither
+ * SBLevelDefaultLTR nor SBLevelDefaultRTL.
+ * @return
+ * A reference to a paragraph object if the call was successful, NULL otherwise.
+ */
+SBParagraphRef SBAlgorithmCreateParagraph(SBAlgorithmRef algorithm,
+ SBUInteger paragraphOffset, SBUInteger suggestedLength, SBLevel baseLevel);
+
+/**
+ * Increments the reference count of an algorithm object.
+ *
+ * @param algorithm
+ * The algorithm object whose reference count will be incremented.
+ * @return
+ * The same algorithm object passed in as the parameter.
+ */
+SBAlgorithmRef SBAlgorithmRetain(SBAlgorithmRef algorithm);
+
+/**
+ * Decrements the reference count of an algorithm object. The object will be deallocated when its
+ * reference count reaches zero.
+ *
+ * @param algorithm
+ * The algorithm object whose reference count will be decremented.
+ */
+void SBAlgorithmRelease(SBAlgorithmRef algorithm);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h
new file mode 100644
index 0000000000..dfadf1c1df
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBBase.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2014-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_BASE_H
+#define _SB_PUBLIC_BASE_H
+
+#include
+#include
+
+/**
+ * A type to represent an 8-bit signed integer.
+ */
+typedef int8_t SBInt8;
+
+/**
+ * A type to represent a 16-bit signed integer.
+ */
+typedef int16_t SBInt16;
+
+/**
+ * A type to represent a 32-bit signed integer.
+ */
+typedef int32_t SBInt32;
+
+/**
+ * A type to represent an 8-bit unsigned integer.
+ */
+typedef uint8_t SBUInt8;
+
+/**
+ * A type to represent a 16-bit unsigned integer.
+ */
+typedef uint16_t SBUInt16;
+
+/**
+ * A type to represent a 32-bit unsigned integer.
+ */
+typedef uint32_t SBUInt32;
+
+/**
+ * A signed integer type whose width is equal to the width of the machine word.
+ */
+typedef intptr_t SBInteger;
+
+/**
+ * An unsigned integer type whose width is equal to the width of the machine word.
+ */
+typedef uintptr_t SBUInteger;
+
+/**
+ * Constants that specify the states of a boolean.
+ */
+enum {
+ SBFalse = 0, /**< A value representing the false state. */
+ SBTrue = 1 /**< A value representing the true state. */
+};
+/**
+ * A type to represent a boolean value.
+ */
+typedef SBUInt8 SBBoolean;
+
+#define SBUInt8InRange(v, s, e) \
+( \
+ (SBUInt8)((v) - (s)) \
+ <= (SBUInt8)((e) - (s)) \
+)
+
+#define SBUInt16InRange(v, s, e) \
+( \
+ (SBUInt16)((v) - (s)) \
+ <= (SBUInt16)((e) - (s)) \
+)
+
+#define SBUInt32InRange(v, s, e) \
+( \
+ (SBUInt32)((v) - (s)) \
+ <= (SBUInt32)((e) - (s)) \
+)
+
+
+/**
+ * A type to represent a bidi level.
+ */
+typedef SBUInt8 SBLevel;
+
+/**
+ * A value representing an invalid bidi level.
+ */
+#define SBLevelInvalid 0xFF
+
+/**
+ * A value representing maximum explicit embedding level.
+ */
+#define SBLevelMax 125
+
+/**
+ * A value specifying to set base level to zero (left-to-right) if there is no strong character.
+ */
+#define SBLevelDefaultLTR 0xFE
+
+/**
+ * A value specifying to set base level to one (right-to-left) if there is no strong character.
+ */
+#define SBLevelDefaultRTL 0xFD
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h
new file mode 100644
index 0000000000..0aaaad14ff
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBBidiType.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_BIDI_TYPE_H
+#define _SB_PUBLIC_BIDI_TYPE_H
+
+#include "SBBase.h"
+
+/**
+ * Constants that specify the bidirectional types of a character.
+ */
+enum {
+ SBBidiTypeNil = 0x00,
+
+ SBBidiTypeL = 0x01, /**< Strong: Left-to-Right */
+ SBBidiTypeR = 0x02, /**< Strong: Right-to-Left */
+ SBBidiTypeAL = 0x03, /**< Strong: Right-to-Left Arabic */
+
+ SBBidiTypeBN = 0x04, /**< Weak: Boundary Neutral */
+ SBBidiTypeNSM = 0x05, /**< Weak: Non-Spacing Mark */
+ SBBidiTypeAN = 0x06, /**< Weak: Arabic Number */
+ SBBidiTypeEN = 0x07, /**< Weak: European Number */
+ SBBidiTypeET = 0x08, /**< Weak: European Number Terminator */
+ SBBidiTypeES = 0x09, /**< Weak: European Number Separator */
+ SBBidiTypeCS = 0x0A, /**< Weak: Common Number Separator */
+
+ SBBidiTypeWS = 0x0B, /**< Neutral: White Space */
+ SBBidiTypeS = 0x0C, /**< Neutral: Segment Separator */
+ SBBidiTypeB = 0x0D, /**< Neutral: Paragraph Separator */
+ SBBidiTypeON = 0x0E, /**< Neutral: Other Neutral */
+
+ SBBidiTypeLRI = 0x0F, /**< Format: Left-to-Right Isolate */
+ SBBidiTypeRLI = 0x10, /**< Format: Right-to-Left Isolate */
+ SBBidiTypeFSI = 0x11, /**< Format: First Strong Isolate */
+ SBBidiTypePDI = 0x12, /**< Format: Pop Directional Isolate */
+ SBBidiTypeLRE = 0x13, /**< Format: Left-to-Right Embedding */
+ SBBidiTypeRLE = 0x14, /**< Format: Right-to-Left Embedding */
+ SBBidiTypeLRO = 0x15, /**< Format: Left-to-Right Override */
+ SBBidiTypeRLO = 0x16, /**< Format: Right-to-Left Override */
+ SBBidiTypePDF = 0x17 /**< Format: Pop Directional Formatting */
+};
+
+/**
+ * A type to represent the bidirectional type of a character.
+ */
+typedef SBUInt8 SBBidiType;
+
+/**
+ * Checks whether specified bidirectional type is strong.
+ */
+#define SBBidiTypeIsStrong(t) SBUInt8InRange(t, SBBidiTypeL, SBBidiTypeAL)
+
+/**
+ * Checks whether specified bidirectional type is weak.
+ */
+#define SBBidiTypeIsWeak(t) SBUInt8InRange(t, SBBidiTypeBN, SBBidiTypeCS)
+
+/**
+ * Checks whether specified bidirectional type is neutral.
+ */
+#define SBBidiTypeIsNeutral(t) SBUInt8InRange(t, SBBidiTypeWS, SBBidiTypeON)
+
+/**
+ * Checks whether specified bidirectional type is format.
+ */
+#define SBBidiTypeIsFormat(t) SBUInt8InRange(t, SBBidiTypeLRI, SBBidiTypePDF)
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h
new file mode 100644
index 0000000000..b22e07ba1c
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepoint.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_CODEPOINT_H
+#define _SB_PUBLIC_CODEPOINT_H
+
+#include "SBBase.h"
+#include "SBBidiType.h"
+#include "SBGeneralCategory.h"
+#include "SBScript.h"
+
+/**
+ * A type to represent a unicode code point.
+ */
+typedef SBUInt32 SBCodepoint;
+
+/**
+ * A value representing an invalid code point.
+ */
+#define SBCodepointInvalid UINT32_MAX
+
+/**
+ * A value representing a faulty code point, used as a replacement by the decoder.
+ */
+#define SBCodepointFaulty 0xFFFD
+
+/**
+ * Returns the bidirectional type of a code point.
+ *
+ * @param codepoint
+ * The code point whose bidirectional type is returned.
+ * @return
+ * The bidirectional type of specified code point.
+ */
+SBBidiType SBCodepointGetBidiType(SBCodepoint codepoint);
+
+/**
+ * Returns the general category of a code point.
+ *
+ * @param codepoint
+ * The code point whose general category is returned.
+ * @return
+ * The general category of specified code point.
+ */
+SBGeneralCategory SBCodepointGetGeneralCategory(SBCodepoint codepoint);
+
+/**
+ * Returns the mirror of a code point.
+ *
+ * @param codepoint
+ * The code point whose mirror is returned.
+ * @return
+ * The mirror of specified code point if available, 0 otherwise.
+ */
+SBCodepoint SBCodepointGetMirror(SBCodepoint codepoint);
+
+/**
+ * Returns the script of a code point.
+ *
+ * @param codepoint
+ * The code point whose script is returned.
+ * @return
+ * The script of specified code point.
+ */
+SBScript SBCodepointGetScript(SBCodepoint codepoint);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h
new file mode 100644
index 0000000000..f1f8a5c3f6
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBCodepointSequence.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2016-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_CODEPOINT_SEQUENCE_H
+#define _SB_PUBLIC_CODEPOINT_SEQUENCE_H
+
+#include "SBBase.h"
+#include "SBCodepoint.h"
+
+enum {
+ SBStringEncodingUTF8 = 0, /**< An 8-bit representation of Unicode code points. */
+ SBStringEncodingUTF16 = 1, /**< 16-bit UTF encoding in native endianness. */
+ SBStringEncodingUTF32 = 2 /**< 32-bit UTF encoding in native endianness. */
+};
+typedef SBUInt32 SBStringEncoding;
+
+typedef struct _SBCodepointSequence {
+ SBStringEncoding stringEncoding; /**< The encoding of the string. */
+ void *stringBuffer; /**< The source string containing the code units. */
+ SBUInteger stringLength; /**< The length of the string in terms of code units. */
+} SBCodepointSequence;
+
+/**
+ * Returns the code point before the given string index.
+ *
+ * @param codepointSequence
+ * The object holding the information of the string.
+ * @param stringIndex
+ * The index of code unit before which to get the code point. On output, it is set to point to
+ * the first code unit of returned code point.
+ * @return
+ * The code point before the given string index, or SBCodepointInvalid if stringIndex is equal
+ * to zero or larger than actual length of source string.
+ */
+SBCodepoint SBCodepointSequenceGetCodepointBefore(const SBCodepointSequence *codepointSequence,
+ SBUInteger *stringIndex);
+
+/**
+ * Returns the code point at the given string index.
+ *
+ * @param codepointSequence
+ * The object holding the information of the string.
+ * @param stringIndex
+ * The index of code unit at which to get the code point. On output, it is set to point to the
+ * first code unit of next code point.
+ * @return
+ * The code point at the given string index, or SBCodepointInvalid if stringIndex is larger
+ * than or equal to actual length of source string.
+ */
+SBCodepoint SBCodepointSequenceGetCodepointAt(const SBCodepointSequence *codepointSequence,
+ SBUInteger *stringIndex);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h
new file mode 100644
index 0000000000..801e91abb0
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBConfig.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_CONFIG_H
+#define _SB_PUBLIC_CONFIG_H
+
+/* #define SB_CONFIG_LOG */
+/* #define SB_CONFIG_UNITY */
+
+#ifdef SB_CONFIG_UNITY
+#define SB_INTERNAL static
+#else
+#define SB_INTERNAL
+#endif
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h
new file mode 100644
index 0000000000..ce15284fce
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBGeneralCategory.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_GENERAL_CATEGORY_H
+#define _SB_PUBLIC_GENERAL_CATEGORY_H
+
+#include "SBBase.h"
+
+/**
+ * Constants that specify the general category of a character.
+ */
+enum {
+ SBGeneralCategoryNil = 0x00,
+
+ SBGeneralCategoryLU = 0x01, /**< Letter: Uppercase Letter */
+ SBGeneralCategoryLL = 0x02, /**< Letter: Lowercase Letter */
+ SBGeneralCategoryLT = 0x03, /**< Letter: Titlecase Letter */
+ SBGeneralCategoryLM = 0x04, /**< Letter: Modifier Letter */
+ SBGeneralCategoryLO = 0x05, /**< Letter: Other Letter */
+
+ SBGeneralCategoryMN = 0x06, /**< Mark: Nonspacing Mark */
+ SBGeneralCategoryMC = 0x07, /**< Mark: Spacing Mark */
+ SBGeneralCategoryME = 0x08, /**< Mark: Enclosing Mark */
+
+ SBGeneralCategoryND = 0x09, /**< Number: Decimal Number */
+ SBGeneralCategoryNL = 0x0A, /**< Number: Letter Number */
+ SBGeneralCategoryNO = 0x0B, /**< Number: Other Number */
+
+ SBGeneralCategoryPC = 0x0C, /**< Punctuation: Connector Punctuation */
+ SBGeneralCategoryPD = 0x0D, /**< Punctuation: Dash Punctuation */
+ SBGeneralCategoryPS = 0x0E, /**< Punctuation: Open Punctuation */
+ SBGeneralCategoryPE = 0x0F, /**< Punctuation: Close Punctuation */
+ SBGeneralCategoryPI = 0x10, /**< Punctuation: Initial Punctuation */
+ SBGeneralCategoryPF = 0x11, /**< Punctuation: Final Punctuation */
+ SBGeneralCategoryPO = 0x12, /**< Punctuation: Other Punctuation */
+
+ SBGeneralCategorySM = 0x13, /**< Symbol: Math Symbol */
+ SBGeneralCategorySC = 0x14, /**< Symbol: Currency Symbol */
+ SBGeneralCategorySK = 0x15, /**< Symbol: Modifier Symbol */
+ SBGeneralCategorySO = 0x16, /**< Symbol: Other Symbol */
+
+ SBGeneralCategoryZS = 0x17, /**< Separator: Space Separator */
+ SBGeneralCategoryZL = 0x18, /**< Separator: Line Separator */
+ SBGeneralCategoryZP = 0x19, /**< Separator: Paragraph Separator */
+
+ SBGeneralCategoryCC = 0x1A, /**< Other: Control */
+ SBGeneralCategoryCF = 0x1B, /**< Other: Format */
+ SBGeneralCategoryCS = 0x1C, /**< Other: Surrogate */
+ SBGeneralCategoryCO = 0x1D, /**< Other: Private_Use */
+ SBGeneralCategoryCN = 0x1E /**< Other: Unassigned */
+};
+
+/**
+ * A type to represent the general category of a character.
+ */
+typedef SBUInt8 SBGeneralCategory;
+
+/**
+ * Checks whether specified general category is letter.
+ */
+#define SBGeneralCategoryIsLetter(gc) SBUInt8InRange(gc, SBGeneralCategoryLU, SBGeneralCategoryLO)
+
+/**
+ * Checks whether specified general category is mark.
+ */
+#define SBGeneralCategoryIsMark(gc) SBUInt8InRange(gc, SBGeneralCategoryMN, SBGeneralCategoryME)
+
+/**
+ * Checks whether specified general category is number.
+ */
+#define SBGeneralCategoryIsNumber(gc) SBUInt8InRange(gc, SBGeneralCategoryND, SBGeneralCategoryNO)
+
+/**
+ * Checks whether specified general category is punctuation.
+ */
+#define SBGeneralCategoryIsPunctuation(gc) SBUInt8InRange(gc, SBGeneralCategoryPC, SBGeneralCategoryPO)
+
+/**
+ * Checks whether specified general category is symbol.
+ */
+#define SBGeneralCategoryIsSymbol(gc) SBUInt8InRange(gc, SBGeneralCategorySM, SBGeneralCategorySO)
+
+/**
+ * Checks whether specified general category is separator.
+ */
+#define SBGeneralCategoryIsSeparator(gc) SBUInt8InRange(gc, SBGeneralCategoryZS, SBGeneralCategoryZP)
+
+/**
+ * Checks whether specified general category is other.
+ */
+#define SBGeneralCategoryIsOther(gc) SBUInt8InRange(gc, SBGeneralCategoryCC, SBGeneralCategoryCN)
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h
new file mode 100644
index 0000000000..b3f612340c
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBLine.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2014-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_LINE_H
+#define _SB_PUBLIC_LINE_H
+
+#include "SBBase.h"
+#include "SBRun.h"
+
+typedef struct _SBLine *SBLineRef;
+
+/**
+ * Returns the index to the first code unit of the line in source string.
+ *
+ * @param line
+ * The line whose offset is returned.
+ * @return
+ * The offset of the line passed in.
+ */
+SBUInteger SBLineGetOffset(SBLineRef line);
+
+/**
+ * Returns the number of code units coverting the length of the line.
+ *
+ * @param line
+ * The line whose length is returned.
+ * @return
+ * The length of the line passed in.
+ */
+SBUInteger SBLineGetLength(SBLineRef line);
+
+/**
+ * Returns the number of runs in the line.
+ *
+ * @param line
+ * The line whose run count is returned.
+ * @return
+ * The number of runs in the line passed in.
+ */
+SBUInteger SBLineGetRunCount(SBLineRef line);
+
+/**
+ * Returns a direct pointer to the run array, stored in the line.
+ *
+ * @param line
+ * The line from which to access the runs.
+ * @return
+ * A valid pointer to an array of SBRun structures.
+ */
+const SBRun *SBLineGetRunsPtr(SBLineRef line);
+
+/**
+ * Increments the reference count of a line object.
+ *
+ * @param line
+ * The line object whose reference count will be incremented.
+ * @return
+ * The same line object passed in as the parameter.
+ */
+SBLineRef SBLineRetain(SBLineRef line);
+
+/**
+ * Decrements the reference count of a line object. The object will be deallocated when its
+ * reference count reaches zero.
+ *
+ * @param line
+ * The line object whose reference count will be decremented.
+ */
+void SBLineRelease(SBLineRef line);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h
new file mode 100644
index 0000000000..dc3effeabb
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBMirrorLocator.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2014-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_MIRROR_LOCATOR_H
+#define _SB_PUBLIC_MIRROR_LOCATOR_H
+
+#include "SBBase.h"
+#include "SBCodepoint.h"
+#include "SBLine.h"
+
+typedef struct _SBMirrorLocator *SBMirrorLocatorRef;
+
+/**
+ * A structure containing the information about a code point having Bidi_Mirrored property.
+ */
+typedef struct _SBMirrorAgent {
+ SBUInteger index; /**< The absolute index of the code point. */
+ SBCodepoint mirror; /**< The mirrored code point. */
+ SBCodepoint codepoint; /**< The actual code point. */
+} SBMirrorAgent;
+
+/**
+ * Creates a mirror locator object which can be used to find mirrors in a line.
+ *
+ * @return
+ * A reference to a mirror locator object.
+ */
+SBMirrorLocatorRef SBMirrorLocatorCreate(void);
+
+/**
+ * Loads a line in the locator so that its mirror can be located.
+ *
+ * @param locator
+ * The locator in which the line will be loaded.
+ * @param line
+ * The line which will be loaded in the locator.
+ * @param stringBuffer
+ * The string buffer from which the line's algorithm was created.
+ */
+void SBMirrorLocatorLoadLine(SBMirrorLocatorRef locator, SBLineRef line, void *stringBuffer);
+
+/**
+ * Returns the agent containing the information of current located mirror.
+ *
+ * @param locator
+ * The locator whose agent is returned.
+ */
+const SBMirrorAgent *SBMirrorLocatorGetAgent(SBMirrorLocatorRef locator);
+
+/**
+ * Instructs the locator to find next mirror in the loaded line.
+ *
+ * @param locator
+ * The locator whom you want to instruct.
+ * @return
+ * SBTrue if another mirror is available, SBFalse otherwise.
+ * @note
+ * The locator will be reset after locating last mirror.
+ */
+SBBoolean SBMirrorLocatorMoveNext(SBMirrorLocatorRef locator);
+
+/**
+ * Instructs the locator to reset itself so that mirrors of the loaded line can be obatained from
+ * the beginning.
+ *
+ * @param locator
+ * The locator whom you want to reset.
+ */
+void SBMirrorLocatorReset(SBMirrorLocatorRef locator);
+
+/**
+ * Increments the reference count of a mirror locator object.
+ *
+ * @param locator
+ * The mirror locator object whose reference count will be incremented.
+ * @return
+ * The same mirror locator object passed in as the parameter.
+ */
+SBMirrorLocatorRef SBMirrorLocatorRetain(SBMirrorLocatorRef locator);
+
+/**
+ * Decrements the reference count of a mirror locator object. The object will be deallocated when
+ * its reference count reaches zero.
+ *
+ * @param locator
+ * The mirror locator object whose reference count will be decremented.
+ */
+void SBMirrorLocatorRelease(SBMirrorLocatorRef locator);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h
new file mode 100644
index 0000000000..07fe59d458
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBParagraph.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2014-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_PARAGRAPH_H
+#define _SB_PUBLIC_PARAGRAPH_H
+
+#include "SBBase.h"
+#include "SBLine.h"
+
+typedef struct _SBParagraph *SBParagraphRef;
+
+/**
+ * Returns the index to the first code unit of the paragraph in source string.
+ *
+ * @param paragraph
+ * The paragraph whose offset is returned.
+ * @return
+ * The offset of the paragraph passed in.
+ */
+SBUInteger SBParagraphGetOffset(SBParagraphRef paragraph);
+
+/**
+ * Returns the number of code units covering the length of the paragraph.
+ *
+ * @param paragraph
+ * The paragraph whose length is returned.
+ * @return
+ * The length of the paragraph passed in.
+ */
+SBUInteger SBParagraphGetLength(SBParagraphRef paragraph);
+
+/**
+ * Returns the base level of the paragraph.
+ *
+ * @param paragraph
+ * The paragraph whose base level is returned.
+ * @return
+ * The base level of the paragraph passed in.
+ */
+SBLevel SBParagraphGetBaseLevel(SBParagraphRef paragraph);
+
+/**
+ * Returns a direct pointer to the embedding levels, stored in the paragraph.
+ *
+ * @param paragraph
+ * The paragraph from which to access the embedding levels.
+ * @return
+ * A valid pointer to an array of SBLevel structures.
+ */
+const SBLevel *SBParagraphGetLevelsPtr(SBParagraphRef paragraph);
+
+/**
+ * Creates a line object of specified range by applying rules L1-L2 of Unicode Bidirectional
+ * Algorithm.
+ *
+ * @param paragraph
+ * The paragraph that creates the line.
+ * @param lineOffset
+ * The index to the first code unit of the line in source string. It should occur within the
+ * range of paragraph.
+ * @param lineLength
+ * The number of code units covering the length of the line.
+ * @return
+ * A reference to a line object if the call was successful, NULL otherwise.
+ */
+SBLineRef SBParagraphCreateLine(SBParagraphRef paragraph, SBUInteger lineOffset, SBUInteger lineLength);
+
+/**
+ * Increments the reference count of a paragraph object.
+ *
+ * @param paragraph
+ * The paragraph object whose reference count will be incremented.
+ * @return
+ * The same paragraph object passed in as the parameter.
+ */
+SBParagraphRef SBParagraphRetain(SBParagraphRef paragraph);
+
+/**
+ * Decrements the reference count of a paragraph object. The object will be deallocated when its
+ * reference count reaches zero.
+ *
+ * @param paragraph
+ * The paragraph object whose reference count will be decremented.
+ */
+void SBParagraphRelease(SBParagraphRef paragraph);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h
new file mode 100644
index 0000000000..71cbe14c71
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBRun.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2016-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_RUN_H
+#define _SB_PUBLIC_RUN_H
+
+#include "SBBase.h"
+
+/**
+ * A structure containing the information of a sequence of characters having the same embedding
+ * level.
+ */
+typedef struct _SBRun {
+ SBUInteger offset; /**< The index to the first code unit of the run in source string. */
+ SBUInteger length; /**< The number of code units covering the length of the run. */
+ SBLevel level; /**< The embedding level of the run. */
+} SBRun;
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h
new file mode 100644
index 0000000000..0a3ec50c50
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBScript.h
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2018-2021 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_SCRIPT_H
+#define _SB_PUBLIC_SCRIPT_H
+
+#include "SBBase.h"
+
+/**
+ * Constants that specify the script of a character.
+ */
+enum {
+ SBScriptNil = 0x00,
+
+ SBScriptZINH = 0x01, /**< Inherited */
+ SBScriptZYYY = 0x02, /**< Common */
+ SBScriptZZZZ = 0x03, /**< Unknown */
+
+ /* Unicode 1.1 */
+ SBScriptARAB = 0x04, /**< Arabic */
+ SBScriptARMN = 0x05, /**< Armenian */
+ SBScriptBENG = 0x06, /**< Bengali */
+ SBScriptBOPO = 0x07, /**< Bopomofo */
+ SBScriptCYRL = 0x08, /**< Cyrillic */
+ SBScriptDEVA = 0x09, /**< Devanagari */
+ SBScriptGEOR = 0x0A, /**< Georgian */
+ SBScriptGREK = 0x0B, /**< Greek */
+ SBScriptGUJR = 0x0C, /**< Gujarati */
+ SBScriptGURU = 0x0D, /**< Gurmukhi */
+ SBScriptHANG = 0x0E, /**< Hangul */
+ SBScriptHANI = 0x0F, /**< Han */
+ SBScriptHEBR = 0x10, /**< Hebrew */
+ SBScriptHIRA = 0x11, /**< Hiragana */
+ SBScriptKANA = 0x12, /**< Katakana */
+ SBScriptKNDA = 0x13, /**< Kannada */
+ SBScriptLAOO = 0x14, /**< Lao */
+ SBScriptLATN = 0x15, /**< Latin */
+ SBScriptMLYM = 0x16, /**< Malayalam */
+ SBScriptORYA = 0x17, /**< Oriya */
+ SBScriptTAML = 0x18, /**< Tamil */
+ SBScriptTELU = 0x19, /**< Telugu */
+ SBScriptTHAI = 0x1A, /**< Thai */
+
+ /* Unicode 2.0 */
+ SBScriptTIBT = 0x1B, /**< Tibetan */
+
+ /* Unicode 3.0 */
+ SBScriptBRAI = 0x1C, /**< Braille */
+ SBScriptCANS = 0x1D, /**< Canadian_Aboriginal */
+ SBScriptCHER = 0x1E, /**< Cherokee */
+ SBScriptETHI = 0x1F, /**< Ethiopic */
+ SBScriptKHMR = 0x20, /**< Khmer */
+ SBScriptMONG = 0x21, /**< Mongolian */
+ SBScriptMYMR = 0x22, /**< Myanmar */
+ SBScriptOGAM = 0x23, /**< Ogham */
+ SBScriptRUNR = 0x24, /**< Runic */
+ SBScriptSINH = 0x25, /**< Sinhala */
+ SBScriptSYRC = 0x26, /**< Syriac */
+ SBScriptTHAA = 0x27, /**< Thaana */
+ SBScriptYIII = 0x28, /**< Yi */
+
+ /* Unicode 3.1 */
+ SBScriptDSRT = 0x29, /**< Deseret */
+ SBScriptGOTH = 0x2A, /**< Gothic */
+ SBScriptITAL = 0x2B, /**< Old_Italic */
+
+ /* Unicode 3.2 */
+ SBScriptBUHD = 0x2C, /**< Buhid */
+ SBScriptHANO = 0x2D, /**< Hanunoo */
+ SBScriptTAGB = 0x2E, /**< Tagbanwa */
+ SBScriptTGLG = 0x2F, /**< Tagalog */
+
+ /* Unicode 4.0 */
+ SBScriptCPRT = 0x30, /**< Cypriot */
+ SBScriptLIMB = 0x31, /**< Limbu */
+ SBScriptLINB = 0x32, /**< Linear_B */
+ SBScriptOSMA = 0x33, /**< Osmanya */
+ SBScriptSHAW = 0x34, /**< Shavian */
+ SBScriptTALE = 0x35, /**< Tai_Le */
+ SBScriptUGAR = 0x36, /**< Ugaritic */
+
+ /* Unicode 4.1 */
+ SBScriptBUGI = 0x37, /**< Buginese */
+ SBScriptCOPT = 0x38, /**< Coptic */
+ SBScriptGLAG = 0x39, /**< Glagolitic */
+ SBScriptKHAR = 0x3A, /**< Kharoshthi */
+ SBScriptSYLO = 0x3B, /**< Syloti_Nagri */
+ SBScriptTALU = 0x3C, /**< New_Tai_Lue */
+ SBScriptTFNG = 0x3D, /**< Tifinagh */
+ SBScriptXPEO = 0x3E, /**< Old_Persian */
+
+ /* Unicode 5.0 */
+ SBScriptBALI = 0x3F, /**< Balinese */
+ SBScriptNKOO = 0x40, /**< Nko */
+ SBScriptPHAG = 0x41, /**< Phags_Pa */
+ SBScriptPHNX = 0x42, /**< Phoenician */
+ SBScriptXSUX = 0x43, /**< Cuneiform */
+
+ /* Unicode 5.1 */
+ SBScriptCARI = 0x44, /**< Carian */
+ SBScriptCHAM = 0x45, /**< Cham */
+ SBScriptKALI = 0x46, /**< Kayah_Li */
+ SBScriptLEPC = 0x47, /**< Lepcha */
+ SBScriptLYCI = 0x48, /**< Lycian */
+ SBScriptLYDI = 0x49, /**< Lydian */
+ SBScriptOLCK = 0x4A, /**< Ol_Chiki */
+ SBScriptRJNG = 0x4B, /**< Rejang */
+ SBScriptSAUR = 0x4C, /**< Saurashtra */
+ SBScriptSUND = 0x4D, /**< Sundanese */
+ SBScriptVAII = 0x4E, /**< Vai */
+
+ /* Unicode 5.2 */
+ SBScriptARMI = 0x4F, /**< Imperial_Aramaic */
+ SBScriptAVST = 0x50, /**< Avestan */
+ SBScriptBAMU = 0x51, /**< Bamum */
+ SBScriptEGYP = 0x52, /**< Egyptian_Hieroglyphs */
+ SBScriptJAVA = 0x53, /**< Javanese */
+ SBScriptKTHI = 0x54, /**< Kaithi */
+ SBScriptLANA = 0x55, /**< Tai_Tham */
+ SBScriptLISU = 0x56, /**< Lisu */
+ SBScriptMTEI = 0x57, /**< Meetei_Mayek */
+ SBScriptORKH = 0x58, /**< Old_Turkic */
+ SBScriptPHLI = 0x59, /**< Inscriptional_Pahlavi */
+ SBScriptPRTI = 0x5A, /**< Inscriptional_Parthian */
+ SBScriptSAMR = 0x5B, /**< Samaritan */
+ SBScriptSARB = 0x5C, /**< Old_South_Arabian */
+ SBScriptTAVT = 0x5D, /**< Tai_Viet */
+
+ /* Unicode 6.0 */
+ SBScriptBATK = 0x5E, /**< Batak */
+ SBScriptBRAH = 0x5F, /**< Brahmi */
+ SBScriptMAND = 0x60, /**< Mandaic */
+
+ /* Unicode 6.1 */
+ SBScriptCAKM = 0x61, /**< Chakma */
+ SBScriptMERC = 0x62, /**< Meroitic_Cursive */
+ SBScriptMERO = 0x63, /**< Meroitic_Hieroglyphs */
+ SBScriptPLRD = 0x64, /**< Miao */
+ SBScriptSHRD = 0x65, /**< Sharada */
+ SBScriptSORA = 0x66, /**< Sora_Sompeng */
+ SBScriptTAKR = 0x67, /**< Takri */
+
+ /* Unicode 7.0 */
+ SBScriptAGHB = 0x68, /**< Caucasian_Albanian */
+ SBScriptBASS = 0x69, /**< Bassa_Vah */
+ SBScriptDUPL = 0x6A, /**< Duployan */
+ SBScriptELBA = 0x6B, /**< Elbasan */
+ SBScriptGRAN = 0x6C, /**< Grantha */
+ SBScriptHMNG = 0x6D, /**< Pahawh_Hmong */
+ SBScriptKHOJ = 0x6E, /**< Khojki */
+ SBScriptLINA = 0x6F, /**< Linear_A */
+ SBScriptMAHJ = 0x70, /**< Mahajani */
+ SBScriptMANI = 0x71, /**< Manichaean */
+ SBScriptMEND = 0x72, /**< Mende_Kikakui */
+ SBScriptMODI = 0x73, /**< Modi */
+ SBScriptMROO = 0x74, /**< Mro */
+ SBScriptNARB = 0x75, /**< Old_North_Arabian */
+ SBScriptNBAT = 0x76, /**< Nabataean */
+ SBScriptPALM = 0x77, /**< Palmyrene */
+ SBScriptPAUC = 0x78, /**< Pau_Cin_Hau */
+ SBScriptPERM = 0x79, /**< Old_Permic */
+ SBScriptPHLP = 0x7A, /**< Psalter_Pahlavi */
+ SBScriptSIDD = 0x7B, /**< Siddham */
+ SBScriptSIND = 0x7C, /**< Khudawadi */
+ SBScriptTIRH = 0x7D, /**< Tirhuta */
+ SBScriptWARA = 0x7E, /**< Warang_Citi */
+
+ /* Unicode 8.0 */
+ SBScriptAHOM = 0x7F, /**< Ahom */
+ SBScriptHATR = 0x80, /**< Hatran */
+ SBScriptHLUW = 0x81, /**< Anatolian_Hieroglyphs */
+ SBScriptHUNG = 0x82, /**< Old_Hungarian */
+ SBScriptMULT = 0x83, /**< Multani */
+ SBScriptSGNW = 0x84, /**< SignWriting */
+
+ /* Unicode 9.0 */
+ SBScriptADLM = 0x85, /**< Adlam */
+ SBScriptBHKS = 0x86, /**< Bhaiksuki */
+ SBScriptMARC = 0x87, /**< Marchen */
+ SBScriptNEWA = 0x88, /**< Newa */
+ SBScriptOSGE = 0x89, /**< Osage */
+ SBScriptTANG = 0x8A, /**< Tangut */
+
+ /* Unicode 10.0 */
+ SBScriptGONM = 0x8B, /**< Masaram_Gondi */
+ SBScriptNSHU = 0x8C, /**< Nushu */
+ SBScriptSOYO = 0x8D, /**< Soyombo */
+ SBScriptZANB = 0x8E, /**< Zanabazar_Square */
+
+ /* Unicode 11.0 */
+ SBScriptDOGR = 0x8F, /**< Dogra */
+ SBScriptGONG = 0x90, /**< Gunjala_Gondi */
+ SBScriptMAKA = 0x91, /**< Makasar */
+ SBScriptMEDF = 0x92, /**< Medefaidrin */
+ SBScriptROHG = 0x93, /**< Hanifi_Rohingya */
+ SBScriptSOGD = 0x94, /**< Sogdian */
+ SBScriptSOGO = 0x95, /**< Old_Sogdian */
+
+ /* Unicode 12.0 */
+ SBScriptELYM = 0x96, /**< Elymaic */
+ SBScriptHMNP = 0x97, /**< Nyiakeng_Puachue_Hmong */
+ SBScriptNAND = 0x98, /**< Nandinagari */
+ SBScriptWCHO = 0x99, /**< Wancho */
+
+ /* Unicde 13.0 */
+ SBScriptCHRS = 0x9A, /**< Chorasmian */
+ SBScriptDIAK = 0x9B, /**< Dives_Akuru */
+ SBScriptKITS = 0x9C, /**< Khitan_Small_Script */
+ SBScriptYEZI = 0x9D, /**< Yezidi */
+
+ /* Unicde 14.0 */
+ SBScriptCPMN = 0x9E, /**< Cypro_Minoan */
+ SBScriptOUGR = 0x9F, /**< Old_Uyghur */
+ SBScriptTNSA = 0xA0, /**< Tangsa */
+ SBScriptTOTO = 0xA1, /**< Toto */
+ SBScriptVITH = 0xA2, /**< Vithkuqi */
+
+ /* Unicde 15.1 */
+ SBScriptKAWI = 0xA3, /**< Kawi */
+ SBScriptNAGM = 0xA4 /**< Nag_Mundari */
+};
+
+/**
+ * A type to represent the script of a character.
+ */
+typedef SBUInt8 SBScript;
+
+/**
+ * Returns the OpenType tag of a script as UInt32 in big endian byte order. The association between
+ * Unicode Script property and OpenType script tags is taken from the specification:
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags.
+ *
+ * If more than one tag is associated with a script, then the latest one is retured. For example,
+ * Devanagari script has two tags, `deva` and `dev2`. So in this case, `dev2` will be returned.
+ *
+ * If no tag is associated with a script, then `DFLT` is returned.
+ *
+ * @param script
+ * The script whose OpenType tag is returned.
+ * @return
+ * The OpenType tag of specified script as UInt32 in big endian byte order.
+ */
+SBUInt32 SBScriptGetOpenTypeTag(SBScript script);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h
new file mode 100644
index 0000000000..cad4afbb2e
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SBScriptLocator.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_PUBLIC_SCRIPT_LOCATOR_H
+#define _SB_PUBLIC_SCRIPT_LOCATOR_H
+
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+#include "SBScript.h"
+
+typedef struct _SBScriptLocator *SBScriptLocatorRef;
+
+/**
+ * A structure containing the information about a run of code points having same script.
+ */
+typedef struct _SBScriptAgent {
+ SBUInteger offset; /**< The index to the first code unit of the run in source string. */
+ SBUInteger length; /**< The number of code units covering the length of the run. */
+ SBScript script; /**< The script of the run. */
+} SBScriptAgent;
+
+/**
+ * Creates a script locator object which can be used to find script runs in a string.
+ *
+ * @return
+ * A reference to a script locator object.
+ */
+SBScriptLocatorRef SBScriptLocatorCreate(void);
+
+/**
+ * Loads a code point sequence in the locator so that its script runs can be located.
+ *
+ * @param locator
+ * The locator in which the code point sequence will be loaded.
+ * @param codepointSequence
+ * The code point sequence which will be loaded in the locator.
+ */
+void SBScriptLocatorLoadCodepoints(SBScriptLocatorRef locator, const SBCodepointSequence *codepointSequence);
+
+/**
+ * Returns the agent containing the information of current located script run.
+ *
+ * @param locator
+ * The locator whose agent is returned.
+ */
+const SBScriptAgent *SBScriptLocatorGetAgent(SBScriptLocatorRef locator);
+
+/**
+ * Instructs the locator to find next script run in the loaded code point sequence.
+ *
+ * @param locator
+ * The locator whom you want to instruct.
+ * @return
+ * SBTrue if another script run is available, SBFalse otherwise.
+ * @note
+ * The locator will be reset after locating last script run.
+ */
+SBBoolean SBScriptLocatorMoveNext(SBScriptLocatorRef locator);
+
+/**
+ * Instructs the locator to reset itself so that script runs of the loaded line can be obatained
+ * from the beginning.
+ *
+ * @param locator
+ * The locator whom you want to reset.
+ */
+void SBScriptLocatorReset(SBScriptLocatorRef locator);
+
+/**
+ * Increments the reference count of a script locator object.
+ *
+ * @param locator
+ * The script locator object whose reference count will be incremented.
+ * @return
+ * The same script locator object passed in as the parameter.
+ */
+SBScriptLocatorRef SBScriptLocatorRetain(SBScriptLocatorRef locator);
+
+/**
+ * Decrements the reference count of a script locator object. The object will be deallocated when
+ * its reference count reaches zero.
+ *
+ * @param locator
+ * The script locator object whose reference count will be decremented.
+ */
+void SBScriptLocatorRelease(SBScriptLocatorRef locator);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h b/modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h
new file mode 100644
index 0000000000..96cdd9f073
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Headers/SheenBidi.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2014-2018 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SHEEN_BIDI_H
+#define _SHEEN_BIDI_H
+
+#include "SBAlgorithm.h"
+#include "SBBase.h"
+#include "SBBidiType.h"
+#include "SBCodepoint.h"
+#include "SBCodepointSequence.h"
+#include "SBGeneralCategory.h"
+#include "SBLine.h"
+#include "SBMirrorLocator.h"
+#include "SBParagraph.h"
+#include "SBRun.h"
+#include "SBScript.h"
+#include "SBScriptLocator.h"
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/LICENSE b/modules/juce_graphics/unicode/sheenbidi/LICENSE
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c b/modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c
new file mode 100644
index 0000000000..0f80d6b16b
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+
+#include "SBBase.h"
+#include "BidiChain.h"
+
+SB_INTERNAL void BidiChainInitialize(BidiChainRef chain,
+ SBBidiType *types, SBLevel *levels, BidiLink *links)
+{
+ chain->types = types;
+ chain->levels = levels;
+ chain->links = links;
+ chain->roller = 0;
+ chain->last = 0;
+
+ /* Make first link empty. */
+ chain->types[0] = SBBidiTypeNil;
+ chain->levels[0] = SBLevelInvalid;
+ chain->links[0] = BidiLinkNone;
+}
+
+SB_INTERNAL void BidiChainAdd(BidiChainRef chain, SBBidiType type, SBUInteger length)
+{
+ BidiLink last = chain->last;
+ BidiLink current = last + (SBUInt32)length;
+
+ chain->types[current] = type;
+ chain->links[current] = chain->roller;
+
+ chain->links[last] = current;
+ chain->last = current;
+}
+
+SB_INTERNAL SBBoolean BidiChainIsSingle(BidiChainRef chain, BidiLink link)
+{
+ BidiLink next = chain->links[link];
+
+ /* Check the type of in between code units. */
+ while (++link != next) {
+ if (chain->types[link] != SBBidiTypeBN) {
+ return SBFalse;
+ }
+ }
+
+ return SBTrue;
+}
+
+SB_INTERNAL SBBidiType BidiChainGetType(BidiChainRef chain, BidiLink link)
+{
+ return chain->types[link];
+}
+
+SB_INTERNAL void BidiChainSetType(BidiChainRef chain, BidiLink link, SBBidiType type)
+{
+ chain->types[link] = type;
+}
+
+SB_INTERNAL SBLevel BidiChainGetLevel(BidiChainRef chain, BidiLink link)
+{
+ return chain->levels[link];
+}
+
+SB_INTERNAL void BidiChainSetLevel(BidiChainRef chain, BidiLink link, SBLevel level)
+{
+ chain->levels[link] = level;
+}
+
+SB_INTERNAL BidiLink BidiChainGetNext(BidiChainRef chain, BidiLink link)
+{
+ return chain->links[link];
+}
+
+SB_INTERNAL void BidiChainSetNext(BidiChainRef chain, BidiLink link, BidiLink next)
+{
+ chain->links[link] = next;
+}
+
+SB_INTERNAL void BidiChainAbandonNext(BidiChainRef chain, BidiLink link)
+{
+ BidiLink next = chain->links[link];
+ BidiLink limit = chain->links[next];
+
+ chain->links[link] = limit;
+}
+
+SB_INTERNAL SBBoolean BidiChainMergeIfEqual(BidiChainRef chain, BidiLink first, BidiLink second)
+{
+ if (chain->types[first] == chain->types[second]
+ && chain->levels[first] == chain->levels[second]) {
+ chain->links[first] = chain->links[second];
+ return SBTrue;
+ }
+
+ return SBFalse;
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h b/modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h
new file mode 100644
index 0000000000..4b378c3350
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BidiChain.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_BIDI_CHAIN_H
+#define _SB_INTERNAL_BIDI_CHAIN_H
+
+#include
+#include "SBBase.h"
+
+typedef SBUInt32 BidiLink;
+
+#define BidiLinkNone (SBUInt32)(-1)
+
+typedef struct _BidiChain {
+ SBBidiType *types;
+ SBLevel *levels;
+ BidiLink *links;
+ BidiLink roller;
+ BidiLink last;
+} BidiChain, *BidiChainRef;
+
+SB_INTERNAL void BidiChainInitialize(BidiChainRef chain,
+ SBBidiType *types, SBLevel *levels, BidiLink *links);
+SB_INTERNAL void BidiChainAdd(BidiChainRef chain, SBBidiType type, SBUInteger length);
+
+#define BidiChainGetOffset(chain, link) \
+( \
+ (link) - 1 \
+)
+
+SB_INTERNAL SBBoolean BidiChainIsSingle(BidiChainRef chain, BidiLink link);
+
+SB_INTERNAL SBBidiType BidiChainGetType(BidiChainRef chain, BidiLink link);
+SB_INTERNAL void BidiChainSetType(BidiChainRef chain, BidiLink link, SBBidiType type);
+
+SB_INTERNAL SBLevel BidiChainGetLevel(BidiChainRef chain, BidiLink link);
+SB_INTERNAL void BidiChainSetLevel(BidiChainRef chain, BidiLink link, SBLevel level);
+
+SB_INTERNAL BidiLink BidiChainGetNext(BidiChainRef chain, BidiLink link);
+SB_INTERNAL void BidiChainSetNext(BidiChainRef chain, BidiLink link, BidiLink next);
+SB_INTERNAL void BidiChainAbandonNext(BidiChainRef chain, BidiLink link);
+SB_INTERNAL SBBoolean BidiChainMergeIfEqual(BidiChainRef chain, BidiLink first, BidiLink second);
+
+#define BidiChainForEach(chain, roller, link) \
+ for (link = chain->links[roller]; link != roller; link = chain->links[link])
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c b/modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c
new file mode 100644
index 0000000000..bb71f7c682
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.c
@@ -0,0 +1,1153 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ *
+ * REQUIRED MEMORY: 5392+(2816*2)+(1088*2) = 13200 Bytes
+ */
+
+#include "BidiTypeLookup.h"
+
+#define AL SBBidiTypeAL
+#define AN SBBidiTypeAN
+#define B SBBidiTypeB
+#define BN SBBidiTypeBN
+#define CS SBBidiTypeCS
+#define EN SBBidiTypeEN
+#define ES SBBidiTypeES
+#define ET SBBidiTypeET
+#define FSI SBBidiTypeFSI
+#define L SBBidiTypeL
+#define LRE SBBidiTypeLRE
+#define LRI SBBidiTypeLRI
+#define LRO SBBidiTypeLRO
+#define NSM SBBidiTypeNSM
+#define ON SBBidiTypeON
+#define PDF SBBidiTypePDF
+#define PDI SBBidiTypePDI
+#define R SBBidiTypeR
+#define RLE SBBidiTypeRLE
+#define RLI SBBidiTypeRLI
+#define RLO SBBidiTypeRLO
+#define S SBBidiTypeS
+#define WS SBBidiTypeWS
+
+static const SBUInt8 PrimaryBidiTypeData[5392] = {
+/* DATA_BLOCK: -- 0x0000..0x000F -- */
+ BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,
+/* DATA_BLOCK: -- 0x0010..0x001F -- */
+ BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,
+/* DATA_BLOCK: -- 0x0020..0x002F -- */
+ WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,
+/* DATA_BLOCK: -- 0x0030..0x003F -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0040..0x004F -- */
+ ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0050..0x005F -- */
+ L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0060..0x006F -- */
+ L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,
+/* DATA_BLOCK: -- 0x0070..0x007F -- */
+ BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+/* DATA_BLOCK: -- 0x0080..0x008F -- */
+ BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+/* DATA_BLOCK: -- 0x0090..0x009F -- */
+ CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,
+/* DATA_BLOCK: -- 0x00A0..0x00AF -- */
+ ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x00B0..0x00BF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x00C0..0x00CF -- */
+ L, L, L, L, L, L, L, ON, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x00D0..0x00DF -- */
+ L, L, L, L, L, L, L, L, L, ON, ON, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x00E0..0x00EF -- */
+ L, L, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x00F0..0x00FF -- */
+ L, L, L, L, L, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, ON,
+/* DATA_BLOCK: -- 0x0100..0x010F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0110..0x011F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0120..0x012F -- */
+ L, L, L, L, ON, ON, L, L, L, L, L, L, L, L, ON, L,
+/* DATA_BLOCK: -- 0x0130..0x013F -- */
+ L, L, L, L, ON, ON, L, ON, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0140..0x014F -- */
+ L, L, L, L, L, L, ON, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0150..0x015F -- */
+ L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0160..0x016F -- */
+ L, L, L, L, L, L, L, L, L, L, ON, L, L, ON, ON, ET,
+/* DATA_BLOCK: -- 0x0170..0x017F -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0180..0x018F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, R, NSM,
+/* DATA_BLOCK: -- 0x0190..0x019F -- */
+ R, NSM, NSM, R, NSM, NSM, R, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x01A0..0x01AF -- */
+ R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x01B0..0x01BF -- */
+ R, R, R, R, R, R, R, R, R, R, R, L, L, L, L, R,
+/* DATA_BLOCK: -- 0x01C0..0x01CF -- */
+ R, R, R, R, R, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x01D0..0x01DF -- */
+ AN, AN, AN, AN, AN, AN, ON, ON, AL, ET, ET, AL, CS, AL, ON, ON,
+/* DATA_BLOCK: -- 0x01E0..0x01EF -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x01F0..0x01FF -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0200..0x020F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0210..0x021F -- */
+ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, ET, AN, AN, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0220..0x022F -- */
+ NSM, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0230..0x023F -- */
+ AL, AL, AL, AL, AL, AL, NSM, NSM, NSM, NSM, NSM, NSM, NSM, AN, ON, NSM,
+/* DATA_BLOCK: -- 0x0240..0x024F -- */
+ NSM, NSM, NSM, NSM, NSM, AL, AL, NSM, NSM, ON, NSM, NSM, NSM, NSM, AL, AL,
+/* DATA_BLOCK: -- 0x0250..0x025F -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0260..0x026F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, AL,
+/* DATA_BLOCK: -- 0x0270..0x027F -- */
+ AL, NSM, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0280..0x028F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0290..0x029F -- */
+ AL, AL, AL, AL, AL, AL, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x02A0..0x02AF -- */
+ NSM, AL, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x02B0..0x02BF -- */
+ R, R, R, R, R, R, R, R, R, R, R, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x02C0..0x02CF -- */
+ NSM, NSM, NSM, NSM, R, R, ON, ON, ON, ON, R, L, L, NSM, R, R,
+/* DATA_BLOCK: -- 0x02D0..0x02DF -- */
+ R, R, R, R, R, R, NSM, NSM, NSM, NSM, R, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x02E0..0x02EF -- */
+ NSM, NSM, NSM, NSM, R, NSM, NSM, NSM, R, NSM, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x02F0..0x02FF -- */
+ R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, L,
+/* DATA_BLOCK: -- 0x0300..0x030F -- */
+ R, R, R, R, R, R, R, R, R, NSM, NSM, NSM, L, L, R, L,
+/* DATA_BLOCK: -- 0x0310..0x031F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0320..0x032F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L,
+/* DATA_BLOCK: -- 0x0330..0x033F -- */
+ AN, AN, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0340..0x034F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0350..0x035F -- */
+ NSM, NSM, AN, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0360..0x036F -- */
+ NSM, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0370..0x037F -- */
+ L, L, L, L, L, L, L, L, L, L, NSM, L, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0380..0x038F -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x0390..0x039F -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x03A0..0x03AF -- */
+ L, L, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x03B0..0x03BF -- */
+ L, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x03C0..0x03CF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x03D0..0x03DF -- */
+ L, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x03E0..0x03EF -- */
+ L, L, ET, ET, L, L, L, L, L, L, L, ET, L, L, NSM, L,
+/* DATA_BLOCK: -- 0x03F0..0x03FF -- */
+ L, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0400..0x040F -- */
+ L, NSM, NSM, L, L, L, L, NSM, NSM, L, L, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x0410..0x041F -- */
+ NSM, NSM, L, L, L, NSM, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0420..0x042F -- */
+ L, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x0430..0x043F -- */
+ L, ET, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0440..0x044F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, NSM, L, L, NSM,
+/* DATA_BLOCK: -- 0x0450..0x045F -- */
+ L, L, L, L, L, NSM, NSM, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0460..0x046F -- */
+ L, L, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0470..0x047F -- */
+ NSM, L, L, L, L, L, L, L, L, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x0480..0x048F -- */
+ L, L, L, ON, ON, ON, ON, ON, ON, ET, ON, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0490..0x049F -- */
+ NSM, L, L, L, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x04A0..0x04AF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, NSM, L, NSM, NSM,
+/* DATA_BLOCK: -- 0x04B0..0x04BF -- */
+ NSM, L, L, L, L, L, NSM, NSM, NSM, L, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x04C0..0x04CF -- */
+ L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, ON, L,
+/* DATA_BLOCK: -- 0x04D0..0x04DF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x04E0..0x04EF -- */
+ NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x04F0..0x04FF -- */
+ L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0500..0x050F -- */
+ L, L, L, L, L, L, L, L, L, L, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0510..0x051F -- */
+ L, L, NSM, NSM, NSM, L, NSM, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0520..0x052F -- */
+ L, NSM, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, ET,
+/* DATA_BLOCK: -- 0x0530..0x053F -- */
+ L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x0540..0x054F -- */
+ L, NSM, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0550..0x055F -- */
+ L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x0560..0x056F -- */
+ L, L, L, L, L, L, L, L, NSM, NSM, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0570..0x057F -- */
+ L, L, L, L, L, NSM, L, NSM, L, NSM, ON, ON, ON, ON, L, L,
+/* DATA_BLOCK: -- 0x0580..0x058F -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x0590..0x059F -- */
+ NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, L, L, L, L, L, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x05A0..0x05AF -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x05B0..0x05BF -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x05C0..0x05CF -- */
+ L, L, L, L, L, L, NSM, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x05D0..0x05DF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x05E0..0x05EF -- */
+ NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, L, L, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x05F0..0x05FF -- */
+ L, L, L, L, L, L, L, L, NSM, NSM, L, L, L, L, NSM, NSM,
+/* DATA_BLOCK: -- 0x0600..0x060F -- */
+ NSM, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0610..0x061F -- */
+ L, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0620..0x062F -- */
+ L, L, NSM, L, L, NSM, NSM, L, L, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x0630..0x063F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x0640..0x064F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0650..0x065F -- */
+ WS, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0660..0x066F -- */
+ L, L, L, L, L, L, L, L, L, L, L, ON, ON, L, L, L,
+/* DATA_BLOCK: -- 0x0670..0x067F -- */
+ L, L, NSM, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0680..0x068F -- */
+ L, L, L, L, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x0690..0x069F -- */
+ L, L, L, L, L, L, NSM, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x06A0..0x06AF -- */
+ NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, ET, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x06B0..0x06BF -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, NSM, NSM, NSM, BN, NSM,
+/* DATA_BLOCK: -- 0x06C0..0x06CF -- */
+ L, L, L, L, L, L, L, L, L, NSM, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x06D0..0x06DF -- */
+ NSM, NSM, NSM, L, L, L, L, NSM, NSM, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x06E0..0x06EF -- */
+ L, L, NSM, L, L, L, L, L, L, NSM, NSM, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x06F0..0x06FF -- */
+ ON, L, L, L, ON, ON, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0700..0x070F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON,
+/* DATA_BLOCK: -- 0x0710..0x071F -- */
+ L, L, L, L, L, L, L, NSM, NSM, L, L, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x0720..0x072F -- */
+ L, L, L, L, L, L, NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x0730..0x073F -- */
+ NSM, L, NSM, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0740..0x074F -- */
+ L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM,
+/* DATA_BLOCK: -- 0x0750..0x075F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x0760..0x076F -- */
+ NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0770..0x077F -- */
+ L, L, L, L, NSM, L, NSM, NSM, NSM, NSM, NSM, L, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0780..0x078F -- */
+ L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0790..0x079F -- */
+ L, L, NSM, NSM, NSM, NSM, L, L, NSM, NSM, L, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x07A0..0x07AF -- */
+ L, L, L, L, L, L, NSM, L, NSM, NSM, L, L, L, NSM, L, NSM,
+/* DATA_BLOCK: -- 0x07B0..0x07BF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x07C0..0x07CF -- */
+ NSM, NSM, NSM, NSM, L, L, NSM, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x07D0..0x07DF -- */
+ NSM, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x07E0..0x07EF -- */
+ NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x07F0..0x07FF -- */
+ L, L, L, L, NSM, L, L, L, NSM, NSM, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0800..0x080F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, ON, L, ON,
+/* DATA_BLOCK: -- 0x0810..0x081F -- */
+ ON, ON, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0820..0x082F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0830..0x083F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, L,
+/* DATA_BLOCK: -- 0x0840..0x084F -- */
+ WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,
+/* DATA_BLOCK: -- 0x0850..0x085F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,
+/* DATA_BLOCK: -- 0x0860..0x086F -- */
+ ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0870..0x087F -- */
+ ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0880..0x088F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS,
+/* DATA_BLOCK: -- 0x0890..0x089F -- */
+ BN, BN, BN, BN, BN, BN, LRI, RLI, FSI, PDI, BN, BN, BN, BN, BN, BN,
+/* DATA_BLOCK: -- 0x08A0..0x08AF -- */
+ EN, L, L, L, EN, EN, EN, EN, EN, EN, ES, ES, ON, ON, ON, L,
+/* DATA_BLOCK: -- 0x08B0..0x08BF -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, ES, ES, ON, ON, ON, L,
+/* DATA_BLOCK: -- 0x08C0..0x08CF -- */
+ ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET,
+/* DATA_BLOCK: -- 0x08D0..0x08DF -- */
+ ET, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x08E0..0x08EF -- */
+ ON, ON, L, ON, ON, ON, ON, L, ON, ON, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x08F0..0x08FF -- */
+ L, L, L, L, ON, L, ON, ON, ON, L, L, L, L, L, ON, ON,
+/* DATA_BLOCK: -- 0x0900..0x090F -- */
+ ON, ON, ON, ON, L, ON, L, ON, L, ON, L, L, L, L, ET, L,
+/* DATA_BLOCK: -- 0x0910..0x091F -- */
+ L, L, L, L, L, L, L, L, L, L, ON, ON, L, L, L, L,
+/* DATA_BLOCK: -- 0x0920..0x092F -- */
+ ON, ON, ON, ON, ON, L, L, L, L, L, ON, ON, ON, ON, L, L,
+/* DATA_BLOCK: -- 0x0930..0x093F -- */
+ L, L, L, L, L, L, L, L, L, ON, ON, ON, L, L, L, L,
+/* DATA_BLOCK: -- 0x0940..0x094F -- */
+ ON, ON, ES, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0950..0x095F -- */
+ ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0960..0x096F -- */
+ ON, ON, ON, ON, ON, L, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0970..0x097F -- */
+ ON, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0980..0x098F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0990..0x099F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, EN, EN, EN, EN, EN, EN, EN, EN,
+/* DATA_BLOCK: -- 0x09A0..0x09AF -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, L, L, L, L,
+/* DATA_BLOCK: -- 0x09B0..0x09BF -- */
+ L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x09C0..0x09CF -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, ON, ON, ON,
+/* DATA_BLOCK: -- 0x09D0..0x09DF -- */
+ ON, ON, ON, ON, L, L, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x09E0..0x09EF -- */
+ ON, ON, ON, ON, ON, ON, L, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x09F0..0x09FF -- */
+ L, L, L, L, L, ON, ON, ON, ON, ON, ON, L, L, L, L, NSM,
+/* DATA_BLOCK: -- 0x0A00..0x0A0F -- */
+ NSM, NSM, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0A10..0x0A1F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, NSM,
+/* DATA_BLOCK: -- 0x0A20..0x0A2F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, L,
+/* DATA_BLOCK: -- 0x0A30..0x0A3F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0A40..0x0A4F -- */
+ ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0A50..0x0A5F -- */
+ WS, ON, ON, ON, ON, L, L, L, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0A60..0x0A6F -- */
+ ON, L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x0A70..0x0A7F -- */
+ ON, L, L, L, L, L, ON, ON, L, L, L, L, L, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0A80..0x0A8F -- */
+ L, L, L, L, L, L, L, L, L, NSM, NSM, ON, ON, L, L, L,
+/* DATA_BLOCK: -- 0x0A90..0x0A9F -- */
+ L, L, L, L, L, L, L, L, L, L, L, ON, L, L, L, L,
+/* DATA_BLOCK: -- 0x0AA0..0x0AAF -- */
+ ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, ON,
+/* DATA_BLOCK: -- 0x0AB0..0x0ABF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, L,
+/* DATA_BLOCK: -- 0x0AC0..0x0ACF -- */
+ L, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0AD0..0x0ADF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0AE0..0x0AEF -- */
+ L, L, L, L, L, L, L, ON, ON, ON, ON, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0AF0..0x0AFF -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON,
+/* DATA_BLOCK: -- 0x0B00..0x0B0F -- */
+ NSM, NSM, NSM, ON, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, ON, ON,
+/* DATA_BLOCK: -- 0x0B10..0x0B1F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, NSM, NSM,
+/* DATA_BLOCK: -- 0x0B20..0x0B2F -- */
+ ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0B30..0x0B3F -- */
+ L, L, L, L, L, L, L, L, ON, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0B40..0x0B4F -- */
+ L, L, NSM, L, L, L, NSM, L, L, L, L, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x0B50..0x0B5F -- */
+ L, L, L, L, L, NSM, NSM, L, ON, ON, ON, ON, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0B60..0x0B6F -- */
+ L, L, L, L, L, L, L, L, ET, ET, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0B70..0x0B7F -- */
+ L, L, L, L, ON, ON, ON, ON, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0B80..0x0B8F -- */
+ L, L, L, L, NSM, NSM, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0B90..0x0B9F -- */
+ NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L, NSM,
+/* DATA_BLOCK: -- 0x0BA0..0x0BAF -- */
+ L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x0BB0..0x0BBF -- */
+ L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0BC0..0x0BCF -- */
+ L, L, L, NSM, L, L, NSM, NSM, NSM, NSM, L, L, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x0BD0..0x0BDF -- */
+ L, L, L, L, L, NSM, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0BE0..0x0BEF -- */
+ L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x0BF0..0x0BFF -- */
+ L, NSM, NSM, L, L, NSM, NSM, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0C00..0x0C0F -- */
+ L, L, L, NSM, L, L, L, L, L, L, L, L, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x0C10..0x0C1F -- */
+ NSM, L, NSM, NSM, NSM, L, L, NSM, NSM, L, L, L, L, L, NSM, NSM,
+/* DATA_BLOCK: -- 0x0C20..0x0C2F -- */
+ L, L, L, L, L, NSM, L, L, NSM, L, L, L, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x0C30..0x0C3F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, R, NSM, R,
+/* DATA_BLOCK: -- 0x0C40..0x0C4F -- */
+ R, R, R, R, R, R, R, R, R, ES, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0C50..0x0C5F -- */
+ R, R, R, R, R, R, R, L, R, R, R, R, R, L, R, L,
+/* DATA_BLOCK: -- 0x0C60..0x0C6F -- */
+ R, R, L, R, R, L, R, R, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0C70..0x0C7F -- */
+ AL, AL, AL, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0C80..0x0C8F -- */
+ L, L, L, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0C90..0x0C9F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, ON, ON,
+/* DATA_BLOCK: -- 0x0CA0..0x0CAF -- */
+ L, L, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0CB0..0x0CBF -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, L, L, L, L, L, L, L, ON,
+/* DATA_BLOCK: -- 0x0CC0..0x0CCF -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0CD0..0x0CDF -- */
+ CS, ON, CS, L, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ET,
+/* DATA_BLOCK: -- 0x0CE0..0x0CEF -- */
+ ON, ON, ES, ES, ON, ON, ON, L, ON, ET, ET, ON, L, L, L, L,
+/* DATA_BLOCK: -- 0x0CF0..0x0CFF -- */
+ AL, AL, AL, AL, AL, L, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x0D00..0x0D0F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, L, BN,
+/* DATA_BLOCK: -- 0x0D10..0x0D1F -- */
+ L, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,
+/* DATA_BLOCK: -- 0x0D20..0x0D2F -- */
+ ET, ET, ON, ON, ON, ET, ET, L, ON, ON, ON, ON, ON, ON, ON, L,
+/* DATA_BLOCK: -- 0x0D30..0x0D3F -- */
+ BN, BN, BN, BN, BN, BN, BN, BN, BN, ON, ON, ON, ON, ON, BN, BN,
+/* DATA_BLOCK: -- 0x0D40..0x0D4F -- */
+ L, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0D50..0x0D5F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, L, L,
+/* DATA_BLOCK: -- 0x0D60..0x0D6F -- */
+ NSM, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN,
+/* DATA_BLOCK: -- 0x0D70..0x0D7F -- */
+ L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0D80..0x0D8F -- */
+ R, R, R, R, R, R, L, L, R, L, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0D90..0x0D9F -- */
+ R, R, R, R, R, R, L, R, R, L, L, L, R, L, L, R,
+/* DATA_BLOCK: -- 0x0DA0..0x0DAF -- */
+ R, R, R, R, R, R, L, R, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0DB0..0x0DBF -- */
+ L, L, L, L, L, L, L, R, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0DC0..0x0DCF -- */
+ R, R, R, L, R, R, L, L, L, L, L, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0DD0..0x0DDF -- */
+ R, R, R, R, R, R, R, R, R, R, R, R, L, L, L, ON,
+/* DATA_BLOCK: -- 0x0DE0..0x0DEF -- */
+ R, R, R, R, R, R, R, R, R, R, L, L, L, L, L, R,
+/* DATA_BLOCK: -- 0x0DF0..0x0DFF -- */
+ R, R, R, R, R, R, R, R, L, L, L, L, R, R, R, R,
+/* DATA_BLOCK: -- 0x0E00..0x0E0F -- */
+ L, L, R, R, R, R, R, R, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0E10..0x0E1F -- */
+ R, NSM, NSM, NSM, L, NSM, NSM, L, L, L, L, L, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0E20..0x0E2F -- */
+ R, R, R, R, L, R, R, R, L, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0E30..0x0E3F -- */
+ R, R, R, R, R, R, L, L, NSM, NSM, NSM, L, L, L, L, NSM,
+/* DATA_BLOCK: -- 0x0E40..0x0E4F -- */
+ R, R, R, R, R, R, R, R, R, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0E50..0x0E5F -- */
+ R, R, R, R, R, NSM, NSM, L, L, L, L, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0E60..0x0E6F -- */
+ R, R, R, R, R, R, R, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0E70..0x0E7F -- */
+ R, R, R, R, R, R, L, L, L, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x0E80..0x0E8F -- */
+ R, R, R, R, R, R, L, L, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0E90..0x0E9F -- */
+ R, R, R, L, L, L, L, L, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0EA0..0x0EAF -- */
+ R, R, L, L, L, L, L, L, L, R, R, R, R, L, L, L,
+/* DATA_BLOCK: -- 0x0EB0..0x0EBF -- */
+ L, L, L, L, L, L, L, L, L, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0EC0..0x0ECF -- */
+ R, R, R, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0ED0..0x0EDF -- */
+ R, R, R, L, L, L, L, L, L, L, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x0EE0..0x0EEF -- */
+ AL, AL, AL, AL, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0EF0..0x0EFF -- */
+ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0F00..0x0F0F -- */
+ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN,
+/* DATA_BLOCK: -- 0x0F10..0x0F1F -- */
+ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, L,
+/* DATA_BLOCK: -- 0x0F20..0x0F2F -- */
+ R, R, R, R, R, R, R, R, R, R, L, NSM, NSM, R, L, L,
+/* DATA_BLOCK: -- 0x0F30..0x0F3F -- */
+ R, R, L, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0F40..0x0F4F -- */
+ R, R, R, R, R, R, R, R, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0F50..0x0F5F -- */
+ NSM, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0F60..0x0F6F -- */
+ R, R, NSM, NSM, NSM, NSM, R, R, R, R, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0F70..0x0F7F -- */
+ R, R, R, R, R, R, R, R, R, R, R, R, L, L, L, L,
+/* DATA_BLOCK: -- 0x0F80..0x0F8F -- */
+ L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0F90..0x0F9F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0FA0..0x0FAF -- */
+ NSM, L, L, NSM, NSM, L, L, L, L, L, L, L, L, L, L, NSM,
+/* DATA_BLOCK: -- 0x0FB0..0x0FBF -- */
+ L, L, L, NSM, NSM, NSM, NSM, L, L, NSM, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0FC0..0x0FCF -- */
+ L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x0FD0..0x0FDF -- */
+ NSM, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0FE0..0x0FEF -- */
+ L, L, L, NSM, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x0FF0..0x0FFF -- */
+ L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x1000..0x100F -- */
+ L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, L, L, NSM,
+/* DATA_BLOCK: -- 0x1010..0x101F -- */
+ NSM, NSM, L, L, NSM, L, NSM, NSM, L, L, L, L, L, L, NSM, L,
+/* DATA_BLOCK: -- 0x1020..0x102F -- */
+ L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1030..0x103F -- */
+ L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L,
+/* DATA_BLOCK: -- 0x1040..0x104F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, NSM, L,
+/* DATA_BLOCK: -- 0x1050..0x105F -- */
+ L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, L, L, L, L, NSM,
+/* DATA_BLOCK: -- 0x1060..0x106F -- */
+ NSM, L, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1070..0x107F -- */
+ L, L, NSM, NSM, NSM, NSM, L, L, L, L, L, L, NSM, NSM, L, NSM,
+/* DATA_BLOCK: -- 0x1080..0x108F -- */
+ L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM, L, NSM,
+/* DATA_BLOCK: -- 0x1090..0x109F -- */
+ L, L, L, L, L, L, L, L, L, L, L, NSM, L, NSM, L, L,
+/* DATA_BLOCK: -- 0x10A0..0x10AF -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x10B0..0x10BF -- */
+ L, L, NSM, NSM, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x10C0..0x10CF -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x10D0..0x10DF -- */
+ L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, L, NSM, L,
+/* DATA_BLOCK: -- 0x10E0..0x10EF -- */
+ L, L, L, L, NSM, NSM, NSM, NSM, L, L, NSM, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x10F0..0x10FF -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1100..0x110F -- */
+ L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM, NSM, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x1110..0x111F -- */
+ L, L, L, L, L, L, L, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1120..0x112F -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM, NSM, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x1130..0x113F -- */
+ L, L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1140..0x114F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1150..0x115F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x1160..0x116F -- */
+ L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1170..0x117F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1180..0x118F -- */
+ NSM, L, NSM, NSM, L, NSM, NSM, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1190..0x119F -- */
+ L, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, NSM, L, NSM, NSM, L, NSM,
+/* DATA_BLOCK: -- 0x11A0..0x11AF -- */
+ NSM, NSM, L, L, L, NSM, L, NSM, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x11B0..0x11BF -- */
+ L, L, L, NSM, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x11C0..0x11CF -- */
+ NSM, L, NSM, L, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x11D0..0x11DF -- */
+ L, L, L, L, L, ON, ON, ON, ON, ON, ON, ON, ON, ET, ET, ET,
+/* DATA_BLOCK: -- 0x11E0..0x11EF -- */
+ ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x11F0..0x11FF -- */
+ NSM, L, L, L, L, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1200..0x120F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1210..0x121F -- */
+ L, L, ON, L, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1220..0x122F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, NSM, NSM, L,
+/* DATA_BLOCK: -- 0x1230..0x123F -- */
+ BN, BN, BN, BN, L, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1240..0x124F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x1250..0x125F -- */
+ L, L, L, L, L, L, L, NSM, NSM, NSM, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1260..0x126F -- */
+ L, L, L, BN, BN, BN, BN, BN, BN, BN, BN, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1270..0x127F -- */
+ NSM, NSM, NSM, L, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L,
+/* DATA_BLOCK: -- 0x1280..0x128F -- */
+ L, L, L, L, L, L, L, L, L, L, NSM, NSM, NSM, NSM, L, L,
+/* DATA_BLOCK: -- 0x1290..0x129F -- */
+ ON, ON, NSM, NSM, NSM, ON, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x12A0..0x12AF -- */
+ L, L, L, L, L, ON, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x12B0..0x12BF -- */
+ L, L, L, L, L, L, L, L, L, ON, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x12C0..0x12CF -- */
+ L, L, L, ON, L, L, L, L, L, L, L, L, L, L, EN, EN,
+/* DATA_BLOCK: -- 0x12D0..0x12DF -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN,
+/* DATA_BLOCK: -- 0x12E0..0x12EF -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, L, L, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x12F0..0x12FF -- */
+ L, L, L, L, NSM, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1300..0x130F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1310..0x131F -- */
+ NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, NSM, L, L, NSM, NSM, NSM, NSM, NSM,
+/* DATA_BLOCK: -- 0x1320..0x132F -- */
+ NSM, NSM, L, NSM, NSM, L, NSM, NSM, NSM, NSM, NSM, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1330..0x133F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ET,
+/* DATA_BLOCK: -- 0x1340..0x134F -- */
+ R, R, R, R, R, L, L, R, R, R, R, R, R, R, R, R,
+/* DATA_BLOCK: -- 0x1350..0x135F -- */
+ R, R, R, R, NSM, NSM, NSM, NSM, NSM, NSM, NSM, R, L, L, L, L,
+/* DATA_BLOCK: -- 0x1360..0x136F -- */
+ R, R, R, R, R, R, R, R, R, R, L, L, L, L, R, R,
+/* DATA_BLOCK: -- 0x1370..0x137F -- */
+ L, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x1380..0x138F -- */
+ AL, AL, AL, AL, AL, L, L, L, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1390..0x139F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, L,
+/* DATA_BLOCK: -- 0x13A0..0x13AF -- */
+ AL, AL, AL, AL, L, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x13B0..0x13BF -- */
+ L, AL, AL, L, AL, L, L, AL, L, AL, AL, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x13C0..0x13CF -- */
+ AL, AL, AL, L, AL, AL, AL, AL, L, AL, L, AL, L, L, L, L,
+/* DATA_BLOCK: -- 0x13D0..0x13DF -- */
+ L, L, AL, L, L, L, L, AL, L, AL, L, AL, L, AL, AL, AL,
+/* DATA_BLOCK: -- 0x13E0..0x13EF -- */
+ L, AL, AL, L, AL, L, L, AL, L, AL, L, AL, L, AL, L, AL,
+/* DATA_BLOCK: -- 0x13F0..0x13FF -- */
+ L, AL, AL, L, AL, L, L, AL, AL, AL, AL, L, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x1400..0x140F -- */
+ AL, AL, AL, L, AL, AL, AL, AL, L, AL, AL, AL, AL, L, AL, L,
+/* DATA_BLOCK: -- 0x1410..0x141F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x1420..0x142F -- */
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, L, L, L, L,
+/* DATA_BLOCK: -- 0x1430..0x143F -- */
+ L, AL, AL, AL, L, AL, AL, AL, AL, AL, L, AL, AL, AL, AL, AL,
+/* DATA_BLOCK: -- 0x1440..0x144F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, L, L, L,
+/* DATA_BLOCK: -- 0x1450..0x145F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L,
+/* DATA_BLOCK: -- 0x1460..0x146F -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x1470..0x147F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, ON, L, L,
+/* DATA_BLOCK: -- 0x1480..0x148F -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, L, L, L, L, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x1490..0x149F -- */
+ ON, ON, ON, ON, ON, ON, ON, L, L, L, L, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x14A0..0x14AF -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x14B0..0x14BF -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x14C0..0x14CF -- */
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, L, ON,
+/* DATA_BLOCK: -- 0x14D0..0x14DF -- */
+ ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, ON, ON,
+/* DATA_BLOCK: -- 0x14E0..0x14EF -- */
+ ON, ON, ON, L, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+/* DATA_BLOCK: -- 0x14F0..0x14FF -- */
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, L, L, L, L, L, L,
+/* DATA_BLOCK: -- 0x1500..0x150F -- */
+ L, L, L, L, L, L, L, L, L, L, L, L, L, L, BN, BN
+};
+
+static const SBUInt16 MainBidiTypeIndexes[2816] = {
+/* INDEX_BLOCK: -- 0x0000..0x003F -- */
+ 0x0000, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0040, 0x0060, 0x0070, 0x0080, 0x0090, 0x00A0,
+ 0x00B0, 0x00C0, 0x00B0, 0x00C0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00D0, 0x00E0, 0x00E0, 0x00F0, 0x0100,
+ 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0120, 0x0130, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x0140,
+/* INDEX_BLOCK: -- 0x0040..0x007F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0150, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x0160, 0x0170, 0x0110, 0x0180, 0x0190, 0x01A0, 0x01B0, 0x01C0, 0x01D0, 0x01E0, 0x01F0, 0x01F0,
+ 0x0200, 0x0110, 0x0210, 0x0220, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x0230, 0x0240, 0x0250,
+ 0x0260, 0x0270, 0x01F0, 0x0110, 0x0280, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x0290, 0x02A0,
+ 0x01A0, 0x01A0, 0x02B0, 0x02C0,
+/* INDEX_BLOCK: -- 0x0080..0x00BF -- */
+ 0x01A0, 0x02D0, 0x02E0, 0x02F0, 0x01A0, 0x0300, 0x0310, 0x01F0, 0x0320, 0x0330, 0x01F0, 0x01F0,
+ 0x0340, 0x0110, 0x0350, 0x0110, 0x0360, 0x00B0, 0x00B0, 0x0370, 0x0380, 0x0390, 0x03A0, 0x00B0,
+ 0x03B0, 0x00B0, 0x00B0, 0x03C0, 0x03D0, 0x00B0, 0x03A0, 0x03E0, 0x03F0, 0x00B0, 0x00B0, 0x03C0,
+ 0x0400, 0x03B0, 0x00B0, 0x0410, 0x03F0, 0x00B0, 0x00B0, 0x03C0, 0x0420, 0x00B0, 0x03A0, 0x0430,
+ 0x03B0, 0x00B0, 0x00B0, 0x0440, 0x03D0, 0x0450, 0x03A0, 0x00B0, 0x0460, 0x00B0, 0x00B0, 0x00B0,
+ 0x0470, 0x00B0, 0x00B0, 0x0480,
+/* INDEX_BLOCK: -- 0x00C0..0x00FF -- */
+ 0x0490, 0x00B0, 0x00B0, 0x04A0, 0x04B0, 0x0450, 0x03A0, 0x04C0, 0x03B0, 0x00B0, 0x00B0, 0x03C0,
+ 0x04D0, 0x00B0, 0x03A0, 0x00B0, 0x04E0, 0x00B0, 0x00B0, 0x04F0, 0x03D0, 0x00B0, 0x03A0, 0x00B0,
+ 0x03B0, 0x00B0, 0x00B0, 0x00B0, 0x0500, 0x0510, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0520,
+ 0x0530, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0540, 0x0550, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x0560, 0x00B0, 0x0570, 0x00B0, 0x00B0, 0x00B0, 0x0580, 0x0590, 0x05A0, 0x0110, 0x05B0,
+ 0x05C0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0100..0x013F -- */
+ 0x00B0, 0x00B0, 0x05D0, 0x05E0, 0x00B0, 0x05F0, 0x0600, 0x0610, 0x0620, 0x0630, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x05D0, 0x00B0, 0x00B0, 0x00B0, 0x0640, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0140..0x017F -- */
+ 0x0040, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0650, 0x0660, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x0670, 0x00B0, 0x03A0, 0x00B0, 0x03A0, 0x00B0, 0x03A0, 0x00B0, 0x00B0, 0x00B0, 0x0680,
+ 0x0690, 0x06A0, 0x00B0, 0x0640,
+/* INDEX_BLOCK: -- 0x0180..0x01BF -- */
+ 0x06B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0450, 0x00B0, 0x06C0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x06D0, 0x06E0, 0x06F0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0700, 0x0100, 0x0100, 0x00B0, 0x0710, 0x00B0, 0x00B0,
+ 0x00B0, 0x0720, 0x0730, 0x0740, 0x00B0, 0x00B0, 0x00B0, 0x0110, 0x0750, 0x00B0, 0x00B0, 0x00B0,
+ 0x0760, 0x00B0, 0x00B0, 0x0770, 0x0460, 0x00B0, 0x0780, 0x0760, 0x04E0, 0x00B0, 0x0790, 0x00B0,
+ 0x00B0, 0x00B0, 0x07A0, 0x04E0,
+/* INDEX_BLOCK: -- 0x01C0..0x01FF -- */
+ 0x00B0, 0x00B0, 0x07B0, 0x07C0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x07D0, 0x07E0, 0x07F0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0110, 0x0110, 0x0110, 0x0110, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0800,
+ 0x0810, 0x0820, 0x0820, 0x0830,
+/* INDEX_BLOCK: -- 0x0200..0x023F -- */
+ 0x0840, 0x0100, 0x0850, 0x0860, 0x0870, 0x0880, 0x0890, 0x08A0, 0x08B0, 0x00B0, 0x08C0, 0x08C0,
+ 0x08D0, 0x0110, 0x0110, 0x0600, 0x08E0, 0x08F0, 0x0900, 0x0910, 0x0920, 0x0100, 0x00B0, 0x00B0,
+ 0x0930, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0940, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0950, 0x00B0, 0x00B0, 0x00B0, 0x0050, 0x0100, 0x0960, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100,
+/* INDEX_BLOCK: -- 0x0240..0x027F -- */
+ 0x0100, 0x0100, 0x0970, 0x00B0, 0x0980, 0x00B0, 0x0100, 0x0100, 0x0990, 0x09A0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x09B0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x09C0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100,
+/* INDEX_BLOCK: -- 0x0280..0x02BF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x09D0, 0x0100, 0x09E0, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100,
+/* INDEX_BLOCK: -- 0x02C0..0x02FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x09F0, 0x0A00, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A10,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0110, 0x0110, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0A20, 0x00B0, 0x00B0, 0x0100, 0x0A30, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0A40,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0950, 0x00B0, 0x0100,
+/* INDEX_BLOCK: -- 0x0300..0x033F -- */
+ 0x0A50, 0x0100, 0x0A60, 0x0A70, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A80, 0x0040, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x0A90, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0100, 0x0100, 0x0AA0, 0x00B0, 0x00B0, 0x0830, 0x00B0, 0x00B0,
+ 0x00B0, 0x0100, 0x00B0, 0x0AB0, 0x00B0, 0x00B0, 0x00B0, 0x0AC0, 0x0AD0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0AE0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x0700, 0x00B0, 0x0AF0,
+/* INDEX_BLOCK: -- 0x0340..0x037F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0380..0x03BF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0100, 0x0100, 0x0100, 0x0100, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x03C0..0x03FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0100, 0x0100, 0x0100,
+ 0x0970, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0820, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x0A10, 0x0B00, 0x00B0, 0x0B10, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x04E0,
+ 0x0100, 0x0100, 0x0B20, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0B30, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0400..0x043F -- */
+ 0x0B40, 0x00B0, 0x0B50, 0x0B60, 0x00B0, 0x00B0, 0x00B0, 0x0B70, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x0B80, 0x00B0, 0x0110, 0x0B90, 0x00B0, 0x00B0, 0x0BA0, 0x00B0, 0x0BB0, 0x04E0, 0x00B0, 0x00B0,
+ 0x0360, 0x00B0, 0x00B0, 0x0BC0, 0x00B0, 0x00B0, 0x0BD0, 0x00B0, 0x00B0, 0x00B0, 0x0BE0, 0x0BF0,
+ 0x0C00, 0x00B0, 0x00B0, 0x03C0, 0x00B0, 0x00B0, 0x00B0, 0x0C10, 0x03B0, 0x00B0, 0x04D0, 0x05C0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0910, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x0C20, 0x00B0,
+/* INDEX_BLOCK: -- 0x0440..0x047F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x0C30, 0x0C40, 0x0C50, 0x0C60, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0,
+ 0x0C70, 0x0C80, 0x01F0, 0x01F0,
+/* INDEX_BLOCK: -- 0x0480..0x04BF -- */
+ 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0,
+ 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x0C90, 0x0100, 0x01F0, 0x01F0, 0x01F0,
+ 0x01F0, 0x0CA0, 0x01F0, 0x01F0, 0x0CB0, 0x0080, 0x0080, 0x0CC0, 0x0110, 0x0640, 0x0110, 0x0100,
+ 0x0100, 0x0CD0, 0x0CE0, 0x0CF0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x01F0, 0x0D00,
+ 0x0D10, 0x0030, 0x0040, 0x0050, 0x0040, 0x0050, 0x0950, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x0D20, 0x0D30,
+/* INDEX_BLOCK: -- 0x04C0..0x04FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0D40, 0x00B0, 0x00B0, 0x00B0, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0D50, 0x0D50, 0x0040, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0630, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0D60, 0x09A0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0D70, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0500..0x053F -- */
+ 0x0D80, 0x01A0, 0x01A0, 0x0D90, 0x01A0, 0x0DA0, 0x01A0, 0x01A0, 0x01A0, 0x02F0, 0x0DB0, 0x00B0,
+ 0x00B0, 0x00B0, 0x01A0, 0x0DC0, 0x01A0, 0x0DD0, 0x01A0, 0x0DE0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x01A0, 0x01A0, 0x01A0, 0x0DF0, 0x01A0, 0x0E00, 0x01A0, 0x01A0, 0x0E10, 0x0E20, 0x01A0, 0x0E30,
+ 0x0E40, 0x0E40, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x00B0, 0x00B0, 0x01A0, 0x01A0, 0x0E50, 0x0E60,
+ 0x01A0, 0x01A0, 0x01A0, 0x0E70, 0x01A0, 0x0E80, 0x01A0, 0x0E90, 0x01A0, 0x0EA0, 0x0EB0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0540..0x057F -- */
+ 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x0E40, 0x00B0, 0x00B0, 0x00B0, 0x01A0, 0x01A0, 0x01A0, 0x0EC0,
+ 0x01A0, 0x01A0, 0x01A0, 0x0ED0, 0x01F0, 0x01F0, 0x0EE0, 0x0EF0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x0F00, 0x0F10, 0x01A0, 0x01A0, 0x0F20, 0x0F30, 0x00B0, 0x00B0, 0x00B0, 0x05D0,
+ 0x01A0, 0x01A0, 0x0F40, 0x01F0, 0x0290, 0x0F50, 0x00B0, 0x01A0, 0x0F60, 0x00B0, 0x00B0, 0x01A0,
+ 0x0F70, 0x00B0, 0x01A0, 0x0E60,
+/* INDEX_BLOCK: -- 0x0580..0x05BF -- */
+ 0x03B0, 0x00B0, 0x00B0, 0x0F80, 0x0F90, 0x00E0, 0x0950, 0x0FA0, 0x04E0, 0x00B0, 0x00B0, 0x0FB0,
+ 0x0460, 0x00B0, 0x00B0, 0x00B0, 0x0360, 0x00B0, 0x0FC0, 0x0FD0, 0x00B0, 0x00B0, 0x00B0, 0x0FE0,
+ 0x04E0, 0x00B0, 0x00B0, 0x0FF0, 0x1000, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A10, 0x1010,
+ 0x03B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A10, 0x1020, 0x00B0,
+ 0x04E0, 0x00B0, 0x00B0, 0x04F0, 0x0600, 0x00B0, 0x1030, 0x0FD0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x05C0..0x05FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x0F80, 0x0510, 0x1040, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1050,
+ 0x1060, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x1070, 0x0600, 0x04D0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1080,
+ 0x0600, 0x00B0, 0x0D50, 0x00B0, 0x00B0, 0x00B0, 0x1090, 0x10A0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x05D0, 0x10B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0600..0x063F -- */
+ 0x00B0, 0x00B0, 0x0A10, 0x10C0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x10D0, 0x0FE0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x10E0, 0x0600, 0x00B0, 0x10F0, 0x00B0, 0x00B0, 0x1100,
+ 0x1110, 0x1120, 0x00B0, 0x00B0, 0x1130, 0x1140, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0640..0x067F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x1150, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1160, 0x1170, 0x1180,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1190, 0x10A0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x11A0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x11B0,
+ 0x04E0, 0x00B0, 0x00B0, 0x0D70, 0x11C0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x11D0, 0x11E0, 0x0B20,
+/* INDEX_BLOCK: -- 0x0680..0x06BF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x11F0, 0x1200, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x06C0..0x06FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0FD0,
+ 0x00B0, 0x00B0, 0x00B0, 0x0F90, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0700..0x073F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A10, 0x00B0, 0x00B0, 0x00B0, 0x0A10, 0x0360, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x1210, 0x00B0,
+/* INDEX_BLOCK: -- 0x0740..0x077F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1220, 0x1230, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0780..0x07BF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x0110, 0x0110, 0x1240, 0x0110, 0x0F90, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x07C0..0x07FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1250, 0x1260,
+ 0x1270, 0x00B0, 0x1280, 0x00B0, 0x00B0, 0x00B0, 0x00D0, 0x00B0, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x1290, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0970, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0800..0x083F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A90, 0x00B0, 0x00B0,
+ 0x00B0, 0x12A0, 0x00B0, 0x00B0, 0x0AF0, 0x00B0, 0x00B0, 0x00B0, 0x12B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x12C0, 0x12D0, 0x12D0, 0x12D0,
+/* INDEX_BLOCK: -- 0x0840..0x087F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0110, 0x0110, 0x0110, 0x12E0,
+ 0x0110, 0x0110, 0x05B0, 0x0BD0, 0x12F0, 0x0780, 0x0170, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0880..0x08BF -- */
+ 0x1300, 0x1310, 0x1320, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0A10, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0F90, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1040, 0x00B0, 0x00B0, 0x00B0, 0x07B0, 0x1330,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x08C0..0x08FF -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x07B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0900..0x093F -- */
+ 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x01A0,
+ 0x1340, 0x0F90, 0x00B0, 0x00B0, 0x01A0, 0x01A0, 0x01A0, 0x01A0, 0x1350, 0x1360, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0940..0x097F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1370, 0x01F0, 0x01F0, 0x01F0, 0x1380,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x1370, 0x01F0, 0x01F0, 0x1390, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x13A0, 0x01F0, 0x13B0, 0x13C0,
+ 0x13D0, 0x13E0, 0x13F0, 0x1400, 0x1410, 0x1420, 0x1430, 0x1420, 0x00B0, 0x00B0, 0x00B0, 0x0B20,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0980..0x09BF -- */
+ 0x0100, 0x0100, 0x1440, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0A40, 0x1450, 0x0AC0,
+ 0x0AC0, 0x0AC0, 0x0100, 0x0950, 0x1460, 0x00B0, 0x0AF0, 0x00B0, 0x00B0, 0x00B0, 0x09B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x1470, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x0950, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100,
+/* INDEX_BLOCK: -- 0x09C0..0x09FF -- */
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x1480, 0x0D50, 0x0D50,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x1490, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0640, 0x1440, 0x0040,
+/* INDEX_BLOCK: -- 0x0A00..0x0A3F -- */
+ 0x1440, 0x0100, 0x0100, 0x0100, 0x14A0, 0x0640, 0x0100, 0x0100, 0x14A0, 0x0100, 0x0A20, 0x0B20,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0A40, 0x0A20, 0x0D50, 0x14B0, 0x0100, 0x0100, 0x14C0, 0x14D0, 0x1440, 0x14B0, 0x14B0,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x14E0, 0x0100, 0x0100,
+ 0x0980, 0x00B0, 0x00B0, 0x14F0,
+/* INDEX_BLOCK: -- 0x0A40..0x0A7F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x00B0, 0x00B0, 0x00B0, 0x1500,
+/* INDEX_BLOCK: -- 0x0A80..0x0ABF -- */
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
+ 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080,
+/* INDEX_BLOCK: -- 0x0AC0..0x0AFF -- */
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080
+};
+
+static const SBUInt16 BranchBidiTypeIndexes[1088] = {
+ 0x0000, 0x0040, 0x0080, 0x00C0, 0x0100, 0x0140, 0x0180, 0x01C0, 0x0200, 0x0240, 0x0280, 0x02C0,
+ 0x0300, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0380, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x03C0, 0x0400, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0440, 0x0480, 0x04C0, 0x0340, 0x0500, 0x0540, 0x0580, 0x05C0, 0x0600, 0x0640,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0680, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x06C0, 0x0700, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0740, 0x0340, 0x0340, 0x0340, 0x0780, 0x07C0, 0x0800, 0x0840, 0x0340,
+ 0x0880, 0x08C0, 0x0900, 0x0940, 0x0980, 0x09C0, 0x0A00, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40, 0x0A80, 0x0AC0, 0x0AC0, 0x0AC0,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0A40, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340,
+ 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0340, 0x0A40
+};
+
+SB_INTERNAL SBBidiType LookupBidiType(SBCodepoint codepoint)
+{
+ if (codepoint <= 0x10FFFF) {
+ return PrimaryBidiTypeData[
+ MainBidiTypeIndexes[
+ BranchBidiTypeIndexes[
+ codepoint / 0x0400
+ ] + (codepoint % 0x0400) / 0x0010
+ ] + codepoint % 0x0010
+ ];
+ }
+
+ return ON;
+}
+
+#undef AL
+#undef AN
+#undef B
+#undef BN
+#undef CS
+#undef EN
+#undef ES
+#undef ET
+#undef FSI
+#undef L
+#undef LRE
+#undef LRI
+#undef LRO
+#undef NSM
+#undef ON
+#undef PDF
+#undef PDI
+#undef R
+#undef RLE
+#undef RLI
+#undef RLO
+#undef S
+#undef WS
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h b/modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h
new file mode 100644
index 0000000000..dc39b32fd0
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BidiTypeLookup.h
@@ -0,0 +1,16 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ */
+
+#ifndef _SB_INTERNAL_BIDI_TYPE_LOOKUP_H
+#define _SB_INTERNAL_BIDI_TYPE_LOOKUP_H
+
+#include
+#include
+
+#include "SBBase.h"
+
+SB_INTERNAL SBBidiType LookupBidiType(SBCodepoint codepoint);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c b/modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c
new file mode 100644
index 0000000000..33f76c0fa6
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.c
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+#include "BidiChain.h"
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "BracketQueue.h"
+
+static SBBoolean BracketQueueInsertElement(BracketQueueRef queue)
+{
+ if (queue->_rearTop != BracketQueueList_MaxIndex) {
+ queue->_rearTop += 1;
+ } else {
+ BracketQueueListRef previousList = queue->_rearList;
+ BracketQueueListRef rearList = previousList->next;
+
+ if (!rearList) {
+ rearList = malloc(sizeof(BracketQueueList));
+ if (!rearList) {
+ return SBFalse;
+ }
+
+ rearList->previous = previousList;
+ rearList->next = NULL;
+
+ previousList->next = rearList;
+ }
+
+ queue->_rearList = rearList;
+ queue->_rearTop = 0;
+ }
+ queue->count += 1;
+
+ return SBTrue;
+}
+
+static void BracketQueueFinalizePairs(BracketQueueRef queue, BracketQueueListRef list, SBInteger top)
+{
+ do {
+ SBInteger limit = (list == queue->_rearList ? queue->_rearTop : BracketQueueList_MaxIndex);
+
+ while (++top <= limit) {
+ if (list->openingLink[top] != BidiLinkNone
+ && list->closingLink[top] == BidiLinkNone) {
+ list->openingLink[top] = BidiLinkNone;
+ }
+ }
+
+ list = list->next;
+ top = 0;
+ } while (list);
+}
+
+SB_INTERNAL void BracketQueueInitialize(BracketQueueRef queue)
+{
+ queue->_firstList.previous = NULL;
+ queue->_firstList.next = NULL;
+ queue->_frontList = NULL;
+ queue->_rearList = NULL;
+ queue->count = 0;
+ queue->shouldDequeue = SBFalse;
+}
+
+SB_INTERNAL void BracketQueueReset(BracketQueueRef queue, SBBidiType direction)
+{
+ queue->_frontList = &queue->_firstList;
+ queue->_rearList = &queue->_firstList;
+ queue->_frontTop = 0;
+ queue->_rearTop = -1;
+ queue->count = 0;
+ queue->shouldDequeue = SBFalse;
+ queue->_direction = direction;
+}
+
+SB_INTERNAL SBBoolean BracketQueueEnqueue(BracketQueueRef queue,
+ BidiLink priorStrongLink, BidiLink openingLink, SBCodepoint bracket)
+{
+ /* The queue can only take a maximum of 63 elements. */
+ SBAssert(queue->count < BracketQueueGetMaxCapacity());
+
+ if (BracketQueueInsertElement(queue)) {
+ BracketQueueListRef list = queue->_rearList;
+ SBInteger top = queue->_rearTop;
+
+ list->priorStrongLink[top] = priorStrongLink;
+ list->openingLink[top] = openingLink;
+ list->closingLink[top] = BidiLinkNone;
+ list->bracket[top] = bracket;
+ list->strongType[top] = SBBidiTypeNil;
+
+ return SBTrue;
+ }
+
+ return SBFalse;
+}
+
+SB_INTERNAL void BracketQueueDequeue(BracketQueueRef queue)
+{
+ /* The queue must NOT be empty. */
+ SBAssert(queue->count != 0);
+
+ if (queue->_frontTop != BracketQueueList_MaxIndex) {
+ queue->_frontTop += 1;
+ } else {
+ BracketQueueListRef frontList = queue->_frontList;
+
+ if (frontList == queue->_rearList) {
+ queue->_rearTop = -1;
+ } else {
+ queue->_frontList = frontList->next;
+ }
+
+ queue->_frontTop = 0;
+ }
+
+ queue->count -= 1;
+}
+
+SB_INTERNAL void BracketQueueSetStrongType(BracketQueueRef queue, SBBidiType strongType)
+{
+ BracketQueueListRef list = queue->_rearList;
+ SBInteger top = queue->_rearTop;
+
+ while (1) {
+ SBInteger limit = (list == queue->_frontList ? queue->_frontTop : 0);
+
+ do {
+ if (list->closingLink[top] == BidiLinkNone
+ && list->strongType[top] != queue->_direction) {
+ list->strongType[top] = strongType;
+ }
+ } while (top-- > limit);
+
+ if (list == queue->_frontList) {
+ break;
+ }
+
+ list = list->previous;
+ top = BracketQueueList_MaxIndex;
+ }
+}
+
+SB_INTERNAL void BracketQueueClosePair(BracketQueueRef queue, BidiLink closingLink, SBCodepoint bracket)
+{
+ BracketQueueListRef list = queue->_rearList;
+ SBInteger top = queue->_rearTop;
+ SBCodepoint canonical;
+
+ switch (bracket) {
+ case 0x232A:
+ canonical = 0x3009;
+ break;
+
+ case 0x3009:
+ canonical = 0x232A;
+ break;
+
+ default:
+ canonical = bracket;
+ break;
+ }
+
+ while (1) {
+ SBBoolean isFrontList = (list == queue->_frontList);
+ SBInteger limit = (isFrontList ? queue->_frontTop : 0);
+
+ do {
+ if (list->openingLink[top] != BidiLinkNone
+ && list->closingLink[top] == BidiLinkNone
+ && (list->bracket[top] == bracket || list->bracket[top] == canonical)) {
+ list->closingLink[top] = closingLink;
+ BracketQueueFinalizePairs(queue, list, top);
+
+ if (isFrontList && top == queue->_frontTop) {
+ queue->shouldDequeue = SBTrue;
+ }
+
+ return;
+ }
+ } while (top-- > limit);
+
+ if (isFrontList) {
+ break;
+ }
+
+ list = list->previous;
+ top = BracketQueueList_MaxIndex;
+ }
+}
+
+SB_INTERNAL SBBoolean BracketQueueShouldDequeue(BracketQueueRef queue)
+{
+ return queue->shouldDequeue;
+}
+
+SB_INTERNAL BidiLink BracketQueueGetPriorStrongLink(BracketQueueRef queue)
+{
+ return queue->_frontList->priorStrongLink[queue->_frontTop];
+}
+
+SB_INTERNAL BidiLink BracketQueueGetOpeningLink(BracketQueueRef queue)
+{
+ return queue->_frontList->openingLink[queue->_frontTop];
+}
+
+SB_INTERNAL BidiLink BracketQueueGetClosingLink(BracketQueueRef queue)
+{
+ return queue->_frontList->closingLink[queue->_frontTop];
+}
+
+SB_INTERNAL SBBidiType BracketQueueGetStrongType(BracketQueueRef queue)
+{
+ return queue->_frontList->strongType[queue->_frontTop];
+}
+
+SB_INTERNAL void BracketQueueFinalize(BracketQueueRef queue)
+{
+ BracketQueueListRef list = queue->_firstList.next;
+
+ while (list) {
+ BracketQueueListRef next = list->next;
+ free(list);
+ list = next;
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h b/modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h
new file mode 100644
index 0000000000..89a5713dc4
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BracketQueue.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_BRACKET_QUEUE_H
+#define _SB_INTERNAL_BRACKET_QUEUE_H
+
+#include
+
+#include "BidiChain.h"
+#include "SBBase.h"
+
+#define BracketQueueList_Length 8
+#define BracketQueueList_MaxIndex (BracketQueueList_Length - 1)
+
+typedef struct _BracketQueueList {
+ SBCodepoint bracket[BracketQueueList_Length];
+ BidiLink priorStrongLink[BracketQueueList_Length];
+ BidiLink openingLink[BracketQueueList_Length];
+ BidiLink closingLink[BracketQueueList_Length];
+ SBBidiType strongType[BracketQueueList_Length];
+
+ struct _BracketQueueList *previous;
+ struct _BracketQueueList *next;
+} BracketQueueList, *BracketQueueListRef;
+
+typedef struct _BracketQueue {
+ BracketQueueList _firstList;
+ BracketQueueListRef _frontList;
+ BracketQueueListRef _rearList;
+ SBInteger _frontTop;
+ SBInteger _rearTop;
+ SBUInteger count;
+ SBBoolean shouldDequeue;
+ SBBidiType _direction;
+} BracketQueue, *BracketQueueRef;
+
+#define BracketQueueGetMaxCapacity() 63
+
+SB_INTERNAL void BracketQueueInitialize(BracketQueueRef queue);
+SB_INTERNAL void BracketQueueReset(BracketQueueRef queue, SBBidiType direction);
+
+SB_INTERNAL SBBoolean BracketQueueEnqueue(BracketQueueRef queue,
+ BidiLink priorStrongLink, BidiLink openingLink, SBCodepoint bracket);
+SB_INTERNAL void BracketQueueDequeue(BracketQueueRef queue);
+
+SB_INTERNAL void BracketQueueSetStrongType(BracketQueueRef queue, SBBidiType strongType);
+SB_INTERNAL void BracketQueueClosePair(BracketQueueRef queue,
+ BidiLink closingLink, SBCodepoint bracket);
+
+SB_INTERNAL SBBoolean BracketQueueShouldDequeue(BracketQueueRef queue);
+
+SB_INTERNAL BidiLink BracketQueueGetPriorStrongLink(BracketQueueRef queue);
+SB_INTERNAL BidiLink BracketQueueGetOpeningLink(BracketQueueRef queue);
+SB_INTERNAL BidiLink BracketQueueGetClosingLink(BracketQueueRef queue);
+SB_INTERNAL SBBidiType BracketQueueGetStrongType(BracketQueueRef queue);
+
+SB_INTERNAL void BracketQueueFinalize(BracketQueueRef queue);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h b/modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h
new file mode 100644
index 0000000000..5f44e3479e
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/BracketType.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_BRACKET_TYPE_H
+#define _SB_INTERNAL_BRACKET_TYPE_H
+
+#include "SBBase.h"
+
+enum {
+ BracketTypeNone = 0x00,
+ BracketTypeOpen = 0x40, /**< Opening paired bracket. */
+ BracketTypeClose = 0x80, /**< Closing paired bracket. */
+
+ BracketTypePrimaryMask = BracketTypeOpen | BracketTypeClose,
+ BracketTypeInverseMask = ~BracketTypePrimaryMask
+};
+typedef SBUInt8 BracketType;
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c b/modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c
new file mode 100644
index 0000000000..2a0374a3f8
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.c
@@ -0,0 +1,2112 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ *
+ * REQUIRED MEMORY: 11150+(4119*2)+(1422*2) = 22232 Bytes
+ */
+
+#include "GeneralCategoryLookup.h"
+
+#define Cc SBGeneralCategoryCC
+#define Cf SBGeneralCategoryCF
+#define Cn SBGeneralCategoryCN
+#define Co SBGeneralCategoryCO
+#define Cs SBGeneralCategoryCS
+#define Ll SBGeneralCategoryLL
+#define Lm SBGeneralCategoryLM
+#define Lo SBGeneralCategoryLO
+#define Lt SBGeneralCategoryLT
+#define Lu SBGeneralCategoryLU
+#define Mc SBGeneralCategoryMC
+#define Me SBGeneralCategoryME
+#define Mn SBGeneralCategoryMN
+#define Nd SBGeneralCategoryND
+#define Nl SBGeneralCategoryNL
+#define No SBGeneralCategoryNO
+#define Pc SBGeneralCategoryPC
+#define Pd SBGeneralCategoryPD
+#define Pe SBGeneralCategoryPE
+#define Pf SBGeneralCategoryPF
+#define Pi SBGeneralCategoryPI
+#define Po SBGeneralCategoryPO
+#define Ps SBGeneralCategoryPS
+#define Sc SBGeneralCategorySC
+#define Sk SBGeneralCategorySK
+#define Sm SBGeneralCategorySM
+#define So SBGeneralCategorySO
+#define Zl SBGeneralCategoryZL
+#define Zp SBGeneralCategoryZP
+#define Zs SBGeneralCategoryZS
+
+static const SBUInt8 PrimaryGeneralCategoryData[11150] = {
+/* DATA_BLOCK: -- 0x0000..0x000F -- */
+ Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc, Cc,
+/* DATA_BLOCK: -- 0x0010..0x001F -- */
+ Zs, Po, Po, Po, Sc, Po, Po, Po, Ps, Pe, Po, Sm, Po, Pd, Po, Po,
+/* DATA_BLOCK: -- 0x0020..0x002F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Po, Po, Sm, Sm, Sm, Po,
+/* DATA_BLOCK: -- 0x0030..0x003F -- */
+ Po, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x0040..0x004F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Ps, Po, Pe, Sk, Pc,
+/* DATA_BLOCK: -- 0x0050..0x005F -- */
+ Sk, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x0060..0x006F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ps, Sm, Pe, Sm, Cc,
+/* DATA_BLOCK: -- 0x0070..0x007F -- */
+ Zs, Po, Sc, Sc, Sc, Sc, So, Po, Sk, So, Lo, Pi, Sm, Cf, So, Sk,
+/* DATA_BLOCK: -- 0x0080..0x008F -- */
+ So, Sm, No, No, Sk, Ll, Po, Po, Sk, No, Lo, Pf, No, No, No, Po,
+/* DATA_BLOCK: -- 0x0090..0x009F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x00A0..0x00AF -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Sm, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Ll,
+/* DATA_BLOCK: -- 0x00B0..0x00BF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x00C0..0x00CF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Sm, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x00D0..0x00DF -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x00E0..0x00EF -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu,
+/* DATA_BLOCK: -- 0x00F0..0x00FF -- */
+ Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x0100..0x010F -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Lu, Ll, Lu, Ll, Lu, Ll, Ll,
+/* DATA_BLOCK: -- 0x0110..0x011F -- */
+ Ll, Lu, Lu, Ll, Lu, Ll, Lu, Lu, Ll, Lu, Lu, Lu, Ll, Ll, Lu, Lu,
+/* DATA_BLOCK: -- 0x0120..0x012F -- */
+ Lu, Lu, Ll, Lu, Lu, Ll, Lu, Lu, Lu, Ll, Ll, Ll, Lu, Lu, Ll, Lu,
+/* DATA_BLOCK: -- 0x0130..0x013F -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Lu, Ll, Lu, Ll, Ll, Lu, Ll, Lu, Lu,
+/* DATA_BLOCK: -- 0x0140..0x014F -- */
+ Ll, Lu, Lu, Lu, Ll, Lu, Ll, Lu, Lu, Ll, Ll, Lo, Lu, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x0150..0x015F -- */
+ Lo, Lo, Lo, Lo, Lu, Lt, Ll, Lu, Lt, Ll, Lu, Lt, Ll, Lu, Ll, Lu,
+/* DATA_BLOCK: -- 0x0160..0x016F -- */
+ Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x0170..0x017F -- */
+ Ll, Lu, Lt, Ll, Lu, Ll, Lu, Lu, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x0180..0x018F -- */
+ Lu, Ll, Lu, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Ll, Lu, Lu, Ll,
+/* DATA_BLOCK: -- 0x0190..0x019F -- */
+ Ll, Lu, Ll, Lu, Lu, Lu, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x01A0..0x01AF -- */
+ Ll, Ll, Ll, Ll, Lo, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x01B0..0x01BF -- */
+ Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x01C0..0x01CF -- */
+ Lm, Lm, Sk, Sk, Sk, Sk, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x01D0..0x01DF -- */
+ Lm, Lm, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x01E0..0x01EF -- */
+ Lm, Lm, Lm, Lm, Lm, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Lm, Sk, Lm, Sk,
+/* DATA_BLOCK: -- 0x01F0..0x01FF -- */
+ Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x0200..0x020F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0210..0x021F -- */
+ Lu, Ll, Lu, Ll, Lm, Sk, Lu, Ll, Cn, Cn, Lm, Ll, Ll, Ll, Po, Lu,
+/* DATA_BLOCK: -- 0x0220..0x022F -- */
+ Cn, Cn, Cn, Cn, Sk, Sk, Lu, Po, Lu, Lu, Lu, Cn, Lu, Cn, Lu, Lu,
+/* DATA_BLOCK: -- 0x0230..0x023F -- */
+ Ll, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x0240..0x024F -- */
+ Lu, Lu, Cn, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x0250..0x025F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu,
+/* DATA_BLOCK: -- 0x0260..0x026F -- */
+ Ll, Ll, Lu, Lu, Lu, Ll, Ll, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x0270..0x027F -- */
+ Ll, Ll, Ll, Ll, Lu, Ll, Sm, Lu, Ll, Lu, Lu, Ll, Ll, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x0280..0x028F -- */
+ Lu, Ll, So, Mn, Mn, Mn, Mn, Mn, Me, Me, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x0290..0x029F -- */
+ Lu, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Ll,
+/* DATA_BLOCK: -- 0x02A0..0x02AF -- */
+ Cn, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x02B0..0x02BF -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Cn, Cn, Lm, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x02C0..0x02CF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Po, Pd, Cn, Cn, So, So, Sc,
+/* DATA_BLOCK: -- 0x02D0..0x02DF -- */
+ Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x02E0..0x02EF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Pd, Mn,
+/* DATA_BLOCK: -- 0x02F0..0x02FF -- */
+ Po, Mn, Mn, Po, Mn, Mn, Po, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0300..0x030F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0310..0x031F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x0320..0x032F -- */
+ Lo, Lo, Lo, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0330..0x033F -- */
+ Cf, Cf, Cf, Cf, Cf, Cf, Sm, Sm, Sm, Po, Po, Sc, Po, Po, So, So,
+/* DATA_BLOCK: -- 0x0340..0x034F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Po, Cf, Po, Po, Po,
+/* DATA_BLOCK: -- 0x0350..0x035F -- */
+ Lm, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0360..0x036F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Po, Po, Po, Po, Lo, Lo,
+/* DATA_BLOCK: -- 0x0370..0x037F -- */
+ Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0380..0x038F -- */
+ Lo, Lo, Lo, Lo, Po, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cf, So, Mn,
+/* DATA_BLOCK: -- 0x0390..0x039F -- */
+ Mn, Mn, Mn, Mn, Mn, Lm, Lm, Mn, Mn, So, Mn, Mn, Mn, Mn, Lo, Lo,
+/* DATA_BLOCK: -- 0x03A0..0x03AF -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Lo, Lo, Lo, So, So, Lo,
+/* DATA_BLOCK: -- 0x03B0..0x03BF -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn, Cf,
+/* DATA_BLOCK: -- 0x03C0..0x03CF -- */
+ Lo, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x03D0..0x03DF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x03E0..0x03EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x03F0..0x03FF -- */
+ Mn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0400..0x040F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0410..0x041F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0420..0x042F -- */
+ Mn, Mn, Mn, Mn, Lm, Lm, So, Po, Po, Po, Lm, Cn, Cn, Mn, Sc, Sc,
+/* DATA_BLOCK: -- 0x0430..0x043F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Lm, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0440..0x044F -- */
+ Mn, Mn, Mn, Mn, Lm, Mn, Mn, Mn, Lm, Mn, Mn, Mn, Mn, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0450..0x045F -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn,
+/* DATA_BLOCK: -- 0x0460..0x046F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Cn, Cn, Po, Cn,
+/* DATA_BLOCK: -- 0x0470..0x047F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0480..0x048F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Sk, Lo, Lo, Lo, Lo, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x0490..0x049F -- */
+ Cf, Cf, Cn, Cn, Cn, Cn, Cn, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x04A0..0x04AF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lm, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x04B0..0x04BF -- */
+ Mn, Mn, Cf, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x04C0..0x04CF -- */
+ Mn, Mn, Mn, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x04D0..0x04DF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mc, Mn, Lo, Mc, Mc,
+/* DATA_BLOCK: -- 0x04E0..0x04EF -- */
+ Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc, Mc, Mc, Mn, Mc, Mc,
+/* DATA_BLOCK: -- 0x04F0..0x04FF -- */
+ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0500..0x050F -- */
+ Lo, Lo, Mn, Mn, Po, Po, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x0510..0x051F -- */
+ Po, Lm, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0520..0x052F -- */
+ Lo, Mn, Mc, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x0530..0x053F -- */
+ Lo, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0540..0x054F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0550..0x055F -- */
+ Lo, Cn, Lo, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Lo, Mc, Mc,
+/* DATA_BLOCK: -- 0x0560..0x056F -- */
+ Mc, Mn, Mn, Mn, Mn, Cn, Cn, Mc, Mc, Cn, Cn, Mc, Mc, Mn, Lo, Cn,
+/* DATA_BLOCK: -- 0x0570..0x057F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mc, Cn, Cn, Cn, Cn, Lo, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x0580..0x058F -- */
+ Lo, Lo, Mn, Mn, Cn, Cn, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x0590..0x059F -- */
+ Lo, Lo, Sc, Sc, No, No, No, No, No, No, So, Sc, Lo, Po, Mn, Cn,
+/* DATA_BLOCK: -- 0x05A0..0x05AF -- */
+ Cn, Mn, Mn, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x05B0..0x05BF -- */
+ Lo, Cn, Lo, Lo, Cn, Lo, Lo, Cn, Lo, Lo, Cn, Cn, Mn, Cn, Mc, Mc,
+/* DATA_BLOCK: -- 0x05C0..0x05CF -- */
+ Mc, Mn, Mn, Cn, Cn, Cn, Cn, Mn, Mn, Cn, Cn, Mn, Mn, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x05D0..0x05DF -- */
+ Cn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Cn, Lo, Cn,
+/* DATA_BLOCK: -- 0x05E0..0x05EF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x05F0..0x05FF -- */
+ Mn, Mn, Lo, Lo, Lo, Mn, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0600..0x060F -- */
+ Cn, Mn, Mn, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x0610..0x061F -- */
+ Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0620..0x062F -- */
+ Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Lo, Mc, Mc,
+/* DATA_BLOCK: -- 0x0630..0x063F -- */
+ Mc, Mn, Mn, Mn, Mn, Mn, Cn, Mn, Mn, Mc, Cn, Mc, Mc, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0640..0x064F -- */
+ Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0650..0x065F -- */
+ Po, Sc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0660..0x066F -- */
+ Cn, Mn, Mc, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x0670..0x067F -- */
+ Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Lo, Mc, Mn,
+/* DATA_BLOCK: -- 0x0680..0x068F -- */
+ Mc, Mn, Mn, Mn, Mn, Cn, Cn, Mc, Mc, Cn, Cn, Mc, Mc, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0690..0x069F -- */
+ Cn, Cn, Cn, Cn, Cn, Mn, Mn, Mc, Cn, Cn, Cn, Cn, Lo, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x06A0..0x06AF -- */
+ So, Lo, No, No, No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x06B0..0x06BF -- */
+ Cn, Cn, Mn, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x06C0..0x06CF -- */
+ Lo, Cn, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Lo, Lo, Cn, Lo, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x06D0..0x06DF -- */
+ Cn, Cn, Cn, Lo, Lo, Cn, Cn, Cn, Lo, Lo, Lo, Cn, Cn, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x06E0..0x06EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Mc, Mc,
+/* DATA_BLOCK: -- 0x06F0..0x06FF -- */
+ Mn, Mc, Mc, Cn, Cn, Cn, Mc, Mc, Mc, Cn, Mc, Mc, Mc, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0700..0x070F -- */
+ Lo, Cn, Cn, Cn, Cn, Cn, Cn, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0710..0x071F -- */
+ No, No, No, So, So, So, So, So, So, Sc, So, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0720..0x072F -- */
+ Mn, Mc, Mc, Mc, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x0730..0x073F -- */
+ Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0740..0x074F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Lo, Mn, Mn,
+/* DATA_BLOCK: -- 0x0750..0x075F -- */
+ Mn, Mc, Mc, Mc, Mc, Cn, Mn, Mn, Mn, Cn, Mn, Mn, Mn, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0760..0x076F -- */
+ Cn, Cn, Cn, Cn, Cn, Mn, Mn, Cn, Lo, Lo, Lo, Cn, Cn, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x0770..0x077F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po, No, No, No, No, No, No, No, So,
+/* DATA_BLOCK: -- 0x0780..0x078F -- */
+ Lo, Mn, Mc, Mc, Po, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x0790..0x079F -- */
+ Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Lo, Mc, Mn,
+/* DATA_BLOCK: -- 0x07A0..0x07AF -- */
+ Mc, Mc, Mc, Mc, Mc, Cn, Mn, Mc, Mc, Cn, Mc, Mc, Mn, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x07B0..0x07BF -- */
+ Cn, Cn, Cn, Cn, Cn, Mc, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x07C0..0x07CF -- */
+ Cn, Lo, Lo, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x07D0..0x07DF -- */
+ Mn, Mn, Mc, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x07E0..0x07EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Lo, Mc, Mc,
+/* DATA_BLOCK: -- 0x07F0..0x07FF -- */
+ Mc, Mn, Mn, Mn, Mn, Cn, Mc, Mc, Mc, Cn, Mc, Mc, Mc, Mn, Lo, So,
+/* DATA_BLOCK: -- 0x0800..0x080F -- */
+ Cn, Cn, Cn, Cn, Lo, Lo, Lo, Mc, No, No, No, No, No, No, No, Lo,
+/* DATA_BLOCK: -- 0x0810..0x081F -- */
+ No, No, No, No, No, No, No, No, No, So, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0820..0x082F -- */
+ Cn, Mn, Mc, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0830..0x083F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0840..0x084F -- */
+ Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x0850..0x085F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Mn, Cn, Cn, Cn, Cn, Mc,
+/* DATA_BLOCK: -- 0x0860..0x086F -- */
+ Mc, Mc, Mn, Mn, Mn, Cn, Mn, Cn, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x0870..0x087F -- */
+ Cn, Cn, Mc, Mc, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0880..0x088F -- */
+ Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0890..0x089F -- */
+ Lo, Mn, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Sc,
+/* DATA_BLOCK: -- 0x08A0..0x08AF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lm, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Po,
+/* DATA_BLOCK: -- 0x08B0..0x08BF -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Po, Po, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x08C0..0x08CF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x08D0..0x08DF -- */
+ Cn, Lo, Lo, Cn, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x08E0..0x08EF -- */
+ Lo, Lo, Lo, Lo, Cn, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x08F0..0x08FF -- */
+ Lo, Mn, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x0900..0x090F -- */
+ Lo, Lo, Lo, Lo, Lo, Cn, Lm, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn,
+/* DATA_BLOCK: -- 0x0910..0x091F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0920..0x092F -- */
+ Lo, So, So, So, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x0930..0x093F -- */
+ Po, Po, Po, So, Po, So, So, So, Mn, Mn, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x0940..0x094F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x0950..0x095F -- */
+ No, No, No, No, So, Mn, So, Mn, So, Mn, Ps, Pe, Ps, Pe, Mc, Mc,
+/* DATA_BLOCK: -- 0x0960..0x096F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0970..0x097F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0980..0x098F -- */
+ Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc,
+/* DATA_BLOCK: -- 0x0990..0x099F -- */
+ Mn, Mn, Mn, Mn, Mn, Po, Mn, Mn, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x09A0..0x09AF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x09B0..0x09BF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, So, So,
+/* DATA_BLOCK: -- 0x09C0..0x09CF -- */
+ So, So, So, So, So, So, Mn, So, So, So, So, So, So, Cn, So, So,
+/* DATA_BLOCK: -- 0x09D0..0x09DF -- */
+ Po, Po, Po, Po, Po, So, So, So, So, Po, Po, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x09E0..0x09EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mc, Mc, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x09F0..0x09FF -- */
+ Mn, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mn, Mc, Mc, Mn, Mn, Lo,
+/* DATA_BLOCK: -- 0x0A00..0x0A0F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x0A10..0x0A1F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Mc, Mc, Mn, Mn, Lo, Lo, Lo, Lo, Mn, Mn,
+/* DATA_BLOCK: -- 0x0A20..0x0A2F -- */
+ Mn, Lo, Mc, Mc, Mc, Lo, Lo, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Lo, Lo,
+/* DATA_BLOCK: -- 0x0A30..0x0A3F -- */
+ Lo, Mn, Mn, Mn, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0A40..0x0A4F -- */
+ Lo, Lo, Mn, Mc, Mc, Mn, Mn, Mc, Mc, Mc, Mc, Mc, Mc, Mn, Lo, Mc,
+/* DATA_BLOCK: -- 0x0A50..0x0A5F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Mc, Mc, Mc, Mn, So, So,
+/* DATA_BLOCK: -- 0x0A60..0x0A6F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Cn, Lu, Cn, Cn, Cn, Cn, Cn, Lu, Cn, Cn,
+/* DATA_BLOCK: -- 0x0A70..0x0A7F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Po, Lm, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x0A80..0x0A8F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x0A90..0x0A9F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x0AA0..0x0AAF -- */
+ Lo, Cn, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x0AB0..0x0ABF -- */
+ Lo, Cn, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0AC0..0x0ACF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0AD0..0x0ADF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0AE0..0x0AEF -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x0AF0..0x0AFF -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, No, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0B00..0x0B0F -- */
+ So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0B10..0x0B1F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Cn, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn,
+/* DATA_BLOCK: -- 0x0B20..0x0B2F -- */
+ Pd, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0B30..0x0B3F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, So, Po, Lo,
+/* DATA_BLOCK: -- 0x0B40..0x0B4F -- */
+ Zs, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0B50..0x0B5F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Ps, Pe, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0B60..0x0B6F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Po, Po, Po, Nl, Nl,
+/* DATA_BLOCK: -- 0x0B70..0x0B7F -- */
+ Nl, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0B80..0x0B8F -- */
+ Lo, Lo, Mn, Mn, Mn, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x0B90..0x0B9F -- */
+ Lo, Lo, Mn, Mn, Mc, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0BA0..0x0BAF -- */
+ Lo, Lo, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0BB0..0x0BBF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo,
+/* DATA_BLOCK: -- 0x0BC0..0x0BCF -- */
+ Lo, Cn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0BD0..0x0BDF -- */
+ Lo, Lo, Lo, Lo, Mn, Mn, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc,
+/* DATA_BLOCK: -- 0x0BE0..0x0BEF -- */
+ Mc, Mc, Mc, Mc, Mc, Mc, Mn, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0BF0..0x0BFF -- */
+ Mn, Mn, Mn, Mn, Po, Po, Po, Lm, Po, Po, Po, Sc, Lo, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0C00..0x0C0F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0C10..0x0C1F -- */
+ No, No, No, No, No, No, No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0C20..0x0C2F -- */
+ Po, Po, Po, Po, Po, Po, Pd, Po, Po, Po, Po, Mn, Mn, Mn, Cf, Mn,
+/* DATA_BLOCK: -- 0x0C30..0x0C3F -- */
+ Lo, Lo, Lo, Lm, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0C40..0x0C4F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0C50..0x0C5F -- */
+ Lo, Lo, Lo, Lo, Lo, Mn, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0C60..0x0C6F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Lo, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0C70..0x0C7F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0C80..0x0C8F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x0C90..0x0C9F -- */
+ Mn, Mn, Mn, Mc, Mc, Mc, Mc, Mn, Mn, Mc, Mc, Mc, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0CA0..0x0CAF -- */
+ Mc, Mc, Mn, Mc, Mc, Mc, Mc, Mc, Mc, Mn, Mn, Mn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0CB0..0x0CBF -- */
+ So, Cn, Cn, Cn, Po, Po, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x0CC0..0x0CCF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x0CD0..0x0CDF -- */
+ Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0CE0..0x0CEF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0CF0..0x0CFF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0D00..0x0D0F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, No, Cn, Cn, Cn, So, So,
+/* DATA_BLOCK: -- 0x0D10..0x0D1F -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x0D20..0x0D2F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mc, Mc, Mn, Cn, Cn, Po, Po,
+/* DATA_BLOCK: -- 0x0D30..0x0D3F -- */
+ Lo, Lo, Lo, Lo, Lo, Mc, Mn, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn,
+/* DATA_BLOCK: -- 0x0D40..0x0D4F -- */
+ Mn, Mc, Mn, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x0D50..0x0D5F -- */
+ Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x0D60..0x0D6F -- */
+ Po, Po, Po, Po, Po, Po, Po, Lm, Po, Po, Po, Po, Po, Po, Cn, Cn,
+/* DATA_BLOCK: -- 0x0D70..0x0D7F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Me, Mn,
+/* DATA_BLOCK: -- 0x0D80..0x0D8F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn,
+/* DATA_BLOCK: -- 0x0D90..0x0D9F -- */
+ Mn, Mn, Mn, Mn, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0DA0..0x0DAF -- */
+ Lo, Lo, Lo, Lo, Mn, Mc, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x0DB0..0x0DBF -- */
+ Mc, Mc, Mn, Mc, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0DC0..0x0DCF -- */
+ Po, So, So, So, So, So, So, So, So, So, So, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0DD0..0x0DDF -- */
+ Mn, Mn, Mn, Mn, So, So, So, So, So, So, So, So, So, Po, Po, Cn,
+/* DATA_BLOCK: -- 0x0DE0..0x0DEF -- */
+ Mn, Mn, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0DF0..0x0DFF -- */
+ Lo, Mc, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Mc, Mn, Mn, Mn, Lo, Lo,
+/* DATA_BLOCK: -- 0x0E00..0x0E0F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mc, Mn, Mn, Mc, Mc, Mc, Mn, Mc, Mn,
+/* DATA_BLOCK: -- 0x0E10..0x0E1F -- */
+ Mn, Mn, Mc, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x0E20..0x0E2F -- */
+ Lo, Lo, Lo, Lo, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0E30..0x0E3F -- */
+ Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Cn, Cn, Cn, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x0E40..0x0E4F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x0E50..0x0E5F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lm, Lm, Lm, Lm, Lm, Lm, Po, Po,
+/* DATA_BLOCK: -- 0x0E60..0x0E6F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0E70..0x0E7F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Cn, Cn, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x0E80..0x0E8F -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0E90..0x0E9F -- */
+ Mn, Mn, Mn, Po, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x0EA0..0x0EAF -- */
+ Mn, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lo, Lo, Lo, Lo, Mn, Lo, Lo,
+/* DATA_BLOCK: -- 0x0EB0..0x0EBF -- */
+ Lo, Lo, Lo, Lo, Mn, Lo, Lo, Mc, Mn, Mn, Lo, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x0EC0..0x0ECF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x0ED0..0x0EDF -- */
+ Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x0EE0..0x0EEF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lm, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x0EF0..0x0EFF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lm, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x0F00..0x0F0F -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x0F10..0x0F1F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x0F20..0x0F2F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Lu, Lu, Lu, Lu, Lu, Lu, Cn, Cn,
+/* DATA_BLOCK: -- 0x0F30..0x0F3F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Lu, Cn, Lu, Cn, Lu, Cn, Lu,
+/* DATA_BLOCK: -- 0x0F40..0x0F4F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn,
+/* DATA_BLOCK: -- 0x0F50..0x0F5F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lt, Lt, Lt, Lt, Lt, Lt, Lt, Lt,
+/* DATA_BLOCK: -- 0x0F60..0x0F6F -- */
+ Ll, Ll, Ll, Ll, Ll, Cn, Ll, Ll, Lu, Lu, Lu, Lu, Lt, Sk, Ll, Sk,
+/* DATA_BLOCK: -- 0x0F70..0x0F7F -- */
+ Sk, Sk, Ll, Ll, Ll, Cn, Ll, Ll, Lu, Lu, Lu, Lu, Lt, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x0F80..0x0F8F -- */
+ Ll, Ll, Ll, Ll, Cn, Cn, Ll, Ll, Lu, Lu, Lu, Lu, Cn, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x0F90..0x0F9F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Lu, Lu, Lu, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x0FA0..0x0FAF -- */
+ Cn, Cn, Ll, Ll, Ll, Cn, Ll, Ll, Lu, Lu, Lu, Lu, Lt, Sk, Sk, Cn,
+/* DATA_BLOCK: -- 0x0FB0..0x0FBF -- */
+ Zs, Zs, Zs, Zs, Zs, Zs, Zs, Zs, Zs, Zs, Zs, Cf, Cf, Cf, Cf, Cf,
+/* DATA_BLOCK: -- 0x0FC0..0x0FCF -- */
+ Pd, Pd, Pd, Pd, Pd, Pd, Po, Po, Pi, Pf, Ps, Pi, Pi, Pf, Ps, Pi,
+/* DATA_BLOCK: -- 0x0FD0..0x0FDF -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Zl, Zp, Cf, Cf, Cf, Cf, Cf, Zs,
+/* DATA_BLOCK: -- 0x0FE0..0x0FEF -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Pi, Pf, Po, Po, Po, Po, Pc,
+/* DATA_BLOCK: -- 0x0FF0..0x0FFF -- */
+ Pc, Po, Po, Po, Sm, Ps, Pe, Po, Po, Po, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x1000..0x100F -- */
+ Po, Po, Sm, Po, Pc, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Zs,
+/* DATA_BLOCK: -- 0x1010..0x101F -- */
+ Cf, Cf, Cf, Cf, Cf, Cn, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf,
+/* DATA_BLOCK: -- 0x1020..0x102F -- */
+ No, Lm, Cn, Cn, No, No, No, No, No, No, Sm, Sm, Sm, Ps, Pe, Lm,
+/* DATA_BLOCK: -- 0x1030..0x103F -- */
+ No, No, No, No, No, No, No, No, No, No, Sm, Sm, Sm, Ps, Pe, Cn,
+/* DATA_BLOCK: -- 0x1040..0x104F -- */
+ Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1050..0x105F -- */
+ Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc, Sc,
+/* DATA_BLOCK: -- 0x1060..0x106F -- */
+ Sc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1070..0x107F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Me, Me, Me,
+/* DATA_BLOCK: -- 0x1080..0x108F -- */
+ Me, Mn, Me, Me, Me, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x1090..0x109F -- */
+ Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x10A0..0x10AF -- */
+ So, So, Lu, So, So, So, So, Lu, So, So, Ll, Lu, Lu, Lu, Ll, Ll,
+/* DATA_BLOCK: -- 0x10B0..0x10BF -- */
+ Lu, Lu, Lu, Ll, So, Lu, So, So, Sm, Lu, Lu, Lu, Lu, Lu, So, So,
+/* DATA_BLOCK: -- 0x10C0..0x10CF -- */
+ So, So, So, So, Lu, So, Lu, So, Lu, So, Lu, Lu, Lu, Lu, So, Ll,
+/* DATA_BLOCK: -- 0x10D0..0x10DF -- */
+ Lu, Lu, Lu, Lu, Ll, Lo, Lo, Lo, Lo, Ll, So, So, Ll, Ll, Lu, Lu,
+/* DATA_BLOCK: -- 0x10E0..0x10EF -- */
+ Sm, Sm, Sm, Sm, Sm, Lu, Ll, Ll, Ll, Ll, So, Sm, So, So, Ll, So,
+/* DATA_BLOCK: -- 0x10F0..0x10FF -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1100..0x110F -- */
+ Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl,
+/* DATA_BLOCK: -- 0x1110..0x111F -- */
+ Nl, Nl, Nl, Lu, Ll, Nl, Nl, Nl, Nl, No, So, So, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1120..0x112F -- */
+ Sm, Sm, Sm, Sm, Sm, So, So, So, So, So, Sm, Sm, So, So, So, So,
+/* DATA_BLOCK: -- 0x1130..0x113F -- */
+ Sm, So, So, Sm, So, So, Sm, So, So, So, So, So, So, So, Sm, So,
+/* DATA_BLOCK: -- 0x1140..0x114F -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, So, Sm, Sm,
+/* DATA_BLOCK: -- 0x1150..0x115F -- */
+ So, So, Sm, So, Sm, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1160..0x116F -- */
+ So, So, So, So, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x1170..0x117F -- */
+ Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x1180..0x118F -- */
+ So, So, So, So, So, So, So, So, Ps, Pe, Ps, Pe, So, So, So, So,
+/* DATA_BLOCK: -- 0x1190..0x119F -- */
+ Sm, Sm, So, So, So, So, So, So, So, Ps, Pe, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x11A0..0x11AF -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, Sm, So, So, So,
+/* DATA_BLOCK: -- 0x11B0..0x11BF -- */
+ So, So, So, So, So, So, So, So, So, So, So, Sm, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x11C0..0x11CF -- */
+ Sm, Sm, Sm, Sm, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x11D0..0x11DF -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x11E0..0x11EF -- */
+ Sm, Sm, So, So, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x11F0..0x11FF -- */
+ So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1200..0x120F -- */
+ So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1210..0x121F -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, So, So, So, So,
+/* DATA_BLOCK: -- 0x1220..0x122F -- */
+ So, So, So, So, So, So, So, So, So, So, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1230..0x123F -- */
+ So, So, So, So, So, So, So, Sm, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1240..0x124F -- */
+ So, Sm, So, So, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1250..0x125F -- */
+ So, So, So, So, So, So, So, So, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x1260..0x126F -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, Sm,
+/* DATA_BLOCK: -- 0x1270..0x127F -- */
+ So, So, So, So, So, So, So, So, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe,
+/* DATA_BLOCK: -- 0x1280..0x128F -- */
+ Ps, Pe, Ps, Pe, Ps, Pe, No, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1290..0x129F -- */
+ No, No, No, No, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x12A0..0x12AF -- */
+ Sm, Sm, Sm, Sm, Sm, Ps, Pe, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x12B0..0x12BF -- */
+ Sm, Sm, Sm, Sm, Sm, Sm, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe,
+/* DATA_BLOCK: -- 0x12C0..0x12CF -- */
+ Sm, Sm, Sm, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps,
+/* DATA_BLOCK: -- 0x12D0..0x12DF -- */
+ Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Sm, Sm, Sm, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x12E0..0x12EF -- */
+ Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Ps, Pe, Ps, Pe, Sm, Sm, Sm, Sm,
+/* DATA_BLOCK: -- 0x12F0..0x12FF -- */
+ Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Sm, Ps, Pe, Sm, Sm,
+/* DATA_BLOCK: -- 0x1300..0x130F -- */
+ Sm, Sm, Sm, Sm, Sm, So, So, Sm, Sm, Sm, Sm, Sm, Sm, So, So, So,
+/* DATA_BLOCK: -- 0x1310..0x131F -- */
+ So, So, So, So, Cn, Cn, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1320..0x132F -- */
+ So, So, So, So, So, So, Cn, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1330..0x133F -- */
+ Lu, Ll, Lu, Lu, Lu, Ll, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x1340..0x134F -- */
+ Lu, Ll, Lu, Ll, Ll, Lu, Ll, Ll, Ll, Ll, Ll, Ll, Lm, Lm, Lu, Lu,
+/* DATA_BLOCK: -- 0x1350..0x135F -- */
+ Lu, Ll, Lu, Ll, Ll, So, So, So, So, So, So, Lu, Ll, Lu, Ll, Mn,
+/* DATA_BLOCK: -- 0x1360..0x136F -- */
+ Mn, Mn, Lu, Ll, Cn, Cn, Cn, Cn, Cn, Po, Po, Po, Po, No, Po, Po,
+/* DATA_BLOCK: -- 0x1370..0x137F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Cn, Ll, Cn, Cn, Cn, Cn, Cn, Ll, Cn, Cn,
+/* DATA_BLOCK: -- 0x1380..0x138F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lm,
+/* DATA_BLOCK: -- 0x1390..0x139F -- */
+ Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x13A0..0x13AF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x13B0..0x13BF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x13C0..0x13CF -- */
+ Po, Po, Pi, Pf, Pi, Pf, Po, Po, Po, Pi, Pf, Po, Pi, Pf, Po, Po,
+/* DATA_BLOCK: -- 0x13D0..0x13DF -- */
+ Po, Po, Po, Po, Po, Po, Po, Pd, Po, Po, Pd, Po, Pi, Pf, Po, Po,
+/* DATA_BLOCK: -- 0x13E0..0x13EF -- */
+ Pi, Pf, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Po, Po, Po, Po, Po, Lm,
+/* DATA_BLOCK: -- 0x13F0..0x13FF -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Pd, Pd, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x1400..0x140F -- */
+ Pd, Po, Ps, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x1410..0x141F -- */
+ So, So, Po, Po, Po, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Pd, Cn, Cn,
+/* DATA_BLOCK: -- 0x1420..0x142F -- */
+ So, So, So, So, So, So, So, So, So, So, Cn, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1430..0x143F -- */
+ So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1440..0x144F -- */
+ So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1450..0x145F -- */
+ Zs, Po, Po, Po, So, Lm, Lo, Nl, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe,
+/* DATA_BLOCK: -- 0x1460..0x146F -- */
+ Ps, Pe, So, So, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Pd, Ps, Pe, Pe,
+/* DATA_BLOCK: -- 0x1470..0x147F -- */
+ So, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Mn, Mn, Mn, Mn, Mc, Mc,
+/* DATA_BLOCK: -- 0x1480..0x148F -- */
+ Pd, Lm, Lm, Lm, Lm, Lm, So, So, Nl, Nl, Nl, Lm, Lo, Po, So, So,
+/* DATA_BLOCK: -- 0x1490..0x149F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Mn, Sk, Sk, Lm, Lm, Lo,
+/* DATA_BLOCK: -- 0x14A0..0x14AF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Po, Lm, Lm, Lm, Lo,
+/* DATA_BLOCK: -- 0x14B0..0x14BF -- */
+ Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x14C0..0x14CF -- */
+ So, So, No, No, No, No, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x14D0..0x14DF -- */
+ So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, So,
+/* DATA_BLOCK: -- 0x14E0..0x14EF -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn,
+/* DATA_BLOCK: -- 0x14F0..0x14FF -- */
+ No, No, No, No, No, No, No, No, No, No, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1500..0x150F -- */
+ So, So, So, So, So, So, So, So, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1510..0x151F -- */
+ So, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1520..0x152F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x1530..0x153F -- */
+ Lo, Lo, Lo, Lo, Lo, Lm, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1540..0x154F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lm, Po, Po, Po,
+/* DATA_BLOCK: -- 0x1550..0x155F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Lo, Lo, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1560..0x156F -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lo, Mn,
+/* DATA_BLOCK: -- 0x1570..0x157F -- */
+ Me, Me, Me, Po, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Po, Lm,
+/* DATA_BLOCK: -- 0x1580..0x158F -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lm, Lm, Mn, Mn,
+/* DATA_BLOCK: -- 0x1590..0x159F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl,
+/* DATA_BLOCK: -- 0x15A0..0x15AF -- */
+ Mn, Mn, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x15B0..0x15BF -- */
+ Sk, Sk, Sk, Sk, Sk, Sk, Sk, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x15C0..0x15CF -- */
+ Sk, Sk, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x15D0..0x15DF -- */
+ Ll, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x15E0..0x15EF -- */
+ Lm, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Ll, Lu, Ll, Lu, Lu, Ll,
+/* DATA_BLOCK: -- 0x15F0..0x15FF -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lm, Sk, Sk, Lu, Ll, Lu, Ll, Lo,
+/* DATA_BLOCK: -- 0x1600..0x160F -- */
+ Lu, Ll, Lu, Ll, Ll, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x1610..0x161F -- */
+ Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Lu, Lu, Lu, Lu, Ll,
+/* DATA_BLOCK: -- 0x1620..0x162F -- */
+ Lu, Lu, Lu, Lu, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll, Lu, Ll,
+/* DATA_BLOCK: -- 0x1630..0x163F -- */
+ Lu, Ll, Lu, Ll, Lu, Lu, Lu, Lu, Ll, Lu, Ll, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1640..0x164F -- */
+ Lu, Ll, Cn, Ll, Cn, Ll, Lu, Ll, Lu, Ll, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1650..0x165F -- */
+ Cn, Cn, Lm, Lm, Lm, Lu, Ll, Lo, Lm, Lm, Ll, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1660..0x166F -- */
+ Lo, Lo, Mn, Lo, Lo, Lo, Mn, Lo, Lo, Lo, Lo, Mn, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1670..0x167F -- */
+ Lo, Lo, Lo, Mc, Mc, Mn, Mn, Mc, So, So, So, So, Mn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1680..0x168F -- */
+ No, No, No, No, No, No, So, So, Sc, So, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1690..0x169F -- */
+ Lo, Lo, Lo, Lo, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x16A0..0x16AF -- */
+ Mc, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x16B0..0x16BF -- */
+ Lo, Lo, Lo, Lo, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x16C0..0x16CF -- */
+ Mc, Mc, Mc, Mc, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po, Po,
+/* DATA_BLOCK: -- 0x16D0..0x16DF -- */
+ Mn, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Po, Po, Po, Lo, Po, Lo, Lo, Mn,
+/* DATA_BLOCK: -- 0x16E0..0x16EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Po, Po,
+/* DATA_BLOCK: -- 0x16F0..0x16FF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x1700..0x170F -- */
+ Mn, Mn, Mc, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po,
+/* DATA_BLOCK: -- 0x1710..0x171F -- */
+ Lo, Lo, Lo, Mn, Mc, Mc, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Mc, Mc,
+/* DATA_BLOCK: -- 0x1720..0x172F -- */
+ Mc, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn, Lm,
+/* DATA_BLOCK: -- 0x1730..0x173F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Cn, Cn, Po, Po,
+/* DATA_BLOCK: -- 0x1740..0x174F -- */
+ Lo, Lo, Lo, Lo, Lo, Mn, Lm, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1750..0x175F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Lo, Lo, Lo, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x1760..0x176F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mc,
+/* DATA_BLOCK: -- 0x1770..0x177F -- */
+ Mc, Mn, Mn, Mc, Mc, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1780..0x178F -- */
+ Lo, Lo, Lo, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mc, Cn, Cn,
+/* DATA_BLOCK: -- 0x1790..0x179F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x17A0..0x17AF -- */
+ Lm, Lo, Lo, Lo, Lo, Lo, Lo, So, So, So, Lo, Mc, Mn, Mc, Lo, Lo,
+/* DATA_BLOCK: -- 0x17B0..0x17BF -- */
+ Mn, Lo, Mn, Mn, Mn, Lo, Lo, Mn, Mn, Lo, Lo, Lo, Lo, Lo, Mn, Mn,
+/* DATA_BLOCK: -- 0x17C0..0x17CF -- */
+ Lo, Mn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x17D0..0x17DF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lm, Po, Po,
+/* DATA_BLOCK: -- 0x17E0..0x17EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mc, Mn, Mn, Mc, Mc,
+/* DATA_BLOCK: -- 0x17F0..0x17FF -- */
+ Po, Po, Lo, Lm, Lm, Mc, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1800..0x180F -- */
+ Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x1810..0x181F -- */
+ Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1820..0x182F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Sk, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x1830..0x183F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lm, Sk, Sk, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1840..0x184F -- */
+ Lo, Lo, Lo, Mc, Mc, Mn, Mc, Mc, Mn, Mc, Mc, Po, Mc, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1850..0x185F -- */
+ Cn, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1860..0x186F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1870..0x187F -- */
+ Cs, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1880..0x188F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cs,
+/* DATA_BLOCK: -- 0x1890..0x189F -- */
+ Co, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x18A0..0x18AF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Co,
+/* DATA_BLOCK: -- 0x18B0..0x18BF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x18C0..0x18CF -- */
+ Cn, Cn, Cn, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Cn, Cn, Cn, Lo, Mn, Lo,
+/* DATA_BLOCK: -- 0x18D0..0x18DF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Sm, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x18E0..0x18EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Cn,
+/* DATA_BLOCK: -- 0x18F0..0x18FF -- */
+ Lo, Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1900..0x190F -- */
+ Lo, Lo, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x1910..0x191F -- */
+ Sk, Sk, Sk, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1920..0x192F -- */
+ Cn, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1930..0x193F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Pe, Ps,
+/* DATA_BLOCK: -- 0x1940..0x194F -- */
+ Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1950..0x195F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, So,
+/* DATA_BLOCK: -- 0x1960..0x196F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Sc, So, So, So,
+/* DATA_BLOCK: -- 0x1970..0x197F -- */
+ Po, Po, Po, Po, Po, Po, Po, Ps, Pe, Po, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1980..0x198F -- */
+ Po, Pd, Pd, Pc, Pc, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps, Pe, Ps,
+/* DATA_BLOCK: -- 0x1990..0x199F -- */
+ Pe, Ps, Pe, Ps, Pe, Po, Po, Ps, Pe, Po, Po, Po, Po, Pc, Pc, Pc,
+/* DATA_BLOCK: -- 0x19A0..0x19AF -- */
+ Po, Po, Po, Cn, Po, Po, Po, Po, Pd, Ps, Pe, Ps, Pe, Ps, Pe, Po,
+/* DATA_BLOCK: -- 0x19B0..0x19BF -- */
+ Po, Po, Sm, Pd, Sm, Sm, Sm, Cn, Po, Sc, Po, Po, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x19C0..0x19CF -- */
+ Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x19D0..0x19DF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cf,
+/* DATA_BLOCK: -- 0x19E0..0x19EF -- */
+ Cn, Po, Po, Po, Sc, Po, Po, Po, Ps, Pe, Po, Sm, Po, Pd, Po, Po,
+/* DATA_BLOCK: -- 0x19F0..0x19FF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ps, Sm, Pe, Sm, Ps,
+/* DATA_BLOCK: -- 0x1A00..0x1A0F -- */
+ Pe, Po, Ps, Pe, Po, Po, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1A10..0x1A1F -- */
+ Lm, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1A20..0x1A2F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lm, Lm,
+/* DATA_BLOCK: -- 0x1A30..0x1A3F -- */
+ Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1A40..0x1A4F -- */
+ Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1A50..0x1A5F -- */
+ Sc, Sc, Sm, Sk, So, Sc, Sc, Cn, So, Sm, Sm, Sm, Sm, So, So, Cn,
+/* DATA_BLOCK: -- 0x1A60..0x1A6F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cf, Cf, Cf, So, So, Cn, Cn,
+/* DATA_BLOCK: -- 0x1A70..0x1A7F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1A80..0x1A8F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x1A90..0x1A9F -- */
+ Po, Po, Po, Cn, Cn, Cn, Cn, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1AA0..0x1AAF -- */
+ No, No, No, No, Cn, Cn, Cn, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1AB0..0x1ABF -- */
+ Nl, Nl, Nl, Nl, Nl, No, No, No, No, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x1AC0..0x1ACF -- */
+ So, So, So, So, So, So, So, So, So, So, No, No, So, So, So, Cn,
+/* DATA_BLOCK: -- 0x1AD0..0x1ADF -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1AE0..0x1AEF -- */
+ So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1AF0..0x1AFF -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1B00..0x1B0F -- */
+ Mn, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1B10..0x1B1F -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1B20..0x1B2F -- */
+ No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1B30..0x1B3F -- */
+ Lo, Nl, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Nl, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1B40..0x1B4F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1B50..0x1B5F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Po,
+/* DATA_BLOCK: -- 0x1B60..0x1B6F -- */
+ Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1B70..0x1B7F -- */
+ Po, Nl, Nl, Nl, Nl, Nl, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1B80..0x1B8F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x1B90..0x1B9F -- */
+ Lu, Lu, Lu, Lu, Cn, Cn, Cn, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x1BA0..0x1BAF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1BB0..0x1BBF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1BC0..0x1BCF -- */
+ Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po,
+/* DATA_BLOCK: -- 0x1BD0..0x1BDF -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Cn, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x1BE0..0x1BEF -- */
+ Lu, Lu, Lu, Cn, Lu, Lu, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x1BF0..0x1BFF -- */
+ Ll, Ll, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x1C00..0x1C0F -- */
+ Ll, Ll, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Ll, Ll, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1C10..0x1C1F -- */
+ Lm, Lm, Lm, Lm, Lm, Lm, Cn, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x1C20..0x1C2F -- */
+ Lm, Cn, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1C30..0x1C3F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1C40..0x1C4F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn, Cn, Cn, Lo, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x1C50..0x1C5F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Po, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1C60..0x1C6F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, So, So, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1C70..0x1C7F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1C80..0x1C8F -- */
+ Lo, Lo, Lo, Cn, Lo, Lo, Cn, Cn, Cn, Cn, Cn, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1C90..0x1C9F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, No, No, No, No, No, No, Cn, Cn, Cn, Po,
+/* DATA_BLOCK: -- 0x1CA0..0x1CAF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Po,
+/* DATA_BLOCK: -- 0x1CB0..0x1CBF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, No, No, Lo, Lo,
+/* DATA_BLOCK: -- 0x1CC0..0x1CCF -- */
+ Cn, Cn, No, No, No, No, No, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1CD0..0x1CDF -- */
+ Lo, Mn, Mn, Mn, Cn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x1CE0..0x1CEF -- */
+ Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1CF0..0x1CFF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x1D00..0x1D0F -- */
+ No, No, No, No, No, No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1D10..0x1D1F -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1D20..0x1D2F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, No, No, Po,
+/* DATA_BLOCK: -- 0x1D30..0x1D3F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, No, No, No,
+/* DATA_BLOCK: -- 0x1D40..0x1D4F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, So, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1D50..0x1D5F -- */
+ Lo, Lo, Lo, Lo, Lo, Mn, Mn, Cn, Cn, Cn, Cn, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1D60..0x1D6F -- */
+ Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1D70..0x1D7F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Po, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x1D80..0x1D8F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1D90..0x1D9F -- */
+ Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1DA0..0x1DAF -- */
+ Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po, Po, Po, Po, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1DB0..0x1DBF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1DC0..0x1DCF -- */
+ Lu, Lu, Lu, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1DD0..0x1DDF -- */
+ Ll, Ll, Ll, Cn, Cn, Cn, Cn, Cn, Cn, Cn, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1DE0..0x1DEF -- */
+ Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1DF0..0x1DFF -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, No, No, No, Cn,
+/* DATA_BLOCK: -- 0x1E00..0x1E0F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Mn, Mn, Pd, Cn, Cn,
+/* DATA_BLOCK: -- 0x1E10..0x1E1F -- */
+ Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1E20..0x1E2F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x1E30..0x1E3F -- */
+ No, No, No, No, No, No, No, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1E40..0x1E4F -- */
+ Mn, No, No, No, No, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1E50..0x1E5F -- */
+ Lo, Lo, Mn, Mn, Mn, Mn, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1E60..0x1E6F -- */
+ Lo, Lo, Lo, Lo, Lo, No, No, No, No, No, No, No, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1E70..0x1E7F -- */
+ Mc, Mn, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1E80..0x1E8F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x1E90..0x1E9F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Po, Po, Po, Po, Po, Po, Po, Cn, Cn,
+/* DATA_BLOCK: -- 0x1EA0..0x1EAF -- */
+ No, No, No, No, No, No, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x1EB0..0x1EBF -- */
+ Mn, Lo, Lo, Mn, Mn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x1EC0..0x1ECF -- */
+ Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Po, Po, Cf, Po, Po,
+/* DATA_BLOCK: -- 0x1ED0..0x1EDF -- */
+ Po, Po, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cf, Cn, Cn,
+/* DATA_BLOCK: -- 0x1EE0..0x1EEF -- */
+ Mn, Mn, Mn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x1EF0..0x1EFF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x1F00..0x1F0F -- */
+ Mn, Mn, Mn, Mn, Mn, Cn, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x1F10..0x1F1F -- */
+ Po, Po, Po, Po, Lo, Mc, Mc, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1F20..0x1F2F -- */
+ Lo, Lo, Lo, Mn, Po, Po, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1F30..0x1F3F -- */
+ Lo, Lo, Lo, Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc,
+/* DATA_BLOCK: -- 0x1F40..0x1F4F -- */
+ Mc, Lo, Lo, Lo, Lo, Po, Po, Po, Po, Mn, Mn, Mn, Mn, Po, Mc, Mn,
+/* DATA_BLOCK: -- 0x1F50..0x1F5F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Lo, Po, Lo, Po, Po, Po,
+/* DATA_BLOCK: -- 0x1F60..0x1F6F -- */
+ Cn, No, No, No, No, No, No, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x1F70..0x1F7F -- */
+ No, No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1F80..0x1F8F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mc, Mc, Mc, Mn,
+/* DATA_BLOCK: -- 0x1F90..0x1F9F -- */
+ Mn, Mn, Mc, Mc, Mn, Mc, Mn, Mn, Po, Po, Po, Po, Po, Po, Mn, Lo,
+/* DATA_BLOCK: -- 0x1FA0..0x1FAF -- */
+ Lo, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1FB0..0x1FBF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x1FC0..0x1FCF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x1FD0..0x1FDF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Po, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x1FE0..0x1FEF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn,
+/* DATA_BLOCK: -- 0x1FF0..0x1FFF -- */
+ Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2000..0x200F -- */
+ Mn, Mn, Mc, Mc, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x2010..0x201F -- */
+ Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Mn, Mn, Lo, Mc, Mc,
+/* DATA_BLOCK: -- 0x2020..0x202F -- */
+ Mn, Mc, Mc, Mc, Mc, Cn, Cn, Mc, Mc, Cn, Cn, Mc, Mc, Mc, Cn, Cn,
+/* DATA_BLOCK: -- 0x2030..0x203F -- */
+ Lo, Cn, Cn, Cn, Cn, Cn, Cn, Mc, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2040..0x204F -- */
+ Lo, Lo, Mc, Mc, Cn, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2050..0x205F -- */
+ Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2060..0x206F -- */
+ Lo, Lo, Lo, Lo, Lo, Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2070..0x207F -- */
+ Mc, Mc, Mn, Mn, Mn, Mc, Mn, Lo, Lo, Lo, Lo, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x2080..0x208F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Po, Po, Cn, Po, Mn, Lo,
+/* DATA_BLOCK: -- 0x2090..0x209F -- */
+ Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mc, Mc, Mc, Mc, Mn,
+/* DATA_BLOCK: -- 0x20A0..0x20AF -- */
+ Mn, Mc, Mn, Mn, Lo, Lo, Po, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x20B0..0x20BF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mc,
+/* DATA_BLOCK: -- 0x20C0..0x20CF -- */
+ Mc, Mc, Mn, Mn, Mn, Mn, Cn, Cn, Mc, Mc, Mc, Mc, Mn, Mn, Mc, Mn,
+/* DATA_BLOCK: -- 0x20D0..0x20DF -- */
+ Mn, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x20E0..0x20EF -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Lo, Lo, Lo, Lo, Mn, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x20F0..0x20FF -- */
+ Mc, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mc, Mn,
+/* DATA_BLOCK: -- 0x2100..0x210F -- */
+ Mn, Po, Po, Po, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2110..0x211F -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2120..0x212F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mc, Mn, Mc, Mc,
+/* DATA_BLOCK: -- 0x2130..0x213F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Lo, Po, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2140..0x214F -- */
+ Mc, Mc, Mn, Mn, Mn, Mn, Mc, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2150..0x215F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, No, No, Po, Po, Po, So,
+/* DATA_BLOCK: -- 0x2160..0x216F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mn, Po, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2170..0x217F -- */
+ No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo,
+/* DATA_BLOCK: -- 0x2180..0x218F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Cn, Cn, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2190..0x219F -- */
+ Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x21A0..0x21AF -- */
+ Mc, Mc, Mc, Mc, Mc, Mc, Cn, Mc, Mc, Cn, Cn, Mn, Mn, Mc, Mn, Lo,
+/* DATA_BLOCK: -- 0x21B0..0x21BF -- */
+ Mc, Lo, Mc, Mn, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x21C0..0x21CF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x21D0..0x21DF -- */
+ Lo, Mc, Mc, Mc, Mn, Mn, Mn, Mn, Cn, Cn, Mn, Mn, Mc, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x21E0..0x21EF -- */
+ Mn, Lo, Po, Lo, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x21F0..0x21FF -- */
+ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2200..0x220F -- */
+ Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Lo, Mn, Mn, Mn, Mn, Po,
+/* DATA_BLOCK: -- 0x2210..0x221F -- */
+ Po, Po, Po, Po, Po, Po, Po, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2220..0x222F -- */
+ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mc, Mn, Mn, Mn, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2230..0x223F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2240..0x224F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn, Mn, Po, Po, Po, Lo, Po, Po,
+/* DATA_BLOCK: -- 0x2250..0x225F -- */
+ Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2260..0x226F -- */
+ Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2270..0x227F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mc, Mn,
+/* DATA_BLOCK: -- 0x2280..0x228F -- */
+ Lo, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2290..0x229F -- */
+ Po, Po, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x22A0..0x22AF -- */
+ Cn, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x22B0..0x22BF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Mc, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x22C0..0x22CF -- */
+ Mn, Mc, Mn, Mn, Mc, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x22D0..0x22DF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x22E0..0x22EF -- */
+ Lo, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Mn, Cn, Mn, Mn, Cn, Mn,
+/* DATA_BLOCK: -- 0x22F0..0x22FF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Lo, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2300..0x230F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2310..0x231F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mc, Mc, Mc, Mc, Mc, Cn,
+/* DATA_BLOCK: -- 0x2320..0x232F -- */
+ Mn, Mn, Cn, Mc, Mc, Mn, Mc, Mn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2330..0x233F -- */
+ Lo, Lo, Lo, Mn, Mn, Mc, Mc, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2340..0x234F -- */
+ Mn, Mn, Lo, Mc, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2350..0x235F -- */
+ Lo, Lo, Lo, Lo, Mc, Mc, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Mc, Mc,
+/* DATA_BLOCK: -- 0x2360..0x236F -- */
+ Mn, Mc, Mn, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po, Po,
+/* DATA_BLOCK: -- 0x2370..0x237F -- */
+ No, No, No, No, No, So, So, So, So, So, So, So, So, Sc, Sc, Sc,
+/* DATA_BLOCK: -- 0x2380..0x238F -- */
+ Sc, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x2390..0x239F -- */
+ So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Po,
+/* DATA_BLOCK: -- 0x23A0..0x23AF -- */
+ Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Nl, Cn,
+/* DATA_BLOCK: -- 0x23B0..0x23BF -- */
+ Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x23C0..0x23CF -- */
+ Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x23D0..0x23DF -- */
+ Lo, Po, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x23E0..0x23EF -- */
+ Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf,
+/* DATA_BLOCK: -- 0x23F0..0x23FF -- */
+ Mn, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2400..0x240F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2410..0x241F -- */
+ Mn, Mn, Mn, Mn, Mn, Po, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2420..0x242F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Po, Po, Po, Po, Po, So, So, So, So,
+/* DATA_BLOCK: -- 0x2430..0x243F -- */
+ Lm, Lm, Lm, Lm, Po, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2440..0x244F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x2450..0x245F -- */
+ No, No, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2460..0x246F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2470..0x247F -- */
+ No, No, No, No, No, No, No, Po, Po, Po, Po, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2480..0x248F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x2490..0x249F -- */
+ Lo, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x24A0..0x24AF -- */
+ Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x24B0..0x24BF -- */
+ Mc, Mc, Mc, Mc, Mc, Mc, Mc, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x24C0..0x24CF -- */
+ Mn, Mn, Mn, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm,
+/* DATA_BLOCK: -- 0x24D0..0x24DF -- */
+ Lm, Lm, Po, Lm, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x24E0..0x24EF -- */
+ Mc, Mc, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x24F0..0x24FF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2500..0x250F -- */
+ Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2510..0x251F -- */
+ Lm, Lm, Lm, Lm, Cn, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Cn, Lm, Lm, Cn,
+/* DATA_BLOCK: -- 0x2520..0x252F -- */
+ Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2530..0x253F -- */
+ Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2540..0x254F -- */
+ Lo, Lo, Lo, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2550..0x255F -- */
+ Cn, Cn, Cn, Cn, Lo, Lo, Lo, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2560..0x256F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Cn, So, Mn, Mn, Po,
+/* DATA_BLOCK: -- 0x2570..0x257F -- */
+ Cf, Cf, Cf, Cf, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2580..0x258F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2590..0x259F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x25A0..0x25AF -- */
+ So, So, So, So, So, So, So, Cn, Cn, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x25B0..0x25BF -- */
+ So, So, So, So, So, Mc, Mc, Mn, Mn, Mn, So, So, So, Mc, Mc, Mc,
+/* DATA_BLOCK: -- 0x25C0..0x25CF -- */
+ Mc, Mc, Mc, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Cf, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x25D0..0x25DF -- */
+ Mn, Mn, Mn, So, So, Mn, Mn, Mn, Mn, Mn, Mn, Mn, So, So, So, So,
+/* DATA_BLOCK: -- 0x25E0..0x25EF -- */
+ So, So, So, So, So, So, So, So, So, So, Mn, Mn, Mn, Mn, So, So,
+/* DATA_BLOCK: -- 0x25F0..0x25FF -- */
+ So, So, Mn, Mn, Mn, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2600..0x260F -- */
+ No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2610..0x261F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2620..0x262F -- */
+ Ll, Ll, Ll, Ll, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x2630..0x263F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Ll, Ll,
+/* DATA_BLOCK: -- 0x2640..0x264F -- */
+ Ll, Ll, Ll, Ll, Ll, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2650..0x265F -- */
+ Lu, Lu, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2660..0x266F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Cn, Lu, Lu,
+/* DATA_BLOCK: -- 0x2670..0x267F -- */
+ Cn, Cn, Lu, Cn, Cn, Lu, Lu, Cn, Cn, Lu, Lu, Lu, Lu, Cn, Lu, Lu,
+/* DATA_BLOCK: -- 0x2680..0x268F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Ll, Ll, Ll, Ll, Cn, Ll, Cn, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2690..0x269F -- */
+ Ll, Ll, Ll, Ll, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x26A0..0x26AF -- */
+ Ll, Ll, Ll, Ll, Lu, Lu, Cn, Lu, Lu, Lu, Lu, Cn, Cn, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x26B0..0x26BF -- */
+ Lu, Lu, Lu, Lu, Lu, Cn, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Cn, Ll, Ll,
+/* DATA_BLOCK: -- 0x26C0..0x26CF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Cn, Lu, Lu, Lu, Lu, Cn,
+/* DATA_BLOCK: -- 0x26D0..0x26DF -- */
+ Lu, Lu, Lu, Lu, Lu, Cn, Lu, Cn, Cn, Cn, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x26E0..0x26EF -- */
+ Lu, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x26F0..0x26FF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x2700..0x270F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2710..0x271F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x2720..0x272F -- */
+ Lu, Sm, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2730..0x273F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Sm, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2740..0x274F -- */
+ Ll, Ll, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x2750..0x275F -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Sm, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2760..0x276F -- */
+ Ll, Ll, Ll, Ll, Ll, Sm, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x2770..0x277F -- */
+ Lu, Lu, Lu, Lu, Lu, Sm, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2780..0x278F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Sm,
+/* DATA_BLOCK: -- 0x2790..0x279F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu,
+/* DATA_BLOCK: -- 0x27A0..0x27AF -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Sm,
+/* DATA_BLOCK: -- 0x27B0..0x27BF -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Sm, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x27C0..0x27CF -- */
+ Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Lu, Sm, Ll, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x27D0..0x27DF -- */
+ Ll, Ll, Ll, Sm, Ll, Ll, Ll, Ll, Ll, Ll, Lu, Ll, Cn, Cn, Nd, Nd,
+/* DATA_BLOCK: -- 0x27E0..0x27EF -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd,
+/* DATA_BLOCK: -- 0x27F0..0x27FF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, So, So, So, So, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2800..0x280F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, So, So, So,
+/* DATA_BLOCK: -- 0x2810..0x281F -- */
+ So, So, So, So, So, Mn, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x2820..0x282F -- */
+ So, So, So, So, Mn, So, So, Po, Po, Po, Po, Po, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2830..0x283F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2840..0x284F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Lo, Ll, Ll, Ll, Ll, Ll,
+/* DATA_BLOCK: -- 0x2850..0x285F -- */
+ Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Ll, Cn,
+/* DATA_BLOCK: -- 0x2860..0x286F -- */
+ Cn, Cn, Cn, Cn, Cn, Ll, Ll, Ll, Ll, Ll, Ll, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2870..0x287F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2880..0x288F -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Mn, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2890..0x289F -- */
+ Mn, Mn, Cn, Mn, Mn, Cn, Mn, Mn, Mn, Mn, Mn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x28A0..0x28AF -- */
+ Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Cn, Cn,
+/* DATA_BLOCK: -- 0x28B0..0x28BF -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Mn,
+/* DATA_BLOCK: -- 0x28C0..0x28CF -- */
+ Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lm, Lm, Lm, Lm, Lm, Lm, Lm, Cn, Cn,
+/* DATA_BLOCK: -- 0x28D0..0x28DF -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Cn, Cn, Lo, So,
+/* DATA_BLOCK: -- 0x28E0..0x28EF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Cn,
+/* DATA_BLOCK: -- 0x28F0..0x28FF -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2900..0x290F -- */
+ Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Nd, Cn, Cn, Cn, Cn, Cn, Sc,
+/* DATA_BLOCK: -- 0x2910..0x291F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lm, Mn, Mn, Mn, Mn,
+/* DATA_BLOCK: -- 0x2920..0x292F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Cn,
+/* DATA_BLOCK: -- 0x2930..0x293F -- */
+ Lo, Lo, Lo, Lo, Lo, Cn, Cn, No, No, No, No, No, No, No, No, No,
+/* DATA_BLOCK: -- 0x2940..0x294F -- */
+ Ll, Ll, Ll, Ll, Mn, Mn, Mn, Mn, Mn, Mn, Mn, Lm, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2950..0x295F -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, So, No, No, No,
+/* DATA_BLOCK: -- 0x2960..0x296F -- */
+ Sc, No, No, No, No, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2970..0x297F -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, No, No, So, No,
+/* DATA_BLOCK: -- 0x2980..0x298F -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, No, No, Cn, Cn,
+/* DATA_BLOCK: -- 0x2990..0x299F -- */
+ Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x29A0..0x29AF -- */
+ Cn, Lo, Lo, Cn, Lo, Cn, Cn, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x29B0..0x29BF -- */
+ Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Lo, Cn, Lo, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x29C0..0x29CF -- */
+ Cn, Cn, Lo, Cn, Cn, Cn, Cn, Lo, Cn, Lo, Cn, Lo, Cn, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x29D0..0x29DF -- */
+ Cn, Lo, Lo, Cn, Lo, Cn, Cn, Lo, Cn, Lo, Cn, Lo, Cn, Lo, Cn, Lo,
+/* DATA_BLOCK: -- 0x29E0..0x29EF -- */
+ Cn, Lo, Lo, Cn, Lo, Cn, Cn, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x29F0..0x29FF -- */
+ Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Cn, Lo, Cn,
+/* DATA_BLOCK: -- 0x2A00..0x2A0F -- */
+ Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2A10..0x2A1F -- */
+ Cn, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo, Cn, Lo, Lo, Lo, Lo, Lo,
+/* DATA_BLOCK: -- 0x2A20..0x2A2F -- */
+ Sm, Sm, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2A30..0x2A3F -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2A40..0x2A4F -- */
+ Cn, So, So, So, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x2A50..0x2A5F -- */
+ No, No, No, No, No, No, No, No, No, No, No, No, No, So, So, So,
+/* DATA_BLOCK: -- 0x2A60..0x2A6F -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, Cn,
+/* DATA_BLOCK: -- 0x2A70..0x2A7F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x2A80..0x2A8F -- */
+ So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2A90..0x2A9F -- */
+ So, So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2AA0..0x2AAF -- */
+ So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2AB0..0x2ABF -- */
+ So, So, So, So, So, So, So, So, So, So, So, Sk, Sk, Sk, Sk, Sk,
+/* DATA_BLOCK: -- 0x2AC0..0x2ACF -- */
+ So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, So, So, So, So,
+/* DATA_BLOCK: -- 0x2AD0..0x2ADF -- */
+ So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x2AE0..0x2AEF -- */
+ So, So, So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2AF0..0x2AFF -- */
+ So, So, So, So, So, So, So, So, So, So, So, So, So, So, Cn, So,
+/* DATA_BLOCK: -- 0x2B00..0x2B0F -- */
+ So, So, So, So, So, So, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, So, So,
+/* DATA_BLOCK: -- 0x2B10..0x2B1F -- */
+ So, So, So, Cn, So, So, So, So, So, So, So, So, So, So, So, So,
+/* DATA_BLOCK: -- 0x2B20..0x2B2F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2B30..0x2B3F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Cn, Cn,
+/* DATA_BLOCK: -- 0x2B40..0x2B4F -- */
+ Cn, Lo, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2B50..0x2B5F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Lo, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2B60..0x2B6F -- */
+ Cn, Cf, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn,
+/* DATA_BLOCK: -- 0x2B70..0x2B7F -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Co, Cn, Cn,
+/* DATA_BLOCK: -- 0x2B80..0x2B8D -- */
+ Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Cn, Co
+};
+
+static const SBUInt16 MainGeneralCategoryIndexes[4119] = {
+/* INDEX_BLOCK: -- 0x0000..0x0030 -- */
+ 0x0000, 0x0000, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0000, 0x0000, 0x0070, 0x0080,
+ 0x0090, 0x00A0, 0x00B0, 0x00C0, 0x00D0, 0x00D0, 0x00D0, 0x00E0, 0x00F0, 0x00D0, 0x00D0, 0x0100,
+ 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x00D0, 0x0170, 0x00D0, 0x00D0, 0x00D0, 0x0180,
+ 0x0190, 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x01A0, 0x00B0, 0x01B0, 0x01C0, 0x01D0, 0x01E0, 0x01F0,
+ 0x0200,
+/* INDEX_BLOCK: -- 0x0031..0x0061 -- */
+ 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0210, 0x0220, 0x0230, 0x0240, 0x00B0, 0x0250,
+ 0x0260, 0x00D0, 0x0270, 0x0090, 0x0090, 0x0090, 0x00B0, 0x00B0, 0x00B0, 0x00D0, 0x00D0, 0x0280,
+ 0x00D0, 0x00D0, 0x00D0, 0x0290, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x02A0, 0x0090,
+ 0x02B0, 0x00B0, 0x00B0, 0x02C0, 0x02D0, 0x0200, 0x02E0, 0x02F0, 0x0300, 0x0310, 0x0320, 0x0330,
+ 0x0340,
+/* INDEX_BLOCK: -- 0x0062..0x0092 -- */
+ 0x0300, 0x0300, 0x0350, 0x0200, 0x0360, 0x0370, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0380,
+ 0x0390, 0x03A0, 0x03B0, 0x03C0, 0x0300, 0x0200, 0x03D0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x03E0, 0x03F0, 0x0400, 0x0300, 0x0410, 0x0420, 0x0300, 0x0430, 0x0440, 0x0450, 0x0300, 0x0460,
+ 0x0470, 0x0300, 0x0480, 0x0490, 0x0300, 0x0300, 0x04A0, 0x0200, 0x04B0, 0x0200, 0x04C0, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0093..0x00C3 -- */
+ 0x04D0, 0x04E0, 0x04F0, 0x0500, 0x0510, 0x0520, 0x0530, 0x0540, 0x0550, 0x0560, 0x0570, 0x0580,
+ 0x0590, 0x05A0, 0x0530, 0x0540, 0x05B0, 0x05C0, 0x05D0, 0x05E0, 0x05F0, 0x0600, 0x0610, 0x0540,
+ 0x0620, 0x0630, 0x0640, 0x0580, 0x0650, 0x0660, 0x0530, 0x0540, 0x0670, 0x0680, 0x0690, 0x0580,
+ 0x06A0, 0x06B0, 0x06C0, 0x06D0, 0x06E0, 0x06F0, 0x0700, 0x05E0, 0x0710, 0x0720, 0x0730, 0x0540,
+ 0x0740,
+/* INDEX_BLOCK: -- 0x00C4..0x00F4 -- */
+ 0x0750, 0x0760, 0x0580, 0x0770, 0x0780, 0x0730, 0x0540, 0x0790, 0x07A0, 0x07B0, 0x0580, 0x07C0,
+ 0x07D0, 0x0730, 0x0300, 0x07E0, 0x07F0, 0x0800, 0x0580, 0x0810, 0x0820, 0x0830, 0x0300, 0x0840,
+ 0x0850, 0x0860, 0x05E0, 0x0870, 0x0880, 0x0300, 0x0300, 0x0890, 0x08A0, 0x08B0, 0x08C0, 0x08C0,
+ 0x08D0, 0x0300, 0x08E0, 0x08F0, 0x0900, 0x0910, 0x08C0, 0x08C0, 0x0920, 0x0930, 0x0940, 0x0950,
+ 0x0960,
+/* INDEX_BLOCK: -- 0x00F5..0x0125 -- */
+ 0x0300, 0x0970, 0x0980, 0x0990, 0x09A0, 0x0200, 0x09B0, 0x09C0, 0x09D0, 0x08C0, 0x08C0, 0x0300,
+ 0x0300, 0x09E0, 0x09F0, 0x0A00, 0x0A10, 0x0A20, 0x0A30, 0x0A40, 0x0A50, 0x0090, 0x0090, 0x0A60,
+ 0x00B0, 0x00B0, 0x0A70, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0A80,
+ 0x0A90,
+/* INDEX_BLOCK: -- 0x0126..0x0156 -- */
+ 0x0300, 0x0300, 0x0A80, 0x0300, 0x0300, 0x0AA0, 0x0AB0, 0x0AC0, 0x0300, 0x0300, 0x0300, 0x0AB0,
+ 0x0300, 0x0300, 0x0300, 0x0AD0, 0x0AE0, 0x0AF0, 0x0300, 0x0B00, 0x0090, 0x0090, 0x0090, 0x0090,
+ 0x0090, 0x0B10, 0x0B20, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0157..0x0187 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0B30, 0x0300, 0x0B40, 0x0B50, 0x0300, 0x0300, 0x0300, 0x0300, 0x0B60,
+ 0x0B70, 0x0300, 0x0B80, 0x0300, 0x0B90, 0x0300, 0x0BA0, 0x0BB0, 0x0BC0, 0x0300, 0x0300, 0x0300,
+ 0x0BD0, 0x0BE0, 0x0BF0, 0x0C00, 0x0C10, 0x0C20, 0x0C00, 0x0300, 0x0300, 0x0C30, 0x0300, 0x0300,
+ 0x0C40,
+/* INDEX_BLOCK: -- 0x0188..0x01B8 -- */
+ 0x0C50, 0x0300, 0x0C60, 0x0300, 0x0300, 0x0300, 0x0300, 0x0C70, 0x0300, 0x0C80, 0x0C90, 0x0CA0,
+ 0x0CB0, 0x0300, 0x0CC0, 0x0CD0, 0x0300, 0x0300, 0x0CE0, 0x0300, 0x0CF0, 0x0D00, 0x0D10, 0x0D10,
+ 0x0300, 0x0D20, 0x0300, 0x0300, 0x0300, 0x0D30, 0x0D40, 0x0D50, 0x0C00, 0x0C00, 0x0D60, 0x0D70,
+ 0x0D80, 0x08C0, 0x08C0, 0x08C0, 0x0D90, 0x0300, 0x0300, 0x0DA0, 0x0DB0, 0x0A00, 0x0DC0, 0x0DD0,
+ 0x0DE0,
+/* INDEX_BLOCK: -- 0x01B9..0x01E9 -- */
+ 0x0300, 0x0DF0, 0x0400, 0x0300, 0x0300, 0x0E00, 0x0E10, 0x0300, 0x0300, 0x0E20, 0x0E30, 0x0E40,
+ 0x0400, 0x0300, 0x0E50, 0x0E60, 0x0090, 0x0090, 0x0E70, 0x0E80, 0x0E90, 0x0EA0, 0x0EB0, 0x00B0,
+ 0x00B0, 0x0EC0, 0x01B0, 0x01B0, 0x01B0, 0x0ED0, 0x0EE0, 0x00B0, 0x0EF0, 0x01B0, 0x01B0, 0x0200,
+ 0x0200, 0x0200, 0x0200, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0,
+ 0x0F00,
+/* INDEX_BLOCK: -- 0x01EA..0x021A -- */
+ 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0F10, 0x0F20, 0x0F10, 0x0F10, 0x0F20, 0x0F30,
+ 0x0F10, 0x0F40, 0x0F50, 0x0F50, 0x0F50, 0x0F60, 0x0F70, 0x0F80, 0x0F90, 0x0FA0, 0x0FB0, 0x0FC0,
+ 0x0FD0, 0x0FE0, 0x0FF0, 0x1000, 0x1010, 0x1020, 0x1030, 0x1040, 0x1050, 0x1050, 0x1060, 0x1070,
+ 0x1080, 0x1090, 0x10A0, 0x10B0, 0x10C0, 0x10D0, 0x10E0, 0x10F0, 0x1100, 0x1100, 0x1110, 0x1120,
+ 0x1130,
+/* INDEX_BLOCK: -- 0x021B..0x024B -- */
+ 0x0D10, 0x1140, 0x1150, 0x0D10, 0x1160, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170,
+ 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1180, 0x0D10, 0x1190,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x11A0, 0x0D10, 0x11B0, 0x1170, 0x11C0, 0x0D10, 0x11D0, 0x11E0,
+ 0x0D10, 0x0D10, 0x0D10, 0x11F0, 0x08C0, 0x1200, 0x08C0, 0x10F0, 0x10F0, 0x10F0, 0x1210, 0x0D10,
+ 0x0D10,
+/* INDEX_BLOCK: -- 0x024C..0x027C -- */
+ 0x0D10, 0x0D10, 0x1220, 0x10F0, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x1230, 0x1240, 0x0D10, 0x0D10, 0x1250, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x1260, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1270, 0x1280, 0x10F0, 0x1290, 0x0D10, 0x0D10,
+ 0x12A0,
+/* INDEX_BLOCK: -- 0x027D..0x02AD -- */
+ 0x1170, 0x12B0, 0x1170, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170,
+ 0x1170, 0x1170, 0x1170, 0x12C0, 0x12D0, 0x1170, 0x1170, 0x1170, 0x12E0, 0x1170, 0x12F0, 0x1170,
+ 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170, 0x1170,
+ 0x1170,
+/* INDEX_BLOCK: -- 0x02AE..0x02DE -- */
+ 0x1170, 0x1170, 0x0D10, 0x0D10, 0x0D10, 0x1170, 0x1300, 0x0D10, 0x0D10, 0x1310, 0x0D10, 0x1320,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0090, 0x0090, 0x0090, 0x00B0, 0x00B0, 0x00B0,
+ 0x1330, 0x1340, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x1350, 0x1360, 0x00B0, 0x00B0,
+ 0x1370, 0x0300, 0x0300, 0x0300, 0x1380, 0x1390, 0x0300, 0x13A0, 0x13B0, 0x13B0, 0x13B0, 0x13B0,
+ 0x0200,
+/* INDEX_BLOCK: -- 0x02DF..0x030F -- */
+ 0x0200, 0x13C0, 0x13D0, 0x13E0, 0x13F0, 0x1400, 0x1410, 0x08C0, 0x08C0, 0x0D10, 0x1420, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1430, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1440, 0x08C0, 0x0D10, 0x1450, 0x1460, 0x1470,
+ 0x1480, 0x0880, 0x0300, 0x0300, 0x0300, 0x0300, 0x1490, 0x0B20, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x14A0,
+/* INDEX_BLOCK: -- 0x0310..0x0340 -- */
+ 0x14B0, 0x0300, 0x0300, 0x0880, 0x0300, 0x0300, 0x0300, 0x0300, 0x0C80, 0x14C0, 0x0300, 0x0300,
+ 0x0D10, 0x0D10, 0x14D0, 0x0300, 0x0D10, 0x14E0, 0x14F0, 0x0D10, 0x1500, 0x1510, 0x0D10, 0x0D10,
+ 0x14F0, 0x0D10, 0x0D10, 0x1510, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0640,
+/* INDEX_BLOCK: -- 0x0341..0x0371 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0372..0x03A2 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1520, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0640,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x03A3..0x03D3 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1520,
+ 0x0300, 0x1530, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x03D4..0x0404 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0970,
+ 0x0D10, 0x0D10, 0x0D10, 0x11F0, 0x0300, 0x0300, 0x0E50, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0405..0x0435 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x1540, 0x0300,
+ 0x1550, 0x08C0, 0x00D0, 0x00D0, 0x1560, 0x1570, 0x00D0, 0x1580, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x1590, 0x15A0, 0x01F0, 0x15B0, 0x15C0, 0x15D0, 0x00D0, 0x00D0, 0x00D0, 0x15E0, 0x15F0, 0x1600,
+ 0x1610, 0x1620, 0x1630, 0x1640, 0x08C0, 0x1650, 0x1660, 0x0300, 0x1670, 0x1680, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0436..0x0466 -- */
+ 0x1690, 0x16A0, 0x0300, 0x0300, 0x16B0, 0x16C0, 0x0C00, 0x0200, 0x16D0, 0x0400, 0x0300, 0x16E0,
+ 0x0300, 0x16F0, 0x1700, 0x0300, 0x0970, 0x04C0, 0x0300, 0x0300, 0x1710, 0x1720, 0x1730, 0x1740,
+ 0x1750, 0x0300, 0x0300, 0x1760, 0x1770, 0x1780, 0x1790, 0x0300, 0x17A0, 0x0300, 0x0300, 0x0300,
+ 0x17B0, 0x17C0, 0x17D0, 0x17E0, 0x17F0, 0x1800, 0x1810, 0x13B0, 0x00B0, 0x00B0, 0x1820, 0x1830,
+ 0x00B0,
+/* INDEX_BLOCK: -- 0x0467..0x0497 -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x0300, 0x0300, 0x1840, 0x0C00, 0x0640, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0498..0x04C8 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1850, 0x0300, 0x1860, 0x0300,
+ 0x0300, 0x0CE0, 0x1870, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x04C9..0x04F9 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1880, 0x1870, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1880, 0x1870, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x04FA..0x052A -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1880, 0x1890, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x052B..0x055B -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x18A0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0CC0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0CF0, 0x08C0, 0x08C0, 0x18B0,
+ 0x18C0,
+/* INDEX_BLOCK: -- 0x055C..0x058C -- */
+ 0x18D0, 0x18E0, 0x18F0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x1900, 0x1910, 0x1920,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x1930, 0x0D10, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x1940, 0x0300, 0x0300, 0x1950, 0x08C0, 0x08C0, 0x1960, 0x0200, 0x1970,
+ 0x0200,
+/* INDEX_BLOCK: -- 0x058D..0x05BD -- */
+ 0x1980, 0x1990, 0x19A0, 0x19B0, 0x19C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x19D0, 0x19E0, 0x0020, 0x0030, 0x0040, 0x0050, 0x19F0, 0x1A00, 0x1A10, 0x0300, 0x1A20, 0x0300,
+ 0x0C80, 0x1A30, 0x1A40, 0x1A50, 0x1A60, 0x1A70, 0x0300, 0x0AC0, 0x1A80, 0x0CC0, 0x0CC0, 0x08C0,
+ 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0470, 0x1A90, 0x10F0, 0x10F0,
+ 0x1AA0,
+/* INDEX_BLOCK: -- 0x05BE..0x05EE -- */
+ 0x1100, 0x1100, 0x1100, 0x1AB0, 0x1AC0, 0x1AD0, 0x1AE0, 0x08C0, 0x08C0, 0x0D10, 0x0D10, 0x1AF0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0970, 0x0300, 0x0300,
+ 0x0300, 0x0640, 0x1B00, 0x1B10, 0x0300, 0x0300, 0x1B20, 0x0300, 0x1B30, 0x0300, 0x0300, 0x1B40,
+ 0x0300, 0x1B50, 0x0300, 0x0300, 0x1B60, 0x1B70, 0x08C0, 0x08C0, 0x0090, 0x0090, 0x1B80, 0x00B0,
+ 0x00B0,
+/* INDEX_BLOCK: -- 0x05EF..0x061F -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0CC0, 0x0C00, 0x0090, 0x0090, 0x1B90, 0x00B0, 0x1BA0, 0x0300,
+ 0x0300, 0x1BB0, 0x0300, 0x0300, 0x0300, 0x1BC0, 0x1BD0, 0x1BD0, 0x1BE0, 0x1BF0, 0x1C00, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x13A0, 0x0300,
+ 0x0C70,
+/* INDEX_BLOCK: -- 0x0620..0x0650 -- */
+ 0x1BB0, 0x08C0, 0x1C10, 0x01B0, 0x01B0, 0x1C20, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1C30, 0x0300,
+ 0x0300, 0x1C40, 0x0300, 0x1C50, 0x0300, 0x1C60, 0x0300, 0x0C80, 0x1C70, 0x08C0, 0x08C0, 0x08C0,
+ 0x0300, 0x1C80, 0x0300, 0x1C90, 0x0300, 0x1CA0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300,
+ 0x0300, 0x1CB0, 0x10F0, 0x1CC0, 0x10F0, 0x10F0, 0x1CD0, 0x1CE0, 0x0300, 0x1CF0, 0x1D00, 0x1D10,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0651..0x0681 -- */
+ 0x1D20, 0x0300, 0x1D30, 0x08C0, 0x08C0, 0x1D40, 0x0300, 0x1D50, 0x1D60, 0x0300, 0x0300, 0x0300,
+ 0x1D70, 0x0300, 0x1D80, 0x0300, 0x1D90, 0x0300, 0x1DA0, 0x1DB0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0C40, 0x08C0, 0x08C0, 0x08C0, 0x0090, 0x0090, 0x0090,
+ 0x1DC0, 0x00B0, 0x00B0, 0x00B0, 0x1DD0, 0x0300, 0x0300, 0x1DE0, 0x0C00, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0682..0x06B2 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x10F0, 0x1DF0, 0x0300, 0x0300, 0x1E00, 0x1E10, 0x08C0, 0x08C0, 0x08C0, 0x1E20,
+ 0x0300, 0x1D30, 0x1E30, 0x0300, 0x03E0, 0x1E40, 0x08C0, 0x0300, 0x1E50, 0x08C0, 0x08C0, 0x0300,
+ 0x1E60, 0x08C0, 0x0300, 0x13A0, 0x1E70, 0x0300, 0x0300, 0x1E80, 0x1E90, 0x1CC0, 0x1EA0, 0x1EB0,
+ 0x0DE0,
+/* INDEX_BLOCK: -- 0x06B3..0x06E3 -- */
+ 0x0300, 0x0300, 0x1EC0, 0x1ED0, 0x0300, 0x0C40, 0x0C00, 0x1EE0, 0x0300, 0x1EF0, 0x1F00, 0x1F10,
+ 0x0300, 0x0300, 0x1F20, 0x0DE0, 0x0300, 0x0300, 0x1F30, 0x1F40, 0x1F50, 0x1F60, 0x1F70, 0x0300,
+ 0x0610, 0x1F80, 0x1F90, 0x1FA0, 0x08C0, 0x08C0, 0x08C0, 0x1FB0, 0x1FC0, 0x1FD0, 0x0300, 0x0300,
+ 0x1FE0, 0x1FF0, 0x0C00, 0x2000, 0x0530, 0x0540, 0x2010, 0x2020, 0x2030, 0x2040, 0x2050, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x06E4..0x0714 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x2060, 0x2070, 0x2080,
+ 0x1E10, 0x08C0, 0x0300, 0x0300, 0x0300, 0x2090, 0x20A0, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x20B0, 0x20C0, 0x20D0, 0x20E0,
+ 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x20F0, 0x2100, 0x0C00, 0x2110, 0x08C0, 0x0300, 0x0300,
+ 0x2120,
+/* INDEX_BLOCK: -- 0x0715..0x0745 -- */
+ 0x2130, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0AD0, 0x2140, 0x2150, 0x13A0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x1F80,
+ 0x2160, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0090, 0x0090, 0x00B0, 0x00B0, 0x0940,
+ 0x2170, 0x2180, 0x2190, 0x0300, 0x21A0, 0x21B0, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x21C0,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0746..0x0776 -- */
+ 0x0300, 0x21D0, 0x21E0, 0x08C0, 0x21F0, 0x0300, 0x0300, 0x2200, 0x2210, 0x2220, 0x0300, 0x0300,
+ 0x2230, 0x2240, 0x2250, 0x0300, 0x0300, 0x0300, 0x0300, 0x0C40, 0x2260, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x0540, 0x0300, 0x20B0, 0x2270, 0x2280, 0x0940, 0x0AF0, 0x2290, 0x0300, 0x22A0, 0x22B0, 0x22C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0777..0x07A7 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x22D0, 0x0300, 0x0300, 0x22E0, 0x22F0, 0x0C00, 0x2300, 0x0300, 0x2310,
+ 0x2320, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x2330, 0x2340,
+ 0x0730, 0x0300, 0x2350, 0x2360, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0640, 0x10F0,
+ 0x2370,
+/* INDEX_BLOCK: -- 0x07A8..0x07D8 -- */
+ 0x2380, 0x2390, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x07D9..0x0809 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0CF0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x23A0,
+ 0x23B0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x23C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x080A..0x083A -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x23D0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x083B..0x086B -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x23E0, 0x23F0, 0x2400, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x086C..0x089C -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x089D..0x08CD -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x13A0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x08CE..0x08FE -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x08FF..0x092F -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0C40, 0x0300, 0x0C80, 0x1730, 0x0300, 0x0300, 0x0300, 0x0300, 0x0C80, 0x0C00, 0x0300,
+ 0x0CC0, 0x2410, 0x0300, 0x0300, 0x0300, 0x2420, 0x2430, 0x2440, 0x2450, 0x2460, 0x0300, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0930..0x0960 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0090, 0x0090, 0x00B0, 0x00B0, 0x10F0, 0x2470, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300, 0x2480, 0x2490, 0x24A0,
+ 0x24A0,
+/* INDEX_BLOCK: -- 0x0961..0x0991 -- */
+ 0x24B0, 0x24C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x24D0, 0x24E0, 0x0640, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0992..0x09C2 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x24F0,
+/* INDEX_BLOCK: -- 0x09C3..0x09F3 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x09F4..0x0A24 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0C70, 0x08C0, 0x08C0, 0x2500, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0A25..0x0A55 -- */
+ 0x08C0, 0x08C0, 0x2510, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x2520, 0x2530, 0x08C0,
+ 0x2540, 0x2550, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0A56..0x0A86 -- */
+ 0x0300, 0x0CE0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0A87..0x0AB7 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x0300,
+/* INDEX_BLOCK: -- 0x0AB8..0x0AE8 -- */
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0470, 0x0970, 0x0C40, 0x2560, 0x2570, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0AE9..0x0B19 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0200, 0x0200, 0x2580,
+ 0x0200, 0x2590, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1430, 0x08C0, 0x08C0,
+ 0x08C0, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1440, 0x0D10, 0x0D10, 0x25A0, 0x0D10, 0x0D10, 0x0D10, 0x25B0,
+ 0x25C0,
+/* INDEX_BLOCK: -- 0x0B1A..0x0B4A -- */
+ 0x25D0, 0x0D10, 0x25E0, 0x0D10, 0x0D10, 0x0D10, 0x1200, 0x08C0, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x25F0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x10F0, 0x2600, 0x10F0, 0x2600,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x11F0, 0x10F0, 0x1D00, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0090, 0x2610, 0x00B0, 0x2620, 0x2630, 0x2640, 0x0F10, 0x0090,
+ 0x2650,
+/* INDEX_BLOCK: -- 0x0B4B..0x0B7B -- */
+ 0x2660, 0x2670, 0x2680, 0x2690, 0x0090, 0x2610, 0x00B0, 0x26A0, 0x26B0, 0x00B0, 0x26C0, 0x26D0,
+ 0x26E0, 0x26F0, 0x0090, 0x2700, 0x00B0, 0x0090, 0x2610, 0x00B0, 0x2620, 0x2630, 0x00B0, 0x0F10,
+ 0x0090, 0x2650, 0x26F0, 0x0090, 0x2700, 0x00B0, 0x0090, 0x2610, 0x00B0, 0x2710, 0x0090, 0x2720,
+ 0x2730, 0x2740, 0x2750, 0x00B0, 0x2760, 0x0090, 0x2770, 0x2780, 0x2790, 0x27A0, 0x00B0, 0x27B0,
+ 0x0090,
+/* INDEX_BLOCK: -- 0x0B7C..0x0BAC -- */
+ 0x27C0, 0x00B0, 0x27D0, 0x27E0, 0x27E0, 0x27E0, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0200, 0x0200, 0x0200, 0x27F0, 0x0200, 0x0200, 0x2800, 0x2810, 0x2820, 0x2830,
+ 0x02D0,
+/* INDEX_BLOCK: -- 0x0BAD..0x0BDD -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x2840, 0x2850, 0x2860, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x2870, 0x2880, 0x2890, 0x01B0, 0x01B0, 0x01B0, 0x28A0, 0x08C0, 0x28B0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0BDE..0x0C0E -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0970, 0x28C0, 0x28D0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x28E0, 0x08C0, 0x0300, 0x0300, 0x28F0, 0x2900, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0C0F..0x0C3F -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x2910, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0C40..0x0C70 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x2920, 0x0C80, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x2930, 0x2590, 0x08C0, 0x08C0, 0x0090, 0x0090, 0x2650,
+ 0x00B0, 0x2940, 0x1730, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0C71..0x0CA1 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x1F60, 0x10F0, 0x10F0, 0x2950, 0x2960, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x1F60,
+/* INDEX_BLOCK: -- 0x0CA2..0x0CD2 -- */
+ 0x10F0, 0x2970, 0x2980, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x2990, 0x0300, 0x29A0, 0x29B0, 0x29C0, 0x29D0, 0x29E0, 0x29F0, 0x2A00,
+ 0x0CE0, 0x2A10, 0x0CE0, 0x08C0, 0x08C0, 0x08C0, 0x2A20, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0D10,
+ 0x0D10,
+/* INDEX_BLOCK: -- 0x0CD3..0x0D03 -- */
+ 0x2A30, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1430, 0x14E0, 0x2A40, 0x2A40, 0x2A40,
+ 0x0D10, 0x1440, 0x2A50, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x2A60, 0x08C0, 0x08C0, 0x08C0, 0x2A70, 0x0D10, 0x2A80, 0x0D10, 0x0D10, 0x2A30, 0x2A90, 0x2AA0,
+ 0x1440, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0D10, 0x0D10,
+ 0x0D10,
+/* INDEX_BLOCK: -- 0x0D04..0x0D34 -- */
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x2AB0, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10,
+/* INDEX_BLOCK: -- 0x0D35..0x0D65 -- */
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x2AC0, 0x1AD0, 0x1AD0,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x2AD0, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0B00, 0x2A30, 0x1AE0, 0x2A30, 0x0D10, 0x0D10, 0x0D10, 0x2AE0, 0x0B00, 0x0D10, 0x0D10,
+ 0x2AE0, 0x0D10, 0x2A60, 0x2AA0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10,
+/* INDEX_BLOCK: -- 0x0D66..0x0D96 -- */
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x1430, 0x2A60, 0x1AD0, 0x2A90, 0x0D10, 0x0D10, 0x2AF0, 0x2B00,
+ 0x2A30, 0x2A90, 0x2A90, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10, 0x0D10,
+ 0x2B10, 0x0D10, 0x0D10, 0x1200, 0x08C0, 0x08C0, 0x0C00, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0D97..0x0DC7 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0640, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0DC8..0x0DF8 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1520, 0x08C0, 0x08C0, 0x0640,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0DF9..0x0E29 -- */
+ 0x2B20, 0x0640, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x2B30, 0x0640, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0E2A..0x0E5A -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x2B40, 0x0640, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0E5B..0x0E8B -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0640, 0x0640,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0E8C..0x0EBC -- */
+ 0x2B30, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0EBD..0x0EED -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+ 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0CC0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0EEE..0x0F1E -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x0640, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0F1F..0x0F4F -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x2B50, 0x0640, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0F50..0x0F80 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1520, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0F81..0x0FB1 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x2B60, 0x08C0, 0x23E0, 0x23E0, 0x23E0, 0x23E0, 0x23E0, 0x23E0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200,
+ 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0FB2..0x0FE2 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x1890, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x0FE3..0x1013 -- */
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x2B70, 0x1890,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0, 0x08C0,
+ 0x08C0,
+/* INDEX_BLOCK: -- 0x1014..0x1016 -- */
+ 0x08C0, 0x08C0, 0x2B80
+};
+
+static const SBUInt16 BranchGeneralCategoryIndexes[1422] = {
+ 0x0000, 0x0031, 0x0062, 0x0093, 0x00C4, 0x00F5, 0x0126, 0x0157, 0x0188, 0x01B9, 0x01EA, 0x021B,
+ 0x024C, 0x027D, 0x02AE, 0x02DF, 0x0310, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0372, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x03A3, 0x03D4, 0x0405, 0x0436, 0x0467, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0498, 0x04C9,
+ 0x0341, 0x04FA, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x052B, 0x055C, 0x058D,
+ 0x05BE, 0x05EF, 0x0620, 0x0651, 0x0682, 0x06B3, 0x06E4, 0x0715, 0x0746, 0x0777, 0x07A8, 0x07D9,
+ 0x0341, 0x0341, 0x0341, 0x080A, 0x083B, 0x0341, 0x0341, 0x0341, 0x0341, 0x086C, 0x089D, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x08CE, 0x08FF, 0x0930,
+ 0x0961, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0992, 0x09C3, 0x09F4, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0A25, 0x0A56, 0x0341,
+ 0x0A87, 0x0AB8, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0AE9, 0x0B1A, 0x0B4B, 0x0B7C, 0x0341,
+ 0x0BAD, 0x0BDE, 0x0C0F, 0x0C40, 0x0C71, 0x0CA2, 0x0CD3, 0x0D04, 0x0D35, 0x0D66, 0x0341, 0x0D97,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0DC8, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0DF9,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0E2A, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0E5B, 0x0E8C, 0x0341, 0x0341, 0x0EBD, 0x0341, 0x0EEE, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0F1F, 0x0341, 0x0341, 0x0341, 0x0341, 0x0F50, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0F81, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0FB2, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0FE3, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x0341,
+ 0x0341, 0x0341, 0x0341, 0x0341, 0x0341, 0x1014
+};
+
+SB_INTERNAL SBGeneralCategory LookupGeneralCategory(SBCodepoint codepoint) {
+ if (codepoint <= 0x10FFFD) {
+ return PrimaryGeneralCategoryData[
+ MainGeneralCategoryIndexes[
+ BranchGeneralCategoryIndexes[
+ codepoint / 0x0310
+ ] + (codepoint % 0x0310) / 0x0010
+ ] + (codepoint % 0x0010)
+ ];
+ }
+
+ return Cn;
+}
+
+#undef Cc
+#undef Cf
+#undef Cn
+#undef Co
+#undef Cs
+#undef Ll
+#undef Lm
+#undef Lo
+#undef Lt
+#undef Lu
+#undef Mc
+#undef Me
+#undef Mn
+#undef Nd
+#undef Nl
+#undef No
+#undef Pc
+#undef Pd
+#undef Pe
+#undef Pf
+#undef Pi
+#undef Po
+#undef Ps
+#undef Sc
+#undef Sk
+#undef Sm
+#undef So
+#undef Zl
+#undef Zp
+#undef Zs
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h b/modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h
new file mode 100644
index 0000000000..9a0f6aac4d
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/GeneralCategoryLookup.h
@@ -0,0 +1,16 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ */
+
+#ifndef _SB_INTERNAL_GENERAL_CATEGORY_LOOKUP_H
+#define _SB_INTERNAL_GENERAL_CATEGORY_LOOKUP_H
+
+#include
+#include
+
+#include "SBBase.h"
+
+SB_INTERNAL SBGeneralCategory LookupGeneralCategory(SBCodepoint codepoint);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c b/modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c
new file mode 100644
index 0000000000..07b38e30b8
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.c
@@ -0,0 +1,537 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+
+#include "BidiChain.h"
+#include "BracketQueue.h"
+#include "BracketType.h"
+#include "LevelRun.h"
+#include "PairingLookup.h"
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "SBLog.h"
+#include "IsolatingRun.h"
+
+static void ResolveAvailableBracketPairs(IsolatingRunRef isolatingRun);
+
+static void AttachLevelRunLinks(IsolatingRunRef isolatingRun)
+{
+ BidiChainRef chain = isolatingRun->bidiChain;
+ LevelRunRef baseLevelRun = isolatingRun->baseLevelRun;
+ LevelRunRef current;
+ LevelRunRef next;
+
+ isolatingRun->_originalLink = BidiChainGetNext(chain, chain->roller);
+ BidiChainSetNext(chain, chain->roller, baseLevelRun->firstLink);
+
+ /* Iterate over level runs and attach their links to form an isolating run. */
+ for (current = baseLevelRun; (next = current->next); current = next) {
+ BidiChainSetNext(chain, current->lastLink, next->firstLink);
+ }
+ BidiChainSetNext(chain, current->lastLink, chain->roller);
+
+ isolatingRun->_lastLevelRun = current;
+ isolatingRun->_sos = RunExtrema_SOR(baseLevelRun->extrema);
+
+ if (!RunKindIsPartialIsolate(baseLevelRun->kind)) {
+ isolatingRun->_eos = RunExtrema_EOR(current->extrema);
+ } else {
+ SBLevel paragraphLevel = isolatingRun->paragraphLevel;
+ SBLevel runLevel = baseLevelRun->level;
+ SBLevel eosLevel = (runLevel > paragraphLevel ? runLevel : paragraphLevel);
+ isolatingRun->_eos = ((eosLevel & 1) ? SBBidiTypeR : SBBidiTypeL);
+ }
+}
+
+static void AttachOriginalLinks(IsolatingRunRef isolatingRun)
+{
+ BidiChainRef chain = isolatingRun->bidiChain;
+ LevelRunRef current;
+
+ BidiChainSetNext(chain, chain->roller, isolatingRun->_originalLink);
+
+ /* Iterate over level runs and attach original subsequent links. */
+ for (current = isolatingRun->baseLevelRun; current; current = current->next) {
+ BidiChainSetNext(chain, current->lastLink, current->subsequentLink);
+ }
+}
+
+static BidiLink ResolveWeakTypes(IsolatingRunRef isolatingRun)
+{
+ BidiChainRef chain = isolatingRun->bidiChain;
+ BidiLink roller = chain->roller;
+ BidiLink link;
+
+ BidiLink priorLink;
+ SBBidiType sos;
+
+ SBBidiType w1PriorType;
+ SBBidiType w2StrongType;
+ SBBidiType w4PriorType;
+ SBBidiType w5PriorType;
+ SBBidiType w7StrongType;
+
+ priorLink = roller;
+ sos = isolatingRun->_sos;
+
+ w1PriorType = sos;
+ w2StrongType = sos;
+
+ BidiChainForEach(chain, roller, link) {
+ SBBidiType type = BidiChainGetType(chain, link);
+ SBBoolean forceMerge = SBFalse;
+
+ /* Rule W1 */
+ if (type == SBBidiTypeNSM) {
+ /* Change the 'type' variable as well because it can be EN on which W2 depends. */
+ type = (SBBidiTypeIsIsolate(w1PriorType) ? SBBidiTypeON : w1PriorType);
+ BidiChainSetType(chain, link, type);
+
+ /* Fix for 3rd point of rule N0. */
+ if (w1PriorType == SBBidiTypeON) {
+ forceMerge = SBTrue;
+ }
+ }
+ w1PriorType = type;
+
+ /* Rule W2 */
+ if (type == SBBidiTypeEN) {
+ if (w2StrongType == SBBidiTypeAL) {
+ BidiChainSetType(chain, link, SBBidiTypeAN);
+ }
+ }
+ /*
+ * Rule W3
+ * NOTE: It is safe to apply W3 in 'else-if' statement because it only depends on type AL.
+ * Even if W2 changes EN to AN, there won't be any harm.
+ */
+ else if (type == SBBidiTypeAL) {
+ BidiChainSetType(chain, link, SBBidiTypeR);
+ }
+
+ if (SBBidiTypeIsStrong(type)) {
+ /* Save the strong type as it is checked in W2. */
+ w2StrongType = type;
+ }
+
+ if ((type != SBBidiTypeON && BidiChainGetType(chain, priorLink) == type) || forceMerge) {
+ BidiChainAbandonNext(chain, priorLink);
+ } else {
+ priorLink = link;
+ }
+ }
+
+ priorLink = roller;
+ w4PriorType = sos;
+ w5PriorType = sos;
+ w7StrongType = sos;
+
+ BidiChainForEach(chain, roller, link) {
+ SBBidiType type = BidiChainGetType(chain, link);
+ SBBidiType nextType = BidiChainGetType(chain, BidiChainGetNext(chain, link));
+
+ /* Rule W4 */
+ if (BidiChainIsSingle(chain, link)
+ && SBBidiTypeIsNumberSeparator(type)
+ && SBBidiTypeIsNumber(w4PriorType)
+ && (w4PriorType == nextType)
+ && (w4PriorType == SBBidiTypeEN || type == SBBidiTypeCS))
+ {
+ /* Change the current type as well because it can be EN on which W5 depends. */
+ type = w4PriorType;
+ BidiChainSetType(chain, link, type);
+ }
+ w4PriorType = type;
+
+ /* Rule W5 */
+ if (type == SBBidiTypeET && (w5PriorType == SBBidiTypeEN || nextType == SBBidiTypeEN)) {
+ /* Change the current type as well because it is EN on which W7 depends. */
+ type = SBBidiTypeEN;
+ BidiChainSetType(chain, link, type);
+ }
+ w5PriorType = type;
+
+ switch (type) {
+ /* Rule W6 */
+ case SBBidiTypeET:
+ case SBBidiTypeCS:
+ case SBBidiTypeES:
+ BidiChainSetType(chain, link, SBBidiTypeON);
+ break;
+
+ /*
+ * Rule W7
+ * NOTE: W7 is expected to be applied after W6. However this is not the case here. The
+ * reason is that W6 can only create the type ON which is not tested in W7 by any
+ * means. So it won't affect the algorithm.
+ */
+ case SBBidiTypeEN:
+ if (w7StrongType == SBBidiTypeL) {
+ BidiChainSetType(chain, link, SBBidiTypeL);
+ }
+ break;
+
+ /*
+ * Save the strong type for W7.
+ * NOTE: The strong type is expected to be saved after applying W7 because W7 itself creates
+ * a strong type. However the strong type being saved here is based on the type after
+ * W5. This won't effect the algorithm because a single link contains all consecutive
+ * EN types. This means that even if W7 creates a strong type, it will be saved in
+ * next iteration.
+ */
+ case SBBidiTypeL:
+ case SBBidiTypeR:
+ w7StrongType = type;
+ break;
+ }
+
+ if (type != SBBidiTypeON && BidiChainGetType(chain, priorLink) == type) {
+ BidiChainAbandonNext(chain, priorLink);
+ } else {
+ priorLink = link;
+ }
+ }
+
+ return priorLink;
+}
+
+static SBBoolean ResolveBrackets(IsolatingRunRef isolatingRun)
+{
+ const SBCodepointSequence *sequence = isolatingRun->codepointSequence;
+ SBUInteger paragraphOffset = isolatingRun->paragraphOffset;
+ BracketQueueRef queue = &isolatingRun->_bracketQueue;
+ BidiChainRef chain = isolatingRun->bidiChain;
+ BidiLink roller = chain->roller;
+ BidiLink link;
+
+ BidiLink priorStrongLink;
+ SBLevel runLevel;
+
+ priorStrongLink = BidiLinkNone;
+ runLevel = isolatingRun->baseLevelRun->level;
+
+ BracketQueueReset(queue, SBLevelAsNormalBidiType(runLevel));
+
+ BidiChainForEach(chain, roller, link) {
+ SBUInteger stringIndex;
+ SBCodepoint codepoint;
+ SBBidiType type;
+
+ SBCodepoint bracketValue;
+ BracketType bracketType;
+
+ type = BidiChainGetType(chain, link);
+
+ switch (type) {
+ case SBBidiTypeON:
+ stringIndex = BidiChainGetOffset(chain, link) + paragraphOffset;
+ codepoint = SBCodepointSequenceGetCodepointAt(sequence, &stringIndex);
+ bracketValue = LookupBracketPair(codepoint, &bracketType);
+
+ switch (bracketType) {
+ case BracketTypeOpen:
+ if (queue->count < BracketQueueGetMaxCapacity()) {
+ if (!BracketQueueEnqueue(queue, priorStrongLink, link, bracketValue)) {
+ return SBFalse;
+ }
+ } else {
+ goto Resolve;
+ }
+ break;
+
+ case BracketTypeClose:
+ if (queue->count != 0) {
+ BracketQueueClosePair(queue, link, codepoint);
+
+ if (BracketQueueShouldDequeue(queue)) {
+ ResolveAvailableBracketPairs(isolatingRun);
+ }
+ }
+ break;
+ }
+ break;
+
+ case SBBidiTypeEN:
+ case SBBidiTypeAN:
+ type = SBBidiTypeR;
+
+ case SBBidiTypeR:
+ case SBBidiTypeL:
+ if (queue->count != 0) {
+ BracketQueueSetStrongType(queue, type);
+ }
+
+ priorStrongLink = link;
+ break;
+ }
+ }
+
+Resolve:
+ ResolveAvailableBracketPairs(isolatingRun);
+ return SBTrue;
+}
+
+static void ResolveAvailableBracketPairs(IsolatingRunRef isolatingRun)
+{
+ BracketQueueRef queue = &isolatingRun->_bracketQueue;
+ BidiChainRef chain = isolatingRun->bidiChain;
+
+ SBLevel runLevel;
+ SBBidiType embeddingDirection;
+ SBBidiType oppositeDirection;
+
+ runLevel = isolatingRun->baseLevelRun->level;
+ embeddingDirection = SBLevelAsNormalBidiType(runLevel);
+ oppositeDirection = SBLevelAsOppositeBidiType(runLevel);
+
+ while (queue->count != 0) {
+ BidiLink openingLink = BracketQueueGetOpeningLink(queue);
+ BidiLink closingLink = BracketQueueGetClosingLink(queue);
+
+ if ((openingLink != BidiLinkNone) && (closingLink != BidiLinkNone)) {
+ SBBidiType innerStrongType;
+ SBBidiType pairType;
+
+ innerStrongType = BracketQueueGetStrongType(queue);
+
+ /* Rule: N0.b */
+ if (innerStrongType == embeddingDirection) {
+ pairType = innerStrongType;
+ }
+ /* Rule: N0.c */
+ else if (innerStrongType == oppositeDirection) {
+ BidiLink priorStrongLink;
+ SBBidiType priorStrongType;
+
+ priorStrongLink = BracketQueueGetPriorStrongLink(queue);
+
+ if (priorStrongLink != BidiLinkNone) {
+ BidiLink link;
+
+ priorStrongType = BidiChainGetType(chain, priorStrongLink);
+ if (SBBidiTypeIsNumber(priorStrongType)) {
+ priorStrongType = SBBidiTypeR;
+ }
+
+ link = BidiChainGetNext(chain, priorStrongLink);
+
+ while (link != openingLink) {
+ SBBidiType type = BidiChainGetType(chain, link);
+ if (type == SBBidiTypeL || type == SBBidiTypeR) {
+ priorStrongType = type;
+ }
+
+ link = BidiChainGetNext(chain, link);
+ }
+ } else {
+ priorStrongType = isolatingRun->_sos;
+ }
+
+ /* Rule: N0.c.1 */
+ if (priorStrongType == oppositeDirection) {
+ pairType = oppositeDirection;
+ }
+ /* Rule: N0.c.2 */
+ else {
+ pairType = embeddingDirection;
+ }
+ }
+ /* Rule: N0.d */
+ else {
+ pairType = SBBidiTypeNil;
+ }
+
+ if (pairType != SBBidiTypeNil) {
+ /* Do the substitution */
+ BidiChainSetType(chain, openingLink, pairType);
+ BidiChainSetType(chain, closingLink, pairType);
+ }
+ }
+
+ BracketQueueDequeue(queue);
+ }
+}
+
+static void ResolveNeutrals(IsolatingRunRef isolatingRun)
+{
+ BidiChainRef chain = isolatingRun->bidiChain;
+ BidiLink roller = chain->roller;
+ BidiLink link;
+
+ SBLevel runLevel;
+ SBBidiType strongType;
+ BidiLink neutralLink;
+
+ runLevel = isolatingRun->baseLevelRun->level;
+ strongType = isolatingRun->_sos;
+ neutralLink = BidiLinkNone;
+
+ BidiChainForEach(chain, roller, link) {
+ SBBidiType type = BidiChainGetType(chain, link);
+ SBBidiType nextType;
+
+ SBAssert(SBBidiTypeIsStrongOrNumber(type) || SBBidiTypeIsNeutralOrIsolate(type));
+
+ switch (type) {
+ case SBBidiTypeL:
+ strongType = SBBidiTypeL;
+ break;
+
+ case SBBidiTypeR:
+ case SBBidiTypeEN:
+ case SBBidiTypeAN:
+ strongType = SBBidiTypeR;
+ break;
+
+ case SBBidiTypeB:
+ case SBBidiTypeS:
+ case SBBidiTypeWS:
+ case SBBidiTypeON:
+ case SBBidiTypeLRI:
+ case SBBidiTypeRLI:
+ case SBBidiTypeFSI:
+ case SBBidiTypePDI:
+ if (neutralLink == BidiLinkNone) {
+ neutralLink = link;
+ }
+
+ nextType = BidiChainGetType(chain, BidiChainGetNext(chain, link));
+ if (SBBidiTypeIsNumber(nextType)) {
+ nextType = SBBidiTypeR;
+ } else if (nextType == SBBidiTypeNil) {
+ nextType = isolatingRun->_eos;
+ }
+
+ if (SBBidiTypeIsStrong(nextType)) {
+ /* Rules N1, N2 */
+ SBBidiType resolvedType = (strongType == nextType
+ ? strongType
+ : SBLevelAsNormalBidiType(runLevel));
+
+ do {
+ BidiChainSetType(chain, neutralLink, resolvedType);
+ neutralLink = BidiChainGetNext(chain, neutralLink);
+ } while (neutralLink != BidiChainGetNext(chain, link));
+
+ neutralLink = BidiLinkNone;
+ }
+ break;
+ }
+ }
+}
+
+static void ResolveImplicitLevels(IsolatingRunRef isolatingRun)
+{
+ BidiChainRef chain = isolatingRun->bidiChain;
+ BidiLink roller = chain->roller;
+ BidiLink link;
+
+ SBLevel runLevel = isolatingRun->baseLevelRun->level;
+
+ if ((runLevel & 1) == 0) {
+ BidiChainForEach(chain, roller, link) {
+ SBBidiType type = BidiChainGetType(chain, link);
+ SBLevel level = BidiChainGetLevel(chain, link);
+
+ SBAssert(SBBidiTypeIsStrongOrNumber(type));
+
+ /* Rule I1 */
+ if (type == SBBidiTypeR) {
+ BidiChainSetLevel(chain, link, level + 1);
+ } else if (type != SBBidiTypeL) {
+ BidiChainSetLevel(chain, link, level + 2);
+ }
+ }
+ } else {
+ BidiChainForEach(chain, roller, link) {
+ SBBidiType type = BidiChainGetType(chain, link);
+ SBLevel level = BidiChainGetLevel(chain, link);
+
+ SBAssert(SBBidiTypeIsStrongOrNumber(type));
+
+ /* Rule I2 */
+ if (type != SBBidiTypeR) {
+ BidiChainSetLevel(chain, link, level + 1);
+ }
+ }
+ }
+}
+
+SB_INTERNAL void IsolatingRunInitialize(IsolatingRunRef isolatingRun)
+{
+ BracketQueueInitialize(&isolatingRun->_bracketQueue);
+}
+
+SB_INTERNAL SBBoolean IsolatingRunResolve(IsolatingRunRef isolatingRun)
+{
+ BidiLink lastLink;
+ BidiLink subsequentLink;
+
+ SB_LOG_BLOCK_OPENER("Identified Isolating Run");
+
+ /* Attach level run links to form isolating run. */
+ AttachLevelRunLinks(isolatingRun);
+ /* Save last subsequent link. */
+ subsequentLink = isolatingRun->_lastLevelRun->subsequentLink;
+
+ SB_LOG_STATEMENT("Range", 1, SB_LOG_RUN_RANGE(isolatingRun));
+ SB_LOG_STATEMENT("Types", 1, SB_LOG_RUN_TYPES(isolatingRun));
+ SB_LOG_STATEMENT("Level", 1, SB_LOG_LEVEL(isolatingRun->baseLevelRun->level));
+ SB_LOG_STATEMENT("SOS", 1, SB_LOG_BIDI_TYPE(isolatingRun->_sos));
+ SB_LOG_STATEMENT("EOS", 1, SB_LOG_BIDI_TYPE(isolatingRun->_eos));
+
+ /* Rules W1-W7 */
+ lastLink = ResolveWeakTypes(isolatingRun);
+ SB_LOG_BLOCK_OPENER("Resolved Weak Types");
+ SB_LOG_STATEMENT("Types", 1, SB_LOG_RUN_TYPES(isolatingRun));
+ SB_LOG_BLOCK_CLOSER();
+
+ /* Rule N0 */
+ if (!ResolveBrackets(isolatingRun)) {
+ return SBFalse;
+ }
+
+ SB_LOG_BLOCK_OPENER("Resolved Brackets");
+ SB_LOG_STATEMENT("Types", 1, SB_LOG_RUN_TYPES(isolatingRun));
+ SB_LOG_BLOCK_CLOSER();
+
+ /* Rules N1, N2 */
+ ResolveNeutrals(isolatingRun);
+ SB_LOG_BLOCK_OPENER("Resolved Neutrals");
+ SB_LOG_STATEMENT("Types", 1, SB_LOG_RUN_TYPES(isolatingRun));
+ SB_LOG_BLOCK_CLOSER();
+
+ /* Rules I1, I2 */
+ ResolveImplicitLevels(isolatingRun);
+ SB_LOG_BLOCK_OPENER("Resolved Implicit Levels");
+ SB_LOG_STATEMENT("Levels", 1, SB_LOG_RUN_LEVELS(isolatingRun));
+ SB_LOG_BLOCK_CLOSER();
+
+ /* Re-attach original links. */
+ AttachOriginalLinks(isolatingRun);
+ /* Attach new final link (of isolating run) with last subsequent link. */
+ BidiChainSetNext(isolatingRun->bidiChain, lastLink, subsequentLink);
+
+ SB_LOG_BLOCK_CLOSER();
+
+ return SBTrue;
+}
+
+SB_INTERNAL void IsolatingRunFinalize(IsolatingRunRef isolatingRun)
+{
+ BracketQueueFinalize(&isolatingRun->_bracketQueue);
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h b/modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h
new file mode 100644
index 0000000000..fddf01b5bf
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/IsolatingRun.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_ISOLATING_RUN_H
+#define _SB_INTERNAL_ISOLATING_RUN_H
+
+#include
+
+#include "BidiChain.h"
+#include "BracketQueue.h"
+#include "LevelRun.h"
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+
+typedef struct _IsolatingRun {
+ const SBCodepointSequence *codepointSequence;
+ const SBBidiType *bidiTypes;
+ BidiChainRef bidiChain;
+ LevelRunRef baseLevelRun;
+ LevelRunRef _lastLevelRun;
+ BracketQueue _bracketQueue;
+ SBUInteger paragraphOffset;
+ BidiLink _originalLink;
+ SBBidiType _sos;
+ SBBidiType _eos;
+ SBLevel paragraphLevel;
+} IsolatingRun, *IsolatingRunRef;
+
+SB_INTERNAL void IsolatingRunInitialize(IsolatingRunRef isolatingRun);
+SB_INTERNAL SBBoolean IsolatingRunResolve(IsolatingRunRef isolatingRun);
+
+SB_INTERNAL void IsolatingRunFinalize(IsolatingRunRef isolatingRun);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c b/modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c
new file mode 100644
index 0000000000..267a3acc15
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+
+#include "BidiChain.h"
+#include "RunExtrema.h"
+#include "RunKind.h"
+#include "SBAssert.h"
+#include "LevelRun.h"
+
+SB_INTERNAL void LevelRunInitialize(LevelRunRef levelRun,
+ BidiChainRef bidiChain, BidiLink firstLink, BidiLink lastLink,
+ SBBidiType sor, SBBidiType eor)
+{
+ SBBidiType firstType = BidiChainGetType(bidiChain, firstLink);
+ SBBidiType lastType = BidiChainGetType(bidiChain, lastLink);
+
+ levelRun->next = NULL;
+ levelRun->firstLink = firstLink;
+ levelRun->lastLink = lastLink;
+ levelRun->subsequentLink = BidiChainGetNext(bidiChain, lastLink);
+ levelRun->extrema = RunExtremaMake(sor, eor);
+ levelRun->kind = RunKindMake
+ (
+ SBBidiTypeIsIsolateInitiator(lastType),
+ SBBidiTypeIsIsolateTerminator(firstType)
+ );
+ levelRun->level = BidiChainGetLevel(bidiChain, firstLink);
+}
+
+SB_INTERNAL void LevelRunAttach(LevelRunRef levelRun, LevelRunRef next)
+{
+ /* Only the runs of same level can be attached. */
+ SBAssert(levelRun->level == next->level);
+ /* No other run can be attached with a simple run. */
+ SBAssert(!RunKindIsSimple(levelRun->kind));
+ /* No other run can be attached with a complete isolating run. */
+ SBAssert(!RunKindIsCompleteIsolate(levelRun->kind));
+ /* Only a terminating run can be attached with an isolating run. */
+ SBAssert(RunKindIsIsolate(levelRun->kind) && RunKindIsTerminating(next->kind));
+ /* The next run must be unattached. */
+ SBAssert(!RunKindIsAttachedTerminating(next->kind));
+
+ if (RunKindIsTerminating(next->kind)) {
+ RunKindMakeAttached(next->kind);
+ }
+
+ if (RunKindIsIsolate(levelRun->kind)) {
+ RunKindMakeComplete(levelRun->kind);
+ }
+
+ levelRun->next = next;
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h b/modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h
new file mode 100644
index 0000000000..e7e392dee6
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/LevelRun.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_LEVEL_RUN_H
+#define _SB_INTERNAL_LEVEL_RUN_H
+
+#include
+
+#include "BidiChain.h"
+#include "RunExtrema.h"
+#include "RunKind.h"
+#include "SBBase.h"
+
+typedef struct _LevelRun {
+ struct _LevelRun *next; /**< Reference to the next sequence of run links. */
+ BidiLink firstLink; /**< First link of the run. */
+ BidiLink lastLink; /**< Last link of the run. */
+ BidiLink subsequentLink; /**< Subsequent link of the run. */
+ RunExtrema extrema;
+ RunKind kind;
+ SBLevel level;
+} LevelRun, *LevelRunRef;
+
+SB_INTERNAL void LevelRunInitialize(LevelRunRef levelRun,
+ BidiChainRef bidiChain, BidiLink firstLink, BidiLink lastLink,
+ SBBidiType sor, SBBidiType eor);
+SB_INTERNAL void LevelRunAttach(LevelRunRef levelRun, LevelRunRef next);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c b/modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c
new file mode 100644
index 0000000000..9cd7063729
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.c
@@ -0,0 +1,267 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ *
+ * REQUIRED MEMORY: (37)+2310+(617*2) = 3618 Bytes
+ */
+
+#include "PairingLookup.h"
+
+static const SBInt16 PairDifferences[37] = {
+ 0, 1, -1, 2, -2, 16, -16, 3, -3, 2016, 2527, 1923, 1914, 1918,
+ 2250, 138, 7, -7, 1824, 2104, 2108, 2106, 1316, -138, 8, -8, -1316,
+ -1914, -1918, -1923, -1824, -2016, -2104, -2106, -2108, -2250, -2527
+};
+
+static const SBUInt8 PairData[2310] = {
+/* DATA_BLOCK: -- 0x0000..0x0069 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 132, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x006A..0x00D3 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0,
+ 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x00D4..0x013D -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x013E..0x01A7 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 65, 130, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x01A8..0x0211 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x0212..0x027B -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65, 130, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x027C..0x02E5 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 130, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x02E6..0x034F -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 7, 7, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
+ 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 1,
+ 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x0350..0x03B9 -- */
+ 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, 2, 1,
+ 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
+ 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 1, 2, 1, 2, 0, 0, 0, 0,
+ 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 19, 0, 20, 21,
+ 0, 21, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 22, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x03BA..0x0423 -- */
+ 0, 1, 2, 1, 2, 23, 0, 0, 1, 2, 0, 0, 0, 0, 1, 2, 1, 2, 1,
+ 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
+ 0, 0, 1, 2, 24, 24, 24, 0, 16, 16, 0, 0, 25, 25, 25, 17, 17, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 65, 130, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 65, 130, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x0424..0x048D -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,
+ 130, 65, 130, 65, 130, 65, 130, 65, 130, 65, 130, 65, 130, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x048E..0x04F7 -- */
+ 0, 0, 0, 1, 2, 65, 130, 0, 1, 2, 0, 3, 0, 4, 0, 0, 0, 0, 0,
+ 0, 0, 1, 2, 0, 0, 0, 0, 0, 26, 1, 2, 0, 0, 0, 1, 2, 1, 2,
+ 65, 130, 65, 130, 65, 130, 65, 130, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x04F8..0x0561 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 130, 65, 130, 65, 130, 65, 130, 65, 130, 71,
+ 129, 66, 136, 65, 130, 65, 130, 65, 130, 65, 130, 0, 0, 27, 0, 0, 0, 0, 28,
+ 0, 0, 29, 1, 2, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1,
+/* DATA_BLOCK: -- 0x0562..0x05CB -- */
+ 2, 0, 1, 2, 0, 0, 65, 130, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0,
+ 1, 2, 0, 0, 65, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 0, 0,
+ 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x05CC..0x0635 -- */
+ 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
+ 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
+ 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0,
+/* DATA_BLOCK: -- 0x0636..0x069F -- */
+ 1, 2, 1, 2, 1, 2, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
+ 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 32,
+ 0, 0, 0, 0, 33, 34, 33, 0, 0, 0, 0, 0, 0, 1, 2, 35, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x06A0..0x0709 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x070A..0x0773 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 0,
+ 1, 2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 0, 0, 1, 2, 65, 130, 65, 130, 65, 130, 65, 130, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 130, 65, 130, 65, 130, 65, 130, 0, 0, 0,
+/* DATA_BLOCK: -- 0x0774..0x07DD -- */
+ 65, 130, 65, 130, 65, 130, 65, 130, 65, 130, 0, 0, 65, 130, 65, 130, 65, 130, 65,
+ 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x07DE..0x0847 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 130, 65, 130, 65, 130, 0, 0, 0,
+ 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x0848..0x08B1 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 65, 130, 0, 0, 0, 0, 0, 0,
+/* DATA_BLOCK: -- 0x08B2..0x0905 -- */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 67, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 0, 132, 0, 65, 130, 0, 65, 130,
+};
+
+static const SBUInt16 PairIndexes[617] = {
+ 0x0000, 0x006A, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x013E, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x01A8, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x0212, 0x027C, 0x00D4, 0x00D4, 0x00D4, 0x02E6, 0x0350,
+ 0x03BA, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x0424,
+ 0x048E, 0x00D4, 0x00D4, 0x00D4, 0x04F8, 0x0562, 0x05CC, 0x0636, 0x00D4, 0x00D4, 0x06A0, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x070A, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x0774, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
+ 0x00D4, 0x00D4, 0x07DE, 0x0848, 0x08B2
+};
+
+SB_INTERNAL SBCodepoint LookupMirror(SBCodepoint codepoint)
+{
+ if (codepoint <= 0xFF63) {
+ SBInt16 diff = PairDifferences[
+ PairData[
+ PairIndexes[
+ codepoint / 0x06A
+ ] + (codepoint % 0x06A)
+ ] & BracketTypeInverseMask
+ ];
+
+ if (diff != 0) {
+ return (codepoint + diff);
+ }
+ }
+
+ return 0;
+}
+
+SB_INTERNAL SBCodepoint LookupBracketPair(SBCodepoint codepoint, BracketType *type)
+{
+ if (codepoint <= 0xFF63) {
+ SBUInt8 data = PairData[
+ PairIndexes[
+ codepoint / 0x06A
+ ] + (codepoint % 0x06A)
+ ];
+ *type = (data & BracketTypePrimaryMask);
+
+ if (*type != 0) {
+ SBInt16 diff = PairDifferences[
+ data & BracketTypeInverseMask
+ ];
+ return (codepoint + diff);
+ }
+ } else {
+ *type = BracketTypeNone;
+ }
+
+ return 0;
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h b/modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h
new file mode 100644
index 0000000000..28a0e9febc
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/PairingLookup.h
@@ -0,0 +1,17 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ */
+
+#ifndef _SB_INTERNAL_PAIRING_LOOKUP_H
+#define _SB_INTERNAL_PAIRING_LOOKUP_H
+
+#include
+
+#include "BracketType.h"
+#include "SBBase.h"
+
+SB_INTERNAL SBCodepoint LookupMirror(SBCodepoint codepoint);
+SB_INTERNAL SBCodepoint LookupBracketPair(SBCodepoint codepoint, BracketType *bracketType);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h b/modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h
new file mode 100644
index 0000000000..3ce68d3409
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/RunExtrema.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_RUN_EXTREMA_H
+#define _SB_INTERNAL_RUN_EXTREMA_H
+
+#include "SBBase.h"
+
+enum {
+ RunExtremaLeadingL = SBBidiTypeL << 0,
+ RunExtremaLeadingR = SBBidiTypeR << 0,
+
+ RunExtremaTrailingL = SBBidiTypeL << 4,
+ RunExtremaTrailingR = SBBidiTypeR << 4
+};
+typedef SBUInt8 RunExtrema;
+
+#define RunExtremaMake(sor, eor) \
+(RunExtrema) \
+( \
+ ((sor) << 0) \
+ | ((eor) << 4) \
+)
+
+#define RunExtrema_SOR(e) \
+(RunExtrema) \
+( \
+ (e) & 0xF \
+)
+
+#define RunExtrema_EOR(e) \
+(RunExtrema) \
+( \
+ (e) >> 4 \
+)
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h b/modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h
new file mode 100644
index 0000000000..ebda9fa553
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/RunKind.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_RUN_KIND_H
+#define _SB_INTERNAL_RUN_KIND_H
+
+#include "SBBase.h"
+
+enum {
+ RunKindSimple = 0x00,
+
+ RunKindIsolate = 0x01,
+ RunKindPartial = 0x02,
+ RunKindPartialIsolate = RunKindIsolate | RunKindPartial,
+
+ RunKindTerminating = 0x04,
+ RunKindAttached = 0x08
+};
+typedef SBUInt8 RunKind;
+
+#define RunKindMake(i, t) \
+( \
+ ((i) ? RunKindPartialIsolate : 0) \
+ | ((t) ? RunKindTerminating : 0) \
+)
+
+#define RunKindMakeComplete(k) \
+( \
+ (k) &= ~RunKindPartial \
+)
+
+#define RunKindMakeAttached(k) \
+( \
+ (k) |= RunKindAttached \
+)
+
+#define RunKindIsSimple(k) \
+( \
+ (k) == RunKindSimple \
+)
+
+#define RunKindIsIsolate(k) \
+( \
+ (k) & RunKindIsolate \
+)
+
+#define RunKindIsTerminating(k) \
+( \
+ (k) & RunKindTerminating \
+)
+
+#define RunKindIsPartialIsolate(k) \
+( \
+ (k) & RunKindPartial \
+)
+
+#define RunKindIsCompleteIsolate(k) \
+( \
+ ((k) & RunKindPartialIsolate) \
+ == RunKindIsolate \
+)
+
+#define RunKindIsAttachedTerminating(k) \
+( \
+ (k) & RunKindAttached \
+)
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c b/modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c
new file mode 100644
index 0000000000..b6b84656b8
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+#include "LevelRun.h"
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "RunQueue.h"
+
+static SBBoolean RunQueueInsertElement(RunQueueRef queue)
+{
+ if (queue->_rearTop != RunQueueList_MaxIndex) {
+ queue->_rearTop += 1;
+ } else {
+ RunQueueListRef previousList = queue->_rearList;
+ RunQueueListRef rearList = previousList->next;
+
+ if (!rearList) {
+ rearList = malloc(sizeof(RunQueueList));
+ if (!rearList) {
+ return SBFalse;
+ }
+
+ rearList->previous = previousList;
+ rearList->next = NULL;
+
+ previousList->next = rearList;
+ }
+
+ queue->_rearList = rearList;
+ queue->_rearTop = 0;
+ }
+ queue->count += 1;
+
+ return SBTrue;
+}
+
+static void FindPreviousPartialRun(RunQueueRef queue)
+{
+ RunQueueListRef list = queue->_partialList;
+ SBInteger top = queue->_partialTop;
+
+ do {
+ SBInteger limit = (list == queue->_frontList ? queue->_frontTop : 0);
+
+ do {
+ LevelRunRef levelRun = &list->elements[top];
+ if (RunKindIsPartialIsolate(levelRun->kind)) {
+ queue->_partialList = list;
+ queue->_partialTop = top;
+ return;
+ }
+ } while (top-- > limit);
+
+ list = list->previous;
+ top = RunQueueList_MaxIndex;
+ } while (list);
+
+ queue->_partialList = NULL;
+ queue->_partialTop = -1;
+ queue->shouldDequeue = SBFalse;
+}
+
+SB_INTERNAL void RunQueueInitialize(RunQueueRef queue)
+{
+ /* Initialize first list. */
+ queue->_firstList.previous = NULL;
+ queue->_firstList.next = NULL;
+
+ /* Initialize front and rear lists with first list. */
+ queue->_frontList = &queue->_firstList;
+ queue->_rearList = &queue->_firstList;
+ queue->_partialList = NULL;
+
+ /* Initialize list indexes. */
+ queue->_frontTop = 0;
+ queue->_rearTop = -1;
+ queue->_partialTop = -1;
+
+ /* Initialize rest of the elements. */
+ queue->count = 0;
+ queue->peek = &queue->_frontList->elements[queue->_frontTop];
+ queue->shouldDequeue = SBFalse;
+}
+
+SB_INTERNAL SBBoolean RunQueueEnqueue(RunQueueRef queue, const LevelRunRef levelRun)
+{
+ if (RunQueueInsertElement(queue)) {
+ LevelRunRef element = &queue->_rearList->elements[queue->_rearTop];
+
+ /* Copy the level run into the current element. */
+ *element = *levelRun;
+
+ /* Complete the latest isolating run with this terminating run. */
+ if (queue->_partialTop != -1 && RunKindIsTerminating(element->kind)) {
+ LevelRunRef incompleteRun = &queue->_partialList->elements[queue->_partialTop];
+ LevelRunAttach(incompleteRun, element);
+ FindPreviousPartialRun(queue);
+ }
+
+ /* Save the location of the isolating run. */
+ if (RunKindIsIsolate(element->kind)) {
+ queue->_partialList = queue->_rearList;
+ queue->_partialTop = queue->_rearTop;
+ }
+
+ return SBTrue;
+ }
+
+ return SBFalse;
+}
+
+SB_INTERNAL void RunQueueDequeue(RunQueueRef queue)
+{
+ /* The queue should not be empty. */
+ SBAssert(queue->count != 0);
+
+ if (queue->_frontTop != RunQueueList_MaxIndex) {
+ queue->_frontTop += 1;
+ } else {
+ RunQueueListRef frontList = queue->_frontList;
+
+ if (frontList == queue->_rearList) {
+ queue->_rearTop = -1;
+ } else {
+ queue->_frontList = frontList->next;
+ }
+
+ queue->_frontTop = 0;
+ }
+
+ queue->count -= 1;
+ queue->peek = &queue->_frontList->elements[queue->_frontTop];
+}
+
+SB_INTERNAL void RunQueueFinalize(RunQueueRef queue)
+{
+ RunQueueListRef list = queue->_firstList.next;
+
+ while (list) {
+ RunQueueListRef next = list->next;
+ free(list);
+ list = next;
+ };
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h b/modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h
new file mode 100644
index 0000000000..375c84232b
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/RunQueue.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_RUN_QUEUE_H
+#define _SB_INTERNAL_RUN_QUEUE_H
+
+#include
+
+#include "LevelRun.h"
+#include "SBBase.h"
+
+#define RunQueueList_Length 8
+#define RunQueueList_MaxIndex (RunQueueList_Length - 1)
+
+typedef struct _RunQueueList {
+ LevelRun elements[RunQueueList_Length];
+
+ struct _RunQueueList *previous; /**< Reference to the previous list of queue elements */
+ struct _RunQueueList *next; /**< Reference to the next list of queue elements */
+} RunQueueList, *RunQueueListRef;
+
+typedef struct _RunQueue {
+ RunQueueList _firstList; /**< First list of elements, which is part of the queue */
+ RunQueueListRef _frontList; /**< The list containing front element of the queue */
+ RunQueueListRef _rearList; /**< The list containing rear element of the queue */
+ RunQueueListRef _partialList; /**< The list containing latest partial isolating run */
+ SBInteger _frontTop; /**< Index of front element in front list */
+ SBInteger _rearTop; /**< Index of rear element in rear list */
+ SBInteger _partialTop; /**< Index of partial run in partial list */
+ LevelRunRef peek; /**< Peek element of the queue */
+ SBUInteger count; /**< Number of elements the queue contains */
+ SBBoolean shouldDequeue;
+} RunQueue, *RunQueueRef;
+
+SB_INTERNAL void RunQueueInitialize(RunQueueRef queue);
+
+SB_INTERNAL SBBoolean RunQueueEnqueue(RunQueueRef queue, const LevelRunRef levelRun);
+SB_INTERNAL void RunQueueDequeue(RunQueueRef queue);
+
+SB_INTERNAL void RunQueueFinalize(RunQueueRef queue);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c
new file mode 100644
index 0000000000..56009d0072
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2016-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+#include "BidiTypeLookup.h"
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+#include "SBLog.h"
+#include "SBParagraph.h"
+#include "SBAlgorithm.h"
+
+static SBAlgorithmRef AllocateAlgorithm(SBUInteger stringLength)
+{
+ const SBUInteger sizeAlgorithm = sizeof(SBAlgorithm);
+ const SBUInteger sizeTypes = sizeof(SBBidiType) * stringLength;
+ const SBUInteger sizeMemory = sizeAlgorithm + sizeTypes;
+
+ void *pointer = malloc(sizeMemory);
+
+ if (pointer) {
+ const SBUInteger offsetAlgorithm = 0;
+ const SBUInteger offsetTypes = offsetAlgorithm + sizeAlgorithm;
+
+ SBUInt8 *memory = (SBUInt8 *)pointer;
+ SBAlgorithmRef algorithm = (SBAlgorithmRef)(memory + offsetAlgorithm);
+ SBLevel *fixedTypes = (SBLevel *)(memory + offsetTypes);
+
+ algorithm->fixedTypes = fixedTypes;
+
+ return algorithm;
+ }
+
+ return NULL;
+}
+
+static void DisposeAlgorithm(SBAlgorithmRef algorithm)
+{
+ free(algorithm);
+}
+
+static void DetermineBidiTypes(const SBCodepointSequence *sequence, SBBidiType *types)
+{
+ SBUInteger stringIndex = 0;
+ SBUInteger firstIndex = 0;
+ SBCodepoint codepoint;
+
+ while ((codepoint = SBCodepointSequenceGetCodepointAt(sequence, &stringIndex)) != SBCodepointInvalid) {
+ types[firstIndex] = LookupBidiType(codepoint);
+
+ /* Subsequent code units get 'BN' type. */
+ while (++firstIndex < stringIndex) {
+ types[firstIndex] = SBBidiTypeBN;
+ }
+ }
+}
+
+static SBAlgorithmRef CreateAlgorithm(const SBCodepointSequence *codepointSequence)
+{
+ SBUInteger stringLength = codepointSequence->stringLength;
+ SBAlgorithmRef algorithm;
+
+ SB_LOG_BLOCK_OPENER("Algorithm Input");
+ SB_LOG_STATEMENT("Codepoints", 1, SB_LOG_CODEPOINT_SEQUENCE(codepointSequence));
+ SB_LOG_BLOCK_CLOSER();
+
+ algorithm = AllocateAlgorithm(stringLength);
+
+ if (algorithm) {
+ algorithm->codepointSequence = *codepointSequence;
+ algorithm->retainCount = 1;
+
+ DetermineBidiTypes(codepointSequence, algorithm->fixedTypes);
+
+ SB_LOG_BLOCK_OPENER("Determined Types");
+ SB_LOG_STATEMENT("Types", 1, SB_LOG_BIDI_TYPES_ARRAY(algorithm->fixedTypes, stringLength));
+ SB_LOG_BLOCK_CLOSER();
+
+ SB_LOG_BREAKER();
+ }
+
+ return algorithm;
+}
+
+SBAlgorithmRef SBAlgorithmCreate(const SBCodepointSequence *codepointSequence)
+{
+ if (SBCodepointSequenceIsValid(codepointSequence)) {
+ return CreateAlgorithm(codepointSequence);
+ }
+
+ return NULL;
+}
+
+const SBBidiType *SBAlgorithmGetBidiTypesPtr(SBAlgorithmRef algorithm)
+{
+ return algorithm->fixedTypes;
+}
+
+SB_INTERNAL SBUInteger SBAlgorithmGetSeparatorLength(SBAlgorithmRef algorithm, SBUInteger separatorIndex)
+{
+ const SBCodepointSequence *codepointSequence = &algorithm->codepointSequence;
+ SBUInteger stringIndex = separatorIndex;
+ SBCodepoint codepoint;
+ SBUInteger separatorLength;
+
+ codepoint = SBCodepointSequenceGetCodepointAt(codepointSequence, &stringIndex);
+ separatorLength = stringIndex - separatorIndex;
+
+ if (codepoint == '\r') {
+ /* Don't break in between 'CR' and 'LF'. */
+ if (stringIndex < codepointSequence->stringLength) {
+ codepoint = SBCodepointSequenceGetCodepointAt(codepointSequence, &stringIndex);
+
+ if (codepoint == '\n') {
+ separatorLength = stringIndex - separatorIndex;
+ }
+ }
+ }
+
+ return separatorLength;
+}
+
+void SBAlgorithmGetParagraphBoundary(SBAlgorithmRef algorithm,
+ SBUInteger paragraphOffset, SBUInteger suggestedLength,
+ SBUInteger *acutalLength, SBUInteger *separatorLength)
+{
+ const SBCodepointSequence *codepointSequence = &algorithm->codepointSequence;
+ SBBidiType *bidiTypes = algorithm->fixedTypes;
+ SBUInteger limitIndex;
+ SBUInteger startIndex;
+
+ if (separatorLength) {
+ *separatorLength = 0;
+ }
+
+ SBUIntegerNormalizeRange(codepointSequence->stringLength, ¶graphOffset, &suggestedLength);
+ limitIndex = paragraphOffset + suggestedLength;
+
+ for (startIndex = paragraphOffset; startIndex < limitIndex; startIndex++) {
+ SBBidiType currentType = bidiTypes[startIndex];
+
+ if (currentType == SBBidiTypeB) {
+ SBUInteger codeUnitCount = SBAlgorithmGetSeparatorLength(algorithm, startIndex);
+
+ startIndex += codeUnitCount;
+
+ if (separatorLength) {
+ *separatorLength = codeUnitCount;
+ }
+ break;
+ }
+ }
+
+ if (acutalLength) {
+ *acutalLength = startIndex - paragraphOffset;
+ }
+}
+
+SBParagraphRef SBAlgorithmCreateParagraph(SBAlgorithmRef algorithm,
+ SBUInteger paragraphOffset, SBUInteger suggestedLength, SBLevel baseLevel)
+{
+ const SBCodepointSequence *codepointSequence = &algorithm->codepointSequence;
+ SBUInteger stringLength = codepointSequence->stringLength;
+
+ SBUIntegerNormalizeRange(stringLength, ¶graphOffset, &suggestedLength);
+
+ if (suggestedLength > 0) {
+ return SBParagraphCreate(algorithm, paragraphOffset, suggestedLength, baseLevel);
+ }
+
+ return NULL;
+}
+
+SBAlgorithmRef SBAlgorithmRetain(SBAlgorithmRef algorithm)
+{
+ if (algorithm) {
+ algorithm->retainCount += 1;
+ }
+
+ return algorithm;
+}
+
+void SBAlgorithmRelease(SBAlgorithmRef algorithm)
+{
+ if (algorithm && --algorithm->retainCount == 0) {
+ DisposeAlgorithm(algorithm);
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h
new file mode 100644
index 0000000000..6d417a3191
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBAlgorithm.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2016-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_ALGORITHM_H
+#define _SB_INTERNAL_ALGORITHM_H
+
+#include
+#include
+#include
+#include
+#include
+
+typedef struct _SBAlgorithm {
+ SBCodepointSequence codepointSequence;
+ SBBidiType *fixedTypes;
+ SBUInteger retainCount;
+} SBAlgorithm;
+
+SB_INTERNAL SBUInteger SBAlgorithmGetSeparatorLength(SBAlgorithmRef algorithm, SBUInteger separatorIndex);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h
new file mode 100644
index 0000000000..22923c72b8
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBAssert.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_ASSERT_H
+#define _SB_INTERNAL_ASSERT_H
+
+#include
+
+#define SBAssert(exp) assert(exp)
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c
new file mode 100644
index 0000000000..c5323a9c9c
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBBase.c
@@ -0,0 +1,420 @@
+/*
+ * Copyright (C) 2016-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+
+#include "BidiTypeLookup.h"
+#include "GeneralCategoryLookup.h"
+#include "PairingLookup.h"
+#include "ScriptLookup.h"
+#include "SBBase.h"
+
+#define TAG(a, b, c, d) \
+(SBUInt32) \
+( \
+ ((SBUInt8)(a) << 24) \
+ | ((SBUInt8)(b) << 16) \
+ | ((SBUInt8)(c) << 8) \
+ | ((SBUInt8)(d) << 0) \
+)
+
+SB_INTERNAL void SBUIntegerNormalizeRange(SBUInteger actualLength,
+ SBUInteger *rangeOffset, SBUInteger *rangeLength)
+{
+ /**
+ * Assume:
+ * Actual Length = 10
+ *
+ * Case 1:
+ * Offset = 0, Length = 10
+ * Result:
+ * Offset = 0, Length = 10
+ *
+ * Case 2:
+ * Offset = 0, Length = 11
+ * Result:
+ * Offset = 0, Length = 10
+ *
+ * Case 3:
+ * Offset = 1, Length = -1 (MAX)
+ * Result:
+ * Offset = 1, Length = 9
+ *
+ * Case 4:
+ * Offset = 10, Length = 0
+ * Result:
+ * Offset = Invalid, Length = 0
+ *
+ * Case 5:
+ * Offset = -1 (MAX), Length = 1
+ * Result:
+ * Offset = Invalid, Length = 0
+ */
+
+ if (*rangeOffset < actualLength) {
+ SBUInteger possibleLimit = *rangeOffset + *rangeLength;
+
+ if (*rangeOffset <= possibleLimit && possibleLimit <= actualLength) {
+ /* The range is valid. Nothing to do here. */
+ } else {
+ *rangeLength = actualLength - *rangeOffset;
+ }
+ } else {
+ *rangeOffset = SBInvalidIndex;
+ *rangeLength = 0;
+ }
+}
+
+SB_INTERNAL SBBoolean SBUIntegerVerifyRange(SBUInteger actualLength,
+ SBUInteger rangeOffset, SBUInteger rangeLength)
+{
+ SBUInteger possibleLimit = rangeOffset + rangeLength;
+
+ return rangeOffset < actualLength
+ && rangeOffset <= possibleLimit
+ && possibleLimit <= actualLength;
+}
+
+SBBidiType SBCodepointGetBidiType(SBCodepoint codepoint)
+{
+ return LookupBidiType(codepoint);
+}
+
+SBGeneralCategory SBCodepointGetGeneralCategory(SBCodepoint codepoint)
+{
+ return LookupGeneralCategory(codepoint);
+}
+
+SBCodepoint SBCodepointGetMirror(SBCodepoint codepoint)
+{
+ return LookupMirror(codepoint);
+}
+
+SBScript SBCodepointGetScript(SBCodepoint codepoint)
+{
+ return LookupScript(codepoint);
+}
+
+SBUInt32 SBScriptGetOpenTypeTag(SBScript script)
+{
+ /* Reference: https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags */
+ /* Dated: 07/24/2017 */
+
+ switch (script) {
+ case SBScriptADLM:
+ return TAG('a', 'd', 'l', 'm');
+ case SBScriptAHOM:
+ return TAG('a', 'h', 'o', 'm');
+ case SBScriptHLUW:
+ return TAG('h', 'l', 'u', 'w');
+ case SBScriptARAB:
+ return TAG('a', 'r', 'a', 'b');
+ case SBScriptARMN:
+ return TAG('a', 'r', 'm', 'n');
+ case SBScriptAVST:
+ return TAG('a', 'v', 's', 't');
+ case SBScriptBALI:
+ return TAG('b', 'a', 'l', 'i');
+ case SBScriptBAMU:
+ return TAG('b', 'a', 'm', 'u');
+ case SBScriptBASS:
+ return TAG('b', 'a', 's', 's');
+ case SBScriptBATK:
+ return TAG('b', 'a', 't', 'k');
+ /* case SBScriptBENG:
+ return TAG('b', 'e', 'n', 'g'); */
+ case SBScriptBENG:
+ return TAG('b', 'n', 'g', '2');
+ case SBScriptBHKS:
+ return TAG('b', 'h', 'k', 's');
+ case SBScriptBOPO:
+ return TAG('b', 'o', 'p', 'o');
+ case SBScriptBRAH:
+ return TAG('b', 'r', 'a', 'h');
+ case SBScriptBRAI:
+ return TAG('b', 'r', 'a', 'i');
+ case SBScriptBUGI:
+ return TAG('b', 'u', 'g', 'i');
+ case SBScriptBUHD:
+ return TAG('b', 'u', 'h', 'd');
+ /* case SBScriptBYZM:
+ return TAG('b', 'y', 'z', 'm'); */
+ case SBScriptCANS:
+ return TAG('c', 'a', 'n', 's');
+ case SBScriptCARI:
+ return TAG('c', 'a', 'r', 'i');
+ case SBScriptAGHB:
+ return TAG('a', 'g', 'h', 'b');
+ case SBScriptCAKM:
+ return TAG('c', 'a', 'k', 'm');
+ case SBScriptCHAM:
+ return TAG('c', 'h', 'a', 'm');
+ case SBScriptCHER:
+ return TAG('c', 'h', 'e', 'r');
+ case SBScriptHANI:
+ return TAG('h', 'a', 'n', 'i');
+ case SBScriptCOPT:
+ return TAG('c', 'o', 'p', 't');
+ case SBScriptCPRT:
+ return TAG('c', 'p', 'r', 't');
+ case SBScriptCYRL:
+ return TAG('c', 'y', 'r', 'l');
+ /* case SBScriptDFLT:
+ return TAG('D', 'F', 'L', 'T'); */
+ case SBScriptDSRT:
+ return TAG('d', 's', 'r', 't');
+ /* case SBScriptDEVA:
+ return TAG('d', 'e', 'v', 'a'); */
+ case SBScriptDEVA:
+ return TAG('d', 'e', 'v', '2');
+ case SBScriptDUPL:
+ return TAG('d', 'u', 'p', 'l');
+ case SBScriptEGYP:
+ return TAG('e', 'g', 'y', 'p');
+ case SBScriptELBA:
+ return TAG('e', 'l', 'b', 'a');
+ case SBScriptETHI:
+ return TAG('e', 't', 'h', 'i');
+ case SBScriptGEOR:
+ return TAG('g', 'e', 'o', 'r');
+ case SBScriptGLAG:
+ return TAG('g', 'l', 'a', 'g');
+ case SBScriptGOTH:
+ return TAG('g', 'o', 't', 'h');
+ case SBScriptGRAN:
+ return TAG('g', 'r', 'a', 'n');
+ case SBScriptGREK:
+ return TAG('g', 'r', 'e', 'k');
+ /* case SBScriptGUJR:
+ return TAG('g', 'u', 'j', 'r'); */
+ case SBScriptGUJR:
+ return TAG('g', 'j', 'r', '2');
+ /* case SBScriptGURU:
+ return TAG('g', 'u', 'r', 'u'); */
+ case SBScriptGURU:
+ return TAG('g', 'u', 'r', '2');
+ case SBScriptHANG:
+ return TAG('h', 'a', 'n', 'g');
+ /* case SBScriptJAMO:
+ return TAG('j', 'a', 'm', 'o'); */
+ case SBScriptHANO:
+ return TAG('h', 'a', 'n', 'o');
+ case SBScriptHATR:
+ return TAG('h', 'a', 't', 'r');
+ case SBScriptHEBR:
+ return TAG('h', 'e', 'b', 'r');
+ case SBScriptHIRA:
+ return TAG('k', 'a', 'n', 'a');
+ case SBScriptARMI:
+ return TAG('a', 'r', 'm', 'i');
+ case SBScriptPHLI:
+ return TAG('p', 'h', 'l', 'i');
+ case SBScriptPRTI:
+ return TAG('p', 'r', 't', 'i');
+ case SBScriptJAVA:
+ return TAG('j', 'a', 'v', 'a');
+ case SBScriptKTHI:
+ return TAG('k', 't', 'h', 'i');
+ /* case SBScriptKNDA:
+ return TAG('k', 'n', 'd', 'a'); */
+ case SBScriptKNDA:
+ return TAG('k', 'n', 'd', '2');
+ case SBScriptKANA:
+ return TAG('k', 'a', 'n', 'a');
+ case SBScriptKALI:
+ return TAG('k', 'a', 'l', 'i');
+ case SBScriptKHAR:
+ return TAG('k', 'h', 'a', 'r');
+ case SBScriptKHMR:
+ return TAG('k', 'h', 'm', 'r');
+ case SBScriptKHOJ:
+ return TAG('k', 'h', 'o', 'j');
+ case SBScriptSIND:
+ return TAG('s', 'i', 'n', 'd');
+ case SBScriptLAOO:
+ return TAG('l', 'a', 'o', ' ');
+ case SBScriptLATN:
+ return TAG('l', 'a', 't', 'n');
+ case SBScriptLEPC:
+ return TAG('l', 'e', 'p', 'c');
+ case SBScriptLIMB:
+ return TAG('l', 'i', 'm', 'b');
+ case SBScriptLINA:
+ return TAG('l', 'i', 'n', 'a');
+ case SBScriptLINB:
+ return TAG('l', 'i', 'n', 'b');
+ case SBScriptLISU:
+ return TAG('l', 'i', 's', 'u');
+ case SBScriptLYCI:
+ return TAG('l', 'y', 'c', 'i');
+ case SBScriptLYDI:
+ return TAG('l', 'y', 'd', 'i');
+ case SBScriptMAHJ:
+ return TAG('m', 'a', 'h', 'j');
+ /* case SBScriptMLYM:
+ return TAG('m', 'l', 'y', 'm'); */
+ case SBScriptMLYM:
+ return TAG('m', 'l', 'm', '2');
+ case SBScriptMAND:
+ return TAG('m', 'a', 'n', 'd');
+ case SBScriptMANI:
+ return TAG('m', 'a', 'n', 'i');
+ case SBScriptMARC:
+ return TAG('m', 'a', 'r', 'c');
+ /* case SBScriptMATH:
+ return TAG('m', 'a', 't', 'h'); */
+ case SBScriptMTEI:
+ return TAG('m', 't', 'e', 'i');
+ case SBScriptMEND:
+ return TAG('m', 'e', 'n', 'd');
+ case SBScriptMERC:
+ return TAG('m', 'e', 'r', 'c');
+ case SBScriptMERO:
+ return TAG('m', 'e', 'r', 'o');
+ case SBScriptPLRD:
+ return TAG('p', 'l', 'r', 'd');
+ case SBScriptMODI:
+ return TAG('m', 'o', 'd', 'i');
+ case SBScriptMONG:
+ return TAG('m', 'o', 'n', 'g');
+ case SBScriptMROO:
+ return TAG('m', 'r', 'o', 'o');
+ case SBScriptMULT:
+ return TAG('m', 'u', 'l', 't');
+ /* case SBScriptMUSC:
+ return TAG('m', 'u', 's', 'c'); */
+ /* case SBScriptMYMR:
+ return TAG('m', 'y', 'm', 'r'); */
+ case SBScriptMYMR:
+ return TAG('m', 'y', 'm', '2');
+ case SBScriptNBAT:
+ return TAG('n', 'b', 'a', 't');
+ case SBScriptNEWA:
+ return TAG('n', 'e', 'w', 'a');
+ case SBScriptTALU:
+ return TAG('t', 'a', 'l', 'u');
+ case SBScriptNKOO:
+ return TAG('n', 'k', 'o', ' ');
+ /* case SBScriptORYA:
+ return TAG('o', 'r', 'y', 'a'); */
+ case SBScriptORYA:
+ return TAG('o', 'r', 'y', '2');
+ case SBScriptOGAM:
+ return TAG('o', 'g', 'a', 'm');
+ case SBScriptOLCK:
+ return TAG('o', 'l', 'c', 'k');
+ case SBScriptITAL:
+ return TAG('i', 't', 'a', 'l');
+ case SBScriptHUNG:
+ return TAG('h', 'u', 'n', 'g');
+ case SBScriptNARB:
+ return TAG('n', 'a', 'r', 'b');
+ case SBScriptPERM:
+ return TAG('p', 'e', 'r', 'm');
+ case SBScriptXPEO:
+ return TAG('x', 'p', 'e', 'o');
+ case SBScriptSARB:
+ return TAG('s', 'a', 'r', 'b');
+ case SBScriptORKH:
+ return TAG('o', 'r', 'k', 'h');
+ case SBScriptOSGE:
+ return TAG('o', 's', 'g', 'e');
+ case SBScriptOSMA:
+ return TAG('o', 's', 'm', 'a');
+ case SBScriptHMNG:
+ return TAG('h', 'm', 'n', 'g');
+ case SBScriptPALM:
+ return TAG('p', 'a', 'l', 'm');
+ case SBScriptPAUC:
+ return TAG('p', 'a', 'u', 'c');
+ case SBScriptPHAG:
+ return TAG('p', 'h', 'a', 'g');
+ case SBScriptPHNX:
+ return TAG('p', 'h', 'n', 'x');
+ case SBScriptPHLP:
+ return TAG('p', 'h', 'l', 'p');
+ case SBScriptRJNG:
+ return TAG('r', 'j', 'n', 'g');
+ case SBScriptRUNR:
+ return TAG('r', 'u', 'n', 'r');
+ case SBScriptSAMR:
+ return TAG('s', 'a', 'm', 'r');
+ case SBScriptSAUR:
+ return TAG('s', 'a', 'u', 'r');
+ case SBScriptSHRD:
+ return TAG('s', 'h', 'r', 'd');
+ case SBScriptSHAW:
+ return TAG('s', 'h', 'a', 'w');
+ case SBScriptSIDD:
+ return TAG('s', 'i', 'd', 'd');
+ case SBScriptSGNW:
+ return TAG('s', 'g', 'n', 'w');
+ case SBScriptSINH:
+ return TAG('s', 'i', 'n', 'h');
+ case SBScriptSORA:
+ return TAG('s', 'o', 'r', 'a');
+ case SBScriptXSUX:
+ return TAG('x', 's', 'u', 'x');
+ case SBScriptSUND:
+ return TAG('s', 'u', 'n', 'd');
+ case SBScriptSYLO:
+ return TAG('s', 'y', 'l', 'o');
+ case SBScriptSYRC:
+ return TAG('s', 'y', 'r', 'c');
+ case SBScriptTGLG:
+ return TAG('t', 'g', 'l', 'g');
+ case SBScriptTAGB:
+ return TAG('t', 'a', 'g', 'b');
+ case SBScriptTALE:
+ return TAG('t', 'a', 'l', 'e');
+ case SBScriptLANA:
+ return TAG('l', 'a', 'n', 'a');
+ case SBScriptTAVT:
+ return TAG('t', 'a', 'v', 't');
+ case SBScriptTAKR:
+ return TAG('t', 'a', 'k', 'r');
+ /* case SBScriptTAML:
+ return TAG('t', 'a', 'm', 'l'); */
+ case SBScriptTAML:
+ return TAG('t', 'm', 'l', '2');
+ case SBScriptTANG:
+ return TAG('t', 'a', 'n', 'g');
+ /* case SBScriptTELU:
+ return TAG('t', 'e', 'l', 'u'); */
+ case SBScriptTELU:
+ return TAG('t', 'e', 'l', '2');
+ case SBScriptTHAA:
+ return TAG('t', 'h', 'a', 'a');
+ case SBScriptTHAI:
+ return TAG('t', 'h', 'a', 'i');
+ case SBScriptTIBT:
+ return TAG('t', 'i', 'b', 't');
+ case SBScriptTFNG:
+ return TAG('t', 'f', 'n', 'g');
+ case SBScriptTIRH:
+ return TAG('t', 'i', 'r', 'h');
+ case SBScriptUGAR:
+ return TAG('u', 'g', 'a', 'r');
+ case SBScriptVAII:
+ return TAG('v', 'a', 'i', ' ');
+ case SBScriptWARA:
+ return TAG('w', 'a', 'r', 'a');
+ case SBScriptYIII:
+ return TAG('y', 'i', ' ', ' ');
+ default:
+ return TAG('D', 'F', 'L', 'T');
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h
new file mode 100644
index 0000000000..00cc977f66
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBBase.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2016-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_BASE_H
+#define _SB_INTERNAL_BASE_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+/**
+ * A value that indicates an invalid unsigned index.
+ */
+#define SBInvalidIndex (SBUInteger)(-1)
+
+SB_INTERNAL void SBUIntegerNormalizeRange(SBUInteger actualLength,
+ SBUInteger *rangeOffset, SBUInteger *rangeLength);
+
+SB_INTERNAL SBBoolean SBUIntegerVerifyRange(SBUInteger actualLength,
+ SBUInteger rangeOffset, SBUInteger rangeLength);
+
+
+#define SBNumberGetMax(first, second) \
+( \
+ (first) > (second) \
+ ? (first) \
+ : (second) \
+)
+
+#define SBNumberLimitIncrement(number, limit) \
+( \
+ (number) < (limit) \
+ ? (number) + (1) \
+ : (limit) \
+)
+
+#define SBNumberLimitDecrement(number, limit) \
+( \
+ (number) > (limit) \
+ ? (number) - (1) \
+ : (limit) \
+)
+
+#define SBNumberRingAdd(number, count, capacity) \
+ (((number) + (count)) % (capacity))
+
+#define SBNumberRingIncrement(number, capacity) \
+ SBNumberRingAdd(number, 1, capacity)
+
+#define SBNumberRingSubtract(number, count, capacity) \
+ (((number) + (capacity) - (count)) % (capacity))
+
+#define SBNumberRingDecrement(number, capacity) \
+ SBNumberRingSubtract(number, 1, capacity)
+
+
+#define SBLevelAsNormalBidiType(level) \
+( \
+ ((level) & 1) \
+ ? SBBidiTypeR \
+ : SBBidiTypeL \
+)
+
+#define SBLevelAsOppositeBidiType(level) \
+( \
+ ((level) & 1) \
+ ? SBBidiTypeL \
+ : SBBidiTypeR \
+)
+
+
+#define SBBidiTypeIsEqual(t1, t2) ((t1) == (t2))
+
+#define SBBidiTypeIsNumber(t) SBUInt8InRange(t, SBBidiTypeAN, SBBidiTypeEN)
+#define SBBidiTypeIsIsolate(t) SBUInt8InRange(t, SBBidiTypeLRI, SBBidiTypePDI)
+
+#define SBBidiTypeIsStrongOrNumber(t) (SBBidiTypeIsStrong(t) || SBBidiTypeIsNumber(t))
+#define SBBidiTypeIsNumberSeparator(t) SBUInt8InRange(t, SBBidiTypeES, SBBidiTypeCS)
+#define SBBidiTypeIsIsolateInitiator(t) SBUInt8InRange(t, SBBidiTypeLRI, SBBidiTypeFSI)
+#define SBBidiTypeIsIsolateTerminator(t) SBBidiTypeIsEqual(t, SBBidiTypePDI)
+#define SBBidiTypeIsNeutralOrIsolate(t) SBUInt8InRange(t, SBBidiTypeWS, SBBidiTypePDI)
+
+
+#define SBCodepointMax 0x10FFFF
+#define SBCodepointInRange(v, s, e) SBUInt32InRange(v, s, e)
+#define SBCodepointIsSurrogate(c) SBCodepointInRange(c, 0xD800, 0xDFFF)
+#define SBCodepointIsValid(c) (!SBCodepointIsSurrogate(c) && (c) <= SBCodepointMax)
+
+
+#define SBScriptIsCommonOrInherited(s) ((s) <= SBScriptZYYY)
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c
new file mode 100644
index 0000000000..3828fa776f
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.c
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2016-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+
+#include
+#include
+
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+
+typedef struct {
+ SBUInt8 valid;
+ SBUInt8 total;
+ SBUInt8 start;
+ SBUInt8 end;
+} UTF8State;
+
+static const UTF8State UTF8StateTable[9] = {
+ {1,0,0x00,0x00}, {0,0,0x00,0x00}, {1,2,0x80,0xBF}, {1,3,0xA0,0xBF}, {1,3,0x80,0xBF},
+ {1,3,0x80,0x9F}, {1,4,0x90,0xBF}, {1,4,0x80,0xBF}, {1,4,0x80,0x8F}
+};
+
+static const SBUInt8 UTF8LookupTable[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+/* LEAD: -- 80..BF -- */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1,
+/* LEAD: -- C0..C1 -- */
+ 1, 1,
+/* LEAD: -- C2..DF -- */
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+/* LEAD: -- E0..E0 -- */
+ 3,
+/* LEAD: -- E1..EC -- */
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+/* LEAD: -- ED..ED -- */
+ 5,
+/* LEAD: -- EE..EF -- */
+ 4, 4,
+/* LEAD: -- F0..F0 -- */
+ 6,
+/* LEAD: -- F1..F3 -- */
+ 7, 7, 7,
+/* LEAD: -- F4..F4 -- */
+ 8,
+/* LEAD: -- F5..F7 -- */
+ 1, 1, 1,
+/* LEAD: -- F8..FB -- */
+ 1, 1, 1, 1,
+/* LEAD: -- FC..FD -- */
+ 1, 1,
+/* LEAD: -- FE..FF -- */
+ 1, 1
+};
+
+static SBCodepoint GetUTF8CodepointAt(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex);
+static SBCodepoint GetUTF8CodepointBefore(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex);
+static SBCodepoint GetUTF16CodepointAt(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex);
+static SBCodepoint GetUTF16CodepointBefore(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex);
+static SBCodepoint GetUTF32CodepointAt(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex);
+static SBCodepoint GetUTF32CodepointBefore(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex);
+
+SB_INTERNAL SBBoolean SBCodepointSequenceIsValid(const SBCodepointSequence *codepointSequence)
+{
+ if (codepointSequence) {
+ SBBoolean encodingValid = SBFalse;
+
+ switch (codepointSequence->stringEncoding) {
+ case SBStringEncodingUTF8:
+ case SBStringEncodingUTF16:
+ case SBStringEncodingUTF32:
+ encodingValid = SBTrue;
+ break;
+ }
+
+ return (encodingValid && codepointSequence->stringBuffer && codepointSequence->stringLength > 0);
+ }
+
+ return SBFalse;
+}
+
+SBCodepoint SBCodepointSequenceGetCodepointBefore(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex)
+{
+ SBCodepoint codepoint = SBCodepointInvalid;
+
+ if ((*stringIndex - 1) < codepointSequence->stringLength) {
+ switch (codepointSequence->stringEncoding) {
+ case SBStringEncodingUTF8:
+ codepoint = GetUTF8CodepointBefore(codepointSequence, stringIndex);
+ break;
+
+ case SBStringEncodingUTF16:
+ codepoint = GetUTF16CodepointBefore(codepointSequence, stringIndex);
+ break;
+
+ case SBStringEncodingUTF32:
+ codepoint = GetUTF32CodepointBefore(codepointSequence, stringIndex);
+ break;
+ }
+ }
+
+ return codepoint;
+}
+
+SBCodepoint SBCodepointSequenceGetCodepointAt(const SBCodepointSequence *codepointSequence, SBUInteger *stringIndex)
+{
+ SBCodepoint codepoint = SBCodepointInvalid;
+
+ if (*stringIndex < codepointSequence->stringLength) {
+ switch (codepointSequence->stringEncoding) {
+ case SBStringEncodingUTF8:
+ codepoint = GetUTF8CodepointAt(codepointSequence, stringIndex);
+ break;
+
+ case SBStringEncodingUTF16:
+ codepoint = GetUTF16CodepointAt(codepointSequence, stringIndex);
+ break;
+
+ case SBStringEncodingUTF32:
+ codepoint = GetUTF32CodepointAt(codepointSequence, stringIndex);
+ break;
+ }
+ }
+
+ return codepoint;
+}
+
+static SBCodepoint GetUTF8CodepointAt(const SBCodepointSequence *sequence, SBUInteger *index)
+{
+ const SBUInt8 *buffer = sequence->stringBuffer;
+ SBUInteger length = sequence->stringLength;
+ SBUInt8 lead;
+ UTF8State state;
+ SBUInteger limit;
+ SBCodepoint codepoint;
+
+ lead = buffer[*index];
+ state = UTF8StateTable[UTF8LookupTable[lead]];
+ limit = *index + state.total;
+
+ if (limit > length) {
+ limit = length;
+ state.valid = SBFalse;
+ }
+
+ codepoint = lead & (0x7F >> state.total);
+
+ while (++(*index) < limit) {
+ SBUInt8 byte = buffer[*index];
+
+ if (byte >= state.start && byte <= state.end) {
+ codepoint = (codepoint << 6) | (byte & 0x3F);
+ } else {
+ state.valid = SBFalse;
+ break;
+ }
+
+ state.start = 0x80;
+ state.end = 0xBF;
+ }
+
+ if (state.valid) {
+ return codepoint;
+ }
+
+ return SBCodepointFaulty;
+}
+
+static SBCodepoint GetUTF8CodepointBefore(const SBCodepointSequence *sequence, SBUInteger *index)
+{
+ const SBUInt8 *buffer = sequence->stringBuffer;
+ SBUInteger startIndex = *index;
+ SBUInteger limitIndex;
+ SBUInteger continuation;
+ SBCodepoint codepoint;
+
+ continuation = 7;
+
+ while (--continuation && --startIndex) {
+ SBUInt8 codeunit = buffer[startIndex];
+
+ if ((codeunit & 0xC0) != 0x80) {
+ break;
+ }
+ }
+
+ limitIndex = startIndex;
+ codepoint = GetUTF8CodepointAt(sequence, &limitIndex);
+
+ if (limitIndex == *index) {
+ *index = startIndex;
+ } else {
+ codepoint = SBCodepointFaulty;
+ *index -= 1;
+ }
+
+ return codepoint;
+}
+
+static SBCodepoint GetUTF16CodepointAt(const SBCodepointSequence *sequence, SBUInteger *index)
+{
+ const SBUInt16 *buffer = sequence->stringBuffer;
+ SBUInteger length = sequence->stringLength;
+ SBCodepoint codepoint;
+ SBUInt16 lead;
+
+ codepoint = SBCodepointFaulty;
+
+ lead = buffer[*index];
+ *index += 1;
+
+ if (!SBCodepointIsSurrogate(lead)) {
+ codepoint = lead;
+ } else if (lead <= 0xDBFF) {
+ if (*index < length) {
+ SBUInt16 trail = buffer[*index];
+
+ if (SBUInt16InRange(trail, 0xDC00, 0xDFFF)) {
+ codepoint = (lead << 10) + trail - ((0xD800 << 10) + 0xDC00 - 0x10000);
+ *index += 1;
+ }
+ }
+ }
+
+ return codepoint;
+}
+
+static SBCodepoint GetUTF16CodepointBefore(const SBCodepointSequence *sequence, SBUInteger *index)
+{
+ const SBUInt16 *buffer = sequence->stringBuffer;
+ SBCodepoint codepoint;
+ SBUInt16 trail;
+
+ codepoint = SBCodepointFaulty;
+
+ *index -= 1;
+ trail = buffer[*index];
+
+ if (!SBCodepointIsSurrogate(trail)) {
+ codepoint = trail;
+ } else if (trail >= 0xDC00) {
+ if (*index > 0) {
+ SBUInt16 lead = buffer[*index - 1];
+
+ if (SBUInt16InRange(lead, 0xD800, 0xDBFF)) {
+ codepoint = (lead << 10) + trail - ((0xD800 << 10) + 0xDC00 - 0x10000);
+ *index -= 1;
+ }
+ }
+ }
+
+ return codepoint;
+}
+
+static SBCodepoint GetUTF32CodepointAt(const SBCodepointSequence *sequence, SBUInteger *index)
+{
+ const SBUInt32 *buffer = sequence->stringBuffer;
+ SBCodepoint codepoint;
+
+ codepoint = buffer[*index];
+ *index += 1;
+
+ if (SBCodepointIsValid(codepoint)) {
+ return codepoint;
+ }
+
+ return SBCodepointFaulty;
+}
+
+static SBCodepoint GetUTF32CodepointBefore(const SBCodepointSequence *sequence, SBUInteger *index)
+{
+ const SBUInt32 *buffer = sequence->stringBuffer;
+ SBCodepoint codepoint;
+
+ *index -= 1;
+ codepoint = buffer[*index];
+
+ if (SBCodepointIsValid(codepoint)) {
+ return codepoint;
+ }
+
+ return SBCodepointFaulty;
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h
new file mode 100644
index 0000000000..e5967c4505
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBCodepointSequence.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2016 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_CODEPOINT_SEQUENCE_H
+#define _SB_INTERNAL_CODEPOINT_SEQUENCE_H
+
+#include
+#include
+
+SB_INTERNAL SBBoolean SBCodepointSequenceIsValid(const SBCodepointSequence *codepointSequence);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c
new file mode 100644
index 0000000000..0134314f48
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBLine.c
@@ -0,0 +1,320 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+#include "PairingLookup.h"
+#include "SBAlgorithm.h"
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+#include "SBParagraph.h"
+#include "SBRun.h"
+#include "SBLine.h"
+
+typedef struct _LineContext {
+ const SBBidiType *refTypes;
+ SBLevel *fixedLevels;
+ SBUInteger runCount;
+ SBLevel maxLevel;
+} LineContext, *LineContextRef;
+
+static SBLevel CopyLevels(SBLevel *destination,
+ const SBLevel *source, SBUInteger length, SBUInteger *runCount)
+{
+ SBLevel lastLevel = SBLevelInvalid;
+ SBLevel maxLevel = 0;
+ SBUInteger totalRuns = 0;
+
+ while (length--) {
+ SBLevel level = *(source++);
+ *(destination++) = level;
+
+ if (level != lastLevel) {
+ totalRuns += 1;
+
+ if (level > maxLevel) {
+ maxLevel = level;
+ }
+ }
+ }
+
+ *runCount = totalRuns;
+
+ return maxLevel;
+}
+
+static LineContextRef CreateLineContext(const SBBidiType *types, const SBLevel *levels, SBUInteger length)
+{
+ const SBUInteger sizeContext = sizeof(LineContext);
+ const SBUInteger sizeLevels = sizeof(SBLevel) * length;
+ const SBUInteger sizeMemory = sizeContext + sizeLevels;
+
+ void *pointer = malloc(sizeMemory);
+
+ if (pointer) {
+ const SBUInteger offsetContext = 0;
+ const SBUInteger offsetLevels = offsetContext + sizeContext;
+
+ SBUInt8 *memory = (SBUInt8 *)pointer;
+ LineContextRef context = (LineContextRef)(memory + offsetContext);
+ SBLevel *fixedLevels = (SBLevel *)(memory + offsetLevels);
+
+ context->refTypes = types;
+ context->fixedLevels = fixedLevels;
+ context->maxLevel = CopyLevels(fixedLevels, levels, length, &context->runCount);
+
+ return context;
+ }
+
+ return NULL;
+}
+
+static void DisposeLineContext(LineContextRef context)
+{
+ free(context);
+}
+
+static SBLineRef AllocateLine(SBUInteger runCount)
+{
+ const SBUInteger sizeLine = sizeof(SBLine);
+ const SBUInteger sizeRuns = sizeof(SBRun) * runCount;
+ const SBUInteger sizeMemory = sizeLine + sizeRuns;
+
+ void *pointer = malloc(sizeMemory);
+
+ if (pointer) {
+ const SBUInteger offsetLine = 0;
+ const SBUInteger offsetRuns = offsetLine + sizeLine;
+
+ SBUInt8 *memory = (SBUInt8 *)pointer;
+ SBLineRef line = (SBLineRef)(memory + offsetLine);
+ SBRun *runs = (SBRun *)(memory + offsetRuns);
+
+ line->fixedRuns = runs;
+
+ return line;
+ }
+
+ return NULL;
+}
+
+static void SetNewLevel(SBLevel *levels, SBUInteger length, SBLevel newLevel)
+{
+ SBUInteger index = length;
+
+ while (index--) {
+ levels[index] = newLevel;
+ }
+}
+
+static void ResetLevels(LineContextRef context, SBLevel baseLevel, SBUInteger charCount)
+{
+ const SBBidiType *types = context->refTypes;
+ SBLevel *levels = context->fixedLevels;
+ SBUInteger index;
+ SBUInteger length;
+ SBBoolean reset;
+
+ index = charCount;
+ length = 0;
+ reset = SBTrue;
+
+ while (index--) {
+ SBBidiType type = types[index];
+
+ switch (type) {
+ case SBBidiTypeB:
+ case SBBidiTypeS:
+ SetNewLevel(levels + index, length + 1, baseLevel);
+ length = 0;
+ reset = SBTrue;
+ context->runCount += 1;
+ break;
+
+ case SBBidiTypeLRE:
+ case SBBidiTypeRLE:
+ case SBBidiTypeLRO:
+ case SBBidiTypeRLO:
+ case SBBidiTypePDF:
+ case SBBidiTypeBN:
+ length += 1;
+ break;
+
+ case SBBidiTypeWS:
+ case SBBidiTypeLRI:
+ case SBBidiTypeRLI:
+ case SBBidiTypeFSI:
+ case SBBidiTypePDI:
+ if (reset) {
+ SetNewLevel(levels + index, length + 1, baseLevel);
+ length = 0;
+
+ context->runCount += 1;
+ }
+ break;
+
+ default:
+ length = 0;
+ reset = SBFalse;
+ break;
+ }
+ }
+}
+
+static SBUInteger InitializeRuns(SBRun *runs,
+ const SBLevel *levels, SBUInteger length, SBUInteger lineOffset)
+{
+ SBUInteger index;
+ SBUInteger runCount = 1;
+
+ (*runs).offset = lineOffset;
+ (*runs).level = levels[0];
+
+ for (index = 0; index < length; index++) {
+ SBLevel level = levels[index];
+
+ if (level != (*runs).level) {
+ (*runs).length = index + lineOffset - (*runs).offset;
+
+ ++runs;
+ (*runs).offset = lineOffset + index;
+ (*runs).level = level;
+
+ runCount += 1;
+ }
+ }
+
+ (*runs).length = index + lineOffset - (*runs).offset;
+
+ return runCount;
+}
+
+static void ReverseRunSequence(SBRun *runs, SBUInteger runCount)
+{
+ SBUInteger halfCount = runCount / 2;
+ SBUInteger finalIndex = runCount - 1;
+ SBUInteger index;
+
+ for (index = 0; index < halfCount; index++) {
+ SBUInteger tieIndex;
+ SBRun tempRun;
+
+ tieIndex = finalIndex - index;
+
+ tempRun = runs[index];
+ runs[index] = runs[tieIndex];
+ runs[tieIndex] = tempRun;
+ }
+}
+
+static void ReorderRuns(SBRun *runs, SBUInteger runCount, SBLevel maxLevel)
+{
+ SBLevel newLevel;
+
+ for (newLevel = maxLevel; newLevel; newLevel--) {
+ SBUInteger start = runCount;
+
+ while (start--) {
+ if (runs[start].level >= newLevel) {
+ SBUInteger count = 1;
+
+ for (; start && runs[start - 1].level >= newLevel; start--) {
+ count += 1;
+ }
+
+ ReverseRunSequence(runs + start, count);
+ }
+ }
+ }
+}
+
+SB_INTERNAL SBLineRef SBLineCreate(SBParagraphRef paragraph,
+ SBUInteger lineOffset, SBUInteger lineLength)
+{
+ SBUInteger innerOffset = lineOffset - paragraph->offset;
+ const SBBidiType *refTypes = paragraph->refTypes + innerOffset;
+ const SBLevel *refLevels = paragraph->fixedLevels + innerOffset;
+ LineContextRef context;
+ SBLineRef line;
+
+ /* Line range MUST be valid. */
+ SBAssert(lineOffset < (lineOffset + lineLength)
+ && lineOffset >= paragraph->offset
+ && (lineOffset + lineLength) <= (paragraph->offset + paragraph->length));
+
+ context = CreateLineContext(refTypes, refLevels, lineLength);
+
+ if (context) {
+ ResetLevels(context, paragraph->baseLevel, lineLength);
+
+ line = AllocateLine(context->runCount);
+
+ if (line) {
+ line->runCount = InitializeRuns(line->fixedRuns, context->fixedLevels, lineLength, lineOffset);
+ ReorderRuns(line->fixedRuns, line->runCount, context->maxLevel);
+
+ line->codepointSequence = paragraph->algorithm->codepointSequence;
+ line->offset = lineOffset;
+ line->length = lineLength;
+ line->retainCount = 1;
+ }
+
+ DisposeLineContext(context);
+
+ return line;
+ }
+
+ return NULL;
+}
+
+SBUInteger SBLineGetOffset(SBLineRef line)
+{
+ return line->offset;
+}
+
+SBUInteger SBLineGetLength(SBLineRef line)
+{
+ return line->length;
+}
+
+SBUInteger SBLineGetRunCount(SBLineRef line)
+{
+ return line->runCount;
+}
+
+const SBRun *SBLineGetRunsPtr(SBLineRef line)
+{
+ return line->fixedRuns;
+}
+
+SBLineRef SBLineRetain(SBLineRef line)
+{
+ if (line) {
+ line->retainCount += 1;
+ }
+
+ return line;
+}
+
+void SBLineRelease(SBLineRef line)
+{
+ if (line && --line->retainCount == 0) {
+ free(line);
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h
new file mode 100644
index 0000000000..6ecf103655
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBLine.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_LINE_H
+#define _SB_INTERNAL_LINE_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef struct _SBLine {
+ SBCodepointSequence codepointSequence;
+ SBRun *fixedRuns;
+ SBUInteger runCount;
+ SBUInteger offset;
+ SBUInteger length;
+ SBUInteger retainCount;
+} SBLine;
+
+SB_INTERNAL SBLineRef SBLineCreate(SBParagraphRef paragraph,
+ SBUInteger lineOffset, SBUInteger lineLength);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c
new file mode 100644
index 0000000000..a77591fef5
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBLog.c
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+
+#ifdef SB_CONFIG_LOG
+
+#include "SBBase.h"
+#include "SBBidiChain.h"
+#include "SBBidiType.h"
+#include "SBIsolatingRun.h"
+#include "SBLog.h"
+
+int _SBLogPosition = 0;
+
+SB_INTERNAL void PrintBaseLevel(SBLevel baseLevel)
+{
+ switch (baseLevel) {
+ case SBLevelDefaultLTR:
+ SB_LOG_STRING("Auto-LTR");
+ break;
+
+ case SBLevelDefaultRTL:
+ SB_LOG_STRING("Auto-RTL");
+ break;
+
+ case 0:
+ SB_LOG_STRING("LTR");
+ break;
+
+ case 1:
+ SB_LOG_STRING("RTL");
+ break;
+
+ default:
+ SB_LOG(("Level - %d", baseLevel));
+ break;
+ }
+}
+
+SB_INTERNAL void PrintBidiType(SBBidiType type)
+{
+ switch (type) {
+ case SBBidiTypeNil:
+ SB_LOG_STRING("Nil");
+ break;
+
+ case SBBidiTypeL:
+ SB_LOG_STRING("L");
+ break;
+
+ case SBBidiTypeR:
+ SB_LOG_STRING("R");
+ break;
+
+ case SBBidiTypeAL:
+ SB_LOG_STRING("AL");
+ break;
+
+ case SBBidiTypeEN:
+ SB_LOG_STRING("EN");
+ break;
+
+ case SBBidiTypeES:
+ SB_LOG_STRING("ES");
+ break;
+
+ case SBBidiTypeET:
+ SB_LOG_STRING("EN");
+ break;
+
+ case SBBidiTypeAN:
+ SB_LOG_STRING("AN");
+ break;
+
+ case SBBidiTypeCS:
+ SB_LOG_STRING("CS");
+ break;
+
+ case SBBidiTypeNSM:
+ SB_LOG_STRING("NSM");
+ break;
+
+ case SBBidiTypeBN:
+ SB_LOG_STRING("BN");
+ break;
+
+ case SBBidiTypeB:
+ SB_LOG_STRING("B");
+ break;
+
+ case SBBidiTypeS:
+ SB_LOG_STRING("S");
+ break;
+
+ case SBBidiTypeWS:
+ SB_LOG_STRING("WS");
+ break;
+
+ case SBBidiTypeON:
+ SB_LOG_STRING("ON");
+ break;
+
+ case SBBidiTypeLRE:
+ SB_LOG_STRING("LRE");
+ break;
+
+ case SBBidiTypeRLE:
+ SB_LOG_STRING("RLE");
+ break;
+
+ case SBBidiTypeLRO:
+ SB_LOG_STRING("LRO");
+ break;
+
+ case SBBidiTypeRLO:
+ SB_LOG_STRING("RLO");
+ break;
+
+ case SBBidiTypePDF:
+ SB_LOG_STRING("PDF");
+ break;
+
+ case SBBidiTypeLRI:
+ SB_LOG_STRING("LRI");
+ break;
+
+ case SBBidiTypeRLI:
+ SB_LOG_STRING("RLI");
+ break;
+
+ case SBBidiTypeFSI:
+ SB_LOG_STRING("FSI");
+ break;
+
+ case SBBidiTypePDI:
+ SB_LOG_STRING("PDI");
+ break;
+ }
+}
+
+SB_INTERNAL void PrintCodepointSequence(const SBCodepointSequence *codepointSequence)
+{
+ SBUInteger stringIndex = 0;
+ SBCodepoint codepoint;
+
+ while ((codepoint = SBCodepointSequenceGetCodepointAt(codepointSequence, &stringIndex)) != SBCodepointInvalid) {
+ SB_LOG(("%04X ", codepoint));
+ }
+}
+
+SB_INTERNAL void PrintBidiTypesArray(SBBidiType *types, SBUInteger length)
+{
+ SBUInteger index;
+
+ for (index = 0; index < length; ++index) {
+ SB_LOG_BIDI_TYPE(types[index]);
+ SB_LOG_DIVIDER(1);
+ }
+}
+
+SB_INTERNAL void PrintLevelsArray(SBLevel *levels, SBUInteger length)
+{
+ SBUInteger index;
+
+ for (index = 0; index < length; ++index) {
+ SB_LOG_LEVEL(levels[index]);
+ SB_LOG_DIVIDER(1);
+ }
+}
+
+typedef struct {
+ void *object;
+ BidiLink link;
+ SBUInteger length;
+} IsolatingContext;
+
+typedef void (*IsolatingConsumer)(IsolatingRunRef isolatingRun, IsolatingContext *context);
+
+SB_INTERNAL void IsolatingRunForEach(IsolatingRunRef isolatingRun,
+ IsolatingContext *context, IsolatingConsumer consumer)
+{
+ BidiChainRef bidiChain = isolatingRun->bidiChain;
+ LevelRunRef levelRun;
+
+ /* Iterate over individual level runs of the isolating run. */
+ for (levelRun = isolatingRun->baseLevelRun; levelRun; levelRun = levelRun->next) {
+ BidiLink breakLink = BidiChainGetNext(bidiChain, levelRun->lastLink);
+ BidiLink currentLink = levelRun->firstLink;
+ BidiLink subsequentLink = levelRun->subsequentLink;
+
+ /* Iterate over each link of the level run. */
+ while (currentLink != breakLink) {
+ BidiLink nextLink = BidiChainGetNext(bidiChain, currentLink);
+ SBUInteger linkOffset = BidiChainGetOffset(bidiChain, currentLink);
+ SBUInteger linkLength;
+ SBUInteger index;
+
+ if (nextLink != breakLink) {
+ linkLength = BidiChainGetOffset(bidiChain, nextLink) - linkOffset;
+ } else {
+ linkLength = BidiChainGetOffset(bidiChain, subsequentLink) - linkOffset;
+ }
+
+ /* Skip any sequence of BN character types. */
+ for (index = 1; index < linkLength; index++) {
+ SBBidiType bidiType = BidiChainGetType(bidiChain, currentLink + index);
+ if (bidiType == SBBidiTypeBN) {
+ linkLength = index;
+ break;
+ }
+ }
+
+ context->link = currentLink;
+ context->length = linkLength;
+ consumer(isolatingRun, context);
+
+ currentLink = nextLink;
+ }
+ }
+}
+
+static void PrintTypesOperation(IsolatingRunRef isolatingRun, IsolatingContext *context)
+{
+ SBBidiType bidiType = BidiChainGetType(isolatingRun->bidiChain, context->link);
+
+ while (context->length--) {
+ SB_LOG_BIDI_TYPE(bidiType);
+ SB_LOG_DIVIDER(1);
+ }
+}
+
+SB_INTERNAL void PrintRunTypes(IsolatingRunRef isolatingRun)
+{
+ IsolatingContext context;
+ IsolatingRunForEach(isolatingRun, &context, _SBPrintTypesOperation);
+}
+
+static void PrintLevelsOperation(IsolatingRunRef isolatingRun, IsolatingContext *context)
+{
+ SBLevel charLevel = BidiChainGetLevel(isolatingRun->bidiChain, context->link);
+
+ while (context->length--) {
+ SB_LOG_LEVEL(charLevel);
+ SB_LOG_DIVIDER(1);
+ }
+}
+
+SB_INTERNAL void PrintRunLevels(IsolatingRunRef isolatingRun)
+{
+ IsolatingContext context;
+ IsolatingRunForEach(isolatingRun, &context, _SBPrintLevelsOperation);
+}
+
+typedef struct {
+ SBUInteger offset;
+ SBUInteger length;
+} IsolatingRange;
+
+static void PrintRangeOperation(IsolatingRunRef isolatingRun, IsolatingContext *context)
+{
+ IsolatingRange *range = context->object;
+ SBUInteger offset = BidiChainGetOffset(isolatingRun->bidiChain, context->link);
+
+ if (range->length == 0) {
+ range->offset = offset;
+ range->length = context->length;
+ } else if (offset == (range->offset + range->length)) {
+ range->length += context->length;
+ } else {
+ SB_LOG_RANGE(range->offset, range->length);
+ SB_LOG_DIVIDER(1);
+
+ range->offset = offset;
+ range->length = context->length;
+ }
+}
+
+SB_INTERNAL void PrintRunRange(IsolatingRunRef isolatingRun)
+{
+ IsolatingRange range = { 0, 0 };
+ IsolatingContext context;
+ context.object = ⦥
+
+ IsolatingRunForEach(isolatingRun, &context, _SBPrintRangeOperation);
+ SB_LOG_RANGE(range.offset, range.length);
+ SB_LOG_DIVIDER(1);
+}
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h
new file mode 100644
index 0000000000..5c70508fe7
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBLog.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_LOG_H
+#define _SB_INTERNAL_LOG_H
+
+#include
+
+#ifdef SB_CONFIG_LOG
+
+#include
+
+#include "SBBase.h"
+#include "SBBidiType.h"
+#include "SBCodepointSequence.h"
+#include "SBIsolatingRun.h"
+
+SB_INTERNAL void PrintBaseLevel(SBLevel baseLevel);
+SB_INTERNAL void PrintBidiType(SBBidiType type);
+
+SB_INTERNAL void PrintCodepointSequence(const SBCodepointSequence *codepointSequence);
+SB_INTERNAL void PrintBidiTypesArray(SBBidiType *types, SBUInteger length);
+SB_INTERNAL void PrintLevelsArray(SBLevel *levels, SBUInteger length);
+
+SB_INTERNAL void PrintRunTypes(IsolatingRunRef isolatingRun);
+SB_INTERNAL void PrintRunLevels(IsolatingRunRef isolatingRun);
+SB_INTERNAL void PrintRunRange(IsolatingRunRef isolatingRun);
+
+extern int _SBLogPosition;
+
+#define SB_LOG_BEGIN() (++_SBLogPosition)
+#define SB_LOG_END() (--_SBLogPosition)
+
+#define SB_LOG(s) printf s
+
+#define SB_LOG_NUMBER(n) \
+SB_LOG(("%ld", (long)n))
+
+#define SB_LOG_RANGE(o, l) \
+SB_LOG(("[%ld, %ld]", (long)o, (long)(o + l - 1)))
+
+#define SB_LOG_CHAR(c) \
+SBLOG(("%c", c))
+
+#define SB_LOG_STRING(s) \
+SB_LOG(("%s", s))
+
+#define SB_LOG_LEVEL(l) \
+SB_LOG_NUMBER(l)
+
+#define SB_LOG_BREAKER() \
+SB_LOG(("\n"))
+
+#define SB_LOG_DIVIDER(n) \
+SB_LOG(("%.*s", n, "\t\t\t\t\t\t\t\t\t\t"))
+
+#define SB_LOG_INITIATOR() \
+SB_LOG_DIVIDER(_SBLogPosition)
+
+#define SB_LOG_CAPTION(c) \
+SB_LOG((c":"))
+
+#define SB_LOG_STATEMENT_TEXT(t) \
+(t)
+
+#define SB_LOG_LINE(s) \
+do { \
+ SB_LOG(s); \
+ SB_LOG_BREAKER(); \
+} while (0)
+
+#define SB_LOG_STATEMENT(c, d, t) \
+do { \
+ SB_LOG_INITIATOR(); \
+ SB_LOG_CAPTION(c); \
+ SB_LOG_DIVIDER(d); \
+ SB_LOG_STATEMENT_TEXT(t); \
+ SB_LOG_BREAKER(); \
+} while (0)
+
+#define SB_LOG_BLOCK_OPENER(c) \
+do { \
+ SB_LOG_INITIATOR(); \
+ SB_LOG_CAPTION(c); \
+ SB_LOG_BREAKER(); \
+ SB_LOG_BEGIN(); \
+} while (0)
+
+#define SB_LOG_BLOCK_CLOSER() SB_LOG_END()
+
+#define SB_LOG_BASE_LEVEL(l) PrintBaseLevel(l)
+#define SB_LOG_BIDI_TYPE(t) PrintBidiType(t)
+
+#define SB_LOG_CODEPOINT_SEQUENCE(s) PrintCodepointSequence(s)
+#define SB_LOG_BIDI_TYPES_ARRAY(a, l) PrintBidiTypesArray(a, l)
+#define SB_LOG_LEVELS_ARRAY(a, l) PrintLevelsArray(a, l)
+
+#define SB_LOG_RUN_TYPES(r) PrintRunTypes(r)
+#define SB_LOG_RUN_LEVELS(r) PrintRunLevels(r)
+#define SB_LOG_RUN_RANGE(r) PrintRunRange(r)
+
+#else
+
+#define SB_LOG_NONE()
+
+#define SB_LOG(s) SB_LOG_NONE()
+
+#define SB_LOG_NUMBER(n) SB_LOG_NONE()
+#define SB_LOG_RANGE(o, l) SB_LOG_NONE()
+#define SB_LOG_CHAR(c) SB_LOG_NONE()
+#define SB_LOG_STRING(s) SB_LOG_NONE()
+#define SB_LOG_LEVEL(l) SB_LOG_NONE()
+
+#define SB_LOG_BREAKER() SB_LOG_NONE()
+#define SB_LOG_DIVIDER(n) SB_LOG_NONE()
+#define SB_LOG_INITIATOR() SB_LOG_NONE()
+#define SB_LOG_CAPTION(c) SB_LOG_NONE()
+#define SB_LOG_STATEMENT_TEXT(t) SB_LOG_NONE()
+
+#define SB_LOG_LINE(s) SB_LOG_NONE()
+#define SB_LOG_STATEMENT(c, d, t) SB_LOG_NONE()
+
+#define SB_LOG_BLOCK_OPENER(c) SB_LOG_NONE()
+#define SB_LOG_BLOCK_CLOSER() SB_LOG_NONE()
+
+#define SB_LOG_BASE_LEVEL(l) SB_LOG_NONE()
+#define SB_LOG_BIDI_TYPE(t) SB_LOG_NONE()
+
+#define SB_LOG_CODEPOINT_SEQUENCE(s) SB_LOG_NONE()
+#define SB_LOG_BIDI_TYPES_ARRAY(a, l) SB_LOG_NONE()
+#define SB_LOG_LEVELS_ARRAY(a, l) SB_LOG_NONE()
+
+#define SB_LOG_RUN_TYPES(r) SB_LOG_NONE()
+#define SB_LOG_RUN_LEVELS(r) SB_LOG_NONE()
+
+#define SB_LOG_RUN_RANGE(r) SB_LOG_NONE()
+
+#endif
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c
new file mode 100644
index 0000000000..c8a8c9626b
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+
+#include "PairingLookup.h"
+#include "SBBase.h"
+#include "SBLine.h"
+#include "SBMirrorLocator.h"
+
+SBMirrorLocatorRef SBMirrorLocatorCreate(void)
+{
+ SBMirrorLocatorRef locator = malloc(sizeof(SBMirrorLocator));
+
+ if (locator) {
+ locator->_line = NULL;
+ locator->retainCount = 1;
+
+ SBMirrorLocatorReset(locator);
+ }
+
+ return locator;
+}
+
+void SBMirrorLocatorLoadLine(SBMirrorLocatorRef locator, SBLineRef line, void *stringBuffer)
+{
+ SBLineRelease(locator->_line);
+
+ if (line && stringBuffer == line->codepointSequence.stringBuffer) {
+ locator->_line = SBLineRetain(line);
+ }
+
+ SBMirrorLocatorReset(locator);
+}
+
+const SBMirrorAgent *SBMirrorLocatorGetAgent(SBMirrorLocatorRef locator)
+{
+ return &locator->agent;
+}
+
+SBBoolean SBMirrorLocatorMoveNext(SBMirrorLocatorRef locator)
+{
+ SBLineRef line = locator->_line;
+
+ if (line) {
+ const SBCodepointSequence *sequence = &line->codepointSequence;
+
+ do {
+ const SBRun *run = &line->fixedRuns[locator->_runIndex];
+
+ if (run->level & 1) {
+ SBUInteger stringIndex;
+ SBUInteger stringLimit;
+
+ stringIndex = locator->_stringIndex;
+ if (stringIndex == SBInvalidIndex) {
+ stringIndex = run->offset;
+ }
+ stringLimit = run->offset + run->length;
+
+ while (stringIndex < stringLimit) {
+ SBUInteger initialIndex = stringIndex;
+ SBCodepoint codepoint = SBCodepointSequenceGetCodepointAt(sequence, &stringIndex);
+ SBCodepoint mirror = LookupMirror(codepoint);
+
+ if (mirror) {
+ locator->_stringIndex = stringIndex;
+ locator->agent.index = initialIndex;
+ locator->agent.mirror = mirror;
+ locator->agent.codepoint = codepoint;
+
+ return SBTrue;
+ }
+ }
+ }
+
+ locator->_stringIndex = SBInvalidIndex;
+ } while (++locator->_runIndex < line->runCount);
+
+ SBMirrorLocatorReset(locator);
+ }
+
+ return SBFalse;
+}
+
+void SBMirrorLocatorReset(SBMirrorLocatorRef locator)
+{
+ locator->_runIndex = 0;
+ locator->_stringIndex = SBInvalidIndex;
+ locator->agent.index = SBInvalidIndex;
+ locator->agent.mirror = 0;
+}
+
+SBMirrorLocatorRef SBMirrorLocatorRetain(SBMirrorLocatorRef locator)
+{
+ if (locator) {
+ locator->retainCount += 1;
+ }
+
+ return locator;
+}
+
+void SBMirrorLocatorRelease(SBMirrorLocatorRef locator)
+{
+ if (locator && --locator->retainCount == 0) {
+ SBLineRelease(locator->_line);
+ free(locator);
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h
new file mode 100644
index 0000000000..2f4463a685
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBMirrorLocator.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_MIRROR_LOCATOR_H
+#define _SB_INTERNAL_MIRROR_LOCATOR_H
+
+#include
+#include
+#include
+
+typedef struct _SBMirrorLocator {
+ SBLineRef _line;
+ SBUInteger _runIndex;
+ SBUInteger _stringIndex;
+ SBMirrorAgent agent;
+ SBUInteger retainCount;
+} SBMirrorLocator;
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c
new file mode 100644
index 0000000000..a98bd896ba
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.c
@@ -0,0 +1,702 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+#include "BidiChain.h"
+#include "BidiTypeLookup.h"
+#include "IsolatingRun.h"
+#include "LevelRun.h"
+#include "RunQueue.h"
+#include "SBAlgorithm.h"
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+#include "SBLine.h"
+#include "SBLog.h"
+#include "StatusStack.h"
+#include "SBParagraph.h"
+
+typedef struct _ParagraphContext {
+ BidiChain bidiChain;
+ StatusStack statusStack;
+ RunQueue runQueue;
+ IsolatingRun isolatingRun;
+} ParagraphContext, *ParagraphContextRef;
+
+static void PopulateBidiChain(BidiChainRef chain, const SBBidiType *types, SBUInteger length);
+static SBBoolean ProcessRun(ParagraphContextRef context, const LevelRunRef levelRun, SBBoolean forceFinish);
+
+static ParagraphContextRef CreateParagraphContext(const SBBidiType *types, SBLevel *levels, SBUInteger length)
+{
+ const SBUInteger sizeContext = sizeof(ParagraphContext);
+ const SBUInteger sizeLinks = sizeof(BidiLink) * (length + 2);
+ const SBUInteger sizeTypes = sizeof(SBBidiType) * (length + 2);
+ const SBUInteger sizeMemory = sizeContext + sizeLinks + sizeTypes;
+
+ void *pointer = malloc(sizeMemory);
+
+ if (pointer) {
+ const SBUInteger offsetContext = 0;
+ const SBUInteger offsetLinks = offsetContext + sizeContext;
+ const SBUInteger offsetTypes = offsetLinks + sizeLinks;
+
+ SBUInt8 *memory = (SBUInt8 *)pointer;
+ ParagraphContextRef context = (ParagraphContextRef)(memory + offsetContext);
+ BidiLink *fixedLinks = (BidiLink *)(memory + offsetLinks);
+ SBBidiType *fixedTypes = (SBBidiType *)(memory + offsetTypes);
+
+ BidiChainInitialize(&context->bidiChain, fixedTypes, levels, fixedLinks);
+ StatusStackInitialize(&context->statusStack);
+ RunQueueInitialize(&context->runQueue);
+ IsolatingRunInitialize(&context->isolatingRun);
+
+ PopulateBidiChain(&context->bidiChain, types, length);
+
+ return context;
+ }
+
+ return NULL;
+}
+
+static void DisposeParagraphContext(ParagraphContextRef context)
+{
+ StatusStackFinalize(&context->statusStack);
+ RunQueueFinalize(&context->runQueue);
+ IsolatingRunFinalize(&context->isolatingRun);
+ free(context);
+}
+
+static SBParagraphRef AllocateParagraph(SBUInteger length)
+{
+ const SBUInteger sizeParagraph = sizeof(SBParagraph);
+ const SBUInteger sizeLevels = sizeof(SBLevel) * (length + 2);
+ const SBUInteger sizeMemory = sizeParagraph + sizeLevels;
+
+ void *pointer = malloc(sizeMemory);
+
+ if (pointer) {
+ const SBUInteger offsetParagraph = 0;
+ const SBUInteger offsetLevels = offsetParagraph + sizeParagraph;
+
+ SBUInt8 *memory = (SBUInt8 *)pointer;
+ SBParagraphRef paragraph = (SBParagraphRef)(memory + offsetParagraph);
+ SBLevel *levels = (SBLevel *)(memory + offsetLevels);
+
+ paragraph->fixedLevels = levels;
+
+ return paragraph;
+ }
+
+ return NULL;
+}
+
+static void DisposeParagraph(SBParagraphRef paragraph)
+{
+ free(paragraph);
+}
+
+static SBUInteger DetermineBoundary(SBAlgorithmRef algorithm, SBUInteger paragraphOffset, SBUInteger suggestedLength)
+{
+ SBBidiType *bidiTypes = algorithm->fixedTypes;
+ SBUInteger suggestedLimit = paragraphOffset + suggestedLength;
+ SBUInteger stringIndex;
+
+ for (stringIndex = paragraphOffset; stringIndex < suggestedLimit; stringIndex++) {
+ if (bidiTypes[stringIndex] == SBBidiTypeB) {
+ stringIndex += SBAlgorithmGetSeparatorLength(algorithm, stringIndex);
+ goto Return;
+ }
+ }
+
+Return:
+ return (stringIndex - paragraphOffset);
+}
+
+static void PopulateBidiChain(BidiChainRef chain, const SBBidiType *types, SBUInteger length)
+{
+ SBBidiType type = SBBidiTypeNil;
+ SBUInteger priorIndex = SBInvalidIndex;
+ SBUInteger index;
+
+ for (index = 0; index < length; index++) {
+ SBBidiType priorType = type;
+ type = types[index];
+
+ switch (type) {
+ case SBBidiTypeB:
+ case SBBidiTypeON:
+ case SBBidiTypeLRE:
+ case SBBidiTypeRLE:
+ case SBBidiTypeLRO:
+ case SBBidiTypeRLO:
+ case SBBidiTypePDF:
+ case SBBidiTypeLRI:
+ case SBBidiTypeRLI:
+ case SBBidiTypeFSI:
+ case SBBidiTypePDI:
+ BidiChainAdd(chain, type, index - priorIndex);
+ priorIndex = index;
+
+ if (type == SBBidiTypeB) {
+ index = length;
+ goto AddLast;
+ }
+ break;
+
+ default:
+ if (type != priorType) {
+ BidiChainAdd(chain, type, index - priorIndex);
+ priorIndex = index;
+ }
+ break;
+ }
+ }
+
+AddLast:
+ BidiChainAdd(chain, SBBidiTypeNil, index - priorIndex);
+}
+
+static BidiLink SkipIsolatingRun(BidiChainRef chain, BidiLink skipLink, BidiLink breakLink)
+{
+ BidiLink link = skipLink;
+ SBUInteger depth = 1;
+
+ while ((link = BidiChainGetNext(chain, link)) != breakLink) {
+ SBBidiType type = BidiChainGetType(chain, link);
+
+ switch (type) {
+ case SBBidiTypeLRI:
+ case SBBidiTypeRLI:
+ case SBBidiTypeFSI:
+ depth += 1;
+ break;
+
+ case SBBidiTypePDI:
+ if (--depth == 0) {
+ return link;
+ }
+ break;
+ }
+ }
+
+ return BidiLinkNone;
+}
+
+static SBLevel DetermineBaseLevel(BidiChainRef chain, BidiLink skipLink, BidiLink breakLink, SBLevel defaultLevel, SBBoolean isIsolate)
+{
+ BidiLink link = skipLink;
+
+ /* Rules P2, P3 */
+ while ((link = BidiChainGetNext(chain, link)) != breakLink) {
+ SBBidiType type = BidiChainGetType(chain, link);
+
+ switch (type) {
+ case SBBidiTypeL:
+ return 0;
+
+ case SBBidiTypeAL:
+ case SBBidiTypeR:
+ return 1;
+
+ case SBBidiTypeLRI:
+ case SBBidiTypeRLI:
+ case SBBidiTypeFSI:
+ link = SkipIsolatingRun(chain, link, breakLink);
+ if (link == BidiLinkNone) {
+ goto Default;
+ }
+ break;
+
+ case SBBidiTypePDI:
+ if (isIsolate) {
+ /*
+ * In case of isolating run, the PDI will be the last code point.
+ * NOTE:
+ * The inner isolating runs will be skipped by the case above this one.
+ */
+ goto Default;
+ }
+ break;
+ }
+ }
+
+Default:
+ return defaultLevel;
+}
+
+static SBLevel DetermineParagraphLevel(BidiChainRef chain, SBLevel baseLevel)
+{
+ if (baseLevel >= SBLevelMax) {
+ return DetermineBaseLevel(chain, chain->roller, chain->roller,
+ (baseLevel != SBLevelDefaultRTL ? 0 : 1),
+ SBFalse);
+ }
+
+ return baseLevel;
+}
+
+static SBBoolean DetermineLevels(ParagraphContextRef context, SBLevel baseLevel)
+{
+ BidiChainRef chain = &context->bidiChain;
+ StatusStackRef stack = &context->statusStack;
+ BidiLink roller = chain->roller;
+ BidiLink link;
+
+ BidiLink priorLink;
+ BidiLink firstLink;
+ BidiLink lastLink;
+
+ SBLevel priorLevel;
+ SBBidiType sor;
+ SBBidiType eor;
+
+ SBUInteger overIsolate;
+ SBUInteger overEmbedding;
+ SBUInteger validIsolate;
+
+ priorLink = chain->roller;
+ firstLink = BidiLinkNone;
+ lastLink = BidiLinkNone;
+
+ priorLevel = baseLevel;
+ sor = SBBidiTypeNil;
+
+ /* Rule X1 */
+ overIsolate = 0;
+ overEmbedding = 0;
+ validIsolate = 0;
+
+ StatusStackPush(stack, baseLevel, SBBidiTypeON, SBFalse);
+
+ BidiChainForEach(chain, roller, link) {
+ SBBoolean forceFinish = SBFalse;
+ SBBoolean bnEquivalent = SBFalse;
+ SBBidiType type;
+
+ type = BidiChainGetType(chain, link);
+
+#define LeastGreaterOddLevel() \
+( \
+ (StatusStackGetEmbeddingLevel(stack) + 1) | 1 \
+)
+
+#define LeastGreaterEvenLevel() \
+( \
+ (StatusStackGetEmbeddingLevel(stack) + 2) & ~1 \
+)
+
+#define MergeLinkIfNeeded() \
+{ \
+ if (BidiChainMergeIfEqual(chain, priorLink, link)) { \
+ continue; \
+ } \
+}
+
+#define PushEmbedding(l, o) \
+{ \
+ SBLevel newLevel = l; \
+ \
+ bnEquivalent = SBTrue; \
+ \
+ if (newLevel <= SBLevelMax && !overIsolate && !overEmbedding) { \
+ if (!StatusStackPush(stack, newLevel, o, SBFalse)) { \
+ return SBFalse; \
+ } \
+ } else { \
+ if (!overIsolate) { \
+ overEmbedding += 1; \
+ } \
+ } \
+}
+
+#define PushIsolate(l, o) \
+{ \
+ SBBidiType priorStatus = StatusStackGetOverrideStatus(stack); \
+ SBLevel newLevel = l; \
+ \
+ BidiChainSetLevel(chain, link, \
+ StatusStackGetEmbeddingLevel(stack)); \
+ \
+ if (newLevel <= SBLevelMax && !overIsolate && !overEmbedding) { \
+ validIsolate += 1; \
+ \
+ if (!StatusStackPush(stack, newLevel, o, SBTrue)) { \
+ return SBFalse; \
+ } \
+ } else { \
+ overIsolate += 1; \
+ } \
+ \
+ if (priorStatus != SBBidiTypeON) { \
+ BidiChainSetType(chain, link, priorStatus); \
+ MergeLinkIfNeeded(); \
+ } \
+}
+
+ switch (type) {
+ /* Rule X2 */
+ case SBBidiTypeRLE:
+ PushEmbedding(LeastGreaterOddLevel(), SBBidiTypeON);
+ break;
+
+ /* Rule X3 */
+ case SBBidiTypeLRE:
+ PushEmbedding(LeastGreaterEvenLevel(), SBBidiTypeON);
+ break;
+
+ /* Rule X4 */
+ case SBBidiTypeRLO:
+ PushEmbedding(LeastGreaterOddLevel(), SBBidiTypeR);
+ break;
+
+ /* Rule X5 */
+ case SBBidiTypeLRO:
+ PushEmbedding(LeastGreaterEvenLevel(), SBBidiTypeL);
+ break;
+
+ /* Rule X5a */
+ case SBBidiTypeRLI:
+ PushIsolate(LeastGreaterOddLevel(), SBBidiTypeON);
+ break;
+
+ /* Rule X5b */
+ case SBBidiTypeLRI:
+ PushIsolate(LeastGreaterEvenLevel(), SBBidiTypeON);
+ break;
+
+ /* Rule X5c */
+ case SBBidiTypeFSI:
+ {
+ SBBoolean isRTL = (DetermineBaseLevel(chain, link, roller, 0, SBTrue) == 1);
+ PushIsolate(isRTL ? LeastGreaterOddLevel() : LeastGreaterEvenLevel(), SBBidiTypeON);
+ break;
+ }
+
+ /* Rule X6 */
+ default:
+ BidiChainSetLevel(chain, link, StatusStackGetEmbeddingLevel(stack));
+
+ if (StatusStackGetOverrideStatus(stack) != SBBidiTypeON) {
+ BidiChainSetType(chain, link, StatusStackGetOverrideStatus(stack));
+ MergeLinkIfNeeded();
+ }
+ break;
+
+ /* Rule X6a */
+ case SBBidiTypePDI:
+ {
+ SBBidiType overrideStatus;
+
+ if (overIsolate != 0) {
+ overIsolate -= 1;
+ } else if (validIsolate == 0) {
+ /* Do nothing */
+ } else {
+ overEmbedding = 0;
+
+ while (!StatusStackGetIsolateStatus(stack)) {
+ StatusStackPop(stack);
+ }
+ StatusStackPop(stack);
+
+ validIsolate -= 1;
+ }
+
+ BidiChainSetLevel(chain, link, StatusStackGetEmbeddingLevel(stack));
+ overrideStatus = StatusStackGetOverrideStatus(stack);
+
+ if (overrideStatus != SBBidiTypeON) {
+ BidiChainSetType(chain, link, overrideStatus);
+ MergeLinkIfNeeded();
+ }
+ break;
+ }
+
+ /* Rule X7 */
+ case SBBidiTypePDF:
+ bnEquivalent = SBTrue;
+
+ if (overIsolate != 0) {
+ /* Do nothing */
+ } else if (overEmbedding != 0) {
+ overEmbedding -= 1;
+ } else if (!StatusStackGetIsolateStatus(stack) && stack->count >= 2) {
+ StatusStackPop(stack);
+ }
+ break;
+
+ /* Rule X8 */
+ case SBBidiTypeB:
+ /*
+ * These values are reset for clarity, in this implementation B can only occur as the
+ * last code in the array.
+ */
+ StatusStackSetEmpty(stack);
+ StatusStackPush(stack, baseLevel, SBBidiTypeON, SBFalse);
+
+ overIsolate = 0;
+ overEmbedding = 0;
+ validIsolate = 0;
+
+ BidiChainSetLevel(chain, link, baseLevel);
+ break;
+
+ case SBBidiTypeBN:
+ bnEquivalent = SBTrue;
+ break;
+
+ case SBBidiTypeNil:
+ forceFinish = SBTrue;
+ BidiChainSetLevel(chain, link, baseLevel);
+ break;
+ }
+
+ /* Rule X9 */
+ if (bnEquivalent) {
+ /* The type of this link is BN equivalent, so abandon it and continue the loop. */
+ BidiChainSetType(chain, link, SBBidiTypeBN);
+ BidiChainAbandonNext(chain, priorLink);
+ continue;
+ }
+
+ if (sor == SBBidiTypeNil) {
+ sor = SBLevelAsNormalBidiType(SBNumberGetMax(baseLevel, BidiChainGetLevel(chain, link)));
+ firstLink = link;
+ priorLevel = BidiChainGetLevel(chain, link);
+ } else if (priorLevel != BidiChainGetLevel(chain, link) || forceFinish) {
+ LevelRun levelRun;
+ SBLevel currentLevel;
+
+ /* Since the level has changed at this link, therefore the run must end at prior link. */
+ lastLink = priorLink;
+
+ /* Save the current level i.e. level of the next run. */
+ currentLevel = BidiChainGetLevel(chain, link);
+ /*
+ * Now we have both the prior level and the current level i.e. unchanged levels of both
+ * the current run and the next run. So, identify eor of the current run.
+ * NOTE:
+ * sor of the run has been already determined at this stage.
+ */
+ eor = SBLevelAsNormalBidiType(SBNumberGetMax(priorLevel, currentLevel));
+
+ LevelRunInitialize(&levelRun, chain, firstLink, lastLink, sor, eor);
+
+ if (!ProcessRun(context, &levelRun, forceFinish)) {
+ return SBFalse;
+ }
+
+ /* The sor of next run (if any) should be technically equal to eor of this run. */
+ sor = eor;
+ /* The next run (if any) will start from this index. */
+ firstLink = link;
+
+ priorLevel = currentLevel;
+ }
+
+ priorLink = link;
+ }
+
+ return SBTrue;
+}
+
+static SBBoolean ProcessRun(ParagraphContextRef context, const LevelRunRef levelRun, SBBoolean forceFinish)
+{
+ RunQueueRef queue = &context->runQueue;
+
+ if (!RunQueueEnqueue(queue, levelRun)) {
+ return SBFalse;
+ }
+
+ if (queue->shouldDequeue || forceFinish) {
+ IsolatingRunRef isolatingRun = &context->isolatingRun;
+ LevelRunRef peek;
+
+ /* Rule X10 */
+ for (; queue->count != 0; RunQueueDequeue(queue)) {
+ peek = queue->peek;
+ if (RunKindIsAttachedTerminating(peek->kind)) {
+ continue;
+ }
+
+ isolatingRun->baseLevelRun = peek;
+
+ if (!IsolatingRunResolve(isolatingRun)) {
+ return SBFalse;
+ }
+ }
+ }
+
+ return SBTrue;
+}
+
+static void SaveLevels(BidiChainRef chain, SBLevel *levels, SBLevel baseLevel)
+{
+ BidiLink roller = chain->roller;
+ BidiLink link;
+
+ SBUInteger index = 0;
+ SBLevel level = baseLevel;
+
+ BidiChainForEach(chain, roller, link) {
+ SBUInteger offset = BidiChainGetOffset(chain, link);
+
+ for (; index < offset; index++) {
+ levels[index] = level;
+ }
+
+ level = BidiChainGetLevel(chain, link);
+ }
+}
+
+static SBBoolean ResolveParagraph(SBParagraphRef paragraph,
+ SBAlgorithmRef algorithm, SBUInteger offset, SBUInteger length, SBLevel baseLevel)
+{
+ const SBBidiType *bidiTypes = algorithm->fixedTypes + offset;
+ SBBoolean isSucceeded = SBFalse;
+ ParagraphContextRef context;
+ SBLevel resolvedLevel;
+
+ context = CreateParagraphContext(bidiTypes, paragraph->fixedLevels, length);
+
+ if (context) {
+ resolvedLevel = DetermineParagraphLevel(&context->bidiChain, baseLevel);
+
+ SB_LOG_BLOCK_OPENER("Determined Paragraph Level");
+ SB_LOG_STATEMENT("Base Level", 1, SB_LOG_LEVEL(resolvedLevel));
+ SB_LOG_BLOCK_CLOSER();
+
+ context->isolatingRun.codepointSequence = &algorithm->codepointSequence;
+ context->isolatingRun.bidiTypes = bidiTypes;
+ context->isolatingRun.bidiChain = &context->bidiChain;
+ context->isolatingRun.paragraphOffset = offset;
+ context->isolatingRun.paragraphLevel = resolvedLevel;
+
+ if (DetermineLevels(context, resolvedLevel)) {
+ SaveLevels(&context->bidiChain, ++paragraph->fixedLevels, resolvedLevel);
+
+ SB_LOG_BLOCK_OPENER("Determined Embedding Levels");
+ SB_LOG_STATEMENT("Levels", 1, SB_LOG_LEVELS_ARRAY(paragraph->fixedLevels, length));
+ SB_LOG_BLOCK_CLOSER();
+
+ paragraph->algorithm = SBAlgorithmRetain(algorithm);
+ paragraph->refTypes = bidiTypes;
+ paragraph->offset = offset;
+ paragraph->length = length;
+ paragraph->baseLevel = resolvedLevel;
+ paragraph->retainCount = 1;
+
+ isSucceeded = SBTrue;
+ }
+
+ DisposeParagraphContext(context);
+ }
+
+ return isSucceeded;
+}
+
+SB_INTERNAL SBParagraphRef SBParagraphCreate(SBAlgorithmRef algorithm,
+ SBUInteger paragraphOffset, SBUInteger suggestedLength, SBLevel baseLevel)
+{
+ const SBCodepointSequence *codepointSequence = &algorithm->codepointSequence;
+ SBUInteger stringLength = codepointSequence->stringLength;
+ SBUInteger actualLength;
+
+ SBParagraphRef paragraph;
+
+ /* The given range MUST be valid. */
+ SBAssert(SBUIntegerVerifyRange(stringLength, paragraphOffset, suggestedLength) && suggestedLength > 0);
+
+ SB_LOG_BLOCK_OPENER("Paragraph Input");
+ SB_LOG_STATEMENT("Paragraph Offset", 1, SB_LOG_NUMBER(paragraphOffset));
+ SB_LOG_STATEMENT("Suggested Length", 1, SB_LOG_NUMBER(suggestedLength));
+ SB_LOG_STATEMENT("Base Direction", 1, SB_LOG_BASE_LEVEL(baseLevel));
+ SB_LOG_BLOCK_CLOSER();
+
+ actualLength = DetermineBoundary(algorithm, paragraphOffset, suggestedLength);
+
+ SB_LOG_BLOCK_OPENER("Determined Paragraph Boundary");
+ SB_LOG_STATEMENT("Actual Length", 1, SB_LOG_NUMBER(actualLength));
+ SB_LOG_BLOCK_CLOSER();
+
+ paragraph = AllocateParagraph(actualLength);
+
+ if (paragraph) {
+ if (ResolveParagraph(paragraph, algorithm, paragraphOffset, actualLength, baseLevel)) {
+ return paragraph;
+ }
+
+ DisposeParagraph(paragraph);
+ }
+
+ SB_LOG_BREAKER();
+
+ return NULL;
+}
+
+SBUInteger SBParagraphGetOffset(SBParagraphRef paragraph)
+{
+ return paragraph->offset;
+}
+
+SBUInteger SBParagraphGetLength(SBParagraphRef paragraph)
+{
+ return paragraph->length;
+}
+
+SBLevel SBParagraphGetBaseLevel(SBParagraphRef paragraph)
+{
+ return paragraph->baseLevel;
+}
+
+const SBLevel *SBParagraphGetLevelsPtr(SBParagraphRef paragraph)
+{
+ return paragraph->fixedLevels;
+}
+
+SBLineRef SBParagraphCreateLine(SBParagraphRef paragraph, SBUInteger lineOffset, SBUInteger lineLength)
+{
+ SBUInteger paragraphOffset = paragraph->offset;
+ SBUInteger paragraphLength = paragraph->length;
+ SBUInteger paragraphLimit = paragraphOffset + paragraphLength;
+ SBUInteger lineLimit = lineOffset + lineLength;
+
+ if (lineOffset < lineLimit && lineOffset >= paragraphOffset && lineLimit <= paragraphLimit) {
+ return SBLineCreate(paragraph, lineOffset, lineLength);
+ }
+
+ return NULL;
+}
+
+SBParagraphRef SBParagraphRetain(SBParagraphRef paragraph)
+{
+ if (paragraph) {
+ paragraph->retainCount += 1;
+ }
+
+ return paragraph;
+}
+
+void SBParagraphRelease(SBParagraphRef paragraph)
+{
+ if (paragraph && --paragraph->retainCount == 0) {
+ SBAlgorithmRelease(paragraph->algorithm);
+ DisposeParagraph(paragraph);
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h
new file mode 100644
index 0000000000..c40b4ee2a7
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBParagraph.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_PARAGRAPH_H
+#define _SB_INTERNAL_PARAGRAPH_H
+
+#include
+#include
+#include
+#include
+
+typedef struct _SBParagraph {
+ SBAlgorithmRef algorithm;
+ const SBBidiType *refTypes;
+ SBLevel *fixedLevels;
+ SBUInteger offset;
+ SBUInteger length;
+ SBLevel baseLevel;
+ SBUInteger retainCount;
+} SBParagraph;
+
+SB_INTERNAL SBParagraphRef SBParagraphCreate(SBAlgorithmRef algorithm,
+ SBUInteger paragraphOffset, SBUInteger suggestedLength, SBLevel baseLevel);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c b/modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c
new file mode 100644
index 0000000000..6156869b9b
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.c
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2018-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+
+#include "GeneralCategoryLookup.h"
+#include "PairingLookup.h"
+#include "SBBase.h"
+#include "SBCodepointSequence.h"
+#include "ScriptLookup.h"
+#include "ScriptStack.h"
+#include "SBScriptLocator.h"
+
+static SBBoolean IsSimilarScript(SBScript lhs, SBScript rhs)
+{
+ return SBScriptIsCommonOrInherited(lhs)
+ || SBScriptIsCommonOrInherited(rhs)
+ || lhs == rhs;
+}
+
+SBScriptLocatorRef SBScriptLocatorCreate(void)
+{
+ SBScriptLocatorRef locator = malloc(sizeof(SBScriptLocator));
+
+ if (locator) {
+ locator->_codepointSequence.stringEncoding = SBStringEncodingUTF8;
+ locator->_codepointSequence.stringBuffer = NULL;
+ locator->_codepointSequence.stringLength = 0;
+ locator->retainCount = 1;
+
+ SBScriptLocatorReset(locator);
+ }
+
+ return locator;
+}
+
+void SBScriptLocatorLoadCodepoints(SBScriptLocatorRef locator, const SBCodepointSequence *codepointSequence)
+{
+ locator->_codepointSequence = *codepointSequence;
+ SBScriptLocatorReset(locator);
+}
+
+const SBScriptAgent *SBScriptLocatorGetAgent(SBScriptLocatorRef locator)
+{
+ return &locator->agent;
+}
+
+static void ResolveScriptRun(SBScriptLocatorRef locator, SBUInteger offset)
+{
+ const SBCodepointSequence *sequence = &locator->_codepointSequence;
+ ScriptStackRef stack = &locator->_scriptStack;
+ SBScript result = SBScriptZYYY;
+ SBUInteger current = offset;
+ SBUInteger next = offset;
+ SBCodepoint codepoint;
+
+ /* Iterate over the code points of specified string buffer. */
+ while ((codepoint = SBCodepointSequenceGetCodepointAt(sequence, &next)) != SBCodepointInvalid) {
+ SBBoolean isStacked = SBFalse;
+ SBScript script;
+
+ script = LookupScript(codepoint);
+
+ /* Handle paired punctuations in case of a common script. */
+ if (script == SBScriptZYYY) {
+ SBGeneralCategory generalCategory = LookupGeneralCategory(codepoint);
+
+ /* Check if current code point is an open punctuation. */
+ if (generalCategory == SBGeneralCategoryPS) {
+ SBCodepoint mirror = LookupMirror(codepoint);
+ if (mirror) {
+ /* A closing pair exists for this punctuation, so push it onto the stack. */
+ ScriptStackPush(stack, result, mirror);
+ }
+ }
+ /* Check if current code point is a close punctuation. */
+ else if (generalCategory == SBGeneralCategoryPE) {
+ SBBoolean isMirrored = (LookupMirror(codepoint) != 0);
+ if (isMirrored) {
+ /* Find the matching entry in the stack, while popping the unmatched ones. */
+ while (!ScriptStackIsEmpty(stack)) {
+ SBCodepoint mirror = ScriptStackGetMirror(stack);
+ if (mirror != codepoint) {
+ ScriptStackPop(stack);
+ } else {
+ break;
+ }
+ }
+
+ if (!ScriptStackIsEmpty(stack)) {
+ isStacked = SBTrue;
+ /* Paired punctuation match the script of enclosing text. */
+ script = ScriptStackGetScript(stack);
+ }
+ }
+ }
+ }
+
+ if (IsSimilarScript(result, script)) {
+ if (SBScriptIsCommonOrInherited(result) && !SBScriptIsCommonOrInherited(script)) {
+ /* Set the concrete script of this code point as the result. */
+ result = script;
+ /* Seal the pending punctuations with the result. */
+ ScriptStackSealPairs(stack, result);
+ }
+
+ if (isStacked) {
+ /* Pop the paired punctuation from the stack. */
+ ScriptStackPop(stack);
+ }
+ } else {
+ /* The current code point has a different script, so finish the run. */
+ break;
+ }
+
+ current = next;
+ }
+
+ ScriptStackLeavePairs(stack);
+
+ /* Set the run info in agent. */
+ locator->agent.offset = offset;
+ locator->agent.length = current - offset;
+ locator->agent.script = result;
+}
+
+SBBoolean SBScriptLocatorMoveNext(SBScriptLocatorRef locator)
+{
+ SBUInteger offset = locator->agent.offset + locator->agent.length;
+
+ if (offset < locator->_codepointSequence.stringLength) {
+ ResolveScriptRun(locator, offset);
+ return SBTrue;
+ }
+
+ SBScriptLocatorReset(locator);
+ return SBFalse;
+}
+
+void SBScriptLocatorReset(SBScriptLocatorRef locator)
+{
+ ScriptStackReset(&locator->_scriptStack);
+ locator->agent.offset = 0;
+ locator->agent.length = 0;
+ locator->agent.script = SBScriptNil;
+}
+
+SBScriptLocatorRef SBScriptLocatorRetain(SBScriptLocatorRef locator)
+{
+ if (locator) {
+ locator->retainCount += 1;
+ }
+
+ return locator;
+}
+
+void SBScriptLocatorRelease(SBScriptLocatorRef locator)
+{
+ if (locator && --locator->retainCount == 0) {
+ free(locator);
+ }
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h b/modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h
new file mode 100644
index 0000000000..c9ea97e7b5
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SBScriptLocator.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2018-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_SCRIPT_LOCATOR_H
+#define _SB_INTERNAL_SCRIPT_LOCATOR_H
+
+#include
+#include
+#include
+
+#include "ScriptStack.h"
+
+typedef struct _SBScriptLocator {
+ SBCodepointSequence _codepointSequence;
+ ScriptStack _scriptStack;
+ SBScriptAgent agent;
+ SBUInteger retainCount;
+} SBScriptLocator;
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c
new file mode 100644
index 0000000000..a527ccd3aa
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.c
@@ -0,0 +1,2282 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ *
+ * REQUIRED MEMORY: 10832+(3327*2)+(1793*2) = 21072 Bytes
+ */
+
+#include "ScriptLookup.h"
+
+#define Adlm SBScriptADLM
+#define Aghb SBScriptAGHB
+#define Ahom SBScriptAHOM
+#define Arab SBScriptARAB
+#define Armi SBScriptARMI
+#define Armn SBScriptARMN
+#define Avst SBScriptAVST
+#define Bali SBScriptBALI
+#define Bamu SBScriptBAMU
+#define Bass SBScriptBASS
+#define Batk SBScriptBATK
+#define Beng SBScriptBENG
+#define Bhks SBScriptBHKS
+#define Bopo SBScriptBOPO
+#define Brah SBScriptBRAH
+#define Brai SBScriptBRAI
+#define Bugi SBScriptBUGI
+#define Buhd SBScriptBUHD
+#define Cakm SBScriptCAKM
+#define Cans SBScriptCANS
+#define Cari SBScriptCARI
+#define Cham SBScriptCHAM
+#define Cher SBScriptCHER
+#define Chrs SBScriptCHRS
+#define Copt SBScriptCOPT
+#define Cpmn SBScriptCPMN
+#define Cprt SBScriptCPRT
+#define Cyrl SBScriptCYRL
+#define Deva SBScriptDEVA
+#define Diak SBScriptDIAK
+#define Dogr SBScriptDOGR
+#define Dsrt SBScriptDSRT
+#define Dupl SBScriptDUPL
+#define Egyp SBScriptEGYP
+#define Elba SBScriptELBA
+#define Elym SBScriptELYM
+#define Ethi SBScriptETHI
+#define Geor SBScriptGEOR
+#define Glag SBScriptGLAG
+#define Gong SBScriptGONG
+#define Gonm SBScriptGONM
+#define Goth SBScriptGOTH
+#define Gran SBScriptGRAN
+#define Grek SBScriptGREK
+#define Gujr SBScriptGUJR
+#define Guru SBScriptGURU
+#define Hang SBScriptHANG
+#define Hani SBScriptHANI
+#define Hano SBScriptHANO
+#define Hatr SBScriptHATR
+#define Hebr SBScriptHEBR
+#define Hira SBScriptHIRA
+#define Hluw SBScriptHLUW
+#define Hmng SBScriptHMNG
+#define Hmnp SBScriptHMNP
+#define Hung SBScriptHUNG
+#define Ital SBScriptITAL
+#define Java SBScriptJAVA
+#define Kali SBScriptKALI
+#define Kana SBScriptKANA
+#define Kawi SBScriptKAWI
+#define Khar SBScriptKHAR
+#define Khmr SBScriptKHMR
+#define Khoj SBScriptKHOJ
+#define Kits SBScriptKITS
+#define Knda SBScriptKNDA
+#define Kthi SBScriptKTHI
+#define Lana SBScriptLANA
+#define Laoo SBScriptLAOO
+#define Latn SBScriptLATN
+#define Lepc SBScriptLEPC
+#define Limb SBScriptLIMB
+#define Lina SBScriptLINA
+#define Linb SBScriptLINB
+#define Lisu SBScriptLISU
+#define Lyci SBScriptLYCI
+#define Lydi SBScriptLYDI
+#define Mahj SBScriptMAHJ
+#define Maka SBScriptMAKA
+#define Mand SBScriptMAND
+#define Mani SBScriptMANI
+#define Marc SBScriptMARC
+#define Medf SBScriptMEDF
+#define Mend SBScriptMEND
+#define Merc SBScriptMERC
+#define Mero SBScriptMERO
+#define Mlym SBScriptMLYM
+#define Modi SBScriptMODI
+#define Mong SBScriptMONG
+#define Mroo SBScriptMROO
+#define Mtei SBScriptMTEI
+#define Mult SBScriptMULT
+#define Mymr SBScriptMYMR
+#define Nagm SBScriptNAGM
+#define Nand SBScriptNAND
+#define Narb SBScriptNARB
+#define Nbat SBScriptNBAT
+#define Newa SBScriptNEWA
+#define Nkoo SBScriptNKOO
+#define Nshu SBScriptNSHU
+#define Ogam SBScriptOGAM
+#define Olck SBScriptOLCK
+#define Orkh SBScriptORKH
+#define Orya SBScriptORYA
+#define Osge SBScriptOSGE
+#define Osma SBScriptOSMA
+#define Ougr SBScriptOUGR
+#define Palm SBScriptPALM
+#define Pauc SBScriptPAUC
+#define Perm SBScriptPERM
+#define Phag SBScriptPHAG
+#define Phli SBScriptPHLI
+#define Phlp SBScriptPHLP
+#define Phnx SBScriptPHNX
+#define Plrd SBScriptPLRD
+#define Prti SBScriptPRTI
+#define Rjng SBScriptRJNG
+#define Rohg SBScriptROHG
+#define Runr SBScriptRUNR
+#define Samr SBScriptSAMR
+#define Sarb SBScriptSARB
+#define Saur SBScriptSAUR
+#define Sgnw SBScriptSGNW
+#define Shaw SBScriptSHAW
+#define Shrd SBScriptSHRD
+#define Sidd SBScriptSIDD
+#define Sind SBScriptSIND
+#define Sinh SBScriptSINH
+#define Sogd SBScriptSOGD
+#define Sogo SBScriptSOGO
+#define Sora SBScriptSORA
+#define Soyo SBScriptSOYO
+#define Sund SBScriptSUND
+#define Sylo SBScriptSYLO
+#define Syrc SBScriptSYRC
+#define Tagb SBScriptTAGB
+#define Takr SBScriptTAKR
+#define Tale SBScriptTALE
+#define Talu SBScriptTALU
+#define Taml SBScriptTAML
+#define Tang SBScriptTANG
+#define Tavt SBScriptTAVT
+#define Telu SBScriptTELU
+#define Tfng SBScriptTFNG
+#define Tglg SBScriptTGLG
+#define Thaa SBScriptTHAA
+#define Thai SBScriptTHAI
+#define Tibt SBScriptTIBT
+#define Tirh SBScriptTIRH
+#define Tnsa SBScriptTNSA
+#define Toto SBScriptTOTO
+#define Ugar SBScriptUGAR
+#define Vaii SBScriptVAII
+#define Vith SBScriptVITH
+#define Wara SBScriptWARA
+#define Wcho SBScriptWCHO
+#define Xpeo SBScriptXPEO
+#define Xsux SBScriptXSUX
+#define Yezi SBScriptYEZI
+#define Yiii SBScriptYIII
+#define Zanb SBScriptZANB
+#define Zinh SBScriptZINH
+#define Zyyy SBScriptZYYY
+#define Zzzz SBScriptZZZZ
+
+static const SBUInt8 PrimaryScriptData[10832] = {
+/* DATA_BLOCK: -- 0x0000..0x000F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0010..0x001F -- */
+ Zyyy, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x0020..0x002F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0030..0x003F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Latn, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0040..0x004F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x0050..0x005F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zyyy, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x0060..0x006F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0070..0x007F -- */
+ Latn, Latn, Latn, Latn, Latn, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Bopo, Bopo, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0080..0x008F -- */
+ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh,
+/* DATA_BLOCK: -- 0x0090..0x009F -- */
+ Grek, Grek, Grek, Grek, Zyyy, Grek, Grek, Grek, Zzzz, Zzzz, Grek, Grek, Grek, Grek, Zyyy, Grek,
+/* DATA_BLOCK: -- 0x00A0..0x00AF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Grek, Zyyy, Grek, Zyyy, Grek, Grek, Grek, Zzzz, Grek, Zzzz, Grek, Grek,
+/* DATA_BLOCK: -- 0x00B0..0x00BF -- */
+ Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek,
+/* DATA_BLOCK: -- 0x00C0..0x00CF -- */
+ Grek, Grek, Zzzz, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek,
+/* DATA_BLOCK: -- 0x00D0..0x00DF -- */
+ Grek, Grek, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt,
+/* DATA_BLOCK: -- 0x00E0..0x00EF -- */
+ Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl,
+/* DATA_BLOCK: -- 0x00F0..0x00FF -- */
+ Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Zinh, Zinh, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl,
+/* DATA_BLOCK: -- 0x0100..0x010F -- */
+ Zzzz, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn,
+/* DATA_BLOCK: -- 0x0110..0x011F -- */
+ Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn,
+/* DATA_BLOCK: -- 0x0120..0x012F -- */
+ Armn, Armn, Armn, Armn, Armn, Armn, Armn, Zzzz, Zzzz, Armn, Armn, Armn, Armn, Armn, Armn, Armn,
+/* DATA_BLOCK: -- 0x0130..0x013F -- */
+ Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Armn, Zzzz, Zzzz, Armn, Armn, Armn,
+/* DATA_BLOCK: -- 0x0140..0x014F -- */
+ Zzzz, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr,
+/* DATA_BLOCK: -- 0x0150..0x015F -- */
+ Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr,
+/* DATA_BLOCK: -- 0x0160..0x016F -- */
+ Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0170..0x017F -- */
+ Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Zzzz, Zzzz, Zzzz, Zzzz, Hebr,
+/* DATA_BLOCK: -- 0x0180..0x018F -- */
+ Hebr, Hebr, Hebr, Hebr, Hebr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0190..0x019F -- */
+ Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x01A0..0x01AF -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Arab, Arab, Zyyy,
+/* DATA_BLOCK: -- 0x01B0..0x01BF -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x01C0..0x01CF -- */
+ Zyyy, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zinh, Zinh, Zinh, Zinh, Zinh,
+/* DATA_BLOCK: -- 0x01D0..0x01DF -- */
+ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x01E0..0x01EF -- */
+ Zinh, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x01F0..0x01FF -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Arab, Arab,
+/* DATA_BLOCK: -- 0x0200..0x020F -- */
+ Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Zzzz, Syrc,
+/* DATA_BLOCK: -- 0x0210..0x021F -- */
+ Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc,
+/* DATA_BLOCK: -- 0x0220..0x022F -- */
+ Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Zzzz, Zzzz, Syrc, Syrc, Syrc,
+/* DATA_BLOCK: -- 0x0230..0x023F -- */
+ Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa, Thaa,
+/* DATA_BLOCK: -- 0x0240..0x024F -- */
+ Thaa, Thaa, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0250..0x025F -- */
+ Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo,
+/* DATA_BLOCK: -- 0x0260..0x026F -- */
+ Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Nkoo, Zzzz, Zzzz, Nkoo, Nkoo, Nkoo,
+/* DATA_BLOCK: -- 0x0270..0x027F -- */
+ Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr,
+/* DATA_BLOCK: -- 0x0280..0x028F -- */
+ Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0290..0x029F -- */
+ Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Samr, Zzzz,
+/* DATA_BLOCK: -- 0x02A0..0x02AF -- */
+ Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand,
+/* DATA_BLOCK: -- 0x02B0..0x02BF -- */
+ Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Mand, Zzzz, Zzzz, Mand, Zzzz,
+/* DATA_BLOCK: -- 0x02C0..0x02CF -- */
+ Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Syrc, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x02D0..0x02DF -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zzzz,
+/* DATA_BLOCK: -- 0x02E0..0x02EF -- */
+ Arab, Arab, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x02F0..0x02FF -- */
+ Arab, Arab, Zyyy, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x0300..0x030F -- */
+ Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva,
+/* DATA_BLOCK: -- 0x0310..0x031F -- */
+ Deva, Zinh, Zinh, Zinh, Zinh, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva,
+/* DATA_BLOCK: -- 0x0320..0x032F -- */
+ Deva, Deva, Deva, Deva, Zyyy, Zyyy, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva,
+/* DATA_BLOCK: -- 0x0330..0x033F -- */
+ Beng, Beng, Beng, Beng, Zzzz, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Zzzz, Zzzz, Beng,
+/* DATA_BLOCK: -- 0x0340..0x034F -- */
+ Beng, Zzzz, Zzzz, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng,
+/* DATA_BLOCK: -- 0x0350..0x035F -- */
+ Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Zzzz, Beng, Beng, Beng, Beng, Beng, Beng,
+/* DATA_BLOCK: -- 0x0360..0x036F -- */
+ Beng, Zzzz, Beng, Zzzz, Zzzz, Zzzz, Beng, Beng, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Beng, Beng,
+/* DATA_BLOCK: -- 0x0370..0x037F -- */
+ Beng, Beng, Beng, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Beng, Beng, Zzzz,
+/* DATA_BLOCK: -- 0x0380..0x038F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Beng, Zzzz, Zzzz, Zzzz, Zzzz, Beng, Beng, Zzzz, Beng,
+/* DATA_BLOCK: -- 0x0390..0x039F -- */
+ Beng, Beng, Beng, Beng, Zzzz, Zzzz, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng,
+/* DATA_BLOCK: -- 0x03A0..0x03AF -- */
+ Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Beng, Zzzz,
+/* DATA_BLOCK: -- 0x03B0..0x03BF -- */
+ Zzzz, Guru, Guru, Guru, Zzzz, Guru, Guru, Guru, Guru, Guru, Guru, Zzzz, Zzzz, Zzzz, Zzzz, Guru,
+/* DATA_BLOCK: -- 0x03C0..0x03CF -- */
+ Guru, Zzzz, Zzzz, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru,
+/* DATA_BLOCK: -- 0x03D0..0x03DF -- */
+ Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Zzzz, Guru, Guru, Guru, Guru, Guru, Guru,
+/* DATA_BLOCK: -- 0x03E0..0x03EF -- */
+ Guru, Zzzz, Guru, Guru, Zzzz, Guru, Guru, Zzzz, Guru, Guru, Zzzz, Zzzz, Guru, Zzzz, Guru, Guru,
+/* DATA_BLOCK: -- 0x03F0..0x03FF -- */
+ Guru, Guru, Guru, Zzzz, Zzzz, Zzzz, Zzzz, Guru, Guru, Zzzz, Zzzz, Guru, Guru, Guru, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0400..0x040F -- */
+ Zzzz, Guru, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Guru, Guru, Guru, Guru, Zzzz, Guru, Zzzz,
+/* DATA_BLOCK: -- 0x0410..0x041F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru, Guru,
+/* DATA_BLOCK: -- 0x0420..0x042F -- */
+ Guru, Guru, Guru, Guru, Guru, Guru, Guru, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0430..0x043F -- */
+ Zzzz, Gujr, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Zzzz, Gujr,
+/* DATA_BLOCK: -- 0x0440..0x044F -- */
+ Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr,
+/* DATA_BLOCK: -- 0x0450..0x045F -- */
+ Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr,
+/* DATA_BLOCK: -- 0x0460..0x046F -- */
+ Gujr, Zzzz, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Zzzz, Zzzz, Gujr, Gujr, Gujr, Gujr,
+/* DATA_BLOCK: -- 0x0470..0x047F -- */
+ Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Zzzz, Gujr, Gujr, Gujr, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0480..0x048F -- */
+ Gujr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0490..0x049F -- */
+ Gujr, Gujr, Gujr, Gujr, Zzzz, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr,
+/* DATA_BLOCK: -- 0x04A0..0x04AF -- */
+ Gujr, Gujr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr, Gujr,
+/* DATA_BLOCK: -- 0x04B0..0x04BF -- */
+ Zzzz, Orya, Orya, Orya, Zzzz, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Zzzz, Zzzz, Orya,
+/* DATA_BLOCK: -- 0x04C0..0x04CF -- */
+ Orya, Zzzz, Zzzz, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya,
+/* DATA_BLOCK: -- 0x04D0..0x04DF -- */
+ Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Zzzz, Orya, Orya, Orya, Orya, Orya, Orya,
+/* DATA_BLOCK: -- 0x04E0..0x04EF -- */
+ Orya, Zzzz, Orya, Orya, Zzzz, Orya, Orya, Orya, Orya, Orya, Zzzz, Zzzz, Orya, Orya, Orya, Orya,
+/* DATA_BLOCK: -- 0x04F0..0x04FF -- */
+ Orya, Orya, Orya, Orya, Orya, Zzzz, Zzzz, Orya, Orya, Zzzz, Zzzz, Orya, Orya, Orya, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0500..0x050F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Orya, Orya, Orya, Zzzz, Zzzz, Zzzz, Zzzz, Orya, Orya, Zzzz, Orya,
+/* DATA_BLOCK: -- 0x0510..0x051F -- */
+ Orya, Orya, Orya, Orya, Zzzz, Zzzz, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya,
+/* DATA_BLOCK: -- 0x0520..0x052F -- */
+ Orya, Orya, Orya, Orya, Orya, Orya, Orya, Orya, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0530..0x053F -- */
+ Zzzz, Zzzz, Taml, Taml, Zzzz, Taml, Taml, Taml, Taml, Taml, Taml, Zzzz, Zzzz, Zzzz, Taml, Taml,
+/* DATA_BLOCK: -- 0x0540..0x054F -- */
+ Taml, Zzzz, Taml, Taml, Taml, Taml, Zzzz, Zzzz, Zzzz, Taml, Taml, Zzzz, Taml, Zzzz, Taml, Taml,
+/* DATA_BLOCK: -- 0x0550..0x055F -- */
+ Zzzz, Zzzz, Zzzz, Taml, Taml, Zzzz, Zzzz, Zzzz, Taml, Taml, Taml, Zzzz, Zzzz, Zzzz, Taml, Taml,
+/* DATA_BLOCK: -- 0x0560..0x056F -- */
+ Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Zzzz, Zzzz, Zzzz, Zzzz, Taml, Taml,
+/* DATA_BLOCK: -- 0x0570..0x057F -- */
+ Taml, Taml, Taml, Zzzz, Zzzz, Zzzz, Taml, Taml, Taml, Zzzz, Taml, Taml, Taml, Taml, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0580..0x058F -- */
+ Taml, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Taml, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0590..0x059F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml,
+/* DATA_BLOCK: -- 0x05A0..0x05AF -- */
+ Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x05B0..0x05BF -- */
+ Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Zzzz, Telu, Telu,
+/* DATA_BLOCK: -- 0x05C0..0x05CF -- */
+ Telu, Zzzz, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu,
+/* DATA_BLOCK: -- 0x05D0..0x05DF -- */
+ Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Zzzz, Telu, Telu, Telu, Telu, Telu, Telu,
+/* DATA_BLOCK: -- 0x05E0..0x05EF -- */
+ Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Zzzz, Zzzz, Telu, Telu, Telu, Telu,
+/* DATA_BLOCK: -- 0x05F0..0x05FF -- */
+ Telu, Telu, Telu, Telu, Telu, Zzzz, Telu, Telu, Telu, Zzzz, Telu, Telu, Telu, Telu, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0600..0x060F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Telu, Telu, Zzzz, Telu, Telu, Telu, Zzzz, Zzzz, Telu, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0610..0x061F -- */
+ Telu, Telu, Telu, Telu, Zzzz, Zzzz, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu,
+/* DATA_BLOCK: -- 0x0620..0x062F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu, Telu,
+/* DATA_BLOCK: -- 0x0630..0x063F -- */
+ Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Zzzz, Knda, Knda,
+/* DATA_BLOCK: -- 0x0640..0x064F -- */
+ Knda, Zzzz, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda,
+/* DATA_BLOCK: -- 0x0650..0x065F -- */
+ Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Zzzz, Knda, Knda, Knda, Knda, Knda, Knda,
+/* DATA_BLOCK: -- 0x0660..0x066F -- */
+ Knda, Knda, Knda, Knda, Zzzz, Knda, Knda, Knda, Knda, Knda, Zzzz, Zzzz, Knda, Knda, Knda, Knda,
+/* DATA_BLOCK: -- 0x0670..0x067F -- */
+ Knda, Knda, Knda, Knda, Knda, Zzzz, Knda, Knda, Knda, Zzzz, Knda, Knda, Knda, Knda, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0680..0x068F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Knda, Knda, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Knda, Knda, Zzzz,
+/* DATA_BLOCK: -- 0x0690..0x069F -- */
+ Knda, Knda, Knda, Knda, Zzzz, Zzzz, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda, Knda,
+/* DATA_BLOCK: -- 0x06A0..0x06AF -- */
+ Zzzz, Knda, Knda, Knda, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x06B0..0x06BF -- */
+ Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym,
+/* DATA_BLOCK: -- 0x06C0..0x06CF -- */
+ Mlym, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym,
+/* DATA_BLOCK: -- 0x06D0..0x06DF -- */
+ Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym,
+/* DATA_BLOCK: -- 0x06E0..0x06EF -- */
+ Mlym, Mlym, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, Mlym, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym,
+/* DATA_BLOCK: -- 0x06F0..0x06FF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym,
+/* DATA_BLOCK: -- 0x0700..0x070F -- */
+ Mlym, Mlym, Mlym, Mlym, Zzzz, Zzzz, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym, Mlym,
+/* DATA_BLOCK: -- 0x0710..0x071F -- */
+ Zzzz, Sinh, Sinh, Sinh, Zzzz, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh,
+/* DATA_BLOCK: -- 0x0720..0x072F -- */
+ Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Zzzz, Zzzz, Zzzz, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh,
+/* DATA_BLOCK: -- 0x0730..0x073F -- */
+ Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh,
+/* DATA_BLOCK: -- 0x0740..0x074F -- */
+ Sinh, Sinh, Zzzz, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Zzzz, Sinh, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0750..0x075F -- */
+ Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Zzzz, Zzzz, Zzzz, Sinh, Zzzz, Zzzz, Zzzz, Zzzz, Sinh,
+/* DATA_BLOCK: -- 0x0760..0x076F -- */
+ Sinh, Sinh, Sinh, Sinh, Sinh, Zzzz, Sinh, Zzzz, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh,
+/* DATA_BLOCK: -- 0x0770..0x077F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh,
+/* DATA_BLOCK: -- 0x0780..0x078F -- */
+ Zzzz, Zzzz, Sinh, Sinh, Sinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0790..0x079F -- */
+ Zzzz, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai,
+/* DATA_BLOCK: -- 0x07A0..0x07AF -- */
+ Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai,
+/* DATA_BLOCK: -- 0x07B0..0x07BF -- */
+ Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy,
+/* DATA_BLOCK: -- 0x07C0..0x07CF -- */
+ Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Thai, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x07D0..0x07DF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x07E0..0x07EF -- */
+ Zzzz, Laoo, Laoo, Zzzz, Laoo, Zzzz, Laoo, Laoo, Laoo, Laoo, Laoo, Zzzz, Laoo, Laoo, Laoo, Laoo,
+/* DATA_BLOCK: -- 0x07F0..0x07FF -- */
+ Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo,
+/* DATA_BLOCK: -- 0x0800..0x080F -- */
+ Laoo, Laoo, Laoo, Laoo, Zzzz, Laoo, Zzzz, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo,
+/* DATA_BLOCK: -- 0x0810..0x081F -- */
+ Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0820..0x082F -- */
+ Laoo, Laoo, Laoo, Laoo, Laoo, Zzzz, Laoo, Zzzz, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Zzzz,
+/* DATA_BLOCK: -- 0x0830..0x083F -- */
+ Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Laoo, Zzzz, Zzzz, Laoo, Laoo, Laoo, Laoo,
+/* DATA_BLOCK: -- 0x0840..0x084F -- */
+ Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt,
+/* DATA_BLOCK: -- 0x0850..0x085F -- */
+ Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Zzzz, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt,
+/* DATA_BLOCK: -- 0x0860..0x086F -- */
+ Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0870..0x087F -- */
+ Zzzz, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt,
+/* DATA_BLOCK: -- 0x0880..0x088F -- */
+ Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Tibt, Zzzz, Tibt, Tibt,
+/* DATA_BLOCK: -- 0x0890..0x089F -- */
+ Tibt, Tibt, Tibt, Tibt, Tibt, Zyyy, Zyyy, Zyyy, Zyyy, Tibt, Tibt, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x08A0..0x08AF -- */
+ Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr,
+/* DATA_BLOCK: -- 0x08B0..0x08BF -- */
+ Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor,
+/* DATA_BLOCK: -- 0x08C0..0x08CF -- */
+ Geor, Geor, Geor, Geor, Geor, Geor, Zzzz, Geor, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Geor, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x08D0..0x08DF -- */
+ Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Zyyy, Geor, Geor, Geor, Geor,
+/* DATA_BLOCK: -- 0x08E0..0x08EF -- */
+ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang,
+/* DATA_BLOCK: -- 0x08F0..0x08FF -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi,
+/* DATA_BLOCK: -- 0x0900..0x090F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0910..0x091F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0920..0x092F -- */
+ Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz,
+/* DATA_BLOCK: -- 0x0930..0x093F -- */
+ Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi,
+/* DATA_BLOCK: -- 0x0940..0x094F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi,
+/* DATA_BLOCK: -- 0x0950..0x095F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Ethi, Ethi, Ethi,
+/* DATA_BLOCK: -- 0x0960..0x096F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0970..0x097F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0980..0x098F -- */
+ Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher, Cher,
+/* DATA_BLOCK: -- 0x0990..0x099F -- */
+ Cher, Cher, Cher, Cher, Cher, Cher, Zzzz, Zzzz, Cher, Cher, Cher, Cher, Cher, Cher, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x09A0..0x09AF -- */
+ Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans, Cans,
+/* DATA_BLOCK: -- 0x09B0..0x09BF -- */
+ Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam,
+/* DATA_BLOCK: -- 0x09C0..0x09CF -- */
+ Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Ogam, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x09D0..0x09DF -- */
+ Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr,
+/* DATA_BLOCK: -- 0x09E0..0x09EF -- */
+ Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Zyyy, Zyyy, Zyyy, Runr, Runr,
+/* DATA_BLOCK: -- 0x09F0..0x09FF -- */
+ Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Runr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0A00..0x0A0F -- */
+ Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Tglg,
+/* DATA_BLOCK: -- 0x0A10..0x0A1F -- */
+ Tglg, Tglg, Tglg, Tglg, Tglg, Tglg, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Tglg,
+/* DATA_BLOCK: -- 0x0A20..0x0A2F -- */
+ Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano, Hano,
+/* DATA_BLOCK: -- 0x0A30..0x0A3F -- */
+ Hano, Hano, Hano, Hano, Hano, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0A40..0x0A4F -- */
+ Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd, Buhd,
+/* DATA_BLOCK: -- 0x0A50..0x0A5F -- */
+ Buhd, Buhd, Buhd, Buhd, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0A60..0x0A6F -- */
+ Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Tagb, Zzzz, Tagb, Tagb,
+/* DATA_BLOCK: -- 0x0A70..0x0A7F -- */
+ Tagb, Zzzz, Tagb, Tagb, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0A80..0x0A8F -- */
+ Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr,
+/* DATA_BLOCK: -- 0x0A90..0x0A9F -- */
+ Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0AA0..0x0AAF -- */
+ Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Khmr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0AB0..0x0ABF -- */
+ Mong, Mong, Zyyy, Zyyy, Mong, Zyyy, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong,
+/* DATA_BLOCK: -- 0x0AC0..0x0ACF -- */
+ Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0AD0..0x0ADF -- */
+ Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong,
+/* DATA_BLOCK: -- 0x0AE0..0x0AEF -- */
+ Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0AF0..0x0AFF -- */
+ Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0B00..0x0B0F -- */
+ Cans, Cans, Cans, Cans, Cans, Cans, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0B10..0x0B1F -- */
+ Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb,
+/* DATA_BLOCK: -- 0x0B20..0x0B2F -- */
+ Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Zzzz,
+/* DATA_BLOCK: -- 0x0B30..0x0B3F -- */
+ Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0B40..0x0B4F -- */
+ Limb, Zzzz, Zzzz, Zzzz, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb, Limb,
+/* DATA_BLOCK: -- 0x0B50..0x0B5F -- */
+ Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale,
+/* DATA_BLOCK: -- 0x0B60..0x0B6F -- */
+ Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Tale, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0B70..0x0B7F -- */
+ Tale, Tale, Tale, Tale, Tale, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0B80..0x0B8F -- */
+ Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu,
+/* DATA_BLOCK: -- 0x0B90..0x0B9F -- */
+ Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0BA0..0x0BAF -- */
+ Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0BB0..0x0BBF -- */
+ Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Talu, Zzzz, Zzzz, Zzzz, Talu, Talu,
+/* DATA_BLOCK: -- 0x0BC0..0x0BCF -- */
+ Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi,
+/* DATA_BLOCK: -- 0x0BD0..0x0BDF -- */
+ Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Bugi, Zzzz, Zzzz, Bugi, Bugi,
+/* DATA_BLOCK: -- 0x0BE0..0x0BEF -- */
+ Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana,
+/* DATA_BLOCK: -- 0x0BF0..0x0BFF -- */
+ Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Zzzz,
+/* DATA_BLOCK: -- 0x0C00..0x0C0F -- */
+ Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Zzzz, Zzzz, Lana,
+/* DATA_BLOCK: -- 0x0C10..0x0C1F -- */
+ Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0C20..0x0C2F -- */
+ Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Lana, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0C30..0x0C3F -- */
+ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zzzz,
+/* DATA_BLOCK: -- 0x0C40..0x0C4F -- */
+ Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali,
+/* DATA_BLOCK: -- 0x0C50..0x0C5F -- */
+ Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0C60..0x0C6F -- */
+ Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Bali, Zzzz,
+/* DATA_BLOCK: -- 0x0C70..0x0C7F -- */
+ Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund,
+/* DATA_BLOCK: -- 0x0C80..0x0C8F -- */
+ Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk, Batk,
+/* DATA_BLOCK: -- 0x0C90..0x0C9F -- */
+ Batk, Batk, Batk, Batk, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Batk, Batk, Batk, Batk,
+/* DATA_BLOCK: -- 0x0CA0..0x0CAF -- */
+ Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc,
+/* DATA_BLOCK: -- 0x0CB0..0x0CBF -- */
+ Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Zzzz, Zzzz, Zzzz, Lepc, Lepc, Lepc, Lepc, Lepc,
+/* DATA_BLOCK: -- 0x0CC0..0x0CCF -- */
+ Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Lepc, Zzzz, Zzzz, Zzzz, Lepc, Lepc, Lepc,
+/* DATA_BLOCK: -- 0x0CD0..0x0CDF -- */
+ Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck, Olck,
+/* DATA_BLOCK: -- 0x0CE0..0x0CEF -- */
+ Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0CF0..0x0CFF -- */
+ Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Geor, Zzzz, Zzzz, Geor, Geor, Geor,
+/* DATA_BLOCK: -- 0x0D00..0x0D0F -- */
+ Sund, Sund, Sund, Sund, Sund, Sund, Sund, Sund, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0D10..0x0D1F -- */
+ Zinh, Zinh, Zinh, Zyyy, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh,
+/* DATA_BLOCK: -- 0x0D20..0x0D2F -- */
+ Zinh, Zyyy, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0D30..0x0D3F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zyyy, Zyyy, Zyyy, Zinh, Zinh, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0D40..0x0D4F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Grek, Grek, Grek, Grek, Grek, Cyrl, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x0D50..0x0D5F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Grek, Grek, Grek,
+/* DATA_BLOCK: -- 0x0D60..0x0D6F -- */
+ Grek, Grek, Latn, Latn, Latn, Latn, Grek, Grek, Grek, Grek, Grek, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x0D70..0x0D7F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Cyrl, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x0D80..0x0D8F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Grek,
+/* DATA_BLOCK: -- 0x0D90..0x0D9F -- */
+ Grek, Grek, Grek, Grek, Grek, Grek, Zzzz, Zzzz, Grek, Grek, Grek, Grek, Grek, Grek, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0DA0..0x0DAF -- */
+ Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Zzzz, Grek, Zzzz, Grek, Zzzz, Grek, Zzzz, Grek,
+/* DATA_BLOCK: -- 0x0DB0..0x0DBF -- */
+ Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0DC0..0x0DCF -- */
+ Grek, Grek, Grek, Grek, Grek, Zzzz, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek,
+/* DATA_BLOCK: -- 0x0DD0..0x0DDF -- */
+ Grek, Grek, Grek, Grek, Zzzz, Zzzz, Grek, Grek, Grek, Grek, Grek, Grek, Zzzz, Grek, Grek, Grek,
+/* DATA_BLOCK: -- 0x0DE0..0x0DEF -- */
+ Zzzz, Zzzz, Grek, Grek, Grek, Zzzz, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Zzzz,
+/* DATA_BLOCK: -- 0x0DF0..0x0DFF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zinh, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0E00..0x0E0F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0E10..0x0E1F -- */
+ Zyyy, Latn, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Latn,
+/* DATA_BLOCK: -- 0x0E20..0x0E2F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz,
+/* DATA_BLOCK: -- 0x0E30..0x0E3F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0E40..0x0E4F -- */
+ Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0E50..0x0E5F -- */
+ Zinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0E60..0x0E6F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Grek, Zyyy, Zyyy, Zyyy, Latn, Latn, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0E70..0x0E7F -- */
+ Zyyy, Zyyy, Latn, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0E80..0x0E8F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Latn, Zyyy,
+/* DATA_BLOCK: -- 0x0E90..0x0E9F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0EA0..0x0EAF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0EB0..0x0EBF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0EC0..0x0ECF -- */
+ Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai, Brai,
+/* DATA_BLOCK: -- 0x0ED0..0x0EDF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0EE0..0x0EEF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0EF0..0x0EFF -- */
+ Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag,
+/* DATA_BLOCK: -- 0x0F00..0x0F0F -- */
+ Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt, Copt,
+/* DATA_BLOCK: -- 0x0F10..0x0F1F -- */
+ Copt, Copt, Copt, Copt, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Copt, Copt, Copt, Copt, Copt, Copt, Copt,
+/* DATA_BLOCK: -- 0x0F20..0x0F2F -- */
+ Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng,
+/* DATA_BLOCK: -- 0x0F30..0x0F3F -- */
+ Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Tfng, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Tfng,
+/* DATA_BLOCK: -- 0x0F40..0x0F4F -- */
+ Tfng, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Tfng,
+/* DATA_BLOCK: -- 0x0F50..0x0F5F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0F60..0x0F6F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz,
+/* DATA_BLOCK: -- 0x0F70..0x0F7F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0F80..0x0F8F -- */
+ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani,
+/* DATA_BLOCK: -- 0x0F90..0x0F9F -- */
+ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Hani, Hani, Hani, Hani, Hani,
+/* DATA_BLOCK: -- 0x0FA0..0x0FAF -- */
+ Hani, Hani, Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0FB0..0x0FBF -- */
+ Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x0FC0..0x0FCF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Hani, Zyyy, Hani, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0FD0..0x0FDF -- */
+ Zyyy, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Zinh, Zinh, Zinh, Zinh, Hang, Hang,
+/* DATA_BLOCK: -- 0x0FE0..0x0FEF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Hani, Hani, Hani, Hani, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x0FF0..0x0FFF -- */
+ Zzzz, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira,
+/* DATA_BLOCK: -- 0x1000..0x100F -- */
+ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira,
+/* DATA_BLOCK: -- 0x1010..0x101F -- */
+ Hira, Hira, Hira, Hira, Hira, Hira, Hira, Zzzz, Zzzz, Zinh, Zinh, Zyyy, Zyyy, Hira, Hira, Hira,
+/* DATA_BLOCK: -- 0x1020..0x102F -- */
+ Zyyy, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana,
+/* DATA_BLOCK: -- 0x1030..0x103F -- */
+ Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana,
+/* DATA_BLOCK: -- 0x1040..0x104F -- */
+ Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Zyyy, Zyyy, Kana, Kana, Kana,
+/* DATA_BLOCK: -- 0x1050..0x105F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo,
+/* DATA_BLOCK: -- 0x1060..0x106F -- */
+ Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo, Bopo,
+/* DATA_BLOCK: -- 0x1070..0x107F -- */
+ Zzzz, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang,
+/* DATA_BLOCK: -- 0x1080..0x108F -- */
+ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Zzzz,
+/* DATA_BLOCK: -- 0x1090..0x109F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy,
+/* DATA_BLOCK: -- 0x10A0..0x10AF -- */
+ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Zyyy,
+/* DATA_BLOCK: -- 0x10B0..0x10BF -- */
+ Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Zyyy,
+/* DATA_BLOCK: -- 0x10C0..0x10CF -- */
+ Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x10D0..0x10DF -- */
+ Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii,
+/* DATA_BLOCK: -- 0x10E0..0x10EF -- */
+ Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x10F0..0x10FF -- */
+ Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Yiii, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1100..0x110F -- */
+ Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu, Lisu,
+/* DATA_BLOCK: -- 0x1110..0x111F -- */
+ Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii,
+/* DATA_BLOCK: -- 0x1120..0x112F -- */
+ Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Vaii, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1130..0x113F -- */
+ Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu,
+/* DATA_BLOCK: -- 0x1140..0x114F -- */
+ Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1150..0x115F -- */
+ Zyyy, Zyyy, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x1160..0x116F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zyyy, Zyyy, Zyyy, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x1170..0x117F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1180..0x118F -- */
+ Latn, Latn, Zzzz, Latn, Zzzz, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1190..0x119F -- */
+ Zzzz, Zzzz, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x11A0..0x11AF -- */
+ Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo,
+/* DATA_BLOCK: -- 0x11B0..0x11BF -- */
+ Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Sylo, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x11C0..0x11CF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x11D0..0x11DF -- */
+ Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag,
+/* DATA_BLOCK: -- 0x11E0..0x11EF -- */
+ Phag, Phag, Phag, Phag, Phag, Phag, Phag, Phag, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x11F0..0x11FF -- */
+ Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur,
+/* DATA_BLOCK: -- 0x1200..0x120F -- */
+ Saur, Saur, Saur, Saur, Saur, Saur, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Saur, Saur,
+/* DATA_BLOCK: -- 0x1210..0x121F -- */
+ Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Saur, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1220..0x122F -- */
+ Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali,
+/* DATA_BLOCK: -- 0x1230..0x123F -- */
+ Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Kali, Zyyy, Kali,
+/* DATA_BLOCK: -- 0x1240..0x124F -- */
+ Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng, Rjng,
+/* DATA_BLOCK: -- 0x1250..0x125F -- */
+ Rjng, Rjng, Rjng, Rjng, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Rjng,
+/* DATA_BLOCK: -- 0x1260..0x126F -- */
+ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1270..0x127F -- */
+ Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java,
+/* DATA_BLOCK: -- 0x1280..0x128F -- */
+ Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Zzzz, Zyyy,
+/* DATA_BLOCK: -- 0x1290..0x129F -- */
+ Java, Java, Java, Java, Java, Java, Java, Java, Java, Java, Zzzz, Zzzz, Zzzz, Zzzz, Java, Java,
+/* DATA_BLOCK: -- 0x12A0..0x12AF -- */
+ Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Mymr, Zzzz,
+/* DATA_BLOCK: -- 0x12B0..0x12BF -- */
+ Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham,
+/* DATA_BLOCK: -- 0x12C0..0x12CF -- */
+ Cham, Cham, Cham, Cham, Cham, Cham, Cham, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x12D0..0x12DF -- */
+ Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x12E0..0x12EF -- */
+ Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Cham, Zzzz, Zzzz, Cham, Cham, Cham, Cham,
+/* DATA_BLOCK: -- 0x12F0..0x12FF -- */
+ Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt, Tavt,
+/* DATA_BLOCK: -- 0x1300..0x130F -- */
+ Tavt, Tavt, Tavt, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1310..0x131F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Tavt, Tavt, Tavt, Tavt, Tavt,
+/* DATA_BLOCK: -- 0x1320..0x132F -- */
+ Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei,
+/* DATA_BLOCK: -- 0x1330..0x133F -- */
+ Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1340..0x134F -- */
+ Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz,
+/* DATA_BLOCK: -- 0x1350..0x135F -- */
+ Zzzz, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1360..0x136F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zyyy, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x1370..0x137F -- */
+ Latn, Latn, Latn, Latn, Latn, Grek, Latn, Latn, Latn, Latn, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1380..0x138F -- */
+ Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1390..0x139F -- */
+ Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Mtei, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x13A0..0x13AF -- */
+ Hang, Hang, Hang, Hang, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x13B0..0x13BF -- */
+ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Zzzz, Zzzz, Zzzz, Zzzz, Hang, Hang, Hang, Hang, Hang,
+/* DATA_BLOCK: -- 0x13C0..0x13CF -- */
+ Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Hang, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x13D0..0x13DF -- */
+ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x13E0..0x13EF -- */
+ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x13F0..0x13FF -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1400..0x140F -- */
+ Zzzz, Zzzz, Zzzz, Armn, Armn, Armn, Armn, Armn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Hebr, Hebr, Hebr,
+/* DATA_BLOCK: -- 0x1410..0x141F -- */
+ Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Zzzz, Hebr, Hebr, Hebr, Hebr, Hebr, Zzzz, Hebr, Zzzz,
+/* DATA_BLOCK: -- 0x1420..0x142F -- */
+ Hebr, Hebr, Zzzz, Hebr, Hebr, Zzzz, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr, Hebr,
+/* DATA_BLOCK: -- 0x1430..0x143F -- */
+ Arab, Arab, Arab, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1440..0x144F -- */
+ Zzzz, Zzzz, Zzzz, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x1450..0x145F -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x1460..0x146F -- */
+ Zzzz, Zzzz, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x1470..0x147F -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Arab,
+/* DATA_BLOCK: -- 0x1480..0x148F -- */
+ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Cyrl, Cyrl,
+/* DATA_BLOCK: -- 0x1490..0x149F -- */
+ Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x14A0..0x14AF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x14B0..0x14BF -- */
+ Arab, Arab, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x14C0..0x14CF -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zzzz, Zzzz, Zyyy,
+/* DATA_BLOCK: -- 0x14D0..0x14DF -- */
+ Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x14E0..0x14EF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana,
+/* DATA_BLOCK: -- 0x14F0..0x14FF -- */
+ Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x1500..0x150F -- */
+ Zzzz, Zzzz, Hang, Hang, Hang, Hang, Hang, Hang, Zzzz, Zzzz, Hang, Hang, Hang, Hang, Hang, Hang,
+/* DATA_BLOCK: -- 0x1510..0x151F -- */
+ Zzzz, Zzzz, Hang, Hang, Hang, Hang, Hang, Hang, Zzzz, Zzzz, Hang, Hang, Hang, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1520..0x152F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz,
+/* DATA_BLOCK: -- 0x1530..0x153F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1540..0x154F -- */
+ Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Zzzz, Linb, Linb, Linb,
+/* DATA_BLOCK: -- 0x1550..0x155F -- */
+ Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb,
+/* DATA_BLOCK: -- 0x1560..0x156F -- */
+ Linb, Linb, Linb, Linb, Linb, Linb, Linb, Zzzz, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb,
+/* DATA_BLOCK: -- 0x1570..0x157F -- */
+ Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Zzzz, Linb, Linb, Zzzz, Linb,
+/* DATA_BLOCK: -- 0x1580..0x158F -- */
+ Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1590..0x159F -- */
+ Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Linb, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x15A0..0x15AF -- */
+ Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x15B0..0x15BF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x15C0..0x15CF -- */
+ Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Grek, Zzzz,
+/* DATA_BLOCK: -- 0x15D0..0x15DF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x15E0..0x15EF -- */
+ Grek, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x15F0..0x15FF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1600..0x160F -- */
+ Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci,
+/* DATA_BLOCK: -- 0x1610..0x161F -- */
+ Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Lyci, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1620..0x162F -- */
+ Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari, Cari,
+/* DATA_BLOCK: -- 0x1630..0x163F -- */
+ Cari, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1640..0x164F -- */
+ Zinh, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x1650..0x165F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1660..0x166F -- */
+ Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital, Ital,
+/* DATA_BLOCK: -- 0x1670..0x167F -- */
+ Ital, Ital, Ital, Ital, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Ital, Ital, Ital,
+/* DATA_BLOCK: -- 0x1680..0x168F -- */
+ Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth,
+/* DATA_BLOCK: -- 0x1690..0x169F -- */
+ Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Goth, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x16A0..0x16AF -- */
+ Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm,
+/* DATA_BLOCK: -- 0x16B0..0x16BF -- */
+ Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Perm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x16C0..0x16CF -- */
+ Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar,
+/* DATA_BLOCK: -- 0x16D0..0x16DF -- */
+ Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Ugar, Zzzz, Ugar,
+/* DATA_BLOCK: -- 0x16E0..0x16EF -- */
+ Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo,
+/* DATA_BLOCK: -- 0x16F0..0x16FF -- */
+ Xpeo, Xpeo, Xpeo, Xpeo, Zzzz, Zzzz, Zzzz, Zzzz, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo,
+/* DATA_BLOCK: -- 0x1700..0x170F -- */
+ Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Xpeo, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1710..0x171F -- */
+ Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt, Dsrt,
+/* DATA_BLOCK: -- 0x1720..0x172F -- */
+ Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw, Shaw,
+/* DATA_BLOCK: -- 0x1730..0x173F -- */
+ Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma,
+/* DATA_BLOCK: -- 0x1740..0x174F -- */
+ Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1750..0x175F -- */
+ Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Osma, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1760..0x176F -- */
+ Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge,
+/* DATA_BLOCK: -- 0x1770..0x177F -- */
+ Osge, Osge, Osge, Osge, Zzzz, Zzzz, Zzzz, Zzzz, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge,
+/* DATA_BLOCK: -- 0x1780..0x178F -- */
+ Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Osge, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1790..0x179F -- */
+ Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba,
+/* DATA_BLOCK: -- 0x17A0..0x17AF -- */
+ Elba, Elba, Elba, Elba, Elba, Elba, Elba, Elba, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x17B0..0x17BF -- */
+ Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb, Aghb,
+/* DATA_BLOCK: -- 0x17C0..0x17CF -- */
+ Aghb, Aghb, Aghb, Aghb, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Aghb,
+/* DATA_BLOCK: -- 0x17D0..0x17DF -- */
+ Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Zzzz, Vith, Vith, Vith, Vith,
+/* DATA_BLOCK: -- 0x17E0..0x17EF -- */
+ Vith, Vith, Vith, Zzzz, Vith, Vith, Zzzz, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith,
+/* DATA_BLOCK: -- 0x17F0..0x17FF -- */
+ Vith, Vith, Zzzz, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Vith,
+/* DATA_BLOCK: -- 0x1800..0x180F -- */
+ Vith, Vith, Zzzz, Vith, Vith, Vith, Vith, Vith, Vith, Vith, Zzzz, Vith, Vith, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1810..0x181F -- */
+ Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina,
+/* DATA_BLOCK: -- 0x1820..0x182F -- */
+ Lina, Lina, Lina, Lina, Lina, Lina, Lina, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1830..0x183F -- */
+ Lina, Lina, Lina, Lina, Lina, Lina, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1840..0x184F -- */
+ Lina, Lina, Lina, Lina, Lina, Lina, Lina, Lina, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1850..0x185F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn,
+/* DATA_BLOCK: -- 0x1860..0x186F -- */
+ Latn, Zzzz, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1870..0x187F -- */
+ Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Zzzz, Zzzz, Cprt, Zzzz, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt,
+/* DATA_BLOCK: -- 0x1880..0x188F -- */
+ Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Cprt,
+/* DATA_BLOCK: -- 0x1890..0x189F -- */
+ Cprt, Cprt, Cprt, Cprt, Cprt, Cprt, Zzzz, Cprt, Cprt, Zzzz, Zzzz, Zzzz, Cprt, Zzzz, Zzzz, Cprt,
+/* DATA_BLOCK: -- 0x18A0..0x18AF -- */
+ Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi,
+/* DATA_BLOCK: -- 0x18B0..0x18BF -- */
+ Armi, Armi, Armi, Armi, Armi, Armi, Zzzz, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi, Armi,
+/* DATA_BLOCK: -- 0x18C0..0x18CF -- */
+ Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm, Palm,
+/* DATA_BLOCK: -- 0x18D0..0x18DF -- */
+ Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat,
+/* DATA_BLOCK: -- 0x18E0..0x18EF -- */
+ Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Zzzz,
+/* DATA_BLOCK: -- 0x18F0..0x18FF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat, Nbat,
+/* DATA_BLOCK: -- 0x1900..0x190F -- */
+ Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr, Hatr,
+/* DATA_BLOCK: -- 0x1910..0x191F -- */
+ Hatr, Hatr, Hatr, Zzzz, Hatr, Hatr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Hatr, Hatr, Hatr, Hatr, Hatr,
+/* DATA_BLOCK: -- 0x1920..0x192F -- */
+ Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx,
+/* DATA_BLOCK: -- 0x1930..0x193F -- */
+ Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Phnx, Zzzz, Zzzz, Zzzz, Phnx,
+/* DATA_BLOCK: -- 0x1940..0x194F -- */
+ Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi,
+/* DATA_BLOCK: -- 0x1950..0x195F -- */
+ Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Lydi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Lydi,
+/* DATA_BLOCK: -- 0x1960..0x196F -- */
+ Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero, Mero,
+/* DATA_BLOCK: -- 0x1970..0x197F -- */
+ Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc,
+/* DATA_BLOCK: -- 0x1980..0x198F -- */
+ Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Zzzz, Zzzz, Zzzz, Zzzz, Merc, Merc, Merc, Merc,
+/* DATA_BLOCK: -- 0x1990..0x199F -- */
+ Zzzz, Zzzz, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc, Merc,
+/* DATA_BLOCK: -- 0x19A0..0x19AF -- */
+ Khar, Khar, Khar, Khar, Zzzz, Khar, Khar, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Khar, Khar, Khar, Khar,
+/* DATA_BLOCK: -- 0x19B0..0x19BF -- */
+ Khar, Khar, Khar, Khar, Zzzz, Khar, Khar, Khar, Zzzz, Khar, Khar, Khar, Khar, Khar, Khar, Khar,
+/* DATA_BLOCK: -- 0x19C0..0x19CF -- */
+ Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar,
+/* DATA_BLOCK: -- 0x19D0..0x19DF -- */
+ Khar, Khar, Khar, Khar, Khar, Khar, Zzzz, Zzzz, Khar, Khar, Khar, Zzzz, Zzzz, Zzzz, Zzzz, Khar,
+/* DATA_BLOCK: -- 0x19E0..0x19EF -- */
+ Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Khar, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x19F0..0x19FF -- */
+ Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb, Sarb,
+/* DATA_BLOCK: -- 0x1A00..0x1A0F -- */
+ Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb, Narb,
+/* DATA_BLOCK: -- 0x1A10..0x1A1F -- */
+ Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani, Mani,
+/* DATA_BLOCK: -- 0x1A20..0x1A2F -- */
+ Mani, Mani, Mani, Mani, Mani, Mani, Mani, Zzzz, Zzzz, Zzzz, Zzzz, Mani, Mani, Mani, Mani, Mani,
+/* DATA_BLOCK: -- 0x1A30..0x1A3F -- */
+ Mani, Mani, Mani, Mani, Mani, Mani, Mani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1A40..0x1A4F -- */
+ Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst, Avst,
+/* DATA_BLOCK: -- 0x1A50..0x1A5F -- */
+ Avst, Avst, Avst, Avst, Avst, Avst, Zzzz, Zzzz, Zzzz, Avst, Avst, Avst, Avst, Avst, Avst, Avst,
+/* DATA_BLOCK: -- 0x1A60..0x1A6F -- */
+ Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti,
+/* DATA_BLOCK: -- 0x1A70..0x1A7F -- */
+ Prti, Prti, Prti, Prti, Prti, Prti, Zzzz, Zzzz, Prti, Prti, Prti, Prti, Prti, Prti, Prti, Prti,
+/* DATA_BLOCK: -- 0x1A80..0x1A8F -- */
+ Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli,
+/* DATA_BLOCK: -- 0x1A90..0x1A9F -- */
+ Phli, Phli, Phli, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Phli, Phli, Phli, Phli, Phli, Phli, Phli, Phli,
+/* DATA_BLOCK: -- 0x1AA0..0x1AAF -- */
+ Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp,
+/* DATA_BLOCK: -- 0x1AB0..0x1ABF -- */
+ Phlp, Phlp, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Phlp, Phlp, Phlp, Phlp, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1AC0..0x1ACF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp, Phlp,
+/* DATA_BLOCK: -- 0x1AD0..0x1ADF -- */
+ Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh,
+/* DATA_BLOCK: -- 0x1AE0..0x1AEF -- */
+ Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Orkh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1AF0..0x1AFF -- */
+ Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung, Hung,
+/* DATA_BLOCK: -- 0x1B00..0x1B0F -- */
+ Hung, Hung, Hung, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1B10..0x1B1F -- */
+ Hung, Hung, Hung, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Hung, Hung, Hung, Hung, Hung, Hung,
+/* DATA_BLOCK: -- 0x1B20..0x1B2F -- */
+ Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg,
+/* DATA_BLOCK: -- 0x1B30..0x1B3F -- */
+ Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1B40..0x1B4F -- */
+ Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Rohg, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1B50..0x1B5F -- */
+ Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi,
+/* DATA_BLOCK: -- 0x1B60..0x1B6F -- */
+ Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Yezi, Zzzz, Yezi, Yezi, Yezi, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1B70..0x1B7F -- */
+ Yezi, Yezi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1B80..0x1B8F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x1B90..0x1B9F -- */
+ Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo,
+/* DATA_BLOCK: -- 0x1BA0..0x1BAF -- */
+ Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Sogo, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1BB0..0x1BBF -- */
+ Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd,
+/* DATA_BLOCK: -- 0x1BC0..0x1BCF -- */
+ Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Sogd, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1BD0..0x1BDF -- */
+ Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr,
+/* DATA_BLOCK: -- 0x1BE0..0x1BEF -- */
+ Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Ougr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1BF0..0x1BFF -- */
+ Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs,
+/* DATA_BLOCK: -- 0x1C00..0x1C0F -- */
+ Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Chrs, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1C10..0x1C1F -- */
+ Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym, Elym,
+/* DATA_BLOCK: -- 0x1C20..0x1C2F -- */
+ Elym, Elym, Elym, Elym, Elym, Elym, Elym, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1C30..0x1C3F -- */
+ Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah,
+/* DATA_BLOCK: -- 0x1C40..0x1C4F -- */
+ Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1C50..0x1C5F -- */
+ Zzzz, Zzzz, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah, Brah,
+/* DATA_BLOCK: -- 0x1C60..0x1C6F -- */
+ Brah, Brah, Brah, Brah, Brah, Brah, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Brah,
+/* DATA_BLOCK: -- 0x1C70..0x1C7F -- */
+ Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi, Kthi,
+/* DATA_BLOCK: -- 0x1C80..0x1C8F -- */
+ Kthi, Kthi, Kthi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Kthi, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1C90..0x1C9F -- */
+ Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora,
+/* DATA_BLOCK: -- 0x1CA0..0x1CAF -- */
+ Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1CB0..0x1CBF -- */
+ Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Sora, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1CC0..0x1CCF -- */
+ Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm,
+/* DATA_BLOCK: -- 0x1CD0..0x1CDF -- */
+ Cakm, Cakm, Cakm, Cakm, Cakm, Zzzz, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm,
+/* DATA_BLOCK: -- 0x1CE0..0x1CEF -- */
+ Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Cakm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1CF0..0x1CFF -- */
+ Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj,
+/* DATA_BLOCK: -- 0x1D00..0x1D0F -- */
+ Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Mahj, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1D10..0x1D1F -- */
+ Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd, Shrd,
+/* DATA_BLOCK: -- 0x1D20..0x1D2F -- */
+ Zzzz, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh, Sinh,
+/* DATA_BLOCK: -- 0x1D30..0x1D3F -- */
+ Sinh, Sinh, Sinh, Sinh, Sinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1D40..0x1D4F -- */
+ Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj,
+/* DATA_BLOCK: -- 0x1D50..0x1D5F -- */
+ Khoj, Khoj, Zzzz, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj, Khoj,
+/* DATA_BLOCK: -- 0x1D60..0x1D6F -- */
+ Khoj, Khoj, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1D70..0x1D7F -- */
+ Mult, Mult, Mult, Mult, Mult, Mult, Mult, Zzzz, Mult, Zzzz, Mult, Mult, Mult, Mult, Zzzz, Mult,
+/* DATA_BLOCK: -- 0x1D80..0x1D8F -- */
+ Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Zzzz, Mult,
+/* DATA_BLOCK: -- 0x1D90..0x1D9F -- */
+ Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Mult, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1DA0..0x1DAF -- */
+ Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind,
+/* DATA_BLOCK: -- 0x1DB0..0x1DBF -- */
+ Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1DC0..0x1DCF -- */
+ Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Sind, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1DD0..0x1DDF -- */
+ Gran, Gran, Gran, Gran, Zzzz, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Zzzz, Zzzz, Gran,
+/* DATA_BLOCK: -- 0x1DE0..0x1DEF -- */
+ Gran, Zzzz, Zzzz, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran,
+/* DATA_BLOCK: -- 0x1DF0..0x1DFF -- */
+ Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Zzzz, Gran, Gran, Gran, Gran, Gran, Gran,
+/* DATA_BLOCK: -- 0x1E00..0x1E0F -- */
+ Gran, Zzzz, Gran, Gran, Zzzz, Gran, Gran, Gran, Gran, Gran, Zzzz, Zinh, Gran, Gran, Gran, Gran,
+/* DATA_BLOCK: -- 0x1E10..0x1E1F -- */
+ Gran, Gran, Gran, Gran, Gran, Zzzz, Zzzz, Gran, Gran, Zzzz, Zzzz, Gran, Gran, Gran, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1E20..0x1E2F -- */
+ Gran, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Gran, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Gran, Gran, Gran,
+/* DATA_BLOCK: -- 0x1E30..0x1E3F -- */
+ Gran, Gran, Gran, Gran, Zzzz, Zzzz, Gran, Gran, Gran, Gran, Gran, Gran, Gran, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1E40..0x1E4F -- */
+ Gran, Gran, Gran, Gran, Gran, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1E50..0x1E5F -- */
+ Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa,
+/* DATA_BLOCK: -- 0x1E60..0x1E6F -- */
+ Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Newa, Zzzz, Newa, Newa, Newa,
+/* DATA_BLOCK: -- 0x1E70..0x1E7F -- */
+ Newa, Newa, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1E80..0x1E8F -- */
+ Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh,
+/* DATA_BLOCK: -- 0x1E90..0x1E9F -- */
+ Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1EA0..0x1EAF -- */
+ Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Tirh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1EB0..0x1EBF -- */
+ Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd,
+/* DATA_BLOCK: -- 0x1EC0..0x1ECF -- */
+ Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Zzzz, Zzzz, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd,
+/* DATA_BLOCK: -- 0x1ED0..0x1EDF -- */
+ Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Sidd, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1EE0..0x1EEF -- */
+ Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi,
+/* DATA_BLOCK: -- 0x1EF0..0x1EFF -- */
+ Modi, Modi, Modi, Modi, Modi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1F00..0x1F0F -- */
+ Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Modi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1F10..0x1F1F -- */
+ Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Mong, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1F20..0x1F2F -- */
+ Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr,
+/* DATA_BLOCK: -- 0x1F30..0x1F3F -- */
+ Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Takr, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1F40..0x1F4F -- */
+ Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom,
+/* DATA_BLOCK: -- 0x1F50..0x1F5F -- */
+ Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Zzzz, Zzzz, Ahom, Ahom, Ahom,
+/* DATA_BLOCK: -- 0x1F60..0x1F6F -- */
+ Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1F70..0x1F7F -- */
+ Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Ahom, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1F80..0x1F8F -- */
+ Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr,
+/* DATA_BLOCK: -- 0x1F90..0x1F9F -- */
+ Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Dogr, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x1FA0..0x1FAF -- */
+ Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara, Wara,
+/* DATA_BLOCK: -- 0x1FB0..0x1FBF -- */
+ Wara, Wara, Wara, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Wara,
+/* DATA_BLOCK: -- 0x1FC0..0x1FCF -- */
+ Diak, Diak, Diak, Diak, Diak, Diak, Diak, Zzzz, Zzzz, Diak, Zzzz, Zzzz, Diak, Diak, Diak, Diak,
+/* DATA_BLOCK: -- 0x1FD0..0x1FDF -- */
+ Diak, Diak, Diak, Diak, Zzzz, Diak, Diak, Zzzz, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak,
+/* DATA_BLOCK: -- 0x1FE0..0x1FEF -- */
+ Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak,
+/* DATA_BLOCK: -- 0x1FF0..0x1FFF -- */
+ Diak, Diak, Diak, Diak, Diak, Diak, Zzzz, Diak, Diak, Zzzz, Zzzz, Diak, Diak, Diak, Diak, Diak,
+/* DATA_BLOCK: -- 0x2000..0x200F -- */
+ Diak, Diak, Diak, Diak, Diak, Diak, Diak, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2010..0x201F -- */
+ Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Diak, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2020..0x202F -- */
+ Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Zzzz, Zzzz, Nand, Nand, Nand, Nand, Nand, Nand,
+/* DATA_BLOCK: -- 0x2030..0x203F -- */
+ Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand, Nand,
+/* DATA_BLOCK: -- 0x2040..0x204F -- */
+ Nand, Nand, Nand, Nand, Nand, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2050..0x205F -- */
+ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb,
+/* DATA_BLOCK: -- 0x2060..0x206F -- */
+ Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zanb, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2070..0x207F -- */
+ Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo, Soyo,
+/* DATA_BLOCK: -- 0x2080..0x208F -- */
+ Soyo, Soyo, Soyo, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2090..0x209F -- */
+ Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc,
+/* DATA_BLOCK: -- 0x20A0..0x20AF -- */
+ Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Pauc, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x20B0..0x20BF -- */
+ Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Deva, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x20C0..0x20CF -- */
+ Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Zzzz, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks,
+/* DATA_BLOCK: -- 0x20D0..0x20DF -- */
+ Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks,
+/* DATA_BLOCK: -- 0x20E0..0x20EF -- */
+ Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Zzzz, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks,
+/* DATA_BLOCK: -- 0x20F0..0x20FF -- */
+ Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2100..0x210F -- */
+ Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Bhks, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2110..0x211F -- */
+ Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc,
+/* DATA_BLOCK: -- 0x2120..0x212F -- */
+ Zzzz, Zzzz, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc,
+/* DATA_BLOCK: -- 0x2130..0x213F -- */
+ Marc, Marc, Marc, Marc, Marc, Marc, Marc, Marc, Zzzz, Marc, Marc, Marc, Marc, Marc, Marc, Marc,
+/* DATA_BLOCK: -- 0x2140..0x214F -- */
+ Marc, Marc, Marc, Marc, Marc, Marc, Marc, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2150..0x215F -- */
+ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Gonm, Gonm, Zzzz, Gonm, Gonm, Gonm, Gonm, Gonm,
+/* DATA_BLOCK: -- 0x2160..0x216F -- */
+ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm,
+/* DATA_BLOCK: -- 0x2170..0x217F -- */
+ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Zzzz, Zzzz, Gonm, Zzzz, Gonm, Gonm, Zzzz, Gonm,
+/* DATA_BLOCK: -- 0x2180..0x218F -- */
+ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2190..0x219F -- */
+ Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Gonm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x21A0..0x21AF -- */
+ Gong, Gong, Gong, Gong, Gong, Gong, Zzzz, Gong, Gong, Zzzz, Gong, Gong, Gong, Gong, Gong, Gong,
+/* DATA_BLOCK: -- 0x21B0..0x21BF -- */
+ Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong,
+/* DATA_BLOCK: -- 0x21C0..0x21CF -- */
+ Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Zzzz,
+/* DATA_BLOCK: -- 0x21D0..0x21DF -- */
+ Gong, Gong, Zzzz, Gong, Gong, Gong, Gong, Gong, Gong, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x21E0..0x21EF -- */
+ Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Gong, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x21F0..0x21FF -- */
+ Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka,
+/* DATA_BLOCK: -- 0x2200..0x220F -- */
+ Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Maka, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2210..0x221F -- */
+ Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi,
+/* DATA_BLOCK: -- 0x2220..0x222F -- */
+ Kawi, Zzzz, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi,
+/* DATA_BLOCK: -- 0x2230..0x223F -- */
+ Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Zzzz, Zzzz, Zzzz, Kawi, Kawi,
+/* DATA_BLOCK: -- 0x2240..0x224F -- */
+ Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Kawi, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2250..0x225F -- */
+ Lisu, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2260..0x226F -- */
+ Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml, Taml,
+/* DATA_BLOCK: -- 0x2270..0x227F -- */
+ Taml, Taml, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Taml,
+/* DATA_BLOCK: -- 0x2280..0x228F -- */
+ Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux,
+/* DATA_BLOCK: -- 0x2290..0x229F -- */
+ Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x22A0..0x22AF -- */
+ Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Xsux, Zzzz,
+/* DATA_BLOCK: -- 0x22B0..0x22BF -- */
+ Xsux, Xsux, Xsux, Xsux, Xsux, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x22C0..0x22CF -- */
+ Xsux, Xsux, Xsux, Xsux, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x22D0..0x22DF -- */
+ Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn, Cpmn,
+/* DATA_BLOCK: -- 0x22E0..0x22EF -- */
+ Cpmn, Cpmn, Cpmn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x22F0..0x22FF -- */
+ Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Egyp,
+/* DATA_BLOCK: -- 0x2300..0x230F -- */
+ Egyp, Egyp, Egyp, Egyp, Egyp, Egyp, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2310..0x231F -- */
+ Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw,
+/* DATA_BLOCK: -- 0x2320..0x232F -- */
+ Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Hluw, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2330..0x233F -- */
+ Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Bamu, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2340..0x234F -- */
+ Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo,
+/* DATA_BLOCK: -- 0x2350..0x235F -- */
+ Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Zzzz,
+/* DATA_BLOCK: -- 0x2360..0x236F -- */
+ Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Mroo, Zzzz, Zzzz, Zzzz, Zzzz, Mroo, Mroo,
+/* DATA_BLOCK: -- 0x2370..0x237F -- */
+ Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa,
+/* DATA_BLOCK: -- 0x2380..0x238F -- */
+ Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Zzzz,
+/* DATA_BLOCK: -- 0x2390..0x239F -- */
+ Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Tnsa, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x23A0..0x23AF -- */
+ Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass,
+/* DATA_BLOCK: -- 0x23B0..0x23BF -- */
+ Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Bass, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x23C0..0x23CF -- */
+ Bass, Bass, Bass, Bass, Bass, Bass, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x23D0..0x23DF -- */
+ Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng,
+/* DATA_BLOCK: -- 0x23E0..0x23EF -- */
+ Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x23F0..0x23FF -- */
+ Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Zzzz, Hmng, Hmng, Hmng, Hmng, Hmng,
+/* DATA_BLOCK: -- 0x2400..0x240F -- */
+ Hmng, Hmng, Zzzz, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng,
+/* DATA_BLOCK: -- 0x2410..0x241F -- */
+ Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Hmng, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Hmng, Hmng, Hmng,
+/* DATA_BLOCK: -- 0x2420..0x242F -- */
+ Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf,
+/* DATA_BLOCK: -- 0x2430..0x243F -- */
+ Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Medf, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2440..0x244F -- */
+ Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd,
+/* DATA_BLOCK: -- 0x2450..0x245F -- */
+ Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Zzzz, Zzzz, Zzzz, Zzzz, Plrd,
+/* DATA_BLOCK: -- 0x2460..0x246F -- */
+ Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Plrd, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Plrd,
+/* DATA_BLOCK: -- 0x2470..0x247F -- */
+ Tang, Nshu, Hani, Hani, Kits, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2480..0x248F -- */
+ Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2490..0x249F -- */
+ Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang,
+/* DATA_BLOCK: -- 0x24A0..0x24AF -- */
+ Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x24B0..0x24BF -- */
+ Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits, Kits,
+/* DATA_BLOCK: -- 0x24C0..0x24CF -- */
+ Kits, Kits, Kits, Kits, Kits, Kits, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x24D0..0x24DF -- */
+ Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Tang, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x24E0..0x24EF -- */
+ Kana, Kana, Kana, Kana, Zzzz, Kana, Kana, Kana, Kana, Kana, Kana, Kana, Zzzz, Kana, Kana, Zzzz,
+/* DATA_BLOCK: -- 0x24F0..0x24FF -- */
+ Kana, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira, Hira,
+/* DATA_BLOCK: -- 0x2500..0x250F -- */
+ Kana, Kana, Kana, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2510..0x251F -- */
+ Zzzz, Zzzz, Hira, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2520..0x252F -- */
+ Hira, Hira, Hira, Zzzz, Zzzz, Kana, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2530..0x253F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Kana, Kana, Kana, Kana, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2540..0x254F -- */
+ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu,
+/* DATA_BLOCK: -- 0x2550..0x255F -- */
+ Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Nshu, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2560..0x256F -- */
+ Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl,
+/* DATA_BLOCK: -- 0x2570..0x257F -- */
+ Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2580..0x258F -- */
+ Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2590..0x259F -- */
+ Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x25A0..0x25AF -- */
+ Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Dupl, Zzzz, Zzzz, Dupl, Dupl, Dupl, Dupl,
+/* DATA_BLOCK: -- 0x25B0..0x25BF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x25C0..0x25CF -- */
+ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x25D0..0x25DF -- */
+ Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x25E0..0x25EF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x25F0..0x25FF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2600..0x260F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zinh, Zinh, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2610..0x261F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zinh, Zinh, Zinh, Zinh,
+/* DATA_BLOCK: -- 0x2620..0x262F -- */
+ Zinh, Zinh, Zinh, Zyyy, Zyyy, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zinh, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2630..0x263F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zinh, Zinh, Zinh, Zinh, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2640..0x264F -- */
+ Grek, Grek, Grek, Grek, Grek, Grek, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2650..0x265F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2660..0x266F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2670..0x267F -- */
+ Zzzz, Zzzz, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2680..0x268F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2690..0x269F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x26A0..0x26AF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x26B0..0x26BF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x26C0..0x26CF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz,
+/* DATA_BLOCK: -- 0x26D0..0x26DF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x26E0..0x26EF -- */
+ Zyyy, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x26F0..0x26FF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2700..0x270F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2710..0x271F -- */
+ Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw,
+/* DATA_BLOCK: -- 0x2720..0x272F -- */
+ Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2730..0x273F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw,
+/* DATA_BLOCK: -- 0x2740..0x274F -- */
+ Zzzz, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw, Sgnw,
+/* DATA_BLOCK: -- 0x2750..0x275F -- */
+ Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz,
+/* DATA_BLOCK: -- 0x2760..0x276F -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Latn, Latn, Latn, Latn, Latn, Latn, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2770..0x277F -- */
+ Glag, Glag, Glag, Glag, Glag, Glag, Glag, Zzzz, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag,
+/* DATA_BLOCK: -- 0x2780..0x278F -- */
+ Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Glag, Zzzz, Zzzz, Glag, Glag, Glag, Glag, Glag,
+/* DATA_BLOCK: -- 0x2790..0x279F -- */
+ Glag, Glag, Zzzz, Glag, Glag, Zzzz, Glag, Glag, Glag, Glag, Glag, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x27A0..0x27AF -- */
+ Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Cyrl, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x27B0..0x27BF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Cyrl,
+/* DATA_BLOCK: -- 0x27C0..0x27CF -- */
+ Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp,
+/* DATA_BLOCK: -- 0x27D0..0x27DF -- */
+ Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x27E0..0x27EF -- */
+ Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x27F0..0x27FF -- */
+ Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Hmnp, Zzzz, Zzzz, Zzzz, Zzzz, Hmnp, Hmnp,
+/* DATA_BLOCK: -- 0x2800..0x280F -- */
+ Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto,
+/* DATA_BLOCK: -- 0x2810..0x281F -- */
+ Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Toto, Zzzz,
+/* DATA_BLOCK: -- 0x2820..0x282F -- */
+ Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho,
+/* DATA_BLOCK: -- 0x2830..0x283F -- */
+ Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Wcho, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Wcho,
+/* DATA_BLOCK: -- 0x2840..0x284F -- */
+ Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm,
+/* DATA_BLOCK: -- 0x2850..0x285F -- */
+ Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Nagm, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2860..0x286F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz, Ethi, Ethi, Ethi, Ethi, Zzzz, Ethi, Ethi, Zzzz,
+/* DATA_BLOCK: -- 0x2870..0x287F -- */
+ Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Ethi, Zzzz,
+/* DATA_BLOCK: -- 0x2880..0x288F -- */
+ Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend,
+/* DATA_BLOCK: -- 0x2890..0x289F -- */
+ Mend, Mend, Mend, Mend, Mend, Zzzz, Zzzz, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend, Mend,
+/* DATA_BLOCK: -- 0x28A0..0x28AF -- */
+ Mend, Mend, Mend, Mend, Mend, Mend, Mend, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x28B0..0x28BF -- */
+ Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm,
+/* DATA_BLOCK: -- 0x28C0..0x28CF -- */
+ Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x28D0..0x28DF -- */
+ Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Adlm, Zzzz, Zzzz, Zzzz, Zzzz, Adlm, Adlm,
+/* DATA_BLOCK: -- 0x28E0..0x28EF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x28F0..0x28FF -- */
+ Arab, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x2900..0x290F -- */
+ Zzzz, Arab, Arab, Zzzz, Arab, Zzzz, Zzzz, Arab, Zzzz, Arab, Arab, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x2910..0x291F -- */
+ Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Zzzz, Arab, Zzzz, Arab, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2920..0x292F -- */
+ Zzzz, Zzzz, Arab, Zzzz, Zzzz, Zzzz, Zzzz, Arab, Zzzz, Arab, Zzzz, Arab, Zzzz, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x2930..0x293F -- */
+ Zzzz, Arab, Arab, Zzzz, Arab, Zzzz, Zzzz, Arab, Zzzz, Arab, Zzzz, Arab, Zzzz, Arab, Zzzz, Arab,
+/* DATA_BLOCK: -- 0x2940..0x294F -- */
+ Zzzz, Arab, Arab, Zzzz, Arab, Zzzz, Zzzz, Arab, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x2950..0x295F -- */
+ Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Zzzz, Arab, Zzzz,
+/* DATA_BLOCK: -- 0x2960..0x296F -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x2970..0x297F -- */
+ Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Arab, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2980..0x298F -- */
+ Zzzz, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Arab, Zzzz, Arab, Arab, Arab, Arab, Arab,
+/* DATA_BLOCK: -- 0x2990..0x299F -- */
+ Arab, Arab, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x29A0..0x29AF -- */
+ Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x29B0..0x29BF -- */
+ Hira, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x29C0..0x29CF -- */
+ Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x29D0..0x29DF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x29E0..0x29EF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x29F0..0x29FF -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2A00..0x2A0F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zyyy,
+/* DATA_BLOCK: -- 0x2A10..0x2A1F -- */
+ Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zyyy, Zyyy,
+/* DATA_BLOCK: -- 0x2A20..0x2A2F -- */
+ Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2A30..0x2A3F -- */
+ Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Hani, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz,
+/* DATA_BLOCK: -- 0x2A40..0x2A4F -- */
+ Zzzz, Zyyy, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz, Zzzz
+};
+
+static const SBUInt16 MainScriptIndexes[3327] = {
+/* INDEX_BLOCK: -- 0x0000..0x001F -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0020, 0x0010, 0x0020, 0x0000, 0x0000, 0x0030, 0x0030,
+ 0x0040, 0x0050, 0x0040, 0x0050, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040,
+ 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040,
+/* INDEX_BLOCK: -- 0x0020..0x003F -- */
+ 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0060,
+ 0x0000, 0x0000, 0x0070, 0x0000, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0090,
+ 0x00A0, 0x00B0, 0x00C0, 0x00B0, 0x00B0, 0x00B0, 0x00D0, 0x00B0,
+/* INDEX_BLOCK: -- 0x0040..0x005F -- */
+ 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00F0, 0x00E0, 0x00E0, 0x00E0,
+ 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x0100, 0x0110, 0x0120, 0x0110, 0x0110,
+ 0x0130, 0x0140, 0x0150, 0x0150, 0x0160, 0x0150, 0x0170, 0x0180,
+/* INDEX_BLOCK: -- 0x0060..0x007F -- */
+ 0x0190, 0x01A0, 0x01B0, 0x01B0, 0x01C0, 0x01D0, 0x01B0, 0x01E0, 0x01B0, 0x01B0, 0x01B0, 0x01B0,
+ 0x01B0, 0x01F0, 0x01B0, 0x01B0, 0x0200, 0x0210, 0x0210, 0x0210, 0x0220, 0x01B0, 0x01B0, 0x01B0,
+ 0x0230, 0x0230, 0x0230, 0x0240, 0x0250, 0x0250, 0x0250, 0x0260,
+/* INDEX_BLOCK: -- 0x0080..0x009F -- */
+ 0x0270, 0x0270, 0x0280, 0x0290, 0x02A0, 0x02B0, 0x02C0, 0x01B0, 0x02D0, 0x02E0, 0x01B0, 0x01B0,
+ 0x01B0, 0x01B0, 0x02F0, 0x01B0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0310, 0x0320, 0x0300,
+ 0x0330, 0x0340, 0x0350, 0x0360, 0x0370, 0x0380, 0x0390, 0x03A0,
+/* INDEX_BLOCK: -- 0x00A0..0x00BF -- */
+ 0x03B0, 0x03C0, 0x03D0, 0x03E0, 0x03F0, 0x0400, 0x0410, 0x0420, 0x0430, 0x0440, 0x0450, 0x0460,
+ 0x0470, 0x0480, 0x0490, 0x04A0, 0x04B0, 0x04C0, 0x04D0, 0x04E0, 0x04F0, 0x0500, 0x0510, 0x0520,
+ 0x0530, 0x0540, 0x0550, 0x0560, 0x0570, 0x0580, 0x0590, 0x05A0,
+/* INDEX_BLOCK: -- 0x00C0..0x00DF -- */
+ 0x05B0, 0x05C0, 0x05D0, 0x05E0, 0x05F0, 0x0600, 0x0610, 0x0620, 0x0630, 0x0640, 0x0650, 0x0660,
+ 0x0670, 0x0680, 0x0690, 0x06A0, 0x06B0, 0x06C0, 0x06D0, 0x06D0, 0x06E0, 0x06F0, 0x0700, 0x06D0,
+ 0x0710, 0x0720, 0x0730, 0x0740, 0x0750, 0x0760, 0x0770, 0x0780,
+/* INDEX_BLOCK: -- 0x00E0..0x00FF -- */
+ 0x0790, 0x07A0, 0x07A0, 0x07B0, 0x07A0, 0x07C0, 0x07D0, 0x07D0, 0x07E0, 0x07F0, 0x0800, 0x0810,
+ 0x0820, 0x0830, 0x07D0, 0x07D0, 0x0840, 0x0840, 0x0840, 0x0840, 0x0850, 0x0840, 0x0860, 0x0870,
+ 0x0840, 0x0850, 0x0840, 0x0880, 0x0880, 0x0890, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0100..0x011F -- */
+ 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08A0, 0x08B0, 0x08B0,
+ 0x08C0, 0x08B0, 0x08B0, 0x08D0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+ 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+/* INDEX_BLOCK: -- 0x0120..0x013F -- */
+ 0x08F0, 0x08F0, 0x08F0, 0x08F0, 0x0900, 0x0910, 0x08F0, 0x08F0, 0x0900, 0x08F0, 0x08F0, 0x0920,
+ 0x0930, 0x0940, 0x08F0, 0x08F0, 0x08F0, 0x0930, 0x08F0, 0x08F0, 0x08F0, 0x0950, 0x08F0, 0x0960,
+ 0x08F0, 0x0970, 0x0980, 0x0980, 0x0980, 0x0980, 0x0980, 0x0990,
+/* INDEX_BLOCK: -- 0x0140..0x015F -- */
+ 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0,
+ 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0,
+ 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0,
+/* INDEX_BLOCK: -- 0x0160..0x017F -- */
+ 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09A0, 0x09B0, 0x09C0, 0x09D0, 0x09D0,
+ 0x09D0, 0x09D0, 0x09E0, 0x09F0, 0x0A00, 0x0A10, 0x0A20, 0x0A30, 0x0A40, 0x0A50, 0x0A60, 0x0A70,
+ 0x0A80, 0x0A80, 0x0A80, 0x0A80, 0x0A80, 0x0A90, 0x0AA0, 0x0AA0,
+/* INDEX_BLOCK: -- 0x0180..0x019F -- */
+ 0x0AB0, 0x0AC0, 0x0AD0, 0x0AD0, 0x0AD0, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AD0, 0x0AD0, 0x0AF0, 0x09A0,
+ 0x09A0, 0x09A0, 0x09A0, 0x0B00, 0x0B10, 0x0B20, 0x0B30, 0x0B30, 0x0B40, 0x0B50, 0x0B60, 0x0B70,
+ 0x0B80, 0x0B80, 0x0B90, 0x0B80, 0x0BA0, 0x0BB0, 0x0A80, 0x0A80,
+/* INDEX_BLOCK: -- 0x01A0..0x01BF -- */
+ 0x0BC0, 0x0BD0, 0x0BE0, 0x0BE0, 0x0BE0, 0x0BF0, 0x0BE0, 0x0C00, 0x0C10, 0x0C10, 0x0C20, 0x0080,
+ 0x0C30, 0x07D0, 0x07D0, 0x07D0, 0x0C40, 0x0C40, 0x0C40, 0x0C40, 0x0C50, 0x0C40, 0x0C40, 0x0C60,
+ 0x0C70, 0x0C70, 0x0C70, 0x0C70, 0x0C80, 0x0C80, 0x0C80, 0x0C90,
+/* INDEX_BLOCK: -- 0x01C0..0x01DF -- */
+ 0x0CA0, 0x0CA0, 0x0CA0, 0x0CB0, 0x0CC0, 0x0CD0, 0x0CD0, 0x0CD0, 0x0CE0, 0x08B0, 0x08B0, 0x0CF0,
+ 0x0D00, 0x0D10, 0x0D20, 0x0D30, 0x0040, 0x0040, 0x0D40, 0x0040, 0x0040, 0x0D50, 0x0D60, 0x0D70,
+ 0x0040, 0x0040, 0x0040, 0x0D80, 0x0080, 0x0080, 0x0080, 0x0080,
+/* INDEX_BLOCK: -- 0x01E0..0x01FF -- */
+ 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040,
+ 0x0040, 0x0040, 0x0040, 0x0040, 0x00B0, 0x0D90, 0x00B0, 0x00B0, 0x0D90, 0x0DA0, 0x00B0, 0x0DB0,
+ 0x00B0, 0x00B0, 0x00B0, 0x0DC0, 0x0DC0, 0x0DD0, 0x00B0, 0x0DE0,
+/* INDEX_BLOCK: -- 0x0200..0x021F -- */
+ 0x0DF0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E00, 0x0E10, 0x0E20, 0x0E30, 0x0000, 0x0000,
+ 0x0E40, 0x0080, 0x0080, 0x0E50, 0x0000, 0x0000, 0x0E60, 0x0E70, 0x0E80, 0x0000, 0x0040, 0x0040,
+ 0x0E90, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0220..0x023F -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0240..0x025F -- */
+ 0x0000, 0x0000, 0x0EA0, 0x07D0, 0x0EB0, 0x07D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0260..0x027F -- */
+ 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0,
+ 0x0EC0, 0x0EC0, 0x0EC0, 0x0EC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0280..0x029F -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ED0,
+ 0x0000, 0x0EE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x02A0..0x02BF -- */
+ 0x0EF0, 0x0EF0, 0x0EF0, 0x0EF0, 0x0EF0, 0x0EF0, 0x0040, 0x0040, 0x0F00, 0x0F00, 0x0F00, 0x0F00,
+ 0x0F00, 0x0F00, 0x0F00, 0x0F10, 0x08B0, 0x08B0, 0x08C0, 0x0F20, 0x0F20, 0x0F20, 0x0F30, 0x0F40,
+ 0x08F0, 0x0F50, 0x0F60, 0x0F60, 0x0F60, 0x0F60, 0x00E0, 0x00E0,
+/* INDEX_BLOCK: -- 0x02C0..0x02DF -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0F70, 0x07D0, 0x07D0, 0x0F80, 0x0F90, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0FA0, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0FB0, 0x07D0, 0x0000,
+/* INDEX_BLOCK: -- 0x02E0..0x02FF -- */
+ 0x0FC0, 0x0000, 0x0FD0, 0x0FE0, 0x0FF0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1010, 0x1020, 0x1030,
+ 0x1030, 0x1030, 0x1030, 0x1040, 0x1050, 0x1060, 0x1060, 0x1070, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+ 0x1080, 0x0000, 0x1060, 0x1060, 0x0000, 0x0000, 0x1090, 0x1030,
+/* INDEX_BLOCK: -- 0x0300..0x031F -- */
+ 0x08E0, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x08E0, 0x10A0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x1030, 0x1030, 0x10B0, 0x1030, 0x1030, 0x1030, 0x1030, 0x1030, 0x10C0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0320..0x033F -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0340..0x035F -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0360..0x037F -- */
+ 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0,
+ 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0,
+ 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0,
+/* INDEX_BLOCK: -- 0x0380..0x039F -- */
+ 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10D0, 0x10E0, 0x10D0, 0x10D0, 0x10D0,
+ 0x10F0, 0x1100, 0x1100, 0x1100, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110,
+ 0x1110, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110, 0x1110,
+/* INDEX_BLOCK: -- 0x03A0..0x03BF -- */
+ 0x1110, 0x1110, 0x1120, 0x07D0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x00E0, 0x1130, 0x1130,
+ 0x1130, 0x1130, 0x1130, 0x1140, 0x0000, 0x0000, 0x1150, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040,
+ 0x1160, 0x0040, 0x0040, 0x0040, 0x1170, 0x1180, 0x07D0, 0x1190,
+/* INDEX_BLOCK: -- 0x03C0..0x03DF -- */
+ 0x11A0, 0x11A0, 0x11B0, 0x11C0, 0x11D0, 0x11D0, 0x11D0, 0x11E0, 0x11F0, 0x11F0, 0x11F0, 0x11F0,
+ 0x1200, 0x1210, 0x0300, 0x0300, 0x1220, 0x1220, 0x1230, 0x1240, 0x1240, 0x1250, 0x08E0, 0x1260,
+ 0x1270, 0x1270, 0x1270, 0x1270, 0x1280, 0x1290, 0x08A0, 0x12A0,
+/* INDEX_BLOCK: -- 0x03E0..0x03FF -- */
+ 0x12B0, 0x12B0, 0x12B0, 0x12C0, 0x12D0, 0x12E0, 0x08A0, 0x08A0, 0x12F0, 0x12F0, 0x12F0, 0x12F0,
+ 0x1300, 0x1310, 0x1320, 0x1330, 0x1340, 0x1350, 0x0F60, 0x0040, 0x0040, 0x1360, 0x1370, 0x0980,
+ 0x0980, 0x0980, 0x0980, 0x0980, 0x1320, 0x1320, 0x1380, 0x1390,
+/* INDEX_BLOCK: -- 0x0400..0x041F -- */
+ 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+ 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+ 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+/* INDEX_BLOCK: -- 0x0420..0x043F -- */
+ 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+ 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0, 0x08E0,
+ 0x08E0, 0x08E0, 0x13A0, 0x08E0, 0x13B0, 0x08E0, 0x08E0, 0x13C0,
+/* INDEX_BLOCK: -- 0x0440..0x045F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0460..0x047F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0480..0x049F -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x13D0, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x13E0, 0x07D0, 0x07D0, 0x13F0, 0x1400, 0x0150, 0x1410, 0x1420, 0x01B0, 0x01B0, 0x01B0,
+ 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x1430, 0x1440, 0x01B0, 0x01B0,
+/* INDEX_BLOCK: -- 0x04A0..0x04BF -- */
+ 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0,
+ 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0, 0x1450, 0x01B0, 0x01B0, 0x01B0, 0x01B0,
+ 0x01B0, 0x1460, 0x01B0, 0x01B0, 0x1470, 0x07D0, 0x07D0, 0x01B0,
+/* INDEX_BLOCK: -- 0x04C0..0x04DF -- */
+ 0x0080, 0x11C0, 0x1480, 0x0000, 0x0000, 0x1490, 0x14A0, 0x14B0, 0x01B0, 0x01B0, 0x01B0, 0x01B0,
+ 0x01B0, 0x01B0, 0x01B0, 0x14C0, 0x14D0, 0x0000, 0x0010, 0x0020, 0x0010, 0x0020, 0x14E0, 0x1020,
+ 0x1030, 0x14F0, 0x08E0, 0x1080, 0x1500, 0x1510, 0x1520, 0x1530,
+/* INDEX_BLOCK: -- 0x04E0..0x04FF -- */
+ 0x1540, 0x1550, 0x1560, 0x1570, 0x1580, 0x1580, 0x07D0, 0x07D0, 0x1550, 0x1550, 0x1550, 0x1550,
+ 0x1550, 0x1550, 0x1550, 0x1590, 0x15A0, 0x0000, 0x0000, 0x15B0, 0x00B0, 0x00B0, 0x00B0, 0x00B0,
+ 0x15C0, 0x15D0, 0x15E0, 0x07D0, 0x07D0, 0x0000, 0x0000, 0x15F0,
+/* INDEX_BLOCK: -- 0x0500..0x051F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x1600, 0x1610, 0x1620, 0x1620,
+ 0x1620, 0x1630, 0x1640, 0x1650, 0x1660, 0x1660, 0x1670, 0x1680, 0x1690, 0x16A0, 0x16A0, 0x16B0,
+ 0x16C0, 0x16D0, 0x16E0, 0x16E0, 0x16F0, 0x1700, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0520..0x053F -- */
+ 0x1710, 0x1710, 0x1710, 0x1710, 0x1710, 0x1720, 0x1720, 0x1720, 0x1730, 0x1740, 0x1750, 0x1760,
+ 0x1760, 0x1770, 0x1760, 0x1780, 0x1790, 0x1790, 0x17A0, 0x17B0, 0x17B0, 0x17B0, 0x17C0, 0x17D0,
+ 0x17D0, 0x17E0, 0x17F0, 0x1800, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0540..0x055F -- */
+ 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810,
+ 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1810, 0x1820, 0x1810, 0x1830, 0x1840, 0x07D0,
+ 0x1850, 0x0040, 0x0040, 0x1860, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0560..0x057F -- */
+ 0x1870, 0x1880, 0x1880, 0x1890, 0x18A0, 0x18B0, 0x18C0, 0x18C0, 0x18D0, 0x18E0, 0x18F0, 0x07D0,
+ 0x07D0, 0x07D0, 0x1900, 0x1910, 0x1920, 0x1930, 0x1940, 0x1950, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x1960, 0x1960, 0x1970, 0x1980, 0x1970, 0x1990, 0x1970, 0x1970,
+/* INDEX_BLOCK: -- 0x0580..0x059F -- */
+ 0x19A0, 0x19B0, 0x19C0, 0x19D0, 0x19E0, 0x19E0, 0x19F0, 0x19F0, 0x1A00, 0x1A00, 0x07D0, 0x07D0,
+ 0x1A10, 0x1A10, 0x1A20, 0x1A30, 0x1A40, 0x1A40, 0x1A40, 0x1A50, 0x1A60, 0x1A70, 0x1A80, 0x1A90,
+ 0x1AA0, 0x1AB0, 0x1AC0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x05A0..0x05BF -- */
+ 0x1AD0, 0x1AD0, 0x1AD0, 0x1AD0, 0x1AE0, 0x07D0, 0x07D0, 0x07D0, 0x1AF0, 0x1AF0, 0x1AF0, 0x1B00,
+ 0x1AF0, 0x1AF0, 0x1AF0, 0x1B10, 0x1B20, 0x1B20, 0x1B30, 0x1B40, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x05C0..0x05DF -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x01B0, 0x02D0, 0x1B50, 0x1B50, 0x1B60, 0x1B70,
+ 0x07D0, 0x07D0, 0x07D0, 0x1B80, 0x1B90, 0x1B90, 0x1BA0, 0x1BB0, 0x1BB0, 0x1BC0, 0x07D0, 0x1BD0,
+ 0x1BE0, 0x07D0, 0x07D0, 0x1BF0, 0x1C00, 0x07D0, 0x1C10, 0x1C20,
+/* INDEX_BLOCK: -- 0x05E0..0x05FF -- */
+ 0x1C30, 0x1C30, 0x1C30, 0x1C30, 0x1C40, 0x1C50, 0x1C30, 0x1C60, 0x1C70, 0x1C70, 0x1C70, 0x1C70,
+ 0x1C80, 0x1C90, 0x1CA0, 0x1CB0, 0x1CC0, 0x1CC0, 0x1CC0, 0x1CD0, 0x1CE0, 0x1CF0, 0x1CF0, 0x1D00,
+ 0x1D10, 0x1D10, 0x1D10, 0x1D10, 0x1D10, 0x1D10, 0x1D20, 0x1D30,
+/* INDEX_BLOCK: -- 0x0600..0x061F -- */
+ 0x1D40, 0x1D50, 0x1D40, 0x1D40, 0x1D60, 0x07D0, 0x07D0, 0x07D0, 0x1D70, 0x1D80, 0x1D90, 0x1DA0,
+ 0x1DA0, 0x1DA0, 0x1DB0, 0x1DC0, 0x1DD0, 0x1DE0, 0x1DF0, 0x1E00, 0x1E10, 0x1E20, 0x1E30, 0x1E40,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0620..0x063F -- */
+ 0x1E50, 0x1E50, 0x1E50, 0x1E50, 0x1E50, 0x1E60, 0x1E70, 0x07D0, 0x1E80, 0x1E80, 0x1E80, 0x1E80,
+ 0x1E90, 0x1EA0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x1EB0, 0x1EB0, 0x1EB0, 0x1EC0, 0x1EB0, 0x1ED0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0640..0x065F -- */
+ 0x1EE0, 0x1EE0, 0x1EE0, 0x1EE0, 0x1EF0, 0x1F00, 0x1F10, 0x07D0, 0x1F20, 0x1F20, 0x1F20, 0x1F30,
+ 0x1F30, 0x07D0, 0x07D0, 0x07D0, 0x1F40, 0x1F50, 0x1F60, 0x1F40, 0x1F70, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0660..0x067F -- */
+ 0x1F80, 0x1F80, 0x1F80, 0x1F90, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x1FA0, 0x1FA0,
+ 0x1FA0, 0x1FA0, 0x1FA0, 0x1FB0, 0x1FC0, 0x1FD0, 0x1FE0, 0x1FF0, 0x2000, 0x2010, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x2020, 0x2030, 0x2030, 0x2020, 0x2040, 0x07D0,
+/* INDEX_BLOCK: -- 0x0680..0x069F -- */
+ 0x2050, 0x2050, 0x2050, 0x2050, 0x2060, 0x2070, 0x2070, 0x2070, 0x2070, 0x2070, 0x2080, 0x09A0,
+ 0x2090, 0x2090, 0x2090, 0x20A0, 0x20B0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x06A0..0x06BF -- */
+ 0x20C0, 0x20D0, 0x20D0, 0x20E0, 0x20F0, 0x20D0, 0x2100, 0x2110, 0x2110, 0x2120, 0x2130, 0x2140,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x2150, 0x2160, 0x2160, 0x2170, 0x2180, 0x2190, 0x21A0, 0x21B0,
+ 0x21C0, 0x21D0, 0x21E0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x06C0..0x06DF -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x21F0, 0x2200, 0x2210, 0x2220, 0x2210, 0x2230, 0x2210, 0x2240, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x2250, 0x2260, 0x2260, 0x2260, 0x2270,
+/* INDEX_BLOCK: -- 0x06E0..0x06FF -- */
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280,
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280,
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280,
+/* INDEX_BLOCK: -- 0x0700..0x071F -- */
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280,
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280,
+ 0x2280, 0x2290, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0720..0x073F -- */
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x22A0, 0x22B0, 0x2280, 0x2280, 0x2280, 0x2280,
+ 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x2280, 0x22C0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0740..0x075F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x22D0, 0x22D0, 0x22D0, 0x22D0, 0x22D0, 0x22D0, 0x22E0,
+/* INDEX_BLOCK: -- 0x0760..0x077F -- */
+ 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0,
+ 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0,
+ 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0,
+/* INDEX_BLOCK: -- 0x0780..0x079F -- */
+ 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x22F0, 0x2300, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x07A0..0x07BF -- */
+ 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310,
+ 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310,
+ 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310, 0x2310,
+/* INDEX_BLOCK: -- 0x07C0..0x07DF -- */
+ 0x2310, 0x2310, 0x2310, 0x2310, 0x2320, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x07E0..0x07FF -- */
+ 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130,
+ 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130,
+ 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130, 0x1130,
+/* INDEX_BLOCK: -- 0x0800..0x081F -- */
+ 0x1130, 0x1130, 0x1130, 0x2330, 0x2340, 0x2350, 0x2360, 0x2370, 0x2370, 0x2370, 0x2370, 0x2380,
+ 0x2390, 0x23A0, 0x23B0, 0x23C0, 0x23D0, 0x23D0, 0x23D0, 0x23D0, 0x23E0, 0x23F0, 0x2400, 0x2410,
+ 0x23D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0820..0x083F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x2420, 0x2420, 0x2420, 0x2420, 0x2420, 0x2430, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x2440, 0x2440, 0x2440, 0x2440, 0x2450, 0x2440, 0x2440, 0x2440,
+ 0x2460, 0x2440, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x2470, 0x2480,
+/* INDEX_BLOCK: -- 0x0840..0x085F -- */
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490,
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490,
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490,
+/* INDEX_BLOCK: -- 0x0860..0x087F -- */
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490,
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490,
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x24A0,
+/* INDEX_BLOCK: -- 0x0880..0x089F -- */
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490, 0x2490,
+ 0x2490, 0x2490, 0x2490, 0x2490, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0,
+ 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0,
+/* INDEX_BLOCK: -- 0x08A0..0x08BF -- */
+ 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0, 0x24B0,
+ 0x24B0, 0x24C0, 0x07D0, 0x07D0, 0x24D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x08C0..0x08DF -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x24E0,
+/* INDEX_BLOCK: -- 0x08E0..0x08FF -- */
+ 0x24F0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
+ 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x2500, 0x2510, 0x07D0, 0x2520, 0x2530, 0x2540,
+ 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540,
+/* INDEX_BLOCK: -- 0x0900..0x091F -- */
+ 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540, 0x2540,
+ 0x2540, 0x2540, 0x2540, 0x2550, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0920..0x093F -- */
+ 0x2560, 0x2560, 0x2560, 0x2560, 0x2560, 0x2560, 0x2570, 0x2580, 0x2590, 0x25A0, 0x25B0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0940..0x095F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x0080, 0x0080, 0x25C0, 0x0080, 0x25D0, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x25B0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0960..0x097F -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x25E0, 0x0000, 0x0000, 0x25F0, 0x0000, 0x0000, 0x0000, 0x2600, 0x2610,
+ 0x2620, 0x0000, 0x2630, 0x0000, 0x0000, 0x0000, 0x0EB0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0980..0x099F -- */
+ 0x00B0, 0x00B0, 0x00B0, 0x00B0, 0x2640, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x0000, 0x25B0, 0x0000, 0x25B0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0EA0, 0x0000, 0x2650,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x09A0..0x09BF -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E00, 0x0000, 0x0000, 0x0000, 0x2660, 0x2670, 0x2680,
+ 0x2690, 0x0000, 0x0000, 0x0000, 0x26A0, 0x26B0, 0x0000, 0x26C0, 0x26D0, 0x26E0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x09C0..0x09DF -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x26F0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2700, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x09E0..0x09FF -- */
+ 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710,
+ 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710,
+ 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710,
+/* INDEX_BLOCK: -- 0x0A00..0x0A1F -- */
+ 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2710, 0x2720, 0x2730, 0x2740, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0A20..0x0A3F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x0040, 0x2750, 0x2760, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0A40..0x0A5F -- */
+ 0x2770, 0x2780, 0x2790, 0x00E0, 0x00E0, 0x00E0, 0x27A0, 0x07D0, 0x27B0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x27C0, 0x27C0, 0x27D0, 0x27E0, 0x27F0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0A60..0x0A7F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x2800, 0x2810, 0x07D0,
+ 0x2820, 0x2820, 0x2820, 0x2830, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0A80..0x0A9F -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x2840, 0x2840, 0x2850, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0AA0..0x0ABF -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x2860, 0x2870,
+/* INDEX_BLOCK: -- 0x0AC0..0x0ADF -- */
+ 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880, 0x2880,
+ 0x2890, 0x28A0, 0x07D0, 0x07D0, 0x28B0, 0x28B0, 0x28B0, 0x28B0, 0x28C0, 0x28D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0AE0..0x0AFF -- */
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x14D0, 0x0000, 0x0000, 0x0000, 0x28E0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x14D0, 0x0000, 0x0000, 0x0F70, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0B00..0x0B1F -- */
+ 0x28F0, 0x01B0, 0x2900, 0x2910, 0x2920, 0x2930, 0x2940, 0x2950, 0x2960, 0x2970, 0x2980, 0x2970,
+ 0x07D0, 0x07D0, 0x07D0, 0x2990, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0B20..0x0B3F -- */
+ 0x0000, 0x0000, 0x1650, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25B0, 0x0E20, 0x14D0,
+ 0x14D0, 0x14D0, 0x0000, 0x25E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0F70, 0x07D0, 0x07D0, 0x07D0, 0x29A0, 0x0000,
+/* INDEX_BLOCK: -- 0x0B40..0x0B5F -- */
+ 0x29B0, 0x0000, 0x0000, 0x1650, 0x2650, 0x29C0, 0x25E0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0B60..0x0B7F -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x29D0, 0x15D0, 0x15D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x29E0,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x11C0, 0x1650, 0x0E40,
+/* INDEX_BLOCK: -- 0x0B80..0x0B9F -- */
+ 0x1650, 0x0000, 0x0000, 0x0000, 0x29F0, 0x11C0, 0x0000, 0x0000, 0x29F0, 0x0000, 0x0F70, 0x29C0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+/* INDEX_BLOCK: -- 0x0BA0..0x0BBF -- */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25B0, 0x0F70, 0x15D0, 0x2650, 0x0000, 0x0000, 0x2A00,
+ 0x2A10, 0x1650, 0x2650, 0x2650, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x1490, 0x0000, 0x0000, 0x0EB0, 0x07D0, 0x07D0, 0x11C0,
+/* INDEX_BLOCK: -- 0x0BC0..0x0BDF -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x07D0, 0x07D0, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0BE0..0x0BFF -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x13E0, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0C00..0x0C1F -- */
+ 0x0F80, 0x13D0, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0C20..0x0C3F -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x2480, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0C40..0x0C5F -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x2A20, 0x0F80,
+/* INDEX_BLOCK: -- 0x0C60..0x0C7F -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x13D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0C80..0x0C9F -- */
+ 0x0F80, 0x13D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0CA0..0x0CBF -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x2A30, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+/* INDEX_BLOCK: -- 0x0CC0..0x0CDF -- */
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80,
+ 0x0F80, 0x0F80, 0x0F80, 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+/* INDEX_BLOCK: -- 0x0CE0..0x0CFE -- */
+ 0x2A40, 0x07D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07D0, 0x07D0, 0x07D0, 0x07D0,
+ 0x07D0, 0x07D0, 0x07D0, 0x07D0, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080
+};
+
+static const SBUInt16 BranchScriptIndexes[1793] = {
+ 0x0000, 0x0020, 0x0040, 0x0060, 0x0080, 0x00A0, 0x00C0, 0x00E0, 0x0100, 0x0120, 0x0140, 0x0160,
+ 0x0180, 0x01A0, 0x01C0, 0x01E0, 0x0200, 0x0220, 0x0240, 0x0220, 0x0260, 0x0280, 0x02A0, 0x02C0,
+ 0x02E0, 0x0300, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0340, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0360, 0x0360, 0x0380, 0x03A0,
+ 0x03C0, 0x03E0, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
+ 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0420,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0460, 0x0480, 0x04A0, 0x04C0, 0x04E0, 0x0500, 0x0520, 0x0540,
+ 0x0560, 0x0580, 0x05A0, 0x05C0, 0x05E0, 0x0600, 0x0620, 0x0640, 0x0660, 0x0680, 0x06A0, 0x06C0,
+ 0x06E0, 0x0700, 0x0720, 0x0440, 0x0440, 0x0440, 0x0440, 0x0740, 0x0760, 0x0760, 0x0780, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x07A0, 0x07C0, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x07E0, 0x0800, 0x0440, 0x0820, 0x0840, 0x0840, 0x0840, 0x0840, 0x0840, 0x0840, 0x0840, 0x0840,
+ 0x0840, 0x0840, 0x0840, 0x0860, 0x0840, 0x0880, 0x08A0, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x08C0,
+ 0x08E0, 0x0900, 0x0440, 0x0440, 0x0440, 0x0440, 0x0920, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0940, 0x0960, 0x0980, 0x09A0, 0x09C0, 0x09E0, 0x0A00, 0x0440, 0x0A20,
+ 0x0A40, 0x0A60, 0x0A80, 0x0AA0, 0x0AC0, 0x0440, 0x0AE0, 0x0B00, 0x0B20, 0x0B40, 0x0220, 0x0B60,
+ 0x0B80, 0x0BA0, 0x0440, 0x0440, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0BC0, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0BE0,
+ 0x0C00, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0C20,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320,
+ 0x0320, 0x0C40, 0x0320, 0x0C60, 0x0440, 0x0440, 0x0440, 0x0440, 0x0320, 0x0C80, 0x0440, 0x0440,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0CA0, 0x0320, 0x0320,
+ 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0CC0, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440, 0x0440,
+ 0x0440, 0x0440, 0x0440, 0x0440, 0x0CE0
+};
+
+SB_INTERNAL SBScript LookupScript(SBCodepoint codepoint)
+{
+ if (codepoint <= 0x0E01EF) {
+ return PrimaryScriptData[
+ MainScriptIndexes[
+ BranchScriptIndexes[
+ codepoint / 0x0200
+ ] + (codepoint % 0x0200) / 0x0010
+ ] + codepoint % 0x0010
+ ];
+ }
+
+ return Zzzz;
+}
+
+#undef Adlm
+#undef Aghb
+#undef Ahom
+#undef Arab
+#undef Armi
+#undef Armn
+#undef Avst
+#undef Bali
+#undef Bamu
+#undef Bass
+#undef Batk
+#undef Beng
+#undef Bhks
+#undef Bopo
+#undef Brah
+#undef Brai
+#undef Bugi
+#undef Buhd
+#undef Cakm
+#undef Cans
+#undef Cari
+#undef Cham
+#undef Cher
+#undef Chrs
+#undef Copt
+#undef Cpmn
+#undef Cprt
+#undef Cyrl
+#undef Deva
+#undef Diak
+#undef Dogr
+#undef Dsrt
+#undef Dupl
+#undef Egyp
+#undef Elba
+#undef Elym
+#undef Ethi
+#undef Geor
+#undef Glag
+#undef Gong
+#undef Gonm
+#undef Goth
+#undef Gran
+#undef Grek
+#undef Gujr
+#undef Guru
+#undef Hang
+#undef Hani
+#undef Hano
+#undef Hatr
+#undef Hebr
+#undef Hira
+#undef Hluw
+#undef Hmng
+#undef Hmnp
+#undef Hung
+#undef Ital
+#undef Java
+#undef Kali
+#undef Kana
+#undef Kawi
+#undef Khar
+#undef Khmr
+#undef Khoj
+#undef Kits
+#undef Knda
+#undef Kthi
+#undef Lana
+#undef Laoo
+#undef Latn
+#undef Lepc
+#undef Limb
+#undef Lina
+#undef Linb
+#undef Lisu
+#undef Lyci
+#undef Lydi
+#undef Mahj
+#undef Maka
+#undef Mand
+#undef Mani
+#undef Marc
+#undef Medf
+#undef Mend
+#undef Merc
+#undef Mero
+#undef Mlym
+#undef Modi
+#undef Mong
+#undef Mroo
+#undef Mtei
+#undef Mult
+#undef Mymr
+#undef Nagm
+#undef Nand
+#undef Narb
+#undef Nbat
+#undef Newa
+#undef Nkoo
+#undef Nshu
+#undef Ogam
+#undef Olck
+#undef Orkh
+#undef Orya
+#undef Osge
+#undef Osma
+#undef Ougr
+#undef Palm
+#undef Pauc
+#undef Perm
+#undef Phag
+#undef Phli
+#undef Phlp
+#undef Phnx
+#undef Plrd
+#undef Prti
+#undef Rjng
+#undef Rohg
+#undef Runr
+#undef Samr
+#undef Sarb
+#undef Saur
+#undef Sgnw
+#undef Shaw
+#undef Shrd
+#undef Sidd
+#undef Sind
+#undef Sinh
+#undef Sogd
+#undef Sogo
+#undef Sora
+#undef Soyo
+#undef Sund
+#undef Sylo
+#undef Syrc
+#undef Tagb
+#undef Takr
+#undef Tale
+#undef Talu
+#undef Taml
+#undef Tang
+#undef Tavt
+#undef Telu
+#undef Tfng
+#undef Tglg
+#undef Thaa
+#undef Thai
+#undef Tibt
+#undef Tirh
+#undef Tnsa
+#undef Toto
+#undef Ugar
+#undef Vaii
+#undef Vith
+#undef Wara
+#undef Wcho
+#undef Xpeo
+#undef Xsux
+#undef Yezi
+#undef Yiii
+#undef Zanb
+#undef Zinh
+#undef Zyyy
+#undef Zzzz
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h
new file mode 100644
index 0000000000..da92eb5199
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptLookup.h
@@ -0,0 +1,16 @@
+/*
+ * Automatically generated by SheenBidiGenerator tool.
+ * DO NOT EDIT!!
+ */
+
+#ifndef _SB_INTERNAL_SCRIPT_LOOKUP_H
+#define _SB_INTERNAL_SCRIPT_LOOKUP_H
+
+#include
+#include
+
+#include "SBBase.h"
+
+SB_INTERNAL SBScript LookupScript(SBCodepoint codepoint);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c
new file mode 100644
index 0000000000..a525a3de70
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2018-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "ScriptStack.h"
+
+SB_INTERNAL void ScriptStackReset(ScriptStackRef stack)
+{
+ stack->top = -1;
+ stack->count = 0;
+ stack->open = 0;
+}
+
+SB_INTERNAL void ScriptStackPush(ScriptStackRef stack, SBScript script, SBCodepoint mirror)
+{
+ stack->count = SBNumberLimitIncrement(stack->count, _SBScriptStackCapacity);
+ stack->open = SBNumberLimitIncrement(stack->open, _SBScriptStackCapacity);
+
+ stack->top = SBNumberRingIncrement(stack->top, _SBScriptStackCapacity);
+ stack->_elements[stack->top].script = script;
+ stack->_elements[stack->top].mirror = mirror;
+}
+
+SB_INTERNAL void ScriptStackPop(ScriptStackRef stack)
+{
+ /* There must be at least one entry in the stack. */
+ SBAssert(stack->count > 0);
+
+ stack->count -= 1;
+ stack->open = SBNumberLimitDecrement(stack->open, 0);
+ stack->top = SBNumberRingDecrement(stack->top, _SBScriptStackCapacity);
+
+ if (ScriptStackIsEmpty(stack)) {
+ stack->top = -1;
+ }
+}
+
+SB_INTERNAL void ScriptStackLeavePairs(ScriptStackRef stack)
+{
+ stack->open = 0;
+}
+
+SB_INTERNAL void ScriptStackSealPairs(ScriptStackRef stack, SBScript script)
+{
+ SBInteger index = SBNumberRingSubtract(stack->top, (SBInteger)stack->open, _SBScriptStackCapacity);
+
+ while (stack->open) {
+ index = SBNumberRingIncrement(index, _SBScriptStackCapacity);
+ stack->_elements[index].script = script;
+ stack->open -= 1;
+ }
+}
+
+SB_INTERNAL SBBoolean ScriptStackIsEmpty(ScriptStackRef stack)
+{
+ return (stack->count == 0);
+}
+
+SB_INTERNAL SBScript ScriptStackGetScript(ScriptStackRef stack)
+{
+ return stack->_elements[stack->top].script;
+}
+
+SB_INTERNAL SBCodepoint ScriptStackGetMirror(ScriptStackRef stack)
+{
+ return stack->_elements[stack->top].mirror;
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h
new file mode 100644
index 0000000000..fee54c95dd
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/ScriptStack.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2018-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_SCRIPT_STACK_H
+#define _SB_INTERNAL_SCRIPT_STACK_H
+
+#include
+#include
+
+#define _SBScriptStackCapacity 63
+
+typedef struct _SBScriptStackElement {
+ SBScript script;
+ SBCodepoint mirror;
+} _SBScriptStackElement;
+
+typedef struct _SBScriptStack {
+ _SBScriptStackElement _elements[_SBScriptStackCapacity];
+ SBInteger top;
+ SBUInteger count;
+ SBUInteger open;
+} ScriptStack, *ScriptStackRef;
+
+SB_INTERNAL void ScriptStackReset(ScriptStackRef stack);
+
+SB_INTERNAL void ScriptStackPush(ScriptStackRef stack, SBScript script, SBCodepoint mirror);
+SB_INTERNAL void ScriptStackPop(ScriptStackRef stack);
+
+SB_INTERNAL void ScriptStackLeavePairs(ScriptStackRef stack);
+SB_INTERNAL void ScriptStackSealPairs(ScriptStackRef stack, SBScript script);
+
+SB_INTERNAL SBBoolean ScriptStackIsEmpty(ScriptStackRef stack);
+SB_INTERNAL SBScript ScriptStackGetScript(ScriptStackRef stack);
+SB_INTERNAL SBCodepoint ScriptStackGetMirror(ScriptStackRef stack);
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c b/modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c
new file mode 100644
index 0000000000..4a4917607c
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/SheenBidi.c
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2014-2019 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+
+#ifdef SB_CONFIG_UNITY
+
+#include "BidiChain.c"
+#include "BidiTypeLookup.c"
+#include "BracketQueue.c"
+#include "GeneralCategoryLookup.c"
+#include "IsolatingRun.c"
+#include "LevelRun.c"
+#include "PairingLookup.c"
+#include "RunQueue.c"
+#include "SBAlgorithm.c"
+#include "SBBase.c"
+#include "SBCodepointSequence.c"
+#include "SBLine.c"
+#include "SBLog.c"
+#include "SBMirrorLocator.c"
+#include "SBParagraph.c"
+#include "SBScriptLocator.c"
+#include "ScriptLookup.c"
+#include "ScriptStack.c"
+#include "StatusStack.c"
+
+#endif
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c b/modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c
new file mode 100644
index 0000000000..ec7d71ab3e
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+#include "SBAssert.h"
+#include "SBBase.h"
+#include "StatusStack.h"
+
+static SBBoolean StatusStackInsertElement(StatusStackRef stack)
+{
+ if (stack->_peekTop != _StatusStackList_MaxIndex) {
+ stack->_peekTop += 1;
+ } else {
+ _StatusStackListRef previousList = stack->_peekList;
+ _StatusStackListRef peekList = previousList->next;
+
+ if (!peekList) {
+ peekList = malloc(sizeof(_StatusStackList));
+ if (!peekList) {
+ return SBFalse;
+ }
+
+ peekList->previous = previousList;
+ peekList->next = NULL;
+
+ previousList->next = peekList;
+ }
+
+ stack->_peekList = peekList;
+ stack->_peekTop = 0;
+ }
+ stack->count += 1;
+
+ return SBTrue;
+}
+
+SB_INTERNAL void StatusStackInitialize(StatusStackRef stack)
+{
+ stack->_firstList.previous = NULL;
+ stack->_firstList.next = NULL;
+
+ StatusStackSetEmpty(stack);
+}
+
+SB_INTERNAL SBBoolean StatusStackPush(StatusStackRef stack,
+ SBLevel embeddingLevel, SBBidiType overrideStatus, SBBoolean isolateStatus)
+{
+ /* The stack can hold upto 127 elements. */
+ SBAssert(stack->count <= 127);
+
+ if (StatusStackInsertElement(stack)) {
+ _StatusStackElementRef element = &stack->_peekList->elements[stack->_peekTop];
+ element->embeddingLevel = embeddingLevel;
+ element->overrideStatus = overrideStatus;
+ element->isolateStatus = isolateStatus;
+
+ return SBTrue;
+ }
+
+ return SBFalse;
+}
+
+SB_INTERNAL void StatusStackPop(StatusStackRef stack)
+{
+ /* The stack should not be empty. */
+ SBAssert(stack->count != 0);
+
+ if (stack->_peekTop != 0) {
+ stack->_peekTop -= 1;
+ } else {
+ stack->_peekList = stack->_peekList->previous;
+ stack->_peekTop = _StatusStackList_MaxIndex;
+ }
+ stack->count -= 1;
+}
+
+SB_INTERNAL void StatusStackSetEmpty(StatusStackRef stack)
+{
+ stack->_peekList = &stack->_firstList;
+ stack->_peekTop = 0;
+ stack->count = 0;
+}
+
+SB_INTERNAL SBLevel StatusStackGetEmbeddingLevel(StatusStackRef stack)
+{
+ return stack->_peekList->elements[stack->_peekTop].embeddingLevel;
+}
+
+SB_INTERNAL SBBidiType StatusStackGetOverrideStatus(StatusStackRef stack)
+{
+ return stack->_peekList->elements[stack->_peekTop].overrideStatus;
+}
+
+SB_INTERNAL SBBoolean StatusStackGetIsolateStatus(StatusStackRef stack)
+{
+ return stack->_peekList->elements[stack->_peekTop].isolateStatus;
+}
+
+SB_INTERNAL void StatusStackFinalize(StatusStackRef stack)
+{
+ _StatusStackListRef list = stack->_firstList.next;
+
+ while (list) {
+ _StatusStackListRef next = list->next;
+ free(list);
+ list = next;
+ };
+}
diff --git a/modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h b/modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h
new file mode 100644
index 0000000000..f4d8b0cf03
--- /dev/null
+++ b/modules/juce_graphics/unicode/sheenbidi/Source/StatusStack.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2014-2022 Muhammad Tayyab Akram
+ *
+ * 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.
+ */
+
+#ifndef _SB_INTERNAL_STATUS_STACK_H
+#define _SB_INTERNAL_STATUS_STACK_H
+
+#include
+#include "SBBase.h"
+
+#define _StatusStackList_Length 16
+#define _StatusStackList_MaxIndex (_StatusStackList_Length - 1)
+
+typedef struct _StatusStackElement {
+ SBBoolean isolateStatus;
+ SBBidiType overrideStatus;
+ SBLevel embeddingLevel;
+} _StatusStackElement, *_StatusStackElementRef;
+
+typedef struct _StatusStackList {
+ _StatusStackElement elements[_StatusStackList_Length];
+
+ struct _StatusStackList *previous;
+ struct _StatusStackList *next;
+} _StatusStackList, *_StatusStackListRef;
+
+typedef struct _StatusStack {
+ _StatusStackList _firstList;
+ _StatusStackListRef _peekList;
+ SBUInteger _peekTop;
+ SBUInteger count;
+} StatusStack, *StatusStackRef;
+
+SB_INTERNAL void StatusStackInitialize(StatusStackRef stack);
+SB_INTERNAL void StatusStackFinalize(StatusStackRef stack);
+
+SB_INTERNAL SBBoolean StatusStackPush(StatusStackRef stack,
+ SBLevel embeddingLevel, SBBidiType overrideStatus, SBBoolean isolateStatus);
+SB_INTERNAL void StatusStackPop(StatusStackRef stack);
+SB_INTERNAL void StatusStackSetEmpty(StatusStackRef stack);
+
+SB_INTERNAL SBLevel StatusStackGetEmbeddingLevel(StatusStackRef stack);
+SB_INTERNAL SBBidiType StatusStackGetOverrideStatus(StatusStackRef stack);
+SB_INTERNAL SBBoolean StatusStackGetIsolateStatus(StatusStackRef stack);
+
+#endif