[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