[PATCH 3/4] dwrite: Add fallback data for some of Japanese ranges

Nikolay Sivov nsivov at codeweavers.com
Mon Feb 15 15:59:26 CST 2016


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/analyzer.c     | 23 ++++++++++++++++-------
 dlls/dwrite/tests/layout.c |  1 +
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index 1b52eb7..30f54d7 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -191,6 +191,8 @@ struct fallback_mapping {
 };
 
 static const struct fallback_mapping fontfallback_neutral_data[] = {
+    { { 0x3000, 0x30ff }, meiryoW }, /* CJK Symbols and Punctuation, Hiragana, Katakana */
+    { { 0x31f0, 0x31ff }, meiryoW }, /* Katakana Phonetic Extensions */
     { { 0x4e00, 0x9fff }, meiryoW }, /* CJK Unified Ideographs */
 };
 
@@ -1736,16 +1738,23 @@ static ULONG WINAPI fontfallback_Release(IDWriteFontFallback *iface)
     return IDWriteFactory2_Release(fallback->factory);
 }
 
-static const struct fallback_mapping *find_fallback_mapping(struct dwrite_fontfallback *fallback, UINT32 ch)
+static int compare_fallback_mapping(const void *a, const void *b)
 {
-    UINT32 i;
+    UINT32 ch = *(UINT32*)a;
+    struct fallback_mapping *mapping = (struct fallback_mapping*)b;
 
-    for (i = 0; i < fallback->count; i++) {
-        if (fallback->mappings[i].range.first <= ch && fallback->mappings[i].range.last >= ch)
-            return &fallback->mappings[i];
-    }
+    if (ch > mapping->range.last)
+        return 1;
+    else if (ch < mapping->range.first)
+        return -1;
+    else
+        return 0;
+}
 
-    return NULL;
+static const struct fallback_mapping *find_fallback_mapping(struct dwrite_fontfallback *fallback, UINT32 ch)
+{
+    return bsearch(&ch, fallback->mappings, fallback->count, sizeof(*fallback->mappings),
+        compare_fallback_mapping);
 }
 
 HRESULT create_matching_font(IDWriteFontCollection *collection, const WCHAR *name,
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 0fe9151..b3e0df0 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -4200,6 +4200,7 @@ static HRESULT WINAPI fontcollection_FindFamilyName(IDWriteFontCollection *iface
         *exists = TRUE;
         return S_OK;
     }
+todo_wine
     ok(0, "unexpected call, name %s\n", wine_dbgstr_w(name));
     return E_NOTIMPL;
 }
-- 
2.7.0




More information about the wine-patches mailing list