Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
December 2019
- 73 participants
- 1394 messages
[PATCH 09/10] jscript: Implement ScriptTypeComp_BindType.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 37e851e..999ea56 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1073,10 +1073,25 @@ static HRESULT WINAPI ScriptTypeComp_BindType(ITypeComp *iface, LPOLESTR szName,
ITypeInfo **ppTInfo, ITypeComp **ppTComp)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ ITypeInfo *disp_typeinfo;
+ ITypeComp *disp_typecomp;
+ HRESULT hr;
- FIXME("(%p)->(%s %08x %p %p)\n", This, debugstr_w(szName), lHashVal, ppTInfo, ppTComp);
+ TRACE("(%p)->(%s %08x %p %p)\n", This, debugstr_w(szName), lHashVal, ppTInfo, ppTComp);
- return E_NOTIMPL;
+ if (!szName || !ppTInfo || !ppTComp)
+ return E_INVALIDARG;
+
+ /* Look into the inherited IDispatch */
+ hr = get_dispatch_typeinfo(&disp_typeinfo);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeInfo_GetTypeComp(disp_typeinfo, &disp_typecomp);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeComp_BindType(disp_typecomp, szName, lHashVal, ppTInfo, ppTComp);
+ ITypeComp_Release(disp_typecomp);
+ return hr;
}
static const ITypeCompVtbl ScriptTypeCompVtbl = {
--
2.21.0
Dec. 9, 2019
[PATCH 08/10] jscript: Implement ScriptTypeComp_Bind.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 49 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 47 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index f7ad023..37e851e 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1017,11 +1017,56 @@ static HRESULT WINAPI ScriptTypeComp_Bind(ITypeComp *iface, LPOLESTR szName, ULO
ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ UINT flags = wFlags ? wFlags : ~0;
+ ITypeInfo *disp_typeinfo;
+ ITypeComp *disp_typecomp;
+ HRESULT hr;
+ UINT i;
- FIXME("(%p)->(%s %08x %d %p %p %p)\n", This, debugstr_w(szName), lHashVal,
+ TRACE("(%p)->(%s %08x %d %p %p %p)\n", This, debugstr_w(szName), lHashVal,
wFlags, ppTInfo, pDescKind, pBindPtr);
- return E_NOTIMPL;
+ if (!szName || !ppTInfo || !pDescKind || !pBindPtr)
+ return E_INVALIDARG;
+
+ for (i = 0; i < This->num_funcs; i++)
+ {
+ if (wcsicmp(szName, This->funcs[i].prop->name)) continue;
+ if (!(flags & INVOKE_FUNC)) return TYPE_E_TYPEMISMATCH;
+
+ hr = ITypeInfo_GetFuncDesc(&This->ITypeInfo_iface, i, &pBindPtr->lpfuncdesc);
+ if (FAILED(hr)) return hr;
+
+ *pDescKind = DESCKIND_FUNCDESC;
+ *ppTInfo = &This->ITypeInfo_iface;
+ ITypeInfo_AddRef(*ppTInfo);
+ return S_OK;
+ }
+
+ for (i = 0; i < This->num_vars; i++)
+ {
+ if (wcsicmp(szName, This->vars[i]->name)) continue;
+ if (!(flags & INVOKE_PROPERTYGET)) return TYPE_E_TYPEMISMATCH;
+
+ hr = ITypeInfo_GetVarDesc(&This->ITypeInfo_iface, i, &pBindPtr->lpvardesc);
+ if (FAILED(hr)) return hr;
+
+ *pDescKind = DESCKIND_VARDESC;
+ *ppTInfo = &This->ITypeInfo_iface;
+ ITypeInfo_AddRef(*ppTInfo);
+ return S_OK;
+ }
+
+ /* Look into the inherited IDispatch */
+ hr = get_dispatch_typeinfo(&disp_typeinfo);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeInfo_GetTypeComp(disp_typeinfo, &disp_typecomp);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeComp_Bind(disp_typecomp, szName, lHashVal, wFlags, ppTInfo, pDescKind, pBindPtr);
+ ITypeComp_Release(disp_typecomp);
+ return hr;
}
static HRESULT WINAPI ScriptTypeComp_BindType(ITypeComp *iface, LPOLESTR szName, ULONG lHashVal,
--
2.21.0
Dec. 9, 2019
[PATCH 07/10] jscript: Implement ScriptTypeInfo_GetTypeComp.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 64 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 62 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index ddea563..f7ad023 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -613,6 +613,7 @@ struct typeinfo_func {
typedef struct {
ITypeInfo ITypeInfo_iface;
+ ITypeComp ITypeComp_iface;
LONG ref;
UINT num_funcs;
@@ -628,12 +629,19 @@ static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeInfo_iface);
}
+static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeComp(ITypeComp *iface)
+{
+ return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeComp_iface);
+}
+
static HRESULT WINAPI ScriptTypeInfo_QueryInterface(ITypeInfo *iface, REFIID riid, void **ppv)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ITypeInfo, riid))
*ppv = &This->ITypeInfo_iface;
+ else if (IsEqualGUID(&IID_ITypeComp, riid))
+ *ppv = &This->ITypeComp_iface;
else
{
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
@@ -711,9 +719,13 @@ static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **p
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, ppTComp);
+ TRACE("(%p)->(%p)\n", This, ppTComp);
- return E_NOTIMPL;
+ if (!ppTComp) return E_INVALIDARG;
+
+ *ppTComp = &This->ITypeComp_iface;
+ ITypeInfo_AddRef(iface);
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
@@ -983,6 +995,53 @@ static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
ScriptTypeInfo_ReleaseVarDesc
};
+static HRESULT WINAPI ScriptTypeComp_QueryInterface(ITypeComp *iface, REFIID riid, void **ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ return ITypeInfo_QueryInterface(&This->ITypeInfo_iface, riid, ppv);
+}
+
+static ULONG WINAPI ScriptTypeComp_AddRef(ITypeComp *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ return ITypeInfo_AddRef(&This->ITypeInfo_iface);
+}
+
+static ULONG WINAPI ScriptTypeComp_Release(ITypeComp *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ return ITypeInfo_Release(&This->ITypeInfo_iface);
+}
+
+static HRESULT WINAPI ScriptTypeComp_Bind(ITypeComp *iface, LPOLESTR szName, ULONG lHashVal, WORD wFlags,
+ ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+
+ FIXME("(%p)->(%s %08x %d %p %p %p)\n", This, debugstr_w(szName), lHashVal,
+ wFlags, ppTInfo, pDescKind, pBindPtr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeComp_BindType(ITypeComp *iface, LPOLESTR szName, ULONG lHashVal,
+ ITypeInfo **ppTInfo, ITypeComp **ppTComp)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+
+ FIXME("(%p)->(%s %08x %p %p)\n", This, debugstr_w(szName), lHashVal, ppTInfo, ppTComp);
+
+ return E_NOTIMPL;
+}
+
+static const ITypeCompVtbl ScriptTypeCompVtbl = {
+ ScriptTypeComp_QueryInterface,
+ ScriptTypeComp_AddRef,
+ ScriptTypeComp_Release,
+ ScriptTypeComp_Bind,
+ ScriptTypeComp_BindType
+};
+
static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, jsdisp_t, IDispatchEx_iface);
@@ -1029,6 +1088,7 @@ static HRESULT create_script_typeinfo(jsdisp_t *jsdisp, ITypeInfo **out)
}
typeinfo->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
+ typeinfo->ITypeComp_iface.lpVtbl = &ScriptTypeCompVtbl;
typeinfo->ref = 1;
typeinfo->num_vars = num_vars;
typeinfo->num_funcs = num_funcs;
--
2.21.0
Dec. 9, 2019
[PATCH 06/10] jscript: Implement ScriptTypeInfo_GetIDsOfNames.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 51 +++++++++++++++++++++++++++++++++++--
dlls/jscript/jscript.h | 1 +
dlls/jscript/jscript_main.c | 25 ++++++++++++++++++
3 files changed, 75 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 7847ad6..ddea563 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -802,10 +802,57 @@ static HRESULT WINAPI ScriptTypeInfo_GetIDsOfNames(ITypeInfo *iface, LPOLESTR *r
MEMBERID *pMemId)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ ITypeInfo *disp_typeinfo;
+ const WCHAR *name;
+ HRESULT hr = S_OK;
+ int i, j, arg;
- FIXME("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
+ TRACE("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
- return E_NOTIMPL;
+ if (!rgszNames || !cNames || !pMemId) return E_INVALIDARG;
+
+ for (i = 0; i < cNames; i++) pMemId[i] = MEMBERID_NIL;
+ name = rgszNames[0];
+
+ for (i = 0; i < This->num_funcs; i++)
+ {
+ struct typeinfo_func *func = &This->funcs[i];
+ unsigned num_args;
+ BSTR *args;
+
+ if (wcsicmp(name, func->prop->name)) continue;
+ pMemId[0] = prop_to_id(This->jsdisp, func->prop);
+
+ args = get_source_function_params(func->disp, &num_args);
+
+ for (j = 1; j < cNames; j++)
+ {
+ name = rgszNames[j];
+ for (arg = num_args; --arg >= 0;)
+ if (!wcsicmp(name, args[arg]))
+ break;
+ if (arg >= 0)
+ pMemId[j] = arg;
+ else
+ hr = DISP_E_UNKNOWNNAME;
+ }
+ return hr;
+ }
+
+ for (i = 0; i < This->num_vars; i++)
+ {
+ dispex_prop_t *var = This->vars[i];
+
+ if (wcsicmp(name, var->name)) continue;
+ pMemId[0] = prop_to_id(This->jsdisp, var);
+ return S_OK;
+ }
+
+ /* Look into the inherited IDispatch */
+ hr = get_dispatch_typeinfo(&disp_typeinfo);
+ if (FAILED(hr)) return hr;
+
+ return ITypeInfo_GetIDsOfNames(disp_typeinfo, rgszNames, cNames, pMemId);
}
static HRESULT WINAPI ScriptTypeInfo_Invoke(ITypeInfo *iface, PVOID pvInstance, MEMBERID memid, WORD wFlags,
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 09ecfb4..6066772 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -87,6 +87,7 @@ static inline LPWSTR heap_strdupW(LPCWSTR str)
typedef struct jsdisp_t jsdisp_t;
extern HINSTANCE jscript_hinstance DECLSPEC_HIDDEN;
+HRESULT get_dispatch_typeinfo(ITypeInfo**) DECLSPEC_HIDDEN;
#define PROPF_ARGMASK 0x00ff
#define PROPF_METHOD 0x0100
diff --git a/dlls/jscript/jscript_main.c b/dlls/jscript/jscript_main.c
index 9f9f412..532cdf9 100644
--- a/dlls/jscript/jscript_main.c
+++ b/dlls/jscript/jscript_main.c
@@ -37,6 +37,30 @@ LONG module_ref = 0;
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
HINSTANCE jscript_hinstance;
+static ITypeInfo *dispatch_typeinfo;
+
+HRESULT get_dispatch_typeinfo(ITypeInfo **out)
+{
+ ITypeInfo *typeinfo;
+ ITypeLib *typelib;
+ HRESULT hr;
+
+ if (!dispatch_typeinfo)
+ {
+ hr = LoadRegTypeLib(&IID_StdOle, STDOLE_MAJORVERNUM, STDOLE_MINORVERNUM, STDOLE_LCID, &typelib);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
+ ITypeLib_Release(typelib);
+ if (FAILED(hr)) return hr;
+
+ if (InterlockedCompareExchangePointer((void**)&dispatch_typeinfo, typeinfo, NULL))
+ ITypeInfo_Release(typeinfo);
+ }
+
+ *out = dispatch_typeinfo;
+ return S_OK;
+}
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
{
@@ -145,6 +169,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
break;
case DLL_PROCESS_DETACH:
if (lpv) break;
+ if (dispatch_typeinfo) ITypeInfo_Release(dispatch_typeinfo);
free_strings();
}
--
2.21.0
Dec. 9, 2019
[PATCH 05/10] jscript: Implement ScriptTypeInfo_GetVarDesc.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 5db7da6..7847ad6 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -752,10 +752,22 @@ static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, F
static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ VARDESC *desc;
- FIXME("(%p)->(%u %p)\n", This, index, ppVarDesc);
+ TRACE("(%p)->(%u %p)\n", This, index, ppVarDesc);
- return E_NOTIMPL;
+ if (!ppVarDesc) return E_INVALIDARG;
+ if (index >= This->num_vars) return TYPE_E_ELEMENTNOTFOUND;
+
+ desc = heap_alloc_zero(sizeof(*desc));
+ if (!desc) return E_OUTOFMEMORY;
+
+ desc->memid = prop_to_id(This->jsdisp, This->vars[index]);
+ desc->varkind = VAR_DISPATCH;
+ desc->elemdescVar.tdesc.vt = VT_VARIANT;
+
+ *ppVarDesc = desc;
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetNames(ITypeInfo *iface, MEMBERID memid, BSTR *rgBstrNames,
@@ -894,7 +906,9 @@ static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVar
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, pVarDesc);
+ TRACE("(%p)->(%p)\n", This, pVarDesc);
+
+ heap_free(pVarDesc);
}
static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
--
2.21.0
Dec. 9, 2019
[PATCH 04/10] jscript: Implement ScriptTypeInfo_GetFuncDesc.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 32 +++++++++++++++++++++++++++++---
dlls/jscript/function.c | 8 ++++++++
dlls/jscript/jscript.h | 1 +
3 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 1f28538..5db7da6 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -719,10 +719,34 @@ static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **p
static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ struct typeinfo_func *func;
+ unsigned num_args, i;
+ FUNCDESC *desc;
- FIXME("(%p)->(%u %p)\n", This, index, ppFuncDesc);
+ TRACE("(%p)->(%u %p)\n", This, index, ppFuncDesc);
- return E_NOTIMPL;
+ if (!ppFuncDesc) return E_INVALIDARG;
+ if (index >= This->num_funcs) return TYPE_E_ELEMENTNOTFOUND;
+ func = &This->funcs[index];
+ get_source_function_params(func->disp, &num_args);
+
+ /* Store the parameter array after the FUNCDESC structure */
+ desc = heap_alloc_zero(sizeof(*desc) + sizeof(ELEMDESC) * num_args);
+ if (!desc) return E_OUTOFMEMORY;
+
+ desc->memid = prop_to_id(This->jsdisp, func->prop);
+ desc->funckind = FUNC_DISPATCH;
+ desc->invkind = INVOKE_FUNC;
+ desc->callconv = CC_STDCALL;
+ desc->cParams = num_args;
+ desc->elemdescFunc.tdesc.vt = VT_VARIANT;
+
+ if (num_args) desc->lprgelemdescParam = (ELEMDESC*)(desc + 1);
+ for (i = 0; i < num_args; i++)
+ desc->lprgelemdescParam[i].tdesc.vt = VT_VARIANT;
+
+ *ppFuncDesc = desc;
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
@@ -861,7 +885,9 @@ static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pF
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, pFuncDesc);
+ TRACE("(%p)->(%p)\n", This, pFuncDesc);
+
+ heap_free(pFuncDesc);
}
static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVarDesc)
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 98d1259..c2d058b 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -808,6 +808,14 @@ BOOL is_source_function(jsdisp_t *jsdisp)
return function_from_jsdisp(jsdisp)->vtbl == &InterpretedFunctionVtbl;
}
+BSTR *get_source_function_params(jsdisp_t *jsdisp, unsigned *param_cnt)
+{
+ InterpretedFunction *func = (InterpretedFunction*)function_from_jsdisp(jsdisp);
+
+ *param_cnt = func->func_code->param_cnt;
+ return func->func_code->params;
+}
+
static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_obj, unsigned flags,
unsigned argc, jsval_t *argv, jsval_t *r)
{
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 91923f8..09ecfb4 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -304,6 +304,7 @@ HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,cons
HRESULT create_builtin_constructor(script_ctx_t*,builtin_invoke_t,const WCHAR*,const builtin_info_t*,DWORD,
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;
BOOL is_source_function(jsdisp_t*) DECLSPEC_HIDDEN;
+BSTR *get_source_function_params(jsdisp_t*,unsigned*) DECLSPEC_HIDDEN;
HRESULT Function_invoke(jsdisp_t*,IDispatch*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
--
2.21.0
Dec. 9, 2019
[PATCH 03/10] jscript: Implement ScriptTypeInfo_GetTypeAttr.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 36 +++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 2c309cd..1f28538 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -24,6 +24,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+static const GUID GUID_JScriptTypeInfo = {0xc59c6b12,0xf6c1,0x11cf,{0x88,0x35,0x00,0xa0,0xc9,0x11,0xe8,0xb2}};
+
#define FDEX_VERSION_MASK 0xf0000000
#define GOLDEN_RATIO 0x9E3779B9U
@@ -677,10 +679,32 @@ static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
static HRESULT WINAPI ScriptTypeInfo_GetTypeAttr(ITypeInfo *iface, TYPEATTR **ppTypeAttr)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
-
- FIXME("(%p)->(%p)\n", This, ppTypeAttr);
-
- return E_NOTIMPL;
+ TYPEATTR *attr;
+
+ TRACE("(%p)->(%p)\n", This, ppTypeAttr);
+
+ if (!ppTypeAttr) return E_INVALIDARG;
+
+ attr = heap_alloc_zero(sizeof(*attr));
+ if (!attr) return E_OUTOFMEMORY;
+
+ attr->guid = GUID_JScriptTypeInfo;
+ attr->lcid = LOCALE_USER_DEFAULT;
+ attr->memidConstructor = MEMBERID_NIL;
+ attr->memidDestructor = MEMBERID_NIL;
+ attr->cbSizeInstance = 4;
+ attr->typekind = TKIND_DISPATCH;
+ attr->cFuncs = This->num_funcs;
+ attr->cVars = This->num_vars;
+ attr->cImplTypes = 1;
+ attr->cbSizeVft = sizeof(IDispatchVtbl);
+ attr->cbAlignment = 4;
+ attr->wTypeFlags = TYPEFLAG_FDISPATCHABLE;
+ attr->wMajorVerNum = JSCRIPT_MAJOR_VERSION;
+ attr->wMinorVerNum = JSCRIPT_MINOR_VERSION;
+
+ *ppTypeAttr = attr;
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **ppTComp)
@@ -828,7 +852,9 @@ static void WINAPI ScriptTypeInfo_ReleaseTypeAttr(ITypeInfo *iface, TYPEATTR *pT
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, pTypeAttr);
+ TRACE("(%p)->(%p)\n", This, pTypeAttr);
+
+ heap_free(pTypeAttr);
}
static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pFuncDesc)
--
2.21.0
Dec. 9, 2019
[PATCH 02/10] jscript: Store the necessary function and variable info in the script TypeInfo.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 109 ++++++++++++++++++++++++++++++++++++++++
dlls/jscript/function.c | 5 ++
dlls/jscript/jscript.h | 1 +
3 files changed, 115 insertions(+)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 68e4e1c..2c309cd 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -70,6 +70,20 @@ static inline dispex_prop_t *get_prop(jsdisp_t *This, DISPID id)
return This->props+id;
}
+static inline BOOL is_function_prop(dispex_prop_t *prop)
+{
+ BOOL ret = FALSE;
+
+ if (is_object_instance(prop->u.val))
+ {
+ jsdisp_t *jsdisp = iface_to_jsdisp(get_object(prop->u.val));
+
+ if (jsdisp) ret = is_class(jsdisp, JSCLASS_FUNCTION);
+ jsdisp_release(jsdisp);
+ }
+ return ret;
+}
+
static DWORD get_flags(jsdisp_t *This, dispex_prop_t *prop)
{
if(prop->type == PROP_PROTREF) {
@@ -590,9 +604,21 @@ static HRESULT fill_protrefs(jsdisp_t *This)
return S_OK;
}
+struct typeinfo_func {
+ dispex_prop_t *prop;
+ jsdisp_t *disp;
+};
+
typedef struct {
ITypeInfo ITypeInfo_iface;
LONG ref;
+
+ UINT num_funcs;
+ UINT num_vars;
+ struct typeinfo_func *funcs;
+ dispex_prop_t **vars;
+
+ jsdisp_t *jsdisp;
} ScriptTypeInfo;
static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
@@ -632,11 +658,17 @@ static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
LONG ref = InterlockedDecrement(&This->ref);
+ UINT i;
TRACE("(%p) ref=%d\n", This, ref);
if (!ref)
{
+ for (i = This->num_funcs; i--;)
+ IDispatchEx_Release(&This->funcs[i].disp->IDispatchEx_iface);
+ IDispatchEx_Release(&This->jsdisp->IDispatchEx_iface);
+ heap_free(This->funcs);
+ heap_free(This->vars);
heap_free(This);
}
return ref;
@@ -845,13 +877,90 @@ static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
static HRESULT create_script_typeinfo(jsdisp_t *jsdisp, ITypeInfo **out)
{
+ dispex_prop_t *prop, *cur, *end, **typevar;
+ UINT num_funcs = 0, num_vars = 0;
+ struct typeinfo_func *typefunc;
ScriptTypeInfo *typeinfo;
+ jsdisp_t *fn;
+ unsigned pos;
if (!(typeinfo = heap_alloc(sizeof(*typeinfo))))
return E_OUTOFMEMORY;
+ for (prop = jsdisp->props, end = prop + jsdisp->prop_cnt; prop != end; prop++)
+ {
+ if (!prop->name || prop->type != PROP_JSVAL || !(prop->flags & PROPF_ENUMERABLE))
+ continue;
+
+ /* If two identifiers differ only by case, the TypeInfo fails */
+ pos = jsdisp->props[get_props_idx(jsdisp, prop->hash)].bucket_head;
+ while (pos)
+ {
+ cur = jsdisp->props + pos;
+
+ if (prop->hash == cur->hash && prop != cur &&
+ cur->type == PROP_JSVAL && (cur->flags & PROPF_ENUMERABLE) &&
+ !wcsicmp(prop->name, cur->name))
+ {
+ return TYPE_E_AMBIGUOUSNAME;
+ }
+ pos = cur->bucket_next;
+ }
+
+ if (is_function_prop(prop))
+ {
+ fn = impl_from_IDispatchEx((IDispatchEx*)get_object(prop->u.val));
+ if (is_source_function(fn)) num_funcs++;
+ }
+ else num_vars++;
+ }
+
typeinfo->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
typeinfo->ref = 1;
+ typeinfo->num_vars = num_vars;
+ typeinfo->num_funcs = num_funcs;
+ typeinfo->jsdisp = jsdisp;
+
+ typeinfo->funcs = heap_alloc(sizeof(*typeinfo->funcs) * num_funcs);
+ if (!typeinfo->funcs)
+ {
+ heap_free(typeinfo);
+ return E_OUTOFMEMORY;
+ }
+
+ typeinfo->vars = heap_alloc(sizeof(*typeinfo->vars) * num_vars);
+ if (!typeinfo->vars)
+ {
+ heap_free(typeinfo->funcs);
+ heap_free(typeinfo);
+ return E_OUTOFMEMORY;
+ }
+
+ typefunc = typeinfo->funcs;
+ typevar = typeinfo->vars;
+ for (prop = jsdisp->props; prop != end; prop++)
+ {
+ if (!prop->name || prop->type != PROP_JSVAL || !(prop->flags & PROPF_ENUMERABLE))
+ continue;
+
+ if (is_function_prop(prop))
+ {
+ fn = impl_from_IDispatchEx((IDispatchEx*)get_object(prop->u.val));
+ if (!is_source_function(fn)) continue;
+
+ typefunc->prop = prop;
+ typefunc->disp = fn;
+ typefunc++;
+
+ /* The function's object may be deleted, so keep it alive */
+ IDispatchEx_AddRef(&fn->IDispatchEx_iface);
+ }
+ else
+ *typevar++ = prop;
+ }
+
+ /* Keep a ref to the props and their names */
+ IDispatchEx_AddRef(&jsdisp->IDispatchEx_iface);
*out = &typeinfo->ITypeInfo_iface;
return S_OK;
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 7a44f50..98d1259 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -803,6 +803,11 @@ HRESULT create_source_function(script_ctx_t *ctx, bytecode_t *code, function_cod
return S_OK;
}
+BOOL is_source_function(jsdisp_t *jsdisp)
+{
+ return function_from_jsdisp(jsdisp)->vtbl == &InterpretedFunctionVtbl;
+}
+
static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_obj, unsigned flags,
unsigned argc, jsval_t *argv, jsval_t *r)
{
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 5d635b7..91923f8 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -303,6 +303,7 @@ HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,cons
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;
HRESULT create_builtin_constructor(script_ctx_t*,builtin_invoke_t,const WCHAR*,const builtin_info_t*,DWORD,
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;
+BOOL is_source_function(jsdisp_t*) DECLSPEC_HIDDEN;
HRESULT Function_invoke(jsdisp_t*,IDispatch*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
--
2.21.0
Dec. 9, 2019
[PATCH 01/10] jscript: Add script TypeInfo stub.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 272 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 271 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 463fd2f..68e4e1c 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -590,11 +590,273 @@ static HRESULT fill_protrefs(jsdisp_t *This)
return S_OK;
}
+typedef struct {
+ ITypeInfo ITypeInfo_iface;
+ LONG ref;
+} ScriptTypeInfo;
+
+static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
+{
+ return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeInfo_iface);
+}
+
+static HRESULT WINAPI ScriptTypeInfo_QueryInterface(ITypeInfo *iface, REFIID riid, void **ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ITypeInfo, riid))
+ *ppv = &This->ITypeInfo_iface;
+ else
+ {
+ WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI ScriptTypeInfo_AddRef(ITypeInfo *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ if (!ref)
+ {
+ heap_free(This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetTypeAttr(ITypeInfo *iface, TYPEATTR **ppTypeAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTypeAttr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **ppTComp)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTComp);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppFuncDesc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppVarDesc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetNames(ITypeInfo *iface, MEMBERID memid, BSTR *rgBstrNames,
+ UINT cMaxNames, UINT *pcNames)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p %u %p)\n", This, memid, rgBstrNames, cMaxNames, pcNames);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetRefTypeOfImplType(ITypeInfo *iface, UINT index, HREFTYPE *pRefType)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pRefType);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetImplTypeFlags(ITypeInfo *iface, UINT index, INT *pImplTypeFlags)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pImplTypeFlags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetIDsOfNames(ITypeInfo *iface, LPOLESTR *rgszNames, UINT cNames,
+ MEMBERID *pMemId)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_Invoke(ITypeInfo *iface, PVOID pvInstance, MEMBERID memid, WORD wFlags,
+ DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %d %d %p %p %p %p)\n", This, pvInstance, memid, wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetDocumentation(ITypeInfo *iface, MEMBERID memid, BSTR *pBstrName,
+ BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p %p %p %p)\n", This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetDllEntry(ITypeInfo *iface, MEMBERID memid, INVOKEKIND invKind,
+ BSTR *pBstrDllName, BSTR *pBstrName, WORD *pwOrdinal)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %d %p %p %p)\n", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetRefTypeInfo(ITypeInfo *iface, HREFTYPE hRefType, ITypeInfo **ppTInfo)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%x %p)\n", This, hRefType, ppTInfo);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_AddressOfMember(ITypeInfo *iface, MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %d %p)\n", This, memid, invKind, ppv);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_CreateInstance(ITypeInfo *iface, IUnknown *pUnkOuter, REFIID riid, PVOID *ppvObj)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %s %p)\n", This, pUnkOuter, debugstr_guid(riid), ppvObj);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetMops(ITypeInfo *iface, MEMBERID memid, BSTR *pBstrMops)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p)\n", This, memid, pBstrMops);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetContainingTypeLib(ITypeInfo *iface, ITypeLib **ppTLib, UINT *pIndex)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %p)\n", This, ppTLib, pIndex);
+
+ return E_NOTIMPL;
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseTypeAttr(ITypeInfo *iface, TYPEATTR *pTypeAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pTypeAttr);
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pFuncDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pFuncDesc);
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVarDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pVarDesc);
+}
+
+static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
+ ScriptTypeInfo_QueryInterface,
+ ScriptTypeInfo_AddRef,
+ ScriptTypeInfo_Release,
+ ScriptTypeInfo_GetTypeAttr,
+ ScriptTypeInfo_GetTypeComp,
+ ScriptTypeInfo_GetFuncDesc,
+ ScriptTypeInfo_GetVarDesc,
+ ScriptTypeInfo_GetNames,
+ ScriptTypeInfo_GetRefTypeOfImplType,
+ ScriptTypeInfo_GetImplTypeFlags,
+ ScriptTypeInfo_GetIDsOfNames,
+ ScriptTypeInfo_Invoke,
+ ScriptTypeInfo_GetDocumentation,
+ ScriptTypeInfo_GetDllEntry,
+ ScriptTypeInfo_GetRefTypeInfo,
+ ScriptTypeInfo_AddressOfMember,
+ ScriptTypeInfo_CreateInstance,
+ ScriptTypeInfo_GetMops,
+ ScriptTypeInfo_GetContainingTypeLib,
+ ScriptTypeInfo_ReleaseTypeAttr,
+ ScriptTypeInfo_ReleaseFuncDesc,
+ ScriptTypeInfo_ReleaseVarDesc
+};
+
static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, jsdisp_t, IDispatchEx_iface);
}
+static HRESULT create_script_typeinfo(jsdisp_t *jsdisp, ITypeInfo **out)
+{
+ ScriptTypeInfo *typeinfo;
+
+ if (!(typeinfo = heap_alloc(sizeof(*typeinfo))))
+ return E_OUTOFMEMORY;
+
+ typeinfo->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
+ typeinfo->ref = 1;
+
+ *out = &typeinfo->ITypeInfo_iface;
+ return S_OK;
+}
+
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
{
jsdisp_t *This = impl_from_IDispatchEx(iface);
@@ -649,7 +911,15 @@ static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LC
ITypeInfo **ppTInfo)
{
jsdisp_t *This = impl_from_IDispatchEx(iface);
- FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+ if (iTInfo != 0) return DISP_E_BADINDEX;
+
+ if (This == This->ctx->global)
+ return create_script_typeinfo(This, ppTInfo);
+
+ FIXME("non-global not implemented\n");
return E_NOTIMPL;
}
--
2.21.0
Dec. 9, 2019
[PATCH] comctl32/listview: Use wcsnicmp() instead of a local helper.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/listview.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index eb42526f57..2dd25908db 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -539,12 +539,6 @@ static inline int textcmpWT(LPCWSTR aw, LPCWSTR bt, BOOL isW)
return 1;
}
-
-static inline int lstrncmpiW(LPCWSTR s1, LPCWSTR s2, int n)
-{
- n = min(min(n, lstrlenW(s1)), lstrlenW(s2));
- return CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE, s1, n, s2, n) - CSTR_EQUAL;
-}
/******** Debugging functions *****************************************/
@@ -1953,7 +1947,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L
item.cchTextMax = MAX_PATH;
if (!LISTVIEW_GetItemW(infoPtr, &item)) return 0;
- if (!lstrncmpiW(item.pszText, infoPtr->szSearchParam, infoPtr->nSearchParamLength))
+ if (!wcsnicmp(item.pszText, infoPtr->szSearchParam, infoPtr->nSearchParamLength))
{
nItem = i;
break;
@@ -1961,7 +1955,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L
/* this is used to find first char match when search string is not available yet,
otherwise every WM_CHAR will search to next item by first char, ignoring that we're
already waiting for user to complete a string */
- else if (nItem == -1 && infoPtr->nSearchParamLength == 1 && !lstrncmpiW(item.pszText, infoPtr->szSearchParam, 1))
+ else if (nItem == -1 && infoPtr->nSearchParamLength == 1 && !wcsnicmp(item.pszText, infoPtr->szSearchParam, 1))
{
/* this would work but we must keep looking for a longer match */
nItem = i;
--
2.24.0
Dec. 9, 2019
[PATCH] wbemprox: Use a terminated string in parse_resource.
by Hans Leidekker
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48245
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/wbemprox/wbemlocator.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/wbemprox/wbemlocator.c b/dlls/wbemprox/wbemlocator.c
index 99d90c357f..18c37275ed 100644
--- a/dlls/wbemprox/wbemlocator.c
+++ b/dlls/wbemprox/wbemlocator.c
@@ -98,7 +98,7 @@ static BOOL is_local_machine( const WCHAR *server )
static HRESULT parse_resource( const WCHAR *resource, WCHAR **server, WCHAR **namespace )
{
- static const WCHAR rootW[] = {'R','O','O','T'};
+ static const WCHAR rootW[] = {'R','O','O','T',0};
static const WCHAR cimv2W[] = {'C','I','M','V','2',0};
static const WCHAR defaultW[] = {'D','E','F','A','U','L','T',0};
HRESULT hr = WBEM_E_INVALID_NAMESPACE;
@@ -131,7 +131,7 @@ static HRESULT parse_resource( const WCHAR *resource, WCHAR **server, WCHAR **na
p = q;
while (*q && *q != '\\' && *q != '/') q++;
len = q - p;
- if (len >= ARRAY_SIZE( rootW ) && wcsnicmp( rootW, p, len )) goto done;
+ if (len >= ARRAY_SIZE( rootW ) - 1 && wcsnicmp( rootW, p, len )) goto done;
if (!*q)
{
hr = S_OK;
--
2.20.1
Dec. 9, 2019
Re: [PATCH] winhttp/tests: Fix the spelling of ok() and skip() messages and a comment.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61639
Your paranoid android.
=== w2003std (32 bit report) ===
winhttp:
winhttp.c:3581: Test failed: got 12152
winhttp.c:3591: Test failed: got 12019
winhttp.c:3592: Test failed: got 3735928559
winhttp.c:3597: Test failed: got 12019
winhttp.c:3598: Test failed: got L""
winhttp.c:3603: Test failed: got 12019
Dec. 9, 2019
[PATCH 5/5] msado15: Implement _Stream_get_Size.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/stream.c | 9 +++++++--
dlls/msado15/tests/msado15.c | 15 ++++++++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index eb384fbf94..0c4d9ea425 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -113,8 +113,13 @@ static HRESULT WINAPI stream_Invoke( _Stream *iface, DISPID member, REFIID riid,
static HRESULT WINAPI stream_get_Size( _Stream *iface, LONG *size )
{
- FIXME( "%p, %p\n", iface, size );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ TRACE( "%p, %p\n", stream, size );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+
+ *size = stream->size;
+ return S_OK;
}
static HRESULT WINAPI stream_get_EOS( _Stream *iface, VARIANT_BOOL *eos )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index c7563228de..1755a7f3da 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -50,7 +50,7 @@ static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
- LONG refs, pos;
+ LONG refs, size, pos;
ObjectStateEnum state;
VARIANT missing, val;
HRESULT hr;
@@ -58,6 +58,9 @@ static void test_Stream(void)
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
ok( hr == S_OK, "got %08x\n", hr );
+ hr = _Stream_get_Size( stream, &size );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
hr = _Stream_get_Position( stream, &pos );
ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
@@ -103,11 +106,21 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateOpen, "got %u\n", state );
+ size = -1;
+ hr = _Stream_get_Size( stream, &size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !size, "got %d\n", size );
+
pos = -1;
hr = _Stream_get_Position( stream, &pos );
ok( hr == S_OK, "got %08x\n", hr );
ok( !pos, "got %d\n", pos );
+ size = -1;
+ hr = _Stream_get_Size( stream, &size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !size, "got %d\n", size );
+
hr = _Stream_Read( stream, 2, &val );
ok( hr == MAKE_ADO_HRESULT( adErrIllegalOperation ), "got %08x\n", hr );
--
2.20.1
Dec. 9, 2019
[PATCH 4/5] msado15: Implement _Stream_get_Position and _Stream_put_Position.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/stream.c | 22 +++++++++++++++++----
dlls/msado15/tests/msado15.c | 37 +++++++++++++++++++++++++++++++++++-
2 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index d5a129f869..eb384fbf94 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -125,8 +125,13 @@ static HRESULT WINAPI stream_get_EOS( _Stream *iface, VARIANT_BOOL *eos )
static HRESULT WINAPI stream_get_Position( _Stream *iface, LONG *pos )
{
- FIXME( "%p, %p\n", iface, pos );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ TRACE( "%p, %p\n", stream, pos );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+
+ *pos = stream->pos;
+ return S_OK;
}
static HRESULT resize_buffer( struct stream *stream, LONG size )
@@ -145,8 +150,17 @@ static HRESULT resize_buffer( struct stream *stream, LONG size )
static HRESULT WINAPI stream_put_Position( _Stream *iface, LONG pos )
{
- FIXME( "%p, %d\n", iface, pos );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ HRESULT hr;
+
+ TRACE( "%p, %d\n", stream, pos );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ if (pos < 0) return MAKE_ADO_HRESULT( adErrInvalidArgument );
+
+ if ((hr = resize_buffer( stream, stream->pos )) != S_OK) return hr;
+ stream->pos = pos;
+ return S_OK;
}
static HRESULT WINAPI stream_get_Type( _Stream *iface, StreamTypeEnum *type )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index 257d1c26fa..c7563228de 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -50,7 +50,7 @@ static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
- LONG refs;
+ LONG refs, pos;
ObjectStateEnum state;
VARIANT missing, val;
HRESULT hr;
@@ -58,6 +58,12 @@ static void test_Stream(void)
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
ok( hr == S_OK, "got %08x\n", hr );
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
+ hr = _Stream_put_Position( stream, 0 );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
/* check default type */
type = 0;
hr = _Stream_get_Type( stream, &type );
@@ -97,9 +103,19 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateOpen, "got %u\n", state );
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !pos, "got %d\n", pos );
+
hr = _Stream_Read( stream, 2, &val );
ok( hr == MAKE_ADO_HRESULT( adErrIllegalOperation ), "got %08x\n", hr );
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !pos, "got %d\n", pos );
+
hr = _Stream_Close( stream );
ok( hr == S_OK, "got %08x\n", hr );
@@ -139,6 +155,25 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
VariantClear( &val );
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( pos == 4, "got %d\n", pos );
+
+ hr = _Stream_put_Position( stream, 0 );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ VariantInit( &val );
+ hr = _Stream_Read( stream, adReadAll, &val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( V_VT( &val ) == (VT_ARRAY | VT_UI1), "got %04x\n", V_VT( &val ) );
+ VariantClear( &val );
+
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( pos == 4, "got %d\n", pos );
+
refs = _Stream_Release( stream );
ok( !refs, "got %d\n", refs );
}
--
2.20.1
Dec. 9, 2019
[PATCH 3/5] msado15: Implement _Stream_Read and _Stream_Write.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/msado15_private.h | 6 +++
dlls/msado15/stream.c | 95 +++++++++++++++++++++++++++++++---
dlls/msado15/tests/msado15.c | 57 +++++++++++++++++++-
3 files changed, 149 insertions(+), 9 deletions(-)
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
index f901791ea9..1078cbf64e 100644
--- a/dlls/msado15/msado15_private.h
+++ b/dlls/msado15/msado15_private.h
@@ -25,4 +25,10 @@ HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Recordset_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Stream_create( void ** ) DECLSPEC_HIDDEN;
+static inline void *heap_realloc_zero( void *mem, SIZE_T len )
+{
+ if (!mem) return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len );
+ return HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, mem, len );
+}
+
#endif /* _WINE_MSADO15_PRIVATE_H_ */
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index cc67e930a4..d5a129f869 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -32,10 +32,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(msado15);
struct stream
{
- _Stream Stream_iface;
- LONG refs;
- ObjectStateEnum state;
- StreamTypeEnum type;
+ _Stream Stream_iface;
+ LONG refs;
+ ObjectStateEnum state;
+ StreamTypeEnum type;
+ LONG size;
+ LONG allocated;
+ LONG pos;
+ BYTE *buf;
};
static inline struct stream *impl_from_Stream( _Stream *iface )
@@ -56,6 +60,7 @@ static ULONG WINAPI stream_Release( _Stream *iface )
if (!refs)
{
TRACE( "destroying %p\n", stream );
+ heap_free( stream->buf );
heap_free( stream );
}
return refs;
@@ -124,6 +129,20 @@ static HRESULT WINAPI stream_get_Position( _Stream *iface, LONG *pos )
return E_NOTIMPL;
}
+static HRESULT resize_buffer( struct stream *stream, LONG size )
+{
+ if (stream->allocated < size)
+ {
+ BYTE *tmp;
+ LONG new_size = max( size, stream->allocated * 2 );
+ if (!(tmp = heap_realloc_zero( stream->buf, new_size ))) return E_OUTOFMEMORY;
+ stream->buf = tmp;
+ stream->allocated = new_size;
+ }
+ stream->size = size;
+ return S_OK;
+}
+
static HRESULT WINAPI stream_put_Position( _Stream *iface, LONG pos )
{
FIXME( "%p, %d\n", iface, pos );
@@ -193,10 +212,49 @@ static HRESULT WINAPI stream_put_Charset( _Stream *iface, BSTR charset )
return E_NOTIMPL;
}
+static HRESULT create_byte_array( BYTE *data, LONG len, VARIANT *ret )
+{
+ SAFEARRAY *vector;
+ LONG i;
+ HRESULT hr;
+
+ if (!len)
+ {
+ V_VT( ret ) = VT_NULL;
+ return S_OK;
+ }
+ if (!(vector = SafeArrayCreateVector( VT_UI1, 0, len ))) return E_OUTOFMEMORY;
+ for (i = 0; i < len; i++)
+ {
+ if ((hr = SafeArrayPutElement( vector, &i, &data[i] )) != S_OK)
+ {
+ SafeArrayDestroy( vector );
+ return hr;
+ }
+ }
+
+ V_VT( ret ) = VT_ARRAY | VT_UI1;
+ V_ARRAY( ret ) = vector;
+ return S_OK;
+}
+
static HRESULT WINAPI stream_Read( _Stream *iface, LONG size, VARIANT *val )
{
- FIXME( "%p, %d, %p\n", iface, size, val );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ HRESULT hr;
+
+ TRACE( "%p, %d, %p\n", stream, size, val );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ if (stream->type != adTypeBinary) return MAKE_ADO_HRESULT( adErrIllegalOperation );
+ if (size < adReadAll) return MAKE_ADO_HRESULT( adErrInvalidArgument );
+
+ if (size == adReadAll) size = stream->size - stream->pos;
+ else size = min( size, stream->size - stream->pos );
+
+ if ((hr = create_byte_array( stream->buf + stream->pos, size, val )) != S_OK) return hr;
+ stream->pos += size;
+ return S_OK;
}
static HRESULT WINAPI stream_Open( _Stream *iface, VARIANT src, ConnectModeEnum mode, StreamOpenOptionsEnum options,
@@ -219,6 +277,10 @@ static HRESULT WINAPI stream_Close( _Stream *iface )
if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ heap_free( stream->buf );
+ stream->buf = NULL;
+ stream->size = stream->allocated = stream->pos = 0;
+
stream->state = adStateClosed;
return S_OK;
}
@@ -231,8 +293,25 @@ static HRESULT WINAPI stream_SkipLine( _Stream *iface )
static HRESULT WINAPI stream_Write( _Stream *iface, VARIANT buf )
{
- FIXME( "%p, %s\n", iface, debugstr_variant(&buf) );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ LONG bound, i;
+ HRESULT hr;
+
+ TRACE( "%p, %s\n", stream, debugstr_variant(&buf) );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ if (stream->type != adTypeBinary) return MAKE_ADO_HRESULT( adErrIllegalOperation );
+ if (V_VT( &buf ) != (VT_ARRAY | VT_UI1)) return MAKE_ADO_HRESULT( adErrInvalidArgument );
+
+ if ((hr = SafeArrayGetUBound( V_ARRAY( &buf ), 1, &bound )) != S_OK) return hr;
+ if ((hr = resize_buffer( stream, stream->size + bound + 1 )) != S_OK) return hr;
+
+ for (i = 0; i <= bound; i++)
+ {
+ if ((hr = SafeArrayGetElement( V_ARRAY( &buf ), &i, &stream->buf[stream->pos++] )) != S_OK) return hr;
+ }
+
+ return S_OK;
}
static HRESULT WINAPI stream_SetEOS( _Stream *iface )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index 9733116151..257d1c26fa 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -25,13 +25,34 @@
#define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
+static HRESULT str_to_byte_array( const char *data, VARIANT *ret )
+{
+ SAFEARRAY *vector;
+ LONG i, len = strlen(data);
+ HRESULT hr;
+
+ if (!(vector = SafeArrayCreateVector( VT_UI1, 0, len ))) return E_OUTOFMEMORY;
+ for (i = 0; i < len; i++)
+ {
+ if ((hr = SafeArrayPutElement( vector, &i, (void *)&data[i] )) != S_OK)
+ {
+ SafeArrayDestroy( vector );
+ return hr;
+ }
+ }
+
+ V_VT( ret ) = VT_ARRAY | VT_UI1;
+ V_ARRAY( ret ) = vector;
+ return S_OK;
+}
+
static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
LONG refs;
ObjectStateEnum state;
- VARIANT missing;
+ VARIANT missing, val;
HRESULT hr;
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
@@ -60,6 +81,9 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateClosed, "got %u\n", state );
+ hr = _Stream_Read( stream, 2, &val );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
V_VT( &missing ) = VT_ERROR;
V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND;
hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
@@ -73,6 +97,9 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateOpen, "got %u\n", state );
+ hr = _Stream_Read( stream, 2, &val );
+ ok( hr == MAKE_ADO_HRESULT( adErrIllegalOperation ), "got %08x\n", hr );
+
hr = _Stream_Close( stream );
ok( hr == S_OK, "got %08x\n", hr );
@@ -86,6 +113,34 @@ static void test_Stream(void)
refs = _Stream_Release( stream );
ok( !refs, "got %d\n", refs );
+
+ /* binary type */
+ hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_put_Type( stream, adTypeBinary );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ VariantInit( &val );
+ hr = _Stream_Read( stream, 1, &val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( V_VT( &val ) == VT_NULL, "got %u\n", V_VT( &val ) );
+
+ VariantInit( &val );
+ hr = _Stream_Write( stream, val );
+ ok( hr == MAKE_ADO_HRESULT( adErrInvalidArgument ), "got %08x\n", hr );
+
+ hr = str_to_byte_array( "data", &val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ hr = _Stream_Write( stream, val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ VariantClear( &val );
+
+ refs = _Stream_Release( stream );
+ ok( !refs, "got %d\n", refs );
}
START_TEST(msado15)
--
2.20.1
Dec. 9, 2019
[PATCH 2/5] msado15: Implement _Stream_get_State.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/stream.c | 7 +++++--
dlls/msado15/tests/msado15.c | 16 ++++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index 3c9d885edf..cc67e930a4 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -162,8 +162,11 @@ static HRESULT WINAPI stream_put_LineSeparator( _Stream *iface, LineSeparatorEnu
static HRESULT WINAPI stream_get_State( _Stream *iface, ObjectStateEnum *state )
{
- FIXME( "%p, %p\n", iface, state );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ TRACE( "%p, %p\n", stream, state );
+
+ *state = stream->state;
+ return S_OK;
}
static HRESULT WINAPI stream_get_Mode( _Stream *iface, ConnectModeEnum *mode )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index e562c2299f..9733116151 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -30,6 +30,7 @@ static void test_Stream(void)
_Stream *stream;
StreamTypeEnum type;
LONG refs;
+ ObjectStateEnum state;
VARIANT missing;
HRESULT hr;
@@ -54,6 +55,11 @@ static void test_Stream(void)
hr = _Stream_put_Type( stream, adTypeText );
ok( hr == S_OK, "got %08x\n", hr );
+ state = 0xdeadbeef;
+ hr = _Stream_get_State( stream, &state );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( state == adStateClosed, "got %u\n", state );
+
V_VT( &missing ) = VT_ERROR;
V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND;
hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
@@ -62,9 +68,19 @@ static void test_Stream(void)
hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
ok( hr == MAKE_ADO_HRESULT( adErrObjectOpen ), "got %08x\n", hr );
+ state = 0xdeadbeef;
+ hr = _Stream_get_State( stream, &state );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( state == adStateOpen, "got %u\n", state );
+
hr = _Stream_Close( stream );
ok( hr == S_OK, "got %08x\n", hr );
+ state = 0xdeadbeef;
+ hr = _Stream_get_State( stream, &state );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( state == adStateClosed, "got %u\n", state );
+
hr = _Stream_Close( stream );
ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
--
2.20.1
Dec. 9, 2019
[PATCH 1/5] msado15: Implement _Stream_Open and _Stream_Close.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/msado15_private.h | 2 ++
dlls/msado15/stream.c | 20 ++++++++++++++++----
dlls/msado15/tests/msado15.c | 17 +++++++++++++++++
3 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
index 83c8b7c966..f901791ea9 100644
--- a/dlls/msado15/msado15_private.h
+++ b/dlls/msado15/msado15_private.h
@@ -19,6 +19,8 @@
#ifndef _WINE_MSADO15_PRIVATE_H_
#define _WINE_MSADO15_PRIVATE_H_
+#define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
+
HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Recordset_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Stream_create( void ** ) DECLSPEC_HIDDEN;
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index 8e88b9aa65..3c9d885edf 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -34,6 +34,7 @@ struct stream
{
_Stream Stream_iface;
LONG refs;
+ ObjectStateEnum state;
StreamTypeEnum type;
};
@@ -198,14 +199,25 @@ static HRESULT WINAPI stream_Read( _Stream *iface, LONG size, VARIANT *val )
static HRESULT WINAPI stream_Open( _Stream *iface, VARIANT src, ConnectModeEnum mode, StreamOpenOptionsEnum options,
BSTR username, BSTR password )
{
- FIXME( "%p, %s, %u, %d, %s, %p\n", iface, debugstr_variant(&src), mode, options, debugstr_w(username), password );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ FIXME( "%p, %s, %u, %d, %s, %p\n", stream, debugstr_variant(&src), mode, options, debugstr_w(username), password );
+
+ if (stream->state == adStateOpen) return MAKE_ADO_HRESULT( adErrObjectOpen );
+
+ stream->state = adStateOpen;
+ return S_OK;
}
static HRESULT WINAPI stream_Close( _Stream *iface )
{
- FIXME( "%p\n", iface );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+
+ TRACE( "%p\n", stream );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+
+ stream->state = adStateClosed;
+ return S_OK;
}
static HRESULT WINAPI stream_SkipLine( _Stream *iface )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index ed465e2072..e562c2299f 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -23,11 +23,14 @@
#include <msado15_backcompat.h>
#include "wine/test.h"
+#define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
+
static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
LONG refs;
+ VARIANT missing;
HRESULT hr;
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
@@ -51,6 +54,20 @@ static void test_Stream(void)
hr = _Stream_put_Type( stream, adTypeText );
ok( hr == S_OK, "got %08x\n", hr );
+ V_VT( &missing ) = VT_ERROR;
+ V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND;
+ hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectOpen ), "got %08x\n", hr );
+
+ hr = _Stream_Close( stream );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_Close( stream );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
refs = _Stream_Release( stream );
ok( !refs, "got %d\n", refs );
}
--
2.20.1
Dec. 9, 2019
Re: [PATCH] winhttp/tests: Fix the spelling of ok() and skip() messages and a comment.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
Re: [PATCH] msado15: Support all interfaces in _Recordset QueryInterface
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
Re: [PATCH] loader: Install msado15.dll into the correct location
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
[PATCH] kernelbase: Fix GlobalMemoryStatusEx regression
by hari.mail
ullAvailPageFile calculates down to -> page_size + freeswap, limiting it either to page_size (in case of no swap partition) or to swap size. Most of the bethesda game are detecting wrong amounts of ram due to this and crashing in case of no swap partition.
Dec. 9, 2019
Re: [PATCH] user32/tests: Avoid an unneeded lstrlenA() call.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61629
Your paranoid android.
=== w2003std (task log) ===
Task errors:
The task timed out
=== w1064v1507 (32 bit report) ===
user32:
dde.c:1012: Test failed: Expected item atom, got 00000081
dde.c:852: Test failed: client failed with 1 error(s)
Dec. 9, 2019
Re: [PATCH] bcrypt: Add fallback when gnutls_decode_rs_value isn't present.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
Re: [PATCH] Update to Unicode 12.1.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61627
Your paranoid android.
=== debian10 (32 bit Chinese:China report) ===
kernel32:
debugger.c:320: Test failed: GetThreadContext failed: 5
debugger.c:320: Test failed: GetThreadContext failed: 5
debugger.c:320: Test failed: GetThreadContext failed: 5
Dec. 9, 2019
[PATCH vkd3d 2/2] vkd3d: Handle depth/stencil planes in GetCopyableFootprints().
by Conor McCarthy
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
libs/vkd3d/device.c | 11 ++++++-----
tests/d3d12.c | 6 ++----
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 757d4ac..51c4553 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -3175,7 +3175,7 @@ static void STDMETHODCALLTYPE d3d12_device_GetCopyableFootprints(ID3D12Device *i
= {DXGI_FORMAT_UNKNOWN, VK_FORMAT_UNDEFINED, 1, 1, 1, 1, 0};
unsigned int i, sub_resource_idx, miplevel_idx, row_count, row_size, row_pitch;
- unsigned int width, height, depth, array_size;
+ unsigned int width, height, depth, plane_count, sub_resources_per_plane;
const struct vkd3d_format *format;
uint64_t offset, size, total;
@@ -3209,10 +3209,11 @@ static void STDMETHODCALLTYPE d3d12_device_GetCopyableFootprints(ID3D12Device *i
return;
}
- array_size = d3d12_resource_desc_get_layer_count(desc);
+ plane_count = (format->vk_aspect_mask & VK_IMAGE_ASPECT_STENCIL_BIT) ? 2 : 1;
+ sub_resources_per_plane = d3d12_resource_desc_get_sub_resource_count(desc);
- if (first_sub_resource >= desc->MipLevels * array_size
- || sub_resource_count > desc->MipLevels * array_size - first_sub_resource)
+ if (first_sub_resource >= sub_resources_per_plane * plane_count
+ || sub_resource_count > sub_resources_per_plane * plane_count - first_sub_resource)
{
WARN("Invalid sub-resource range %u-%u for resource.\n", first_sub_resource, sub_resource_count);
return;
@@ -3222,7 +3223,7 @@ static void STDMETHODCALLTYPE d3d12_device_GetCopyableFootprints(ID3D12Device *i
total = 0;
for (i = 0; i < sub_resource_count; ++i)
{
- sub_resource_idx = first_sub_resource + i;
+ sub_resource_idx = (first_sub_resource + i) % sub_resources_per_plane;
miplevel_idx = sub_resource_idx % desc->MipLevels;
width = align(d3d12_resource_desc_get_width(desc, miplevel_idx), format->block_width);
height = align(d3d12_resource_desc_get_height(desc, miplevel_idx), format->block_height);
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 1e0e25f..c3521b7 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -18906,11 +18906,9 @@ static void test_get_copyable_footprints(void)
sub_resource_count *= resource_desc.DepthOrArraySize;
if (resource_desc.Format == DXGI_FORMAT_D24_UNORM_S8_UINT)
{
+ /* FIXME: we require D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL here for DS formats but windows doesn't. */
if (!vkd3d_test_platform_is_windows())
- {
- skip("Depth/stencil planes are not supported.\n");
- continue;
- }
+ resource_desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL;
sub_resource_count *= 2;
}
assert(sub_resource_count <= ARRAY_SIZE(layouts));
--
2.24.0
Dec. 9, 2019
[PATCH vkd3d 1/2] vkd3d/tests: Add tests for GetCopyableFootprints() depth/stencil planes.
by Conor McCarthy
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
tests/d3d12.c | 19 +++++++++++++++++++
tests/d3d12_test_utils.h | 1 +
2 files changed, 20 insertions(+)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 323ef23..1e0e25f 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -18810,6 +18810,8 @@ static void test_get_copyable_footprints(void)
{DXGI_FORMAT_BC6H_UF16, true},
{DXGI_FORMAT_BC6H_SF16, true},
{DXGI_FORMAT_BC7_UNORM, true},
+ {DXGI_FORMAT_D32_FLOAT, false},
+ {DXGI_FORMAT_D24_UNORM_S8_UINT, false},
};
static const uint64_t base_offsets[] =
{
@@ -18855,6 +18857,14 @@ static void test_get_copyable_footprints(void)
{D3D12_RESOURCE_DIMENSION_TEXTURE3D, 3, 2, 2, 2, 2, DXGI_FORMAT_BC1_UNORM,
{1, 0}, D3D12_TEXTURE_LAYOUT_UNKNOWN, D3D12_RESOURCE_FLAG_NONE}, 0, 1,
},
+ {
+ {D3D12_RESOURCE_DIMENSION_TEXTURE2D, 0, 4, 4, 1, 1, DXGI_FORMAT_D32_FLOAT,
+ {1, 0}, D3D12_TEXTURE_LAYOUT_UNKNOWN, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}, 0, 2,
+ },
+ {
+ {D3D12_RESOURCE_DIMENSION_TEXTURE2D, 0, 4, 4, 1, 1, DXGI_FORMAT_D24_UNORM_S8_UINT,
+ {1, 0}, D3D12_TEXTURE_LAYOUT_UNKNOWN, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}, 0, 3,
+ },
};
if (!(device = create_device()))
@@ -18894,6 +18904,15 @@ static void test_get_copyable_footprints(void)
sub_resource_count = resource_desc.MipLevels;
if (resources[i].dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D)
sub_resource_count *= resource_desc.DepthOrArraySize;
+ if (resource_desc.Format == DXGI_FORMAT_D24_UNORM_S8_UINT)
+ {
+ if (!vkd3d_test_platform_is_windows())
+ {
+ skip("Depth/stencil planes are not supported.\n");
+ continue;
+ }
+ sub_resource_count *= 2;
+ }
assert(sub_resource_count <= ARRAY_SIZE(layouts));
for (k = 0; k < ARRAY_SIZE(base_offsets); ++k)
diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h
index 5092183..f9d49de 100644
--- a/tests/d3d12_test_utils.h
+++ b/tests/d3d12_test_utils.h
@@ -308,6 +308,7 @@ static unsigned int format_size(DXGI_FORMAT format)
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
case DXGI_FORMAT_R8G8B8A8_UINT:
case DXGI_FORMAT_B8G8R8A8_UNORM:
+ case DXGI_FORMAT_D24_UNORM_S8_UINT:
return 4;
case DXGI_FORMAT_R16_FLOAT:
case DXGI_FORMAT_R16_UNORM:
--
2.24.0
Dec. 9, 2019
[PATCH] cmd: Avoid unneeded strlenW() calls.
by Francois Gouget
Neither WCMD_give_help(), nor WCMD_setshow_default() are ever called
with a NULL pointer (notice how WCMD_skip_leading_spaces() already
assumes its argument is not NULL and does not return NULL).
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
programs/cmd/builtins.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index c6048eb5c1a..effb3e526b4 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -2549,7 +2549,7 @@ void WCMD_give_help (const WCHAR *args)
size_t i;
args = WCMD_skip_leading_spaces((WCHAR*) args);
- if (lstrlenW(args) == 0) {
+ if (!*args) {
WCMD_output_asis (WCMD_LoadMessage(WCMD_ALLHELP));
}
else {
@@ -3460,7 +3460,8 @@ void WCMD_setshow_default (const WCHAR *args) {
}
GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd);
- if (lstrlenW(args) == 0) {
+
+ if (!*args) {
lstrcatW (cwd, newlineW);
WCMD_output_asis (cwd);
}
@@ -3552,7 +3553,7 @@ void WCMD_setshow_date (void) {
DWORD count;
static const WCHAR parmT[] = {'/','T','\0'};
- if (lstrlenW(param1) == 0) {
+ if (!*param1) {
if (GetDateFormatW(LOCALE_USER_DEFAULT, 0, NULL, NULL, curdate, ARRAY_SIZE(curdate))) {
WCMD_output (WCMD_LoadMessage(WCMD_CURRENTDATE), curdate);
if (wcsstr (quals, parmT) == NULL) {
@@ -4194,7 +4195,7 @@ void WCMD_setshow_env (WCHAR *s) {
/* Output the prompt */
*p++ = '\0';
- if (lstrlenW(p) != 0) WCMD_output_asis(p);
+ if (*p) WCMD_output_asis(p);
/* Read the reply */
WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), string, ARRAY_SIZE(string), &count);
@@ -4268,7 +4269,7 @@ void WCMD_setshow_env (WCHAR *s) {
}
*p++ = '\0';
- if (lstrlenW(p) == 0) p = NULL;
+ if (!*p) p = NULL;
WINE_TRACE("set: Setting var '%s' to '%s'\n", wine_dbgstr_w(s),
wine_dbgstr_w(p));
status = SetEnvironmentVariableW(s, p);
@@ -4293,7 +4294,7 @@ void WCMD_setshow_path (const WCHAR *args) {
static const WCHAR pathW[] = {'P','A','T','H','\0'};
static const WCHAR pathEqW[] = {'P','A','T','H','=','\0'};
- if (lstrlenW(param1) == 0 && lstrlenW(param2) == 0) {
+ if (!*param1 && !*param2) {
status = GetEnvironmentVariableW(pathW, string, ARRAY_SIZE(string));
if (status != 0) {
WCMD_output_asis ( pathEqW);
@@ -4322,13 +4323,13 @@ void WCMD_setshow_prompt (void) {
WCHAR *s;
static const WCHAR promptW[] = {'P','R','O','M','P','T','\0'};
- if (lstrlenW(param1) == 0) {
+ if (!*param1) {
SetEnvironmentVariableW(promptW, NULL);
}
else {
s = param1;
while ((*s == '=') || (*s == ' ') || (*s == '\t')) s++;
- if (lstrlenW(s) == 0) {
+ if (!*s) {
SetEnvironmentVariableW(promptW, NULL);
}
else SetEnvironmentVariableW(promptW, s);
@@ -4349,7 +4350,7 @@ void WCMD_setshow_time (void) {
SYSTEMTIME st;
static const WCHAR parmT[] = {'/','T','\0'};
- if (lstrlenW(param1) == 0) {
+ if (!*param1) {
GetLocalTime(&st);
if (GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, curtime, ARRAY_SIZE(curtime))) {
WCMD_output (WCMD_LoadMessage(WCMD_CURRENTTIME), curtime);
@@ -4756,7 +4757,7 @@ int WCMD_volume(BOOL set_label, const WCHAR *path)
WCHAR string[MAX_PATH], label[MAX_PATH], curdir[MAX_PATH];
BOOL status;
- if (lstrlenW(path) == 0) {
+ if (!*path) {
status = GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir);
if (!status) {
WCMD_print_error ();
@@ -4794,7 +4795,7 @@ int WCMD_volume(BOOL set_label, const WCHAR *path)
string[count-1] = '\0'; /* ReadFile output is not null-terminated! */
if (string[count-2] == '\r') string[count-2] = '\0'; /* Under Windoze we get CRLF! */
}
- if (lstrlenW(path) != 0) {
+ if (*path) {
if (!SetVolumeLabelW(curdir, string)) WCMD_print_error ();
}
else {
--
2.20.1
Dec. 9, 2019
[PATCH] winedbg: Avoid unneeded strlen() calls.
by Francois Gouget
Note that target_xml is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
programs/winedbg/gdbproxy.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index b7f59ee05be..85ebc882a62 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -1615,7 +1615,7 @@ static enum packet_return packet_query(struct gdb_context* gdbctx)
return packet_ok;
if (strncmp(gdbctx->in_packet, "Supported", 9) == 0)
{
- if (strlen(target_xml))
+ if (*target_xml)
return packet_reply(gdbctx, "PacketSize=400;qXfer:features:read+");
else
{
@@ -1652,7 +1652,7 @@ static enum packet_return packet_query(struct gdb_context* gdbctx)
}
break;
case 'X':
- if (strlen(target_xml) && strncmp(gdbctx->in_packet, "Xfer:features:read:target.xml", 29) == 0)
+ if (*target_xml && strncmp(gdbctx->in_packet, "Xfer:features:read:target.xml", 29) == 0)
return packet_reply(gdbctx, target_xml);
break;
}
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Fix the spelling of an ok() message.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/winstation.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/tests/winstation.c b/dlls/user32/tests/winstation.c
index 6bebfe95f4b..aaa51d560ac 100644
--- a/dlls/user32/tests/winstation.c
+++ b/dlls/user32/tests/winstation.c
@@ -591,7 +591,7 @@ static void test_inputdesktop(void)
/* by default, GetThreadDesktop is the input desktop, SendInput should succeed. */
old_thread_desk = GetThreadDesktop(GetCurrentThreadId());
- ok(old_thread_desk != NULL, "GetThreadDesktop faile!\n");
+ ok(old_thread_desk != NULL, "GetThreadDesktop failed!\n");
memset(name, 0, sizeof(name));
ret = GetUserObjectInformationA(old_thread_desk, UOI_NAME, name, 1024, NULL);
ok(!strcmp(name, "Default"), "unexpected desktop %s\n", name);
--
2.20.1
Dec. 9, 2019
[PATCH] oleaut32: Fix the spelling of a FIXME() message.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/oleaut32/typelib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index eb713a4e2f8..11e83789483 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -3757,7 +3757,7 @@ static DWORD SLTG_ReadLibBlk(LPVOID pLibBlk, ITypeLibImpl *pTypeLibImpl)
ptr += 6;
if((w = *(WORD*)ptr) != 0xffff) {
- FIXME("LibBlk.res06 = %04x. Assumung string and skipping\n", w);
+ FIXME("LibBlk.res06 = %04x. Assuming string and skipping\n", w);
ptr += w;
}
ptr += 2;
--
2.20.1
Dec. 9, 2019
[PATCH] winhttp/tests: Fix the spelling of ok() and skip() messages and a comment.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/winhttp/tests/winhttp.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index 6a8d4962386..e4c614cb104 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -412,7 +412,7 @@ static void test_WinHttpSendRequest (void)
ok(ret, "WinHttpSetOption failed: %u\n", GetLastError());
/* writing more data than promised by the content-length header causes an error when the connection
- is resued, so disable keep-alive */
+ is reused, so disable keep-alive */
disable = WINHTTP_DISABLE_KEEP_ALIVE;
ret = WinHttpSetOption(request, WINHTTP_OPTION_DISABLE_FEATURE, &disable, sizeof(disable));
ok(ret, "WinHttpSetOption failed: %u\n", GetLastError());
@@ -692,7 +692,7 @@ static void test_WinHttpAddHeaders(void)
test_header_name, NULL, &len, &index);
ok(ret == FALSE, "WinHttpQueryHeaders unexpectedly succeeded.\n");
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
- "WinHttpQueryHeaders set incorrect error: expected ERROR_INSUFFICENT_BUFFER, got %u\n", GetLastError());
+ "WinHttpQueryHeaders set incorrect error: expected ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
ok(len > 40, "WinHttpQueryHeaders returned invalid length: expected greater than 40, got %d\n", len);
ok(index == 0, "WinHttpQueryHeaders incorrectly incremented header index.\n");
@@ -2144,7 +2144,7 @@ static void test_resolve_timeout(void)
WinHttpCloseHandle(ses);
}
else
- skip("Skipping host resolution tests, host resolution preformed by proxy\n");
+ skip("Skipping host resolution tests, host resolution performed by proxy\n");
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError());
--
2.20.1
Dec. 9, 2019
[PATCH] kernel32/tests: Trace LastError when GetPhysicallyInstalledSystemMemory() fails.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/kernel32/tests/heap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c
index 38fae0eede2..5ea7a25c46c 100644
--- a/dlls/kernel32/tests/heap.c
+++ b/dlls/kernel32/tests/heap.c
@@ -1206,7 +1206,7 @@ static void test_GetPhysicallyInstalledSystemMemory(void)
total_memory = 0;
ret = pGetPhysicallyInstalledSystemMemory(&total_memory);
- ok(ret, "GetPhysicallyInstalledSystemMemory unexpectedly failed\n");
+ ok(ret, "GetPhysicallyInstalledSystemMemory unexpectedly failed (%u)\n", GetLastError());
ok(total_memory != 0, "expected total_memory != 0\n");
memstatus.dwLength = sizeof(memstatus);
--
2.20.1
Dec. 9, 2019
[PATCH] shlwapi/tests: Fix the spelling of a couple of ok() messages.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/shell32/tests/progman_dde.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/tests/progman_dde.c b/dlls/shell32/tests/progman_dde.c
index 2d19404a763..ef087893016 100644
--- a/dlls/shell32/tests/progman_dde.c
+++ b/dlls/shell32/tests/progman_dde.c
@@ -449,7 +449,7 @@ START_TEST(progman_dde)
/* Cleanup & Exit */
ret = DdeDisconnect(hConv);
- ok(ret, "DdeDisonnect() failed: %u\n", DdeGetLastError(instance));
+ ok(ret, "DdeDisconnect() failed: %u\n", DdeGetLastError(instance));
ret = DdeUninitialize(instance);
ok(ret, "DdeUninitialize() failed: %u\n", DdeGetLastError(instance));
@@ -472,7 +472,7 @@ START_TEST(progman_dde)
/* Cleanup & Exit */
ret = DdeDisconnect(hConv);
- ok(ret, "DdeDisonnect() failed: %u\n", DdeGetLastError(instance));
+ ok(ret, "DdeDisconnect() failed: %u\n", DdeGetLastError(instance));
ret = DdeUninitialize(instance);
ok(ret, "DdeUninitialize() failed: %u\n", DdeGetLastError(instance));
}
--
2.20.1
Dec. 9, 2019
[PATCH] wmvcore: Fix the spelling of WMReaderAdvanced6_SetProtectStreamSamples().
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/wmvcore/reader.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/wmvcore/reader.c b/dlls/wmvcore/reader.c
index 68e35cfd484..50bf9d80079 100644
--- a/dlls/wmvcore/reader.c
+++ b/dlls/wmvcore/reader.c
@@ -621,7 +621,7 @@ static HRESULT WINAPI WMReaderAdvanced5_SetPlayerHook(IWMReaderAdvanced6 *iface,
return E_NOTIMPL;
}
-static HRESULT WINAPI WMReaderAdvanced6_SetProtextStreamSamples(IWMReaderAdvanced6 *iface, BYTE *cert,
+static HRESULT WINAPI WMReaderAdvanced6_SetProtectStreamSamples(IWMReaderAdvanced6 *iface, BYTE *cert,
DWORD cert_size, DWORD cert_type, DWORD flags, BYTE *initialization_vector, DWORD *initialization_vector_size)
{
WMReader *This = impl_from_IWMReaderAdvanced6(iface);
@@ -681,7 +681,7 @@ static const IWMReaderAdvanced6Vtbl WMReaderAdvanced6Vtbl = {
WMReaderAdvanced4_CancelSaveFileAs,
WMReaderAdvanced4_GetURL,
WMReaderAdvanced5_SetPlayerHook,
- WMReaderAdvanced6_SetProtextStreamSamples
+ WMReaderAdvanced6_SetProtectStreamSamples
};
static inline WMReader *impl_from_IWMReaderAccelerator(IWMReaderAccelerator *iface)
--
2.20.1
Dec. 9, 2019
[PATCH] cmd: Fix the spelling of a WINE_TRACE() message and a comment.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
programs/cmd/builtins.c | 2 +-
programs/cmd/wcmd.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index effb3e526b4..43c4d9efef3 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -2511,7 +2511,7 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) {
heap_free(dirsToWalk->dirName);
heap_free(dirsToWalk);
dirsToWalk = nextDir;
- if (dirsToWalk) WINE_TRACE("Moving to next directorty to iterate: %s\n",
+ if (dirsToWalk) WINE_TRACE("Moving to next directory to iterate: %s\n",
wine_dbgstr_w(dirsToWalk->dirName));
else WINE_TRACE("Finished all directories.\n");
}
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index 3e99a0d2038..b0769bd839d 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -34,7 +34,7 @@
/* msdn specified max for Win XP */
#define MAXSTRING 8192
-/* Data structure to hold commands delimitors/separators */
+/* Data structure to hold commands delimiters/separators */
typedef enum _CMDdelimiters {
CMD_NONE, /* End of line or single & */
--
2.20.1
Dec. 9, 2019
[PATCH] comctl32/tests: Avoid a couple of unneeded lstrlenA() calls.
by Francois Gouget
Note that text is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/comctl32/tests/updown.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/tests/updown.c b/dlls/comctl32/tests/updown.c
index e7ceeffd4cd..d0fff562499 100644
--- a/dlls/comctl32/tests/updown.c
+++ b/dlls/comctl32/tests/updown.c
@@ -791,7 +791,7 @@ static void test_updown_create(void)
flush_sequences(sequences, NUM_MSG_SEQUENCES);
GetWindowTextA(g_edit, text, MAX_PATH);
- ok(lstrlenA(text) == 0, "Expected empty string\n");
+ ok(!*text, "Expected empty string\n");
ok_sequence(sequences, EDIT_SEQ_INDEX, get_edit_text_seq, "get edit text", FALSE);
DestroyWindow(updown);
@@ -865,7 +865,7 @@ static void test_UDS_SETBUDDYINT(void)
ok(style & UDS_SETBUDDYINT, "Expected UDS_SETBUDDY to be set\n");
SendMessageA(updown, UDM_SETPOS, 0, 20);
GetWindowTextA(g_edit, text, ARRAY_SIZE(text));
- ok(lstrlenA(text) == 0, "Expected empty string\n");
+ ok(!*text, "Expected empty string\n");
DestroyWindow(updown);
/* creating with UDS_SETBUDDYINT */
--
2.20.1
Dec. 9, 2019
[PATCH] user32: Fix the spelling of a TRACE() message.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/winpos.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index aad5274973f..f759bd10f94 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -1397,7 +1397,7 @@ static BOOL WINPOS_SetPlacement( HWND hwnd, const WINDOWPLACEMENT *wndpl, UINT f
if (flags & PLACE_MAX) make_point_onscreen( &wp.ptMaxPosition );
if (flags & PLACE_RECT) make_rect_onscreen( &wp.rcNormalPosition );
- TRACE( "%p: setting min %d,%d max %d,%d normal %s flags %x ajusted to min %d,%d max %d,%d normal %s\n",
+ TRACE( "%p: setting min %d,%d max %d,%d normal %s flags %x adjusted to min %d,%d max %d,%d normal %s\n",
hwnd, wndpl->ptMinPosition.x, wndpl->ptMinPosition.y,
wndpl->ptMaxPosition.x, wndpl->ptMaxPosition.y,
wine_dbgstr_rect(&wndpl->rcNormalPosition), flags,
--
2.20.1
Dec. 9, 2019
[PATCH] comctl32/tests: Avoid an unneeded strlen() call.
by Francois Gouget
Note that pathBuffer is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/comctl32/tests/listbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/comctl32/tests/listbox.c b/dlls/comctl32/tests/listbox.c
index dc3b247fb62..a3769423ee6 100644
--- a/dlls/comctl32/tests/listbox.c
+++ b/dlls/comctl32/tests/listbox.c
@@ -1819,7 +1819,7 @@ static void test_listbox_dlgdir(void)
ok (res == 0, "DlgDirSelectEx() with no selection returned %d, expected 0\n", res);
/* WinXP-SP2 leaves pathBuffer untouched, but Win98 fills it with garbage. */
/*
- ok (strlen(pathBuffer) == 0, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
+ ok (!*pathBuffer, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
*/
/* Test proper drive/dir/file recognition */
itemCount = SendMessageA(g_listBox, LB_GETCOUNT, 0, 0);
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Avoid a couple of unneeded strlen() calls.
by Francois Gouget
Note that DeviceString is an array field and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/monitor.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index 567870e3d1f..47e01b1a6a6 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -71,7 +71,6 @@ static void test_enumdisplaydevices_adapter(int index, const DISPLAY_DEVICEA *de
int device_id;
int subsys_id;
int revision_id;
- size_t length;
HDC hdc;
adapter_count++;
@@ -87,9 +86,8 @@ static void test_enumdisplaydevices_adapter(int index, const DISPLAY_DEVICEA *de
"#%d: wrong DeviceKey %s\n", index, device->DeviceKey);
/* DeviceString */
- length = strlen(device->DeviceString);
- ok(broken(length == 0) || /* XP on Testbot will return an empty string, whereas XP on real machine doesn't. Probably a bug in virtual adapter driver */
- length > 0, "#%d: expect DeviceString not empty\n", index);
+ ok(broken(!*device->DeviceString) || /* XP on Testbot will return an empty string, whereas XP on real machine doesn't. Probably a bug in virtual adapter driver */
+ *device->DeviceString, "#%d: expect DeviceString not empty\n", index);
/* StateFlags */
if (index == 0)
@@ -139,7 +137,7 @@ static void test_enumdisplaydevices_monitor(int adapter_index, int monitor_index
ok(!strcmp(monitor_name, device->DeviceName), "#%d: expect %s, got %s\n", monitor_index, monitor_name, device->DeviceName);
/* DeviceString */
- ok(strlen(device->DeviceString) > 0, "#%d: expect DeviceString not empty\n", monitor_index);
+ ok(*device->DeviceString, "#%d: expect DeviceString not empty\n", monitor_index);
/* StateFlags */
if (adapter_index == 0 && monitor_index == 0)
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Avoid an unneeded lstrlenA() call.
by Francois Gouget
Note that ptr may be NULL (see ok() check a few lines up).
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/dde.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/tests/dde.c b/dlls/user32/tests/dde.c
index eed2ac437e1..d370df181a3 100644
--- a/dlls/user32/tests/dde.c
+++ b/dlls/user32/tests/dde.c
@@ -1977,7 +1977,7 @@ static void test_DdeCreateDataHandle(void)
ok(size == 262, "Expected 262, got %d\n", size);
todo_wine
{
- ok(lstrlenA((LPSTR)ptr) == 0, "Expected 0, got %d\n", lstrlenA((LPSTR)ptr));
+ ok(ptr && !*ptr, "Expected 0, got %d\n", lstrlenA((LPSTR)ptr));
}
ret = DdeUnaccessData(hdata);
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Avoid an unneeded (&commented out) strlen() call.
by Francois Gouget
Note that pathBuffer is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/listbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/tests/listbox.c b/dlls/user32/tests/listbox.c
index 8d8115131ef..9f6f45990f5 100644
--- a/dlls/user32/tests/listbox.c
+++ b/dlls/user32/tests/listbox.c
@@ -1710,7 +1710,7 @@ static void test_listbox_dlgdir(void)
ok (res == 0, "DlgDirSelectEx() with no selection returned %d, expected 0\n", res);
/* WinXP-SP2 leaves pathBuffer untouched, but Win98 fills it with garbage. */
/*
- ok (strlen(pathBuffer) == 0, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
+ ok (!*pathBuffer, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
*/
/* Test proper drive/dir/file recognition */
itemCount = SendMessageA(g_listBox, LB_GETCOUNT, 0, 0);
--
2.20.1
Dec. 9, 2019
[PATCH] Update to Unicode 12.1.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/bracket.c | 2 +-
dlls/dwrite/linebreak.c | 4 +-
dlls/dwrite/mirror.c | 2 +-
dlls/dwrite/scripts.c | 4 +-
dlls/dwrite/scripts.h | 2 +-
dlls/gdi32/vertical.c | 112 ++--
dlls/kernel32/wctype.c | 52 +-
dlls/kernelbase/compose.c | 2 +-
dlls/kernelbase/decompose.c | 2 +-
dlls/kernelbase/digitmap.c | 2 +-
dlls/usp10/bracket.c | 2 +-
dlls/usp10/indicsyllable.c | 4 +-
dlls/usp10/linebreak.c | 4 +-
dlls/usp10/mirror.c | 2 +-
dlls/usp10/shaping.c | 2 +-
dlls/wineps.drv/vertical.c | 112 ++--
libs/port/casemap.c | 2 +-
libs/port/combclass.c | 2 +-
libs/port/compose.c | 2 +-
libs/port/decompose.c | 985 ++++++++++++++++++------------------
libs/port/digitmap.c | 2 +-
libs/port/wctype.c | 2 +-
tools/make_unicode | 2 +-
23 files changed, 657 insertions(+), 650 deletions(-)
diff --git a/dlls/dwrite/bracket.c b/dlls/dwrite/bracket.c
index 210495f38f..a77c1176f6 100644
--- a/dlls/dwrite/bracket.c
+++ b/dlls/dwrite/bracket.c
@@ -1,5 +1,5 @@
/* Unicode Bidirectional Bracket table */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiBrackets.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiBrackets.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/dwrite/linebreak.c b/dlls/dwrite/linebreak.c
index 904efc6538..ff656f1e69 100644
--- a/dlls/dwrite/linebreak.c
+++ b/dlls/dwrite/linebreak.c
@@ -1,5 +1,5 @@
/* Unicode Line Break Properties */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/LineBreak.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/LineBreak.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -133,7 +133,7 @@ const unsigned short DECLSPEC_HIDDEN wine_linebreak_table[7216] =
0x1770, 0x1680, 0x1680, 0x1780, 0x1680, 0x1680, 0x1680, 0x1680,
0x1790, 0x1680, 0x1680, 0x17a0, 0x1680, 0x1680, 0x16a0, 0x17b0,
0x1680, 0x1790, 0x1680, 0x1680, 0x17c0, 0x1680, 0x1680, 0x1680,
- 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1790,
+ 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
diff --git a/dlls/dwrite/mirror.c b/dlls/dwrite/mirror.c
index 7b43a85703..28e1e8bd9b 100644
--- a/dlls/dwrite/mirror.c
+++ b/dlls/dwrite/mirror.c
@@ -1,5 +1,5 @@
/* Unicode BiDi mirroring */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiMirroring.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiMirroring.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/dwrite/scripts.c b/dlls/dwrite/scripts.c
index cb073a238c..ed85c41122 100644
--- a/dlls/dwrite/scripts.c
+++ b/dlls/dwrite/scripts.c
@@ -1,5 +1,5 @@
/* Unicode Script IDs */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/Scripts.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/Scripts.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -708,7 +708,7 @@ const unsigned short DECLSPEC_HIDDEN wine_scripts_table[6736] =
0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022,
0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0001,
0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c,
- 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0000,
+ 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0001,
0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f,
diff --git a/dlls/dwrite/scripts.h b/dlls/dwrite/scripts.h
index b3cc8fca08..37b678c9db 100644
--- a/dlls/dwrite/scripts.h
+++ b/dlls/dwrite/scripts.h
@@ -1,5 +1,5 @@
/* Unicode Script IDs */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/Scripts.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/Scripts.txt */
/* DO NOT EDIT!! */
enum unicode_script_id {
diff --git a/dlls/gdi32/vertical.c b/dlls/gdi32/vertical.c
index b5baffdde5..b8095fe9ba 100644
--- a/dlls/gdi32/vertical.c
+++ b/dlls/gdi32/vertical.c
@@ -1,10 +1,10 @@
/* Unicode Vertical Orientation */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/VerticalOrientation.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/VerticalOrientation.txt */
/* DO NOT EDIT!! */
#include "windef.h"
-const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
+const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1648] =
{
/* level 1 offsets */
0x0100, 0x0110, 0x0120, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
@@ -13,7 +13,7 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0160, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x01c0, 0x01d0, 0x01e0,
0x0110, 0x0110, 0x0110, 0x01f0, 0x0110, 0x0110, 0x0200, 0x0130,
- 0x0210, 0x0220, 0x0130, 0x0230, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0210, 0x0220, 0x0230, 0x0240, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -27,8 +27,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0130, 0x0240, 0x0110, 0x0110, 0x0110,
- 0x0110, 0x0250, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0130, 0x0130, 0x0130, 0x0130, 0x0250, 0x0110, 0x0110, 0x0110,
+ 0x0110, 0x0260, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -38,56 +38,58 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0260, 0x0270,
+ 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0270, 0x0280,
/* level 2 offsets */
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0290, 0x02a0, 0x0280, 0x02b0, 0x0280, 0x02b0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02c0, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02e0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x02f0, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350, 0x0360, 0x0280,
- 0x0370, 0x0380, 0x0390, 0x03a0, 0x03b0, 0x02d0, 0x02d0, 0x02d0,
- 0x03c0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x03d0, 0x0280, 0x03e0, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x03f0, 0x02d0, 0x0400, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350,
- 0x02d0, 0x0410, 0x0280, 0x0420, 0x0430, 0x0440, 0x0450, 0x02d0,
- 0x02d0, 0x02d0, 0x0460, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x0470, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0480, 0x0490,
- 0x02d0, 0x04a0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0450, 0x02d0, 0x0280, 0x0280, 0x0470, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x04b0, 0x02d0, 0x04c0, 0x04d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x04e0, 0x04f0, 0x02d0, 0x0500, 0x0510, 0x02d0, 0x0520, 0x02d0,
- 0x0530, 0x0540, 0x0550, 0x02d0, 0x0520, 0x02d0, 0x0530, 0x0560,
- 0x02d0, 0x02d0, 0x0570, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0580,
- 0x0580, 0x0580, 0x0580, 0x0580, 0x0580, 0x0590, 0x02d0, 0x05a0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x02d0, 0x0280, 0x02d0, 0x05b0, 0x05c0, 0x05d0, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x05e0, 0x05f0, 0x02d0, 0x0600, 0x02d0, 0x0610, 0x0620, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0630, 0x0640,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02a0, 0x02b0, 0x0290, 0x02c0, 0x0290, 0x02c0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02d0, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02f0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0350, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360, 0x0370, 0x0290,
+ 0x0380, 0x0390, 0x03a0, 0x03b0, 0x03c0, 0x02e0, 0x02e0, 0x02e0,
+ 0x03d0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x03e0, 0x0290, 0x03f0, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0400, 0x02e0, 0x0410, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360,
+ 0x02e0, 0x0420, 0x0290, 0x0430, 0x0440, 0x0450, 0x0460, 0x02e0,
+ 0x02e0, 0x02e0, 0x0470, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x0480, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0490, 0x04a0,
+ 0x02e0, 0x04b0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0460, 0x02e0, 0x0290, 0x0290, 0x0480, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x04c0, 0x02e0, 0x04d0, 0x04e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x04f0, 0x0500, 0x02e0, 0x0510, 0x0520, 0x02e0, 0x0530, 0x02e0,
+ 0x0540, 0x0550, 0x0560, 0x02e0, 0x0530, 0x02e0, 0x0540, 0x0570,
+ 0x02e0, 0x02e0, 0x0580, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0590,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x05a0,
+ 0x0590, 0x0590, 0x0590, 0x0590, 0x0590, 0x05b0, 0x02e0, 0x05c0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x02e0, 0x0290, 0x02e0, 0x05d0, 0x05e0, 0x05f0, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0600, 0x0610, 0x02e0, 0x0620, 0x02e0, 0x0630, 0x0640, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0650, 0x0660,
/* values */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -187,6 +189,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
diff --git a/dlls/kernel32/wctype.c b/dlls/kernel32/wctype.c
index cf25ccc66d..366eaf540d 100644
--- a/dlls/kernel32/wctype.c
+++ b/dlls/kernel32/wctype.c
@@ -3,7 +3,7 @@
#include "windef.h"
-const unsigned short DECLSPEC_HIDDEN wctype_table[7664] =
+const unsigned short DECLSPEC_HIDDEN wctype_table[7648] =
{
/* level 1 offsets */
0x0100, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170,
@@ -136,41 +136,41 @@ const unsigned short DECLSPEC_HIDDEN wctype_table[7664] =
0x1890, 0x0a10, 0x0a10, 0x0dd0, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x1190, 0x1610, 0x0a10, 0x18a0, 0x0740, 0x0740, 0x1800, 0x0a10,
0x1610, 0x18b0, 0x1610, 0x1610, 0x1610, 0x0740, 0x1610, 0x18c0,
- 0x1610, 0x1610, 0x1610, 0x18d0, 0x18e0, 0x1610, 0x1610, 0x18f0,
- 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1900,
- 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1910, 0x1610, 0x1920,
+ 0x1610, 0x1610, 0x1610, 0x18d0, 0x18e0, 0x1610, 0x1610, 0x1610,
+ 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x18f0,
+ 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1900, 0x1610, 0x1910,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x0a10, 0x0a10, 0x0a10, 0x1180, 0x0740, 0x0740, 0x0740, 0x0740,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x09c0,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x0eb0, 0x0740, 0x0740, 0x0740, 0x1640, 0x0a10, 0x0a10, 0x1350,
- 0x1930, 0x0a10, 0x1940, 0x09c0, 0x0620, 0x0620, 0x1950, 0x1960,
- 0x0620, 0x1970, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x1980,
- 0x0740, 0x1990, 0x19a0, 0x19b0, 0x0620, 0x0620, 0x0620, 0x19c0,
- 0x19d0, 0x19e0, 0x19f0, 0x1a00, 0x1a10, 0x09c0, 0x09c0, 0x1a20,
- 0x1a30, 0x0a10, 0x1a40, 0x1a50, 0x0a10, 0x0a10, 0x0a10, 0x1a60,
- 0x1a70, 0x0a10, 0x0a10, 0x1a80, 0x1a90, 0x1140, 0x0750, 0x1aa0,
- 0x12f0, 0x0a10, 0x1ab0, 0x0a10, 0x1ac0, 0x1ad0, 0x0a10, 0x0eb0,
- 0x0a00, 0x0a10, 0x0a10, 0x1ae0, 0x1af0, 0x1b00, 0x1b10, 0x1b20,
- 0x0a10, 0x0a10, 0x1b30, 0x1b40, 0x1b50, 0x1b60, 0x0a10, 0x1b70,
- 0x0a10, 0x0a10, 0x0a10, 0x1b80, 0x1b90, 0x1ba0, 0x1bb0, 0x1bc0,
- 0x1bd0, 0x1be0, 0x17d0, 0x0600, 0x0600, 0x1bf0, 0x1c00, 0x0600,
- 0x0600, 0x0600, 0x0600, 0x0600, 0x0a10, 0x0a10, 0x1c10, 0x1140,
+ 0x1920, 0x0a10, 0x1930, 0x09c0, 0x0620, 0x0620, 0x1940, 0x1950,
+ 0x0620, 0x1960, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x1970,
+ 0x0740, 0x1980, 0x1990, 0x19a0, 0x0620, 0x0620, 0x0620, 0x19b0,
+ 0x19c0, 0x19d0, 0x19e0, 0x19f0, 0x1a00, 0x09c0, 0x09c0, 0x1a10,
+ 0x1a20, 0x0a10, 0x1a30, 0x1a40, 0x0a10, 0x0a10, 0x0a10, 0x1a50,
+ 0x1a60, 0x0a10, 0x0a10, 0x1a70, 0x1a80, 0x1140, 0x0750, 0x1a90,
+ 0x12f0, 0x0a10, 0x1aa0, 0x0a10, 0x1ab0, 0x1ac0, 0x0a10, 0x0eb0,
+ 0x0a00, 0x0a10, 0x0a10, 0x1ad0, 0x1ae0, 0x1af0, 0x1b00, 0x1b10,
+ 0x0a10, 0x0a10, 0x1b20, 0x1b30, 0x1b40, 0x1b50, 0x0a10, 0x1b60,
+ 0x0a10, 0x0a10, 0x0a10, 0x1b70, 0x1b80, 0x1b90, 0x1ba0, 0x1bb0,
+ 0x1bc0, 0x1bd0, 0x17d0, 0x0600, 0x0600, 0x1be0, 0x1bf0, 0x0600,
+ 0x0600, 0x0600, 0x0600, 0x0600, 0x0a10, 0x0a10, 0x1c00, 0x1140,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
- 0x0a10, 0x0a10, 0x1c20, 0x0a10, 0x1c30, 0x0a10, 0x0a10, 0x11f0,
+ 0x0a10, 0x0a10, 0x1c10, 0x0a10, 0x1c20, 0x0a10, 0x0a10, 0x11f0,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x11d0, 0x0a10,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x1200, 0x09c0, 0x09c0,
- 0x1c40, 0x1c50, 0x1c60, 0x1c70, 0x1c80, 0x0850, 0x0850, 0x0850,
- 0x0850, 0x0850, 0x0850, 0x1c90, 0x1ca0, 0x1cb0, 0x0850, 0x0850,
+ 0x1c30, 0x1c40, 0x1c50, 0x1c60, 0x1c70, 0x0850, 0x0850, 0x0850,
+ 0x0850, 0x0850, 0x0850, 0x1c80, 0x1c90, 0x1ca0, 0x0850, 0x0850,
0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850,
0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850,
- 0x0850, 0x0850, 0x0850, 0x1cc0, 0x09c0, 0x0850, 0x0850, 0x0850,
- 0x0850, 0x1cd0, 0x0850, 0x0850, 0x1ce0, 0x09c0, 0x09c0, 0x1cf0,
- 0x0750, 0x1d00, 0x0750, 0x14d0, 0x14d0, 0x1d10, 0x1d20, 0x1d30,
- 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x1d40,
- 0x1d50, 0x1d60, 0x0560, 0x1d70, 0x1d80, 0x1d90, 0x1da0, 0x0a10,
- 0x0a10, 0x0a10, 0x0a10, 0x1190, 0x1db0, 0x1dc0, 0x1dd0, 0x1de0,
+ 0x0850, 0x0850, 0x0850, 0x1cb0, 0x09c0, 0x0850, 0x0850, 0x0850,
+ 0x0850, 0x1cc0, 0x0850, 0x0850, 0x1cd0, 0x09c0, 0x09c0, 0x1ce0,
+ 0x0750, 0x1cf0, 0x0750, 0x14d0, 0x14d0, 0x1d00, 0x1d10, 0x1d20,
+ 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x1d30,
+ 0x1d40, 0x1d50, 0x0560, 0x1d60, 0x1d70, 0x1d80, 0x1d90, 0x0a10,
+ 0x0a10, 0x0a10, 0x0a10, 0x1190, 0x1da0, 0x1db0, 0x1dc0, 0x1dd0,
/* values */
0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220,
0x0220, 0x9268, 0x8228, 0x9228, 0xa228, 0x8228, 0x0220, 0x0220,
@@ -806,8 +806,6 @@ const unsigned short DECLSPEC_HIDDEN wctype_table[7664] =
0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200,
- 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
- 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200,
0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
diff --git a/dlls/kernelbase/compose.c b/dlls/kernelbase/compose.c
index b817d1a058..7ac9445007 100644
--- a/dlls/kernelbase/compose.c
+++ b/dlls/kernelbase/compose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/kernelbase/decompose.c b/dlls/kernelbase/decompose.c
index c185507fd4..3540ad4362 100644
--- a/dlls/kernelbase/decompose.c
+++ b/dlls/kernelbase/decompose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/kernelbase/digitmap.c b/dlls/kernelbase/digitmap.c
index 1e3639e697..35590f3379 100644
--- a/dlls/kernelbase/digitmap.c
+++ b/dlls/kernelbase/digitmap.c
@@ -1,5 +1,5 @@
/* Unicode digit folding mappings */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/bracket.c b/dlls/usp10/bracket.c
index 210495f38f..a77c1176f6 100644
--- a/dlls/usp10/bracket.c
+++ b/dlls/usp10/bracket.c
@@ -1,5 +1,5 @@
/* Unicode Bidirectional Bracket table */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiBrackets.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiBrackets.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/indicsyllable.c b/dlls/usp10/indicsyllable.c
index bc13fec294..339f6c47af 100644
--- a/dlls/usp10/indicsyllable.c
+++ b/dlls/usp10/indicsyllable.c
@@ -1,6 +1,6 @@
/* Unicode Indic Syllabic Category */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/IndicSyllabicCategory.txt */
-/* and from http://www.unicode.org/Public/12.0.0/ucd/IndicPositionalCategory.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/IndicSyllabicCategory.txt */
+/* and from http://www.unicode.org/Public/12.1.0/ucd/IndicPositionalCategory.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/linebreak.c b/dlls/usp10/linebreak.c
index 904efc6538..ff656f1e69 100644
--- a/dlls/usp10/linebreak.c
+++ b/dlls/usp10/linebreak.c
@@ -1,5 +1,5 @@
/* Unicode Line Break Properties */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/LineBreak.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/LineBreak.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -133,7 +133,7 @@ const unsigned short DECLSPEC_HIDDEN wine_linebreak_table[7216] =
0x1770, 0x1680, 0x1680, 0x1780, 0x1680, 0x1680, 0x1680, 0x1680,
0x1790, 0x1680, 0x1680, 0x17a0, 0x1680, 0x1680, 0x16a0, 0x17b0,
0x1680, 0x1790, 0x1680, 0x1680, 0x17c0, 0x1680, 0x1680, 0x1680,
- 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1790,
+ 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
diff --git a/dlls/usp10/mirror.c b/dlls/usp10/mirror.c
index 7b43a85703..28e1e8bd9b 100644
--- a/dlls/usp10/mirror.c
+++ b/dlls/usp10/mirror.c
@@ -1,5 +1,5 @@
/* Unicode BiDi mirroring */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiMirroring.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiMirroring.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/shaping.c b/dlls/usp10/shaping.c
index ebb6fae509..517a0a871f 100644
--- a/dlls/usp10/shaping.c
+++ b/dlls/usp10/shaping.c
@@ -1,5 +1,5 @@
/* Unicode Arabic shaping */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/ArabicShaping.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/ArabicShaping.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/wineps.drv/vertical.c b/dlls/wineps.drv/vertical.c
index b5baffdde5..b8095fe9ba 100644
--- a/dlls/wineps.drv/vertical.c
+++ b/dlls/wineps.drv/vertical.c
@@ -1,10 +1,10 @@
/* Unicode Vertical Orientation */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/VerticalOrientation.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/VerticalOrientation.txt */
/* DO NOT EDIT!! */
#include "windef.h"
-const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
+const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1648] =
{
/* level 1 offsets */
0x0100, 0x0110, 0x0120, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
@@ -13,7 +13,7 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0160, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x01c0, 0x01d0, 0x01e0,
0x0110, 0x0110, 0x0110, 0x01f0, 0x0110, 0x0110, 0x0200, 0x0130,
- 0x0210, 0x0220, 0x0130, 0x0230, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0210, 0x0220, 0x0230, 0x0240, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -27,8 +27,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0130, 0x0240, 0x0110, 0x0110, 0x0110,
- 0x0110, 0x0250, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0130, 0x0130, 0x0130, 0x0130, 0x0250, 0x0110, 0x0110, 0x0110,
+ 0x0110, 0x0260, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -38,56 +38,58 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0260, 0x0270,
+ 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0270, 0x0280,
/* level 2 offsets */
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0290, 0x02a0, 0x0280, 0x02b0, 0x0280, 0x02b0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02c0, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02e0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x02f0, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350, 0x0360, 0x0280,
- 0x0370, 0x0380, 0x0390, 0x03a0, 0x03b0, 0x02d0, 0x02d0, 0x02d0,
- 0x03c0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x03d0, 0x0280, 0x03e0, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x03f0, 0x02d0, 0x0400, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350,
- 0x02d0, 0x0410, 0x0280, 0x0420, 0x0430, 0x0440, 0x0450, 0x02d0,
- 0x02d0, 0x02d0, 0x0460, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x0470, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0480, 0x0490,
- 0x02d0, 0x04a0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0450, 0x02d0, 0x0280, 0x0280, 0x0470, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x04b0, 0x02d0, 0x04c0, 0x04d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x04e0, 0x04f0, 0x02d0, 0x0500, 0x0510, 0x02d0, 0x0520, 0x02d0,
- 0x0530, 0x0540, 0x0550, 0x02d0, 0x0520, 0x02d0, 0x0530, 0x0560,
- 0x02d0, 0x02d0, 0x0570, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0580,
- 0x0580, 0x0580, 0x0580, 0x0580, 0x0580, 0x0590, 0x02d0, 0x05a0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x02d0, 0x0280, 0x02d0, 0x05b0, 0x05c0, 0x05d0, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x05e0, 0x05f0, 0x02d0, 0x0600, 0x02d0, 0x0610, 0x0620, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0630, 0x0640,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02a0, 0x02b0, 0x0290, 0x02c0, 0x0290, 0x02c0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02d0, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02f0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0350, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360, 0x0370, 0x0290,
+ 0x0380, 0x0390, 0x03a0, 0x03b0, 0x03c0, 0x02e0, 0x02e0, 0x02e0,
+ 0x03d0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x03e0, 0x0290, 0x03f0, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0400, 0x02e0, 0x0410, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360,
+ 0x02e0, 0x0420, 0x0290, 0x0430, 0x0440, 0x0450, 0x0460, 0x02e0,
+ 0x02e0, 0x02e0, 0x0470, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x0480, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0490, 0x04a0,
+ 0x02e0, 0x04b0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0460, 0x02e0, 0x0290, 0x0290, 0x0480, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x04c0, 0x02e0, 0x04d0, 0x04e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x04f0, 0x0500, 0x02e0, 0x0510, 0x0520, 0x02e0, 0x0530, 0x02e0,
+ 0x0540, 0x0550, 0x0560, 0x02e0, 0x0530, 0x02e0, 0x0540, 0x0570,
+ 0x02e0, 0x02e0, 0x0580, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0590,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x05a0,
+ 0x0590, 0x0590, 0x0590, 0x0590, 0x0590, 0x05b0, 0x02e0, 0x05c0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x02e0, 0x0290, 0x02e0, 0x05d0, 0x05e0, 0x05f0, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0600, 0x0610, 0x02e0, 0x0620, 0x02e0, 0x0630, 0x0640, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0650, 0x0660,
/* values */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -187,6 +189,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
diff --git a/libs/port/casemap.c b/libs/port/casemap.c
index 2905000c6e..3bf32c94d2 100644
--- a/libs/port/casemap.c
+++ b/libs/port/casemap.c
@@ -1,5 +1,5 @@
/* Unicode case mappings */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/combclass.c b/libs/port/combclass.c
index f5c794a3e4..c402d38a2c 100644
--- a/libs/port/combclass.c
+++ b/libs/port/combclass.c
@@ -1,5 +1,5 @@
/* Unicode Combining Classes */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/compose.c b/libs/port/compose.c
index b817d1a058..7ac9445007 100644
--- a/libs/port/compose.c
+++ b/libs/port/compose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/decompose.c b/libs/port/decompose.c
index 1c3d2b005d..a68156093e 100644
--- a/libs/port/decompose.c
+++ b/libs/port/decompose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -929,7 +929,7 @@ static const WCHAR table[5856] =
0x05d1, 0x05bf, 0x05db, 0x05bf, 0x05e4, 0x05bf, 0x0000, 0x0000
};
-static const WCHAR compatmap_table[8152] =
+static const WCHAR compatmap_table[8154] =
{
/* index */
0x0110, 0x0120, 0x0130, 0x0140, 0x0100, 0x0150, 0x0160, 0x0100,
@@ -1406,283 +1406,283 @@ static const WCHAR compatmap_table[8152] =
0x1639, 0x163a, 0x163b, 0x163c, 0x163d, 0x163e, 0x163f, 0x1640,
0x1641, 0x1642, 0x1643, 0x1644, 0x1645, 0x1646, 0x1647, 0x1648,
/* offsets 0x3300 .. 0x330f */
- 0x1648, 0x164c, 0x1650, 0x1654, 0x1657, 0x165b, 0x165e, 0x1661,
- 0x1666, 0x166a, 0x166d, 0x1670, 0x1673, 0x1677, 0x167b, 0x167e,
+ 0x164a, 0x164e, 0x1652, 0x1656, 0x1659, 0x165d, 0x1660, 0x1663,
+ 0x1668, 0x166c, 0x166f, 0x1672, 0x1675, 0x1679, 0x167d, 0x1680,
/* offsets 0x3310 .. 0x331f */
- 0x1681, 0x1683, 0x1686, 0x168a, 0x168e, 0x1690, 0x1695, 0x169b,
- 0x16a0, 0x16a3, 0x16a8, 0x16ad, 0x16b1, 0x16b4, 0x16b7, 0x16ba,
+ 0x1683, 0x1685, 0x1688, 0x168c, 0x1690, 0x1692, 0x1697, 0x169d,
+ 0x16a2, 0x16a5, 0x16aa, 0x16af, 0x16b3, 0x16b6, 0x16b9, 0x16bc,
/* offsets 0x3320 .. 0x332f */
- 0x16be, 0x16c3, 0x16c7, 0x16ca, 0x16cd, 0x16d0, 0x16d2, 0x16d4,
- 0x16d6, 0x16d8, 0x16db, 0x16de, 0x16e3, 0x16e6, 0x16ea, 0x16ef,
+ 0x16c0, 0x16c5, 0x16c9, 0x16cc, 0x16cf, 0x16d2, 0x16d4, 0x16d6,
+ 0x16d8, 0x16da, 0x16dd, 0x16e0, 0x16e5, 0x16e8, 0x16ec, 0x16f1,
/* offsets 0x3330 .. 0x333f */
- 0x16f2, 0x16f4, 0x16f6, 0x16fb, 0x16ff, 0x1704, 0x1707, 0x170c,
- 0x170e, 0x1711, 0x1714, 0x1717, 0x171a, 0x171d, 0x1721, 0x1724,
+ 0x16f4, 0x16f6, 0x16f8, 0x16fd, 0x1701, 0x1706, 0x1709, 0x170e,
+ 0x1710, 0x1713, 0x1716, 0x1719, 0x171c, 0x171f, 0x1723, 0x1726,
/* offsets 0x3340 .. 0x334f */
- 0x1726, 0x1729, 0x172c, 0x172f, 0x1733, 0x1736, 0x1739, 0x173c,
- 0x1741, 0x1745, 0x1747, 0x174c, 0x174e, 0x1752, 0x1756, 0x1759,
+ 0x1728, 0x172b, 0x172e, 0x1731, 0x1735, 0x1738, 0x173b, 0x173e,
+ 0x1743, 0x1747, 0x1749, 0x174e, 0x1750, 0x1754, 0x1758, 0x175b,
/* offsets 0x3350 .. 0x335f */
- 0x175c, 0x175f, 0x1763, 0x1765, 0x1768, 0x176c, 0x176e, 0x1773,
- 0x1776, 0x1778, 0x177a, 0x177c, 0x177e, 0x1780, 0x1782, 0x1784,
+ 0x175e, 0x1761, 0x1765, 0x1767, 0x176a, 0x176e, 0x1770, 0x1775,
+ 0x1778, 0x177a, 0x177c, 0x177e, 0x1780, 0x1782, 0x1784, 0x1786,
/* offsets 0x3360 .. 0x336f */
- 0x1786, 0x1788, 0x178a, 0x178d, 0x1790, 0x1793, 0x1796, 0x1799,
- 0x179c, 0x179f, 0x17a2, 0x17a5, 0x17a8, 0x17ab, 0x17ae, 0x17b1,
+ 0x1788, 0x178a, 0x178c, 0x178f, 0x1792, 0x1795, 0x1798, 0x179b,
+ 0x179e, 0x17a1, 0x17a4, 0x17a7, 0x17aa, 0x17ad, 0x17b0, 0x17b3,
/* offsets 0x3370 .. 0x337f */
- 0x17b4, 0x17b7, 0x17ba, 0x17bc, 0x17be, 0x17c1, 0x17c3, 0x17c5,
- 0x17c7, 0x17ca, 0x17cd, 0x17cf, 0x17d1, 0x17d3, 0x17d5, 0x17d7,
+ 0x17b6, 0x17b9, 0x17bc, 0x17be, 0x17c0, 0x17c3, 0x17c5, 0x17c7,
+ 0x17c9, 0x17cc, 0x17cf, 0x17d1, 0x17d3, 0x17d5, 0x17d7, 0x17d9,
/* offsets 0x3380 .. 0x338f */
- 0x17db, 0x17dd, 0x17df, 0x17e1, 0x17e3, 0x17e5, 0x17e7, 0x17e9,
- 0x17eb, 0x17ee, 0x17f2, 0x17f4, 0x17f6, 0x17f8, 0x17fa, 0x17fc,
+ 0x17dd, 0x17df, 0x17e1, 0x17e3, 0x17e5, 0x17e7, 0x17e9, 0x17eb,
+ 0x17ed, 0x17f0, 0x17f4, 0x17f6, 0x17f8, 0x17fa, 0x17fc, 0x17fe,
/* offsets 0x3390 .. 0x339f */
- 0x17fe, 0x1800, 0x1803, 0x1806, 0x1809, 0x180c, 0x180e, 0x1810,
- 0x1812, 0x1814, 0x1816, 0x1818, 0x181a, 0x181c, 0x181e, 0x1820,
+ 0x1800, 0x1802, 0x1805, 0x1808, 0x180b, 0x180e, 0x1810, 0x1812,
+ 0x1814, 0x1816, 0x1818, 0x181a, 0x181c, 0x181e, 0x1820, 0x1822,
/* offsets 0x33a0 .. 0x33af */
- 0x1823, 0x1826, 0x1828, 0x182b, 0x182e, 0x1831, 0x1833, 0x1836,
- 0x1839, 0x183d, 0x183f, 0x1842, 0x1845, 0x1848, 0x184b, 0x1850,
+ 0x1825, 0x1828, 0x182a, 0x182d, 0x1830, 0x1833, 0x1835, 0x1838,
+ 0x183b, 0x183f, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, 0x1852,
/* offsets 0x33b0 .. 0x33bf */
- 0x1856, 0x1858, 0x185a, 0x185c, 0x185e, 0x1860, 0x1862, 0x1864,
- 0x1866, 0x1868, 0x186a, 0x186c, 0x186e, 0x1870, 0x1872, 0x1874,
+ 0x1858, 0x185a, 0x185c, 0x185e, 0x1860, 0x1862, 0x1864, 0x1866,
+ 0x1868, 0x186a, 0x186c, 0x186e, 0x1870, 0x1872, 0x1874, 0x1876,
/* offsets 0x33c0 .. 0x33cf */
- 0x1876, 0x1878, 0x187a, 0x187e, 0x1880, 0x1882, 0x1884, 0x1888,
- 0x188b, 0x188d, 0x188f, 0x1891, 0x1893, 0x1895, 0x1897, 0x1899,
+ 0x1878, 0x187a, 0x187c, 0x1880, 0x1882, 0x1884, 0x1886, 0x188a,
+ 0x188d, 0x188f, 0x1891, 0x1893, 0x1895, 0x1897, 0x1899, 0x189b,
/* offsets 0x33d0 .. 0x33df */
- 0x189b, 0x189d, 0x189f, 0x18a2, 0x18a4, 0x18a6, 0x18a9, 0x18ac,
- 0x18ae, 0x18b2, 0x18b5, 0x18b7, 0x18b9, 0x18bb, 0x18bd, 0x18c0,
+ 0x189d, 0x189f, 0x18a1, 0x18a4, 0x18a6, 0x18a8, 0x18ab, 0x18ae,
+ 0x18b0, 0x18b4, 0x18b7, 0x18b9, 0x18bb, 0x18bd, 0x18bf, 0x18c2,
/* offsets 0x33e0 .. 0x33ef */
- 0x18c3, 0x18c5, 0x18c7, 0x18c9, 0x18cb, 0x18cd, 0x18cf, 0x18d1,
- 0x18d3, 0x18d5, 0x18d8, 0x18db, 0x18de, 0x18e1, 0x18e4, 0x18e7,
+ 0x18c5, 0x18c7, 0x18c9, 0x18cb, 0x18cd, 0x18cf, 0x18d1, 0x18d3,
+ 0x18d5, 0x18d7, 0x18da, 0x18dd, 0x18e0, 0x18e3, 0x18e6, 0x18e9,
/* offsets 0x33f0 .. 0x33ff */
- 0x18ea, 0x18ed, 0x18f0, 0x18f3, 0x18f6, 0x18f9, 0x18fc, 0x18ff,
- 0x1902, 0x1905, 0x1908, 0x190b, 0x190e, 0x1911, 0x1914, 0x1917,
+ 0x18ec, 0x18ef, 0x18f2, 0x18f5, 0x18f8, 0x18fb, 0x18fe, 0x1901,
+ 0x1904, 0x1907, 0x190a, 0x190d, 0x1910, 0x1913, 0x1916, 0x1919,
/* offsets 0xa690 .. 0xa69f */
- 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191a,
- 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191b, 0x191c, 0x191c,
+ 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191c,
+ 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191d, 0x191e, 0x191e,
/* offsets 0xa770 .. 0xa77f */
- 0x191c, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d,
- 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d,
+ 0x191e, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
+ 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
/* offsets 0xa7f0 .. 0xa7ff */
- 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d,
- 0x191d, 0x191e, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
- /* offsets 0xab50 .. 0xab5f */
0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
- 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x1920, 0x1921, 0x1922,
+ 0x191f, 0x1920, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921,
+ /* offsets 0xab50 .. 0xab5f */
+ 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921,
+ 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1922, 0x1923, 0x1924,
/* offsets 0xfb00 .. 0xfb0f */
- 0x1923, 0x1925, 0x1927, 0x1929, 0x192c, 0x192f, 0x1931, 0x1933,
- 0x1933, 0x1933, 0x1933, 0x1933, 0x1933, 0x1933, 0x1933, 0x1933,
+ 0x1925, 0x1927, 0x1929, 0x192b, 0x192e, 0x1931, 0x1933, 0x1935,
+ 0x1935, 0x1935, 0x1935, 0x1935, 0x1935, 0x1935, 0x1935, 0x1935,
/* offsets 0xfb10 .. 0xfb1f */
- 0x1933, 0x1933, 0x1933, 0x1933, 0x1935, 0x1937, 0x1939, 0x193b,
- 0x193d, 0x193d, 0x193d, 0x193d, 0x193d, 0x193d, 0x193d, 0x193d,
+ 0x1935, 0x1935, 0x1935, 0x1935, 0x1937, 0x1939, 0x193b, 0x193d,
+ 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x193f,
/* offsets 0xfb20 .. 0xfb2f */
- 0x193d, 0x193e, 0x193f, 0x1940, 0x1941, 0x1942, 0x1943, 0x1944,
- 0x1945, 0x1946, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947,
+ 0x193f, 0x1940, 0x1941, 0x1942, 0x1943, 0x1944, 0x1945, 0x1946,
+ 0x1947, 0x1948, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
/* offsets 0xfb40 .. 0xfb4f */
- 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947,
- 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947,
+ 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
+ 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
/* offsets 0xfb50 .. 0xfb5f */
- 0x1949, 0x194a, 0x194b, 0x194c, 0x194d, 0x194e, 0x194f, 0x1950,
- 0x1951, 0x1952, 0x1953, 0x1954, 0x1955, 0x1956, 0x1957, 0x1958,
+ 0x194b, 0x194c, 0x194d, 0x194e, 0x194f, 0x1950, 0x1951, 0x1952,
+ 0x1953, 0x1954, 0x1955, 0x1956, 0x1957, 0x1958, 0x1959, 0x195a,
/* offsets 0xfb60 .. 0xfb6f */
- 0x1959, 0x195a, 0x195b, 0x195c, 0x195d, 0x195e, 0x195f, 0x1960,
- 0x1961, 0x1962, 0x1963, 0x1964, 0x1965, 0x1966, 0x1967, 0x1968,
+ 0x195b, 0x195c, 0x195d, 0x195e, 0x195f, 0x1960, 0x1961, 0x1962,
+ 0x1963, 0x1964, 0x1965, 0x1966, 0x1967, 0x1968, 0x1969, 0x196a,
/* offsets 0xfb70 .. 0xfb7f */
- 0x1969, 0x196a, 0x196b, 0x196c, 0x196d, 0x196e, 0x196f, 0x1970,
- 0x1971, 0x1972, 0x1973, 0x1974, 0x1975, 0x1976, 0x1977, 0x1978,
+ 0x196b, 0x196c, 0x196d, 0x196e, 0x196f, 0x1970, 0x1971, 0x1972,
+ 0x1973, 0x1974, 0x1975, 0x1976, 0x1977, 0x1978, 0x1979, 0x197a,
/* offsets 0xfb80 .. 0xfb8f */
- 0x1979, 0x197a, 0x197b, 0x197c, 0x197d, 0x197e, 0x197f, 0x1980,
- 0x1981, 0x1982, 0x1983, 0x1984, 0x1985, 0x1986, 0x1987, 0x1988,
+ 0x197b, 0x197c, 0x197d, 0x197e, 0x197f, 0x1980, 0x1981, 0x1982,
+ 0x1983, 0x1984, 0x1985, 0x1986, 0x1987, 0x1988, 0x1989, 0x198a,
/* offsets 0xfb90 .. 0xfb9f */
- 0x1989, 0x198a, 0x198b, 0x198c, 0x198d, 0x198e, 0x198f, 0x1990,
- 0x1991, 0x1992, 0x1993, 0x1994, 0x1995, 0x1996, 0x1997, 0x1998,
+ 0x198b, 0x198c, 0x198d, 0x198e, 0x198f, 0x1990, 0x1991, 0x1992,
+ 0x1993, 0x1994, 0x1995, 0x1996, 0x1997, 0x1998, 0x1999, 0x199a,
/* offsets 0xfba0 .. 0xfbaf */
- 0x1999, 0x199a, 0x199b, 0x199c, 0x199d, 0x199e, 0x199f, 0x19a0,
- 0x19a1, 0x19a2, 0x19a3, 0x19a4, 0x19a5, 0x19a6, 0x19a7, 0x19a8,
+ 0x199b, 0x199c, 0x199d, 0x199e, 0x199f, 0x19a0, 0x19a1, 0x19a2,
+ 0x19a3, 0x19a4, 0x19a5, 0x19a6, 0x19a7, 0x19a8, 0x19a9, 0x19aa,
/* offsets 0xfbb0 .. 0xfbbf */
- 0x19a9, 0x19aa, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab,
- 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab,
+ 0x19ab, 0x19ac, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad,
+ 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad,
/* offsets 0xfbd0 .. 0xfbdf */
- 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ac, 0x19ad, 0x19ae, 0x19af,
- 0x19b0, 0x19b1, 0x19b2, 0x19b3, 0x19b4, 0x19b5, 0x19b6, 0x19b7,
+ 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ae, 0x19af, 0x19b0, 0x19b1,
+ 0x19b2, 0x19b3, 0x19b4, 0x19b5, 0x19b6, 0x19b7, 0x19b8, 0x19b9,
/* offsets 0xfbe0 .. 0xfbef */
- 0x19b8, 0x19b9, 0x19ba, 0x19bb, 0x19bc, 0x19bd, 0x19be, 0x19bf,
- 0x19c0, 0x19c1, 0x19c2, 0x19c4, 0x19c6, 0x19c8, 0x19ca, 0x19cc,
+ 0x19ba, 0x19bb, 0x19bc, 0x19bd, 0x19be, 0x19bf, 0x19c0, 0x19c1,
+ 0x19c2, 0x19c3, 0x19c4, 0x19c6, 0x19c8, 0x19ca, 0x19cc, 0x19ce,
/* offsets 0xfbf0 .. 0xfbff */
- 0x19ce, 0x19d0, 0x19d2, 0x19d4, 0x19d6, 0x19d8, 0x19da, 0x19dc,
- 0x19de, 0x19e0, 0x19e2, 0x19e4, 0x19e6, 0x19e7, 0x19e8, 0x19e9,
+ 0x19d0, 0x19d2, 0x19d4, 0x19d6, 0x19d8, 0x19da, 0x19dc, 0x19de,
+ 0x19e0, 0x19e2, 0x19e4, 0x19e6, 0x19e8, 0x19e9, 0x19ea, 0x19eb,
/* offsets 0xfc00 .. 0xfc0f */
- 0x19ea, 0x19ec, 0x19ee, 0x19f0, 0x19f2, 0x19f4, 0x19f6, 0x19f8,
- 0x19fa, 0x19fc, 0x19fe, 0x1a00, 0x1a02, 0x1a04, 0x1a06, 0x1a08,
+ 0x19ec, 0x19ee, 0x19f0, 0x19f2, 0x19f4, 0x19f6, 0x19f8, 0x19fa,
+ 0x19fc, 0x19fe, 0x1a00, 0x1a02, 0x1a04, 0x1a06, 0x1a08, 0x1a0a,
/* offsets 0xfc10 .. 0xfc1f */
- 0x1a0a, 0x1a0c, 0x1a0e, 0x1a10, 0x1a12, 0x1a14, 0x1a16, 0x1a18,
- 0x1a1a, 0x1a1c, 0x1a1e, 0x1a20, 0x1a22, 0x1a24, 0x1a26, 0x1a28,
+ 0x1a0c, 0x1a0e, 0x1a10, 0x1a12, 0x1a14, 0x1a16, 0x1a18, 0x1a1a,
+ 0x1a1c, 0x1a1e, 0x1a20, 0x1a22, 0x1a24, 0x1a26, 0x1a28, 0x1a2a,
/* offsets 0xfc20 .. 0xfc2f */
- 0x1a2a, 0x1a2c, 0x1a2e, 0x1a30, 0x1a32, 0x1a34, 0x1a36, 0x1a38,
- 0x1a3a, 0x1a3c, 0x1a3e, 0x1a40, 0x1a42, 0x1a44, 0x1a46, 0x1a48,
+ 0x1a2c, 0x1a2e, 0x1a30, 0x1a32, 0x1a34, 0x1a36, 0x1a38, 0x1a3a,
+ 0x1a3c, 0x1a3e, 0x1a40, 0x1a42, 0x1a44, 0x1a46, 0x1a48, 0x1a4a,
/* offsets 0xfc30 .. 0xfc3f */
- 0x1a4a, 0x1a4c, 0x1a4e, 0x1a50, 0x1a52, 0x1a54, 0x1a56, 0x1a58,
- 0x1a5a, 0x1a5c, 0x1a5e, 0x1a60, 0x1a62, 0x1a64, 0x1a66, 0x1a68,
+ 0x1a4c, 0x1a4e, 0x1a50, 0x1a52, 0x1a54, 0x1a56, 0x1a58, 0x1a5a,
+ 0x1a5c, 0x1a5e, 0x1a60, 0x1a62, 0x1a64, 0x1a66, 0x1a68, 0x1a6a,
/* offsets 0xfc40 .. 0xfc4f */
- 0x1a6a, 0x1a6c, 0x1a6e, 0x1a70, 0x1a72, 0x1a74, 0x1a76, 0x1a78,
- 0x1a7a, 0x1a7c, 0x1a7e, 0x1a80, 0x1a82, 0x1a84, 0x1a86, 0x1a88,
+ 0x1a6c, 0x1a6e, 0x1a70, 0x1a72, 0x1a74, 0x1a76, 0x1a78, 0x1a7a,
+ 0x1a7c, 0x1a7e, 0x1a80, 0x1a82, 0x1a84, 0x1a86, 0x1a88, 0x1a8a,
/* offsets 0xfc50 .. 0xfc5f */
- 0x1a8a, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, 0x1a96, 0x1a98,
- 0x1a9a, 0x1a9c, 0x1a9e, 0x1aa0, 0x1aa2, 0x1aa4, 0x1aa6, 0x1aa9,
+ 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, 0x1a96, 0x1a98, 0x1a9a,
+ 0x1a9c, 0x1a9e, 0x1aa0, 0x1aa2, 0x1aa4, 0x1aa6, 0x1aa8, 0x1aab,
/* offsets 0xfc60 .. 0xfc6f */
- 0x1aac, 0x1aaf, 0x1ab2, 0x1ab5, 0x1ab8, 0x1aba, 0x1abc, 0x1abe,
- 0x1ac0, 0x1ac2, 0x1ac4, 0x1ac6, 0x1ac8, 0x1aca, 0x1acc, 0x1ace,
+ 0x1aae, 0x1ab1, 0x1ab4, 0x1ab7, 0x1aba, 0x1abc, 0x1abe, 0x1ac0,
+ 0x1ac2, 0x1ac4, 0x1ac6, 0x1ac8, 0x1aca, 0x1acc, 0x1ace, 0x1ad0,
/* offsets 0xfc70 .. 0xfc7f */
- 0x1ad0, 0x1ad2, 0x1ad4, 0x1ad6, 0x1ad8, 0x1ada, 0x1adc, 0x1ade,
- 0x1ae0, 0x1ae2, 0x1ae4, 0x1ae6, 0x1ae8, 0x1aea, 0x1aec, 0x1aee,
+ 0x1ad2, 0x1ad4, 0x1ad6, 0x1ad8, 0x1ada, 0x1adc, 0x1ade, 0x1ae0,
+ 0x1ae2, 0x1ae4, 0x1ae6, 0x1ae8, 0x1aea, 0x1aec, 0x1aee, 0x1af0,
/* offsets 0xfc80 .. 0xfc8f */
- 0x1af0, 0x1af2, 0x1af4, 0x1af6, 0x1af8, 0x1afa, 0x1afc, 0x1afe,
- 0x1b00, 0x1b02, 0x1b04, 0x1b06, 0x1b08, 0x1b0a, 0x1b0c, 0x1b0e,
+ 0x1af2, 0x1af4, 0x1af6, 0x1af8, 0x1afa, 0x1afc, 0x1afe, 0x1b00,
+ 0x1b02, 0x1b04, 0x1b06, 0x1b08, 0x1b0a, 0x1b0c, 0x1b0e, 0x1b10,
/* offsets 0xfc90 .. 0xfc9f */
- 0x1b10, 0x1b12, 0x1b14, 0x1b16, 0x1b18, 0x1b1a, 0x1b1c, 0x1b1e,
- 0x1b20, 0x1b22, 0x1b24, 0x1b26, 0x1b28, 0x1b2a, 0x1b2c, 0x1b2e,
+ 0x1b12, 0x1b14, 0x1b16, 0x1b18, 0x1b1a, 0x1b1c, 0x1b1e, 0x1b20,
+ 0x1b22, 0x1b24, 0x1b26, 0x1b28, 0x1b2a, 0x1b2c, 0x1b2e, 0x1b30,
/* offsets 0xfca0 .. 0xfcaf */
- 0x1b30, 0x1b32, 0x1b34, 0x1b36, 0x1b38, 0x1b3a, 0x1b3c, 0x1b3e,
- 0x1b40, 0x1b42, 0x1b44, 0x1b46, 0x1b48, 0x1b4a, 0x1b4c, 0x1b4e,
+ 0x1b32, 0x1b34, 0x1b36, 0x1b38, 0x1b3a, 0x1b3c, 0x1b3e, 0x1b40,
+ 0x1b42, 0x1b44, 0x1b46, 0x1b48, 0x1b4a, 0x1b4c, 0x1b4e, 0x1b50,
/* offsets 0xfcb0 .. 0xfcbf */
- 0x1b50, 0x1b52, 0x1b54, 0x1b56, 0x1b58, 0x1b5a, 0x1b5c, 0x1b5e,
- 0x1b60, 0x1b62, 0x1b64, 0x1b66, 0x1b68, 0x1b6a, 0x1b6c, 0x1b6e,
+ 0x1b52, 0x1b54, 0x1b56, 0x1b58, 0x1b5a, 0x1b5c, 0x1b5e, 0x1b60,
+ 0x1b62, 0x1b64, 0x1b66, 0x1b68, 0x1b6a, 0x1b6c, 0x1b6e, 0x1b70,
/* offsets 0xfcc0 .. 0xfccf */
- 0x1b70, 0x1b72, 0x1b74, 0x1b76, 0x1b78, 0x1b7a, 0x1b7c, 0x1b7e,
- 0x1b80, 0x1b82, 0x1b84, 0x1b86, 0x1b88, 0x1b8a, 0x1b8c, 0x1b8e,
+ 0x1b72, 0x1b74, 0x1b76, 0x1b78, 0x1b7a, 0x1b7c, 0x1b7e, 0x1b80,
+ 0x1b82, 0x1b84, 0x1b86, 0x1b88, 0x1b8a, 0x1b8c, 0x1b8e, 0x1b90,
/* offsets 0xfcd0 .. 0xfcdf */
- 0x1b90, 0x1b92, 0x1b94, 0x1b96, 0x1b98, 0x1b9a, 0x1b9c, 0x1b9e,
- 0x1ba0, 0x1ba2, 0x1ba4, 0x1ba6, 0x1ba8, 0x1baa, 0x1bac, 0x1bae,
+ 0x1b92, 0x1b94, 0x1b96, 0x1b98, 0x1b9a, 0x1b9c, 0x1b9e, 0x1ba0,
+ 0x1ba2, 0x1ba4, 0x1ba6, 0x1ba8, 0x1baa, 0x1bac, 0x1bae, 0x1bb0,
/* offsets 0xfce0 .. 0xfcef */
- 0x1bb0, 0x1bb2, 0x1bb4, 0x1bb6, 0x1bb8, 0x1bba, 0x1bbc, 0x1bbe,
- 0x1bc0, 0x1bc2, 0x1bc4, 0x1bc6, 0x1bc8, 0x1bca, 0x1bcc, 0x1bce,
+ 0x1bb2, 0x1bb4, 0x1bb6, 0x1bb8, 0x1bba, 0x1bbc, 0x1bbe, 0x1bc0,
+ 0x1bc2, 0x1bc4, 0x1bc6, 0x1bc8, 0x1bca, 0x1bcc, 0x1bce, 0x1bd0,
/* offsets 0xfcf0 .. 0xfcff */
- 0x1bd0, 0x1bd2, 0x1bd4, 0x1bd7, 0x1bda, 0x1bdd, 0x1bdf, 0x1be1,
- 0x1be3, 0x1be5, 0x1be7, 0x1be9, 0x1beb, 0x1bed, 0x1bef, 0x1bf1,
+ 0x1bd2, 0x1bd4, 0x1bd6, 0x1bd9, 0x1bdc, 0x1bdf, 0x1be1, 0x1be3,
+ 0x1be5, 0x1be7, 0x1be9, 0x1beb, 0x1bed, 0x1bef, 0x1bf1, 0x1bf3,
/* offsets 0xfd00 .. 0xfd0f */
- 0x1bf3, 0x1bf5, 0x1bf7, 0x1bf9, 0x1bfb, 0x1bfd, 0x1bff, 0x1c01,
- 0x1c03, 0x1c05, 0x1c07, 0x1c09, 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11,
+ 0x1bf5, 0x1bf7, 0x1bf9, 0x1bfb, 0x1bfd, 0x1bff, 0x1c01, 0x1c03,
+ 0x1c05, 0x1c07, 0x1c09, 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11, 0x1c13,
/* offsets 0xfd10 .. 0xfd1f */
- 0x1c13, 0x1c15, 0x1c17, 0x1c19, 0x1c1b, 0x1c1d, 0x1c1f, 0x1c21,
- 0x1c23, 0x1c25, 0x1c27, 0x1c29, 0x1c2b, 0x1c2d, 0x1c2f, 0x1c31,
+ 0x1c15, 0x1c17, 0x1c19, 0x1c1b, 0x1c1d, 0x1c1f, 0x1c21, 0x1c23,
+ 0x1c25, 0x1c27, 0x1c29, 0x1c2b, 0x1c2d, 0x1c2f, 0x1c31, 0x1c33,
/* offsets 0xfd20 .. 0xfd2f */
- 0x1c33, 0x1c35, 0x1c37, 0x1c39, 0x1c3b, 0x1c3d, 0x1c3f, 0x1c41,
- 0x1c43, 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, 0x1c4f, 0x1c51,
+ 0x1c35, 0x1c37, 0x1c39, 0x1c3b, 0x1c3d, 0x1c3f, 0x1c41, 0x1c43,
+ 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, 0x1c4f, 0x1c51, 0x1c53,
/* offsets 0xfd30 .. 0xfd3f */
- 0x1c53, 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, 0x1c5f, 0x1c61,
- 0x1c63, 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, 0x1c6f, 0x1c6f,
+ 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, 0x1c5f, 0x1c61, 0x1c63,
+ 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, 0x1c6f, 0x1c71, 0x1c71,
/* offsets 0xfd50 .. 0xfd5f */
- 0x1c6f, 0x1c72, 0x1c75, 0x1c78, 0x1c7b, 0x1c7e, 0x1c81, 0x1c84,
- 0x1c87, 0x1c8a, 0x1c8d, 0x1c90, 0x1c93, 0x1c96, 0x1c99, 0x1c9c,
+ 0x1c71, 0x1c74, 0x1c77, 0x1c7a, 0x1c7d, 0x1c80, 0x1c83, 0x1c86,
+ 0x1c89, 0x1c8c, 0x1c8f, 0x1c92, 0x1c95, 0x1c98, 0x1c9b, 0x1c9e,
/* offsets 0xfd60 .. 0xfd6f */
- 0x1c9f, 0x1ca2, 0x1ca5, 0x1ca8, 0x1cab, 0x1cae, 0x1cb1, 0x1cb4,
- 0x1cb7, 0x1cba, 0x1cbd, 0x1cc0, 0x1cc3, 0x1cc6, 0x1cc9, 0x1ccc,
+ 0x1ca1, 0x1ca4, 0x1ca7, 0x1caa, 0x1cad, 0x1cb0, 0x1cb3, 0x1cb6,
+ 0x1cb9, 0x1cbc, 0x1cbf, 0x1cc2, 0x1cc5, 0x1cc8, 0x1ccb, 0x1cce,
/* offsets 0xfd70 .. 0xfd7f */
- 0x1ccf, 0x1cd2, 0x1cd5, 0x1cd8, 0x1cdb, 0x1cde, 0x1ce1, 0x1ce4,
- 0x1ce7, 0x1cea, 0x1ced, 0x1cf0, 0x1cf3, 0x1cf6, 0x1cf9, 0x1cfc,
+ 0x1cd1, 0x1cd4, 0x1cd7, 0x1cda, 0x1cdd, 0x1ce0, 0x1ce3, 0x1ce6,
+ 0x1ce9, 0x1cec, 0x1cef, 0x1cf2, 0x1cf5, 0x1cf8, 0x1cfb, 0x1cfe,
/* offsets 0xfd80 .. 0xfd8f */
- 0x1cff, 0x1d02, 0x1d05, 0x1d08, 0x1d0b, 0x1d0e, 0x1d11, 0x1d14,
- 0x1d17, 0x1d1a, 0x1d1d, 0x1d20, 0x1d23, 0x1d26, 0x1d29, 0x1d2c,
+ 0x1d01, 0x1d04, 0x1d07, 0x1d0a, 0x1d0d, 0x1d10, 0x1d13, 0x1d16,
+ 0x1d19, 0x1d1c, 0x1d1f, 0x1d22, 0x1d25, 0x1d28, 0x1d2b, 0x1d2e,
/* offsets 0xfd90 .. 0xfd9f */
- 0x1d2f, 0x1d2f, 0x1d2f, 0x1d32, 0x1d35, 0x1d38, 0x1d3b, 0x1d3e,
- 0x1d41, 0x1d44, 0x1d47, 0x1d4a, 0x1d4d, 0x1d50, 0x1d53, 0x1d56,
+ 0x1d31, 0x1d31, 0x1d31, 0x1d34, 0x1d37, 0x1d3a, 0x1d3d, 0x1d40,
+ 0x1d43, 0x1d46, 0x1d49, 0x1d4c, 0x1d4f, 0x1d52, 0x1d55, 0x1d58,
/* offsets 0xfda0 .. 0xfdaf */
- 0x1d59, 0x1d5c, 0x1d5f, 0x1d62, 0x1d65, 0x1d68, 0x1d6b, 0x1d6e,
- 0x1d71, 0x1d74, 0x1d77, 0x1d7a, 0x1d7d, 0x1d80, 0x1d83, 0x1d86,
+ 0x1d5b, 0x1d5e, 0x1d61, 0x1d64, 0x1d67, 0x1d6a, 0x1d6d, 0x1d70,
+ 0x1d73, 0x1d76, 0x1d79, 0x1d7c, 0x1d7f, 0x1d82, 0x1d85, 0x1d88,
/* offsets 0xfdb0 .. 0xfdbf */
- 0x1d89, 0x1d8c, 0x1d8f, 0x1d92, 0x1d95, 0x1d98, 0x1d9b, 0x1d9e,
- 0x1da1, 0x1da4, 0x1da7, 0x1daa, 0x1dad, 0x1db0, 0x1db3, 0x1db6,
+ 0x1d8b, 0x1d8e, 0x1d91, 0x1d94, 0x1d97, 0x1d9a, 0x1d9d, 0x1da0,
+ 0x1da3, 0x1da6, 0x1da9, 0x1dac, 0x1daf, 0x1db2, 0x1db5, 0x1db8,
/* offsets 0xfdc0 .. 0xfdcf */
- 0x1db9, 0x1dbc, 0x1dbf, 0x1dc2, 0x1dc5, 0x1dc8, 0x1dcb, 0x1dce,
- 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1,
+ 0x1dbb, 0x1dbe, 0x1dc1, 0x1dc4, 0x1dc7, 0x1dca, 0x1dcd, 0x1dd0,
+ 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3,
/* offsets 0xfdf0 .. 0xfdff */
- 0x1dd1, 0x1dd4, 0x1dd7, 0x1ddb, 0x1ddf, 0x1de3, 0x1de7, 0x1deb,
- 0x1def, 0x1df3, 0x1df6, 0x1e08, 0x1e10, 0x1e14, 0x1e14, 0x1e14,
+ 0x1dd3, 0x1dd6, 0x1dd9, 0x1ddd, 0x1de1, 0x1de5, 0x1de9, 0x1ded,
+ 0x1df1, 0x1df5, 0x1df8, 0x1e0a, 0x1e12, 0x1e16, 0x1e16, 0x1e16,
/* offsets 0xfe10 .. 0xfe1f */
- 0x1e14, 0x1e15, 0x1e16, 0x1e17, 0x1e18, 0x1e19, 0x1e1a, 0x1e1b,
- 0x1e1c, 0x1e1d, 0x1e1e, 0x1e1e, 0x1e1e, 0x1e1e, 0x1e1e, 0x1e1e,
+ 0x1e16, 0x1e17, 0x1e18, 0x1e19, 0x1e1a, 0x1e1b, 0x1e1c, 0x1e1d,
+ 0x1e1e, 0x1e1f, 0x1e20, 0x1e20, 0x1e20, 0x1e20, 0x1e20, 0x1e20,
/* offsets 0xfe30 .. 0xfe3f */
- 0x1e1e, 0x1e1f, 0x1e20, 0x1e21, 0x1e22, 0x1e23, 0x1e24, 0x1e25,
- 0x1e26, 0x1e27, 0x1e28, 0x1e29, 0x1e2a, 0x1e2b, 0x1e2c, 0x1e2d,
+ 0x1e20, 0x1e21, 0x1e22, 0x1e23, 0x1e24, 0x1e25, 0x1e26, 0x1e27,
+ 0x1e28, 0x1e29, 0x1e2a, 0x1e2b, 0x1e2c, 0x1e2d, 0x1e2e, 0x1e2f,
/* offsets 0xfe40 .. 0xfe4f */
- 0x1e2e, 0x1e2f, 0x1e30, 0x1e31, 0x1e32, 0x1e33, 0x1e33, 0x1e33,
- 0x1e34, 0x1e35, 0x1e36, 0x1e37, 0x1e38, 0x1e39, 0x1e3a, 0x1e3b,
+ 0x1e30, 0x1e31, 0x1e32, 0x1e33, 0x1e34, 0x1e35, 0x1e35, 0x1e35,
+ 0x1e36, 0x1e37, 0x1e38, 0x1e39, 0x1e3a, 0x1e3b, 0x1e3c, 0x1e3d,
/* offsets 0xfe50 .. 0xfe5f */
- 0x1e3c, 0x1e3d, 0x1e3e, 0x1e3f, 0x1e3f, 0x1e40, 0x1e41, 0x1e42,
- 0x1e43, 0x1e44, 0x1e45, 0x1e46, 0x1e47, 0x1e48, 0x1e49, 0x1e4a,
+ 0x1e3e, 0x1e3f, 0x1e40, 0x1e41, 0x1e41, 0x1e42, 0x1e43, 0x1e44,
+ 0x1e45, 0x1e46, 0x1e47, 0x1e48, 0x1e49, 0x1e4a, 0x1e4b, 0x1e4c,
/* offsets 0xfe60 .. 0xfe6f */
- 0x1e4b, 0x1e4c, 0x1e4d, 0x1e4e, 0x1e4f, 0x1e50, 0x1e51, 0x1e52,
- 0x1e52, 0x1e53, 0x1e54, 0x1e55, 0x1e56, 0x1e56, 0x1e56, 0x1e56,
+ 0x1e4d, 0x1e4e, 0x1e4f, 0x1e50, 0x1e51, 0x1e52, 0x1e53, 0x1e54,
+ 0x1e54, 0x1e55, 0x1e56, 0x1e57, 0x1e58, 0x1e58, 0x1e58, 0x1e58,
/* offsets 0xfe70 .. 0xfe7f */
- 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5c, 0x1e5e, 0x1e5e, 0x1e60,
- 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70,
+ 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e5e, 0x1e60, 0x1e60, 0x1e62,
+ 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72,
/* offsets 0xfe80 .. 0xfe8f */
- 0x1e72, 0x1e73, 0x1e74, 0x1e75, 0x1e76, 0x1e77, 0x1e78, 0x1e79,
- 0x1e7a, 0x1e7b, 0x1e7c, 0x1e7d, 0x1e7e, 0x1e7f, 0x1e80, 0x1e81,
+ 0x1e74, 0x1e75, 0x1e76, 0x1e77, 0x1e78, 0x1e79, 0x1e7a, 0x1e7b,
+ 0x1e7c, 0x1e7d, 0x1e7e, 0x1e7f, 0x1e80, 0x1e81, 0x1e82, 0x1e83,
/* offsets 0xfe90 .. 0xfe9f */
- 0x1e82, 0x1e83, 0x1e84, 0x1e85, 0x1e86, 0x1e87, 0x1e88, 0x1e89,
- 0x1e8a, 0x1e8b, 0x1e8c, 0x1e8d, 0x1e8e, 0x1e8f, 0x1e90, 0x1e91,
+ 0x1e84, 0x1e85, 0x1e86, 0x1e87, 0x1e88, 0x1e89, 0x1e8a, 0x1e8b,
+ 0x1e8c, 0x1e8d, 0x1e8e, 0x1e8f, 0x1e90, 0x1e91, 0x1e92, 0x1e93,
/* offsets 0xfea0 .. 0xfeaf */
- 0x1e92, 0x1e93, 0x1e94, 0x1e95, 0x1e96, 0x1e97, 0x1e98, 0x1e99,
- 0x1e9a, 0x1e9b, 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, 0x1ea0, 0x1ea1,
+ 0x1e94, 0x1e95, 0x1e96, 0x1e97, 0x1e98, 0x1e99, 0x1e9a, 0x1e9b,
+ 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, 0x1ea0, 0x1ea1, 0x1ea2, 0x1ea3,
/* offsets 0xfeb0 .. 0xfebf */
- 0x1ea2, 0x1ea3, 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, 0x1ea8, 0x1ea9,
- 0x1eaa, 0x1eab, 0x1eac, 0x1ead, 0x1eae, 0x1eaf, 0x1eb0, 0x1eb1,
+ 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, 0x1ea8, 0x1ea9, 0x1eaa, 0x1eab,
+ 0x1eac, 0x1ead, 0x1eae, 0x1eaf, 0x1eb0, 0x1eb1, 0x1eb2, 0x1eb3,
/* offsets 0xfec0 .. 0xfecf */
- 0x1eb2, 0x1eb3, 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, 0x1eb8, 0x1eb9,
- 0x1eba, 0x1ebb, 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, 0x1ec0, 0x1ec1,
+ 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, 0x1eb8, 0x1eb9, 0x1eba, 0x1ebb,
+ 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, 0x1ec0, 0x1ec1, 0x1ec2, 0x1ec3,
/* offsets 0xfed0 .. 0xfedf */
- 0x1ec2, 0x1ec3, 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, 0x1ec8, 0x1ec9,
- 0x1eca, 0x1ecb, 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, 0x1ed0, 0x1ed1,
+ 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, 0x1ec8, 0x1ec9, 0x1eca, 0x1ecb,
+ 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, 0x1ed0, 0x1ed1, 0x1ed2, 0x1ed3,
/* offsets 0xfee0 .. 0xfeef */
- 0x1ed2, 0x1ed3, 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, 0x1ed8, 0x1ed9,
- 0x1eda, 0x1edb, 0x1edc, 0x1edd, 0x1ede, 0x1edf, 0x1ee0, 0x1ee1,
+ 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, 0x1ed8, 0x1ed9, 0x1eda, 0x1edb,
+ 0x1edc, 0x1edd, 0x1ede, 0x1edf, 0x1ee0, 0x1ee1, 0x1ee2, 0x1ee3,
/* offsets 0xfef0 .. 0xfeff */
- 0x1ee2, 0x1ee3, 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, 0x1ee9, 0x1eeb,
- 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef7, 0x1ef7,
+ 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, 0x1ee8, 0x1ee9, 0x1eeb, 0x1eed,
+ 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef9, 0x1ef9, 0x1ef9,
/* offsets 0xff00 .. 0xff0f */
- 0x1ef7, 0x1ef7, 0x1ef8, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd,
- 0x1efe, 0x1eff, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05,
+ 0x1ef9, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd, 0x1efe, 0x1eff,
+ 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07,
/* offsets 0xff10 .. 0xff1f */
- 0x1f06, 0x1f07, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d,
- 0x1f0e, 0x1f0f, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15,
+ 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f,
+ 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f16, 0x1f17,
/* offsets 0xff20 .. 0xff2f */
- 0x1f16, 0x1f17, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d,
- 0x1f1e, 0x1f1f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25,
+ 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f1e, 0x1f1f,
+ 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27,
/* offsets 0xff30 .. 0xff3f */
- 0x1f26, 0x1f27, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d,
- 0x1f2e, 0x1f2f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35,
+ 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f,
+ 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37,
/* offsets 0xff40 .. 0xff4f */
- 0x1f36, 0x1f37, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d,
- 0x1f3e, 0x1f3f, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45,
+ 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f,
+ 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f46, 0x1f47,
/* offsets 0xff50 .. 0xff5f */
- 0x1f46, 0x1f47, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d,
- 0x1f4e, 0x1f4f, 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55,
+ 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x1f4e, 0x1f4f,
+ 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55, 0x1f56, 0x1f57,
/* offsets 0xff60 .. 0xff6f */
- 0x1f56, 0x1f57, 0x1f58, 0x1f59, 0x1f5a, 0x1f5b, 0x1f5c, 0x1f5d,
- 0x1f5e, 0x1f5f, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65,
+ 0x1f58, 0x1f59, 0x1f5a, 0x1f5b, 0x1f5c, 0x1f5d, 0x1f5e, 0x1f5f,
+ 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67,
/* offsets 0xff70 .. 0xff7f */
- 0x1f66, 0x1f67, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d,
- 0x1f6e, 0x1f6f, 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75,
+ 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f,
+ 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1f76, 0x1f77,
/* offsets 0xff80 .. 0xff8f */
- 0x1f76, 0x1f77, 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d,
- 0x1f7e, 0x1f7f, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85,
+ 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d, 0x1f7e, 0x1f7f,
+ 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87,
/* offsets 0xff90 .. 0xff9f */
- 0x1f86, 0x1f87, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d,
- 0x1f8e, 0x1f8f, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95,
+ 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f,
+ 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
/* offsets 0xffa0 .. 0xffaf */
- 0x1f96, 0x1f97, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d,
- 0x1f9e, 0x1f9f, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5,
+ 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f,
+ 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
/* offsets 0xffb0 .. 0xffbf */
- 0x1fa6, 0x1fa7, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad,
- 0x1fae, 0x1faf, 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5,
+ 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf,
+ 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7,
/* offsets 0xffc0 .. 0xffcf */
- 0x1fb5, 0x1fb5, 0x1fb5, 0x1fb6, 0x1fb7, 0x1fb8, 0x1fb9, 0x1fba,
- 0x1fbb, 0x1fbb, 0x1fbb, 0x1fbc, 0x1fbd, 0x1fbe, 0x1fbf, 0x1fc0,
+ 0x1fb7, 0x1fb7, 0x1fb7, 0x1fb8, 0x1fb9, 0x1fba, 0x1fbb, 0x1fbc,
+ 0x1fbd, 0x1fbd, 0x1fbd, 0x1fbe, 0x1fbf, 0x1fc0, 0x1fc1, 0x1fc2,
/* offsets 0xffd0 .. 0xffdf */
- 0x1fc1, 0x1fc1, 0x1fc1, 0x1fc2, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6,
- 0x1fc7, 0x1fc7, 0x1fc7, 0x1fc8, 0x1fc9, 0x1fca, 0x1fca, 0x1fca,
+ 0x1fc3, 0x1fc3, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6, 0x1fc7, 0x1fc8,
+ 0x1fc9, 0x1fc9, 0x1fc9, 0x1fca, 0x1fcb, 0x1fcc, 0x1fcc, 0x1fcc,
/* offsets 0xffe0 .. 0xffef */
- 0x1fca, 0x1fcb, 0x1fcc, 0x1fcd, 0x1fce, 0x1fcf, 0x1fd0, 0x1fd1,
- 0x1fd1, 0x1fd2, 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, 0x1fd8,
+ 0x1fcc, 0x1fcd, 0x1fce, 0x1fcf, 0x1fd0, 0x1fd1, 0x1fd2, 0x1fd3,
+ 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, 0x1fd8, 0x1fd9, 0x1fda,
/* offset sentinel */
- 0x1fd8,
+ 0x1fda,
/* data */
0x0020, 0x0020, 0x0308, 0x0061, 0x0020, 0x0304, 0x0032, 0x0033,
0x0020, 0x0301, 0x03bc, 0x0020, 0x0327, 0x0031, 0x006f, 0x0031,
@@ -1886,313 +1886,314 @@ static const WCHAR compatmap_table[8152] =
0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd,
0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df,
0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, 0x30ea,
- 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30a2,
- 0x30d1, 0x30fc, 0x30c8, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x30a2,
- 0x30f3, 0x30da, 0x30a2, 0x30a2, 0x30fc, 0x30eb, 0x30a4, 0x30cb,
- 0x30f3, 0x30b0, 0x30a4, 0x30f3, 0x30c1, 0x30a6, 0x30a9, 0x30f3,
- 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c9, 0x30a8, 0x30fc, 0x30ab,
- 0x30fc, 0x30aa, 0x30f3, 0x30b9, 0x30aa, 0x30fc, 0x30e0, 0x30ab,
- 0x30a4, 0x30ea, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x30ab, 0x30ed,
- 0x30ea, 0x30fc, 0x30ac, 0x30ed, 0x30f3, 0x30ac, 0x30f3, 0x30de,
- 0x30ae, 0x30ac, 0x30ae, 0x30cb, 0x30fc, 0x30ad, 0x30e5, 0x30ea,
- 0x30fc, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x30ad, 0x30ed, 0x30ad,
- 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x30ad, 0x30ed, 0x30e1, 0x30fc,
- 0x30c8, 0x30eb, 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0x30b0,
- 0x30e9, 0x30e0, 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x30af,
- 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0x30af, 0x30ed, 0x30fc, 0x30cd,
- 0x30b1, 0x30fc, 0x30b9, 0x30b3, 0x30eb, 0x30ca, 0x30b3, 0x30fc,
- 0x30dd, 0x30b5, 0x30a4, 0x30af, 0x30eb, 0x30b5, 0x30f3, 0x30c1,
- 0x30fc, 0x30e0, 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x30bb, 0x30f3,
- 0x30c1, 0x30bb, 0x30f3, 0x30c8, 0x30c0, 0x30fc, 0x30b9, 0x30c7,
- 0x30b7, 0x30c9, 0x30eb, 0x30c8, 0x30f3, 0x30ca, 0x30ce, 0x30ce,
- 0x30c3, 0x30c8, 0x30cf, 0x30a4, 0x30c4, 0x30d1, 0x30fc, 0x30bb,
- 0x30f3, 0x30c8, 0x30d1, 0x30fc, 0x30c4, 0x30d0, 0x30fc, 0x30ec,
- 0x30eb, 0x30d4, 0x30a2, 0x30b9, 0x30c8, 0x30eb, 0x30d4, 0x30af,
- 0x30eb, 0x30d4, 0x30b3, 0x30d3, 0x30eb, 0x30d5, 0x30a1, 0x30e9,
- 0x30c3, 0x30c9, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x30d6, 0x30c3,
- 0x30b7, 0x30a7, 0x30eb, 0x30d5, 0x30e9, 0x30f3, 0x30d8, 0x30af,
- 0x30bf, 0x30fc, 0x30eb, 0x30da, 0x30bd, 0x30da, 0x30cb, 0x30d2,
- 0x30d8, 0x30eb, 0x30c4, 0x30da, 0x30f3, 0x30b9, 0x30da, 0x30fc,
- 0x30b8, 0x30d9, 0x30fc, 0x30bf, 0x30dd, 0x30a4, 0x30f3, 0x30c8,
- 0x30dc, 0x30eb, 0x30c8, 0x30db, 0x30f3, 0x30dd, 0x30f3, 0x30c9,
- 0x30db, 0x30fc, 0x30eb, 0x30db, 0x30fc, 0x30f3, 0x30de, 0x30a4,
- 0x30af, 0x30ed, 0x30de, 0x30a4, 0x30eb, 0x30de, 0x30c3, 0x30cf,
- 0x30de, 0x30eb, 0x30af, 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3,
- 0x30df, 0x30af, 0x30ed, 0x30f3, 0x30df, 0x30ea, 0x30df, 0x30ea,
- 0x30d0, 0x30fc, 0x30eb, 0x30e1, 0x30ac, 0x30e1, 0x30ac, 0x30c8,
- 0x30f3, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30e4, 0x30fc, 0x30c9,
- 0x30e4, 0x30fc, 0x30eb, 0x30e6, 0x30a2, 0x30f3, 0x30ea, 0x30c3,
- 0x30c8, 0x30eb, 0x30ea, 0x30e9, 0x30eb, 0x30d4, 0x30fc, 0x30eb,
- 0x30fc, 0x30d6, 0x30eb, 0x30ec, 0x30e0, 0x30ec, 0x30f3, 0x30c8,
- 0x30b2, 0x30f3, 0x30ef, 0x30c3, 0x30c8, 0x0030, 0x70b9, 0x0031,
- 0x70b9, 0x0032, 0x70b9, 0x0033, 0x70b9, 0x0034, 0x70b9, 0x0035,
- 0x70b9, 0x0036, 0x70b9, 0x0037, 0x70b9, 0x0038, 0x70b9, 0x0039,
- 0x70b9, 0x0031, 0x0030, 0x70b9, 0x0031, 0x0031, 0x70b9, 0x0031,
- 0x0032, 0x70b9, 0x0031, 0x0033, 0x70b9, 0x0031, 0x0034, 0x70b9,
- 0x0031, 0x0035, 0x70b9, 0x0031, 0x0036, 0x70b9, 0x0031, 0x0037,
- 0x70b9, 0x0031, 0x0038, 0x70b9, 0x0031, 0x0039, 0x70b9, 0x0032,
- 0x0030, 0x70b9, 0x0032, 0x0031, 0x70b9, 0x0032, 0x0032, 0x70b9,
- 0x0032, 0x0033, 0x70b9, 0x0032, 0x0034, 0x70b9, 0x0068, 0x0050,
- 0x0061, 0x0064, 0x0061, 0x0041, 0x0055, 0x0062, 0x0061, 0x0072,
- 0x006f, 0x0056, 0x0070, 0x0063, 0x0064, 0x006d, 0x0064, 0x006d,
- 0x00b2, 0x0064, 0x006d, 0x00b3, 0x0049, 0x0055, 0x5e73, 0x6210,
- 0x662d, 0x548c, 0x5927, 0x6b63, 0x660e, 0x6cbb, 0x682a, 0x5f0f,
- 0x4f1a, 0x793e, 0x0070, 0x0041, 0x006e, 0x0041, 0x03bc, 0x0041,
- 0x006d, 0x0041, 0x006b, 0x0041, 0x004b, 0x0042, 0x004d, 0x0042,
- 0x0047, 0x0042, 0x0063, 0x0061, 0x006c, 0x006b, 0x0063, 0x0061,
- 0x006c, 0x0070, 0x0046, 0x006e, 0x0046, 0x03bc, 0x0046, 0x03bc,
- 0x0067, 0x006d, 0x0067, 0x006b, 0x0067, 0x0048, 0x007a, 0x006b,
- 0x0048, 0x007a, 0x004d, 0x0048, 0x007a, 0x0047, 0x0048, 0x007a,
- 0x0054, 0x0048, 0x007a, 0x03bc, 0x2113, 0x006d, 0x2113, 0x0064,
- 0x2113, 0x006b, 0x2113, 0x0066, 0x006d, 0x006e, 0x006d, 0x03bc,
- 0x006d, 0x006d, 0x006d, 0x0063, 0x006d, 0x006b, 0x006d, 0x006d,
- 0x006d, 0x00b2, 0x0063, 0x006d, 0x00b2, 0x006d, 0x00b2, 0x006b,
- 0x006d, 0x00b2, 0x006d, 0x006d, 0x00b3, 0x0063, 0x006d, 0x00b3,
- 0x006d, 0x00b3, 0x006b, 0x006d, 0x00b3, 0x006d, 0x2215, 0x0073,
- 0x006d, 0x2215, 0x0073, 0x00b2, 0x0050, 0x0061, 0x006b, 0x0050,
- 0x0061, 0x004d, 0x0050, 0x0061, 0x0047, 0x0050, 0x0061, 0x0072,
- 0x0061, 0x0064, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0072,
- 0x0061, 0x0064, 0x2215, 0x0073, 0x00b2, 0x0070, 0x0073, 0x006e,
- 0x0073, 0x03bc, 0x0073, 0x006d, 0x0073, 0x0070, 0x0056, 0x006e,
- 0x0056, 0x03bc, 0x0056, 0x006d, 0x0056, 0x006b, 0x0056, 0x004d,
- 0x0056, 0x0070, 0x0057, 0x006e, 0x0057, 0x03bc, 0x0057, 0x006d,
- 0x0057, 0x006b, 0x0057, 0x004d, 0x0057, 0x006b, 0x03a9, 0x004d,
- 0x03a9, 0x0061, 0x002e, 0x006d, 0x002e, 0x0042, 0x0071, 0x0063,
- 0x0063, 0x0063, 0x0064, 0x0043, 0x2215, 0x006b, 0x0067, 0x0043,
- 0x006f, 0x002e, 0x0064, 0x0042, 0x0047, 0x0079, 0x0068, 0x0061,
- 0x0048, 0x0050, 0x0069, 0x006e, 0x004b, 0x004b, 0x004b, 0x004d,
- 0x006b, 0x0074, 0x006c, 0x006d, 0x006c, 0x006e, 0x006c, 0x006f,
- 0x0067, 0x006c, 0x0078, 0x006d, 0x0062, 0x006d, 0x0069, 0x006c,
- 0x006d, 0x006f, 0x006c, 0x0050, 0x0048, 0x0070, 0x002e, 0x006d,
- 0x002e, 0x0050, 0x0050, 0x004d, 0x0050, 0x0052, 0x0073, 0x0072,
- 0x0053, 0x0076, 0x0057, 0x0062, 0x0056, 0x2215, 0x006d, 0x0041,
- 0x2215, 0x006d, 0x0031, 0x65e5, 0x0032, 0x65e5, 0x0033, 0x65e5,
- 0x0034, 0x65e5, 0x0035, 0x65e5, 0x0036, 0x65e5, 0x0037, 0x65e5,
- 0x0038, 0x65e5, 0x0039, 0x65e5, 0x0031, 0x0030, 0x65e5, 0x0031,
- 0x0031, 0x65e5, 0x0031, 0x0032, 0x65e5, 0x0031, 0x0033, 0x65e5,
- 0x0031, 0x0034, 0x65e5, 0x0031, 0x0035, 0x65e5, 0x0031, 0x0036,
- 0x65e5, 0x0031, 0x0037, 0x65e5, 0x0031, 0x0038, 0x65e5, 0x0031,
- 0x0039, 0x65e5, 0x0032, 0x0030, 0x65e5, 0x0032, 0x0031, 0x65e5,
- 0x0032, 0x0032, 0x65e5, 0x0032, 0x0033, 0x65e5, 0x0032, 0x0034,
- 0x65e5, 0x0032, 0x0035, 0x65e5, 0x0032, 0x0036, 0x65e5, 0x0032,
- 0x0037, 0x65e5, 0x0032, 0x0038, 0x65e5, 0x0032, 0x0039, 0x65e5,
- 0x0033, 0x0030, 0x65e5, 0x0033, 0x0031, 0x65e5, 0x0067, 0x0061,
- 0x006c, 0x044a, 0x044c, 0xa76f, 0x0126, 0x0153, 0xa727, 0xab37,
- 0x026b, 0xab52, 0x0066, 0x0066, 0x0066, 0x0069, 0x0066, 0x006c,
- 0x0066, 0x0066, 0x0069, 0x0066, 0x0066, 0x006c, 0x017f, 0x0074,
- 0x0073, 0x0074, 0x0574, 0x0576, 0x0574, 0x0565, 0x0574, 0x056b,
- 0x057e, 0x0576, 0x0574, 0x056d, 0x05e2, 0x05d0, 0x05d3, 0x05d4,
- 0x05db, 0x05dc, 0x05dd, 0x05e8, 0x05ea, 0x002b, 0x05d0, 0x05dc,
- 0x0671, 0x0671, 0x067b, 0x067b, 0x067b, 0x067b, 0x067e, 0x067e,
- 0x067e, 0x067e, 0x0680, 0x0680, 0x0680, 0x0680, 0x067a, 0x067a,
- 0x067a, 0x067a, 0x067f, 0x067f, 0x067f, 0x067f, 0x0679, 0x0679,
- 0x0679, 0x0679, 0x06a4, 0x06a4, 0x06a4, 0x06a4, 0x06a6, 0x06a6,
- 0x06a6, 0x06a6, 0x0684, 0x0684, 0x0684, 0x0684, 0x0683, 0x0683,
- 0x0683, 0x0683, 0x0686, 0x0686, 0x0686, 0x0686, 0x0687, 0x0687,
- 0x0687, 0x0687, 0x068d, 0x068d, 0x068c, 0x068c, 0x068e, 0x068e,
- 0x0688, 0x0688, 0x0698, 0x0698, 0x0691, 0x0691, 0x06a9, 0x06a9,
- 0x06a9, 0x06a9, 0x06af, 0x06af, 0x06af, 0x06af, 0x06b3, 0x06b3,
- 0x06b3, 0x06b3, 0x06b1, 0x06b1, 0x06b1, 0x06b1, 0x06ba, 0x06ba,
- 0x06bb, 0x06bb, 0x06bb, 0x06bb, 0x06c0, 0x06c0, 0x06c1, 0x06c1,
- 0x06c1, 0x06c1, 0x06be, 0x06be, 0x06be, 0x06be, 0x06d2, 0x06d2,
- 0x06d3, 0x06d3, 0x06ad, 0x06ad, 0x06ad, 0x06ad, 0x06c7, 0x06c7,
- 0x06c6, 0x06c6, 0x06c8, 0x06c8, 0x0677, 0x06cb, 0x06cb, 0x06c5,
- 0x06c5, 0x06c9, 0x06c9, 0x06d0, 0x06d0, 0x06d0, 0x06d0, 0x0649,
- 0x0649, 0x0626, 0x0627, 0x0626, 0x0627, 0x0626, 0x06d5, 0x0626,
- 0x06d5, 0x0626, 0x0648, 0x0626, 0x0648, 0x0626, 0x06c7, 0x0626,
- 0x06c7, 0x0626, 0x06c6, 0x0626, 0x06c6, 0x0626, 0x06c8, 0x0626,
- 0x06c8, 0x0626, 0x06d0, 0x0626, 0x06d0, 0x0626, 0x06d0, 0x0626,
- 0x0649, 0x0626, 0x0649, 0x0626, 0x0649, 0x06cc, 0x06cc, 0x06cc,
- 0x06cc, 0x0626, 0x062c, 0x0626, 0x062d, 0x0626, 0x0645, 0x0626,
- 0x0649, 0x0626, 0x064a, 0x0628, 0x062c, 0x0628, 0x062d, 0x0628,
- 0x062e, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628, 0x064a, 0x062a,
- 0x062c, 0x062a, 0x062d, 0x062a, 0x062e, 0x062a, 0x0645, 0x062a,
- 0x0649, 0x062a, 0x064a, 0x062b, 0x062c, 0x062b, 0x0645, 0x062b,
- 0x0649, 0x062b, 0x064a, 0x062c, 0x062d, 0x062c, 0x0645, 0x062d,
- 0x062c, 0x062d, 0x0645, 0x062e, 0x062c, 0x062e, 0x062d, 0x062e,
- 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633, 0x062e, 0x0633,
- 0x0645, 0x0635, 0x062d, 0x0635, 0x0645, 0x0636, 0x062c, 0x0636,
- 0x062d, 0x0636, 0x062e, 0x0636, 0x0645, 0x0637, 0x062d, 0x0637,
- 0x0645, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639, 0x0645, 0x063a,
- 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641, 0x062d, 0x0641,
- 0x062e, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641, 0x064a, 0x0642,
- 0x062d, 0x0642, 0x0645, 0x0642, 0x0649, 0x0642, 0x064a, 0x0643,
- 0x0627, 0x0643, 0x062c, 0x0643, 0x062d, 0x0643, 0x062e, 0x0643,
- 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643, 0x064a, 0x0644,
- 0x062c, 0x0644, 0x062d, 0x0644, 0x062e, 0x0644, 0x0645, 0x0644,
- 0x0649, 0x0644, 0x064a, 0x0645, 0x062c, 0x0645, 0x062d, 0x0645,
- 0x062e, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645, 0x064a, 0x0646,
- 0x062c, 0x0646, 0x062d, 0x0646, 0x062e, 0x0646, 0x0645, 0x0646,
- 0x0649, 0x0646, 0x064a, 0x0647, 0x062c, 0x0647, 0x0645, 0x0647,
- 0x0649, 0x0647, 0x064a, 0x064a, 0x062c, 0x064a, 0x062d, 0x064a,
- 0x062e, 0x064a, 0x0645, 0x064a, 0x0649, 0x064a, 0x064a, 0x0630,
- 0x0670, 0x0631, 0x0670, 0x0649, 0x0670, 0x0020, 0x064c, 0x0651,
- 0x0020, 0x064d, 0x0651, 0x0020, 0x064e, 0x0651, 0x0020, 0x064f,
- 0x0651, 0x0020, 0x0650, 0x0651, 0x0020, 0x0651, 0x0670, 0x0626,
- 0x0631, 0x0626, 0x0632, 0x0626, 0x0645, 0x0626, 0x0646, 0x0626,
- 0x0649, 0x0626, 0x064a, 0x0628, 0x0631, 0x0628, 0x0632, 0x0628,
- 0x0645, 0x0628, 0x0646, 0x0628, 0x0649, 0x0628, 0x064a, 0x062a,
- 0x0631, 0x062a, 0x0632, 0x062a, 0x0645, 0x062a, 0x0646, 0x062a,
- 0x0649, 0x062a, 0x064a, 0x062b, 0x0631, 0x062b, 0x0632, 0x062b,
- 0x0645, 0x062b, 0x0646, 0x062b, 0x0649, 0x062b, 0x064a, 0x0641,
- 0x0649, 0x0641, 0x064a, 0x0642, 0x0649, 0x0642, 0x064a, 0x0643,
- 0x0627, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643,
- 0x064a, 0x0644, 0x0645, 0x0644, 0x0649, 0x0644, 0x064a, 0x0645,
- 0x0627, 0x0645, 0x0645, 0x0646, 0x0631, 0x0646, 0x0632, 0x0646,
- 0x0645, 0x0646, 0x0646, 0x0646, 0x0649, 0x0646, 0x064a, 0x0649,
- 0x0670, 0x064a, 0x0631, 0x064a, 0x0632, 0x064a, 0x0645, 0x064a,
- 0x0646, 0x064a, 0x0649, 0x064a, 0x064a, 0x0626, 0x062c, 0x0626,
- 0x062d, 0x0626, 0x062e, 0x0626, 0x0645, 0x0626, 0x0647, 0x0628,
- 0x062c, 0x0628, 0x062d, 0x0628, 0x062e, 0x0628, 0x0645, 0x0628,
- 0x0647, 0x062a, 0x062c, 0x062a, 0x062d, 0x062a, 0x062e, 0x062a,
- 0x0645, 0x062a, 0x0647, 0x062b, 0x0645, 0x062c, 0x062d, 0x062c,
+ 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x4ee4,
+ 0x548c, 0x30a2, 0x30d1, 0x30fc, 0x30c8, 0x30a2, 0x30eb, 0x30d5,
+ 0x30a1, 0x30a2, 0x30f3, 0x30da, 0x30a2, 0x30a2, 0x30fc, 0x30eb,
+ 0x30a4, 0x30cb, 0x30f3, 0x30b0, 0x30a4, 0x30f3, 0x30c1, 0x30a6,
+ 0x30a9, 0x30f3, 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c9, 0x30a8,
+ 0x30fc, 0x30ab, 0x30fc, 0x30aa, 0x30f3, 0x30b9, 0x30aa, 0x30fc,
+ 0x30e0, 0x30ab, 0x30a4, 0x30ea, 0x30ab, 0x30e9, 0x30c3, 0x30c8,
+ 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30ac, 0x30ed, 0x30f3, 0x30ac,
+ 0x30f3, 0x30de, 0x30ae, 0x30ac, 0x30ae, 0x30cb, 0x30fc, 0x30ad,
+ 0x30e5, 0x30ea, 0x30fc, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x30ad,
+ 0x30ed, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x30ad, 0x30ed,
+ 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30ad, 0x30ed, 0x30ef, 0x30c3,
+ 0x30c8, 0x30b0, 0x30e9, 0x30e0, 0x30b0, 0x30e9, 0x30e0, 0x30c8,
+ 0x30f3, 0x30af, 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0x30af, 0x30ed,
+ 0x30fc, 0x30cd, 0x30b1, 0x30fc, 0x30b9, 0x30b3, 0x30eb, 0x30ca,
+ 0x30b3, 0x30fc, 0x30dd, 0x30b5, 0x30a4, 0x30af, 0x30eb, 0x30b5,
+ 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x30b7, 0x30ea, 0x30f3, 0x30b0,
+ 0x30bb, 0x30f3, 0x30c1, 0x30bb, 0x30f3, 0x30c8, 0x30c0, 0x30fc,
+ 0x30b9, 0x30c7, 0x30b7, 0x30c9, 0x30eb, 0x30c8, 0x30f3, 0x30ca,
+ 0x30ce, 0x30ce, 0x30c3, 0x30c8, 0x30cf, 0x30a4, 0x30c4, 0x30d1,
+ 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0x30d1, 0x30fc, 0x30c4, 0x30d0,
+ 0x30fc, 0x30ec, 0x30eb, 0x30d4, 0x30a2, 0x30b9, 0x30c8, 0x30eb,
+ 0x30d4, 0x30af, 0x30eb, 0x30d4, 0x30b3, 0x30d3, 0x30eb, 0x30d5,
+ 0x30a1, 0x30e9, 0x30c3, 0x30c9, 0x30d5, 0x30a3, 0x30fc, 0x30c8,
+ 0x30d6, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30d5, 0x30e9, 0x30f3,
+ 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x30da, 0x30bd, 0x30da,
+ 0x30cb, 0x30d2, 0x30d8, 0x30eb, 0x30c4, 0x30da, 0x30f3, 0x30b9,
+ 0x30da, 0x30fc, 0x30b8, 0x30d9, 0x30fc, 0x30bf, 0x30dd, 0x30a4,
+ 0x30f3, 0x30c8, 0x30dc, 0x30eb, 0x30c8, 0x30db, 0x30f3, 0x30dd,
+ 0x30f3, 0x30c9, 0x30db, 0x30fc, 0x30eb, 0x30db, 0x30fc, 0x30f3,
+ 0x30de, 0x30a4, 0x30af, 0x30ed, 0x30de, 0x30a4, 0x30eb, 0x30de,
+ 0x30c3, 0x30cf, 0x30de, 0x30eb, 0x30af, 0x30de, 0x30f3, 0x30b7,
+ 0x30e7, 0x30f3, 0x30df, 0x30af, 0x30ed, 0x30f3, 0x30df, 0x30ea,
+ 0x30df, 0x30ea, 0x30d0, 0x30fc, 0x30eb, 0x30e1, 0x30ac, 0x30e1,
+ 0x30ac, 0x30c8, 0x30f3, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30e4,
+ 0x30fc, 0x30c9, 0x30e4, 0x30fc, 0x30eb, 0x30e6, 0x30a2, 0x30f3,
+ 0x30ea, 0x30c3, 0x30c8, 0x30eb, 0x30ea, 0x30e9, 0x30eb, 0x30d4,
+ 0x30fc, 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x30ec, 0x30e0, 0x30ec,
+ 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x30ef, 0x30c3, 0x30c8, 0x0030,
+ 0x70b9, 0x0031, 0x70b9, 0x0032, 0x70b9, 0x0033, 0x70b9, 0x0034,
+ 0x70b9, 0x0035, 0x70b9, 0x0036, 0x70b9, 0x0037, 0x70b9, 0x0038,
+ 0x70b9, 0x0039, 0x70b9, 0x0031, 0x0030, 0x70b9, 0x0031, 0x0031,
+ 0x70b9, 0x0031, 0x0032, 0x70b9, 0x0031, 0x0033, 0x70b9, 0x0031,
+ 0x0034, 0x70b9, 0x0031, 0x0035, 0x70b9, 0x0031, 0x0036, 0x70b9,
+ 0x0031, 0x0037, 0x70b9, 0x0031, 0x0038, 0x70b9, 0x0031, 0x0039,
+ 0x70b9, 0x0032, 0x0030, 0x70b9, 0x0032, 0x0031, 0x70b9, 0x0032,
+ 0x0032, 0x70b9, 0x0032, 0x0033, 0x70b9, 0x0032, 0x0034, 0x70b9,
+ 0x0068, 0x0050, 0x0061, 0x0064, 0x0061, 0x0041, 0x0055, 0x0062,
+ 0x0061, 0x0072, 0x006f, 0x0056, 0x0070, 0x0063, 0x0064, 0x006d,
+ 0x0064, 0x006d, 0x00b2, 0x0064, 0x006d, 0x00b3, 0x0049, 0x0055,
+ 0x5e73, 0x6210, 0x662d, 0x548c, 0x5927, 0x6b63, 0x660e, 0x6cbb,
+ 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x0070, 0x0041, 0x006e, 0x0041,
+ 0x03bc, 0x0041, 0x006d, 0x0041, 0x006b, 0x0041, 0x004b, 0x0042,
+ 0x004d, 0x0042, 0x0047, 0x0042, 0x0063, 0x0061, 0x006c, 0x006b,
+ 0x0063, 0x0061, 0x006c, 0x0070, 0x0046, 0x006e, 0x0046, 0x03bc,
+ 0x0046, 0x03bc, 0x0067, 0x006d, 0x0067, 0x006b, 0x0067, 0x0048,
+ 0x007a, 0x006b, 0x0048, 0x007a, 0x004d, 0x0048, 0x007a, 0x0047,
+ 0x0048, 0x007a, 0x0054, 0x0048, 0x007a, 0x03bc, 0x2113, 0x006d,
+ 0x2113, 0x0064, 0x2113, 0x006b, 0x2113, 0x0066, 0x006d, 0x006e,
+ 0x006d, 0x03bc, 0x006d, 0x006d, 0x006d, 0x0063, 0x006d, 0x006b,
+ 0x006d, 0x006d, 0x006d, 0x00b2, 0x0063, 0x006d, 0x00b2, 0x006d,
+ 0x00b2, 0x006b, 0x006d, 0x00b2, 0x006d, 0x006d, 0x00b3, 0x0063,
+ 0x006d, 0x00b3, 0x006d, 0x00b3, 0x006b, 0x006d, 0x00b3, 0x006d,
+ 0x2215, 0x0073, 0x006d, 0x2215, 0x0073, 0x00b2, 0x0050, 0x0061,
+ 0x006b, 0x0050, 0x0061, 0x004d, 0x0050, 0x0061, 0x0047, 0x0050,
+ 0x0061, 0x0072, 0x0061, 0x0064, 0x0072, 0x0061, 0x0064, 0x2215,
+ 0x0073, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00b2, 0x0070,
+ 0x0073, 0x006e, 0x0073, 0x03bc, 0x0073, 0x006d, 0x0073, 0x0070,
+ 0x0056, 0x006e, 0x0056, 0x03bc, 0x0056, 0x006d, 0x0056, 0x006b,
+ 0x0056, 0x004d, 0x0056, 0x0070, 0x0057, 0x006e, 0x0057, 0x03bc,
+ 0x0057, 0x006d, 0x0057, 0x006b, 0x0057, 0x004d, 0x0057, 0x006b,
+ 0x03a9, 0x004d, 0x03a9, 0x0061, 0x002e, 0x006d, 0x002e, 0x0042,
+ 0x0071, 0x0063, 0x0063, 0x0063, 0x0064, 0x0043, 0x2215, 0x006b,
+ 0x0067, 0x0043, 0x006f, 0x002e, 0x0064, 0x0042, 0x0047, 0x0079,
+ 0x0068, 0x0061, 0x0048, 0x0050, 0x0069, 0x006e, 0x004b, 0x004b,
+ 0x004b, 0x004d, 0x006b, 0x0074, 0x006c, 0x006d, 0x006c, 0x006e,
+ 0x006c, 0x006f, 0x0067, 0x006c, 0x0078, 0x006d, 0x0062, 0x006d,
+ 0x0069, 0x006c, 0x006d, 0x006f, 0x006c, 0x0050, 0x0048, 0x0070,
+ 0x002e, 0x006d, 0x002e, 0x0050, 0x0050, 0x004d, 0x0050, 0x0052,
+ 0x0073, 0x0072, 0x0053, 0x0076, 0x0057, 0x0062, 0x0056, 0x2215,
+ 0x006d, 0x0041, 0x2215, 0x006d, 0x0031, 0x65e5, 0x0032, 0x65e5,
+ 0x0033, 0x65e5, 0x0034, 0x65e5, 0x0035, 0x65e5, 0x0036, 0x65e5,
+ 0x0037, 0x65e5, 0x0038, 0x65e5, 0x0039, 0x65e5, 0x0031, 0x0030,
+ 0x65e5, 0x0031, 0x0031, 0x65e5, 0x0031, 0x0032, 0x65e5, 0x0031,
+ 0x0033, 0x65e5, 0x0031, 0x0034, 0x65e5, 0x0031, 0x0035, 0x65e5,
+ 0x0031, 0x0036, 0x65e5, 0x0031, 0x0037, 0x65e5, 0x0031, 0x0038,
+ 0x65e5, 0x0031, 0x0039, 0x65e5, 0x0032, 0x0030, 0x65e5, 0x0032,
+ 0x0031, 0x65e5, 0x0032, 0x0032, 0x65e5, 0x0032, 0x0033, 0x65e5,
+ 0x0032, 0x0034, 0x65e5, 0x0032, 0x0035, 0x65e5, 0x0032, 0x0036,
+ 0x65e5, 0x0032, 0x0037, 0x65e5, 0x0032, 0x0038, 0x65e5, 0x0032,
+ 0x0039, 0x65e5, 0x0033, 0x0030, 0x65e5, 0x0033, 0x0031, 0x65e5,
+ 0x0067, 0x0061, 0x006c, 0x044a, 0x044c, 0xa76f, 0x0126, 0x0153,
+ 0xa727, 0xab37, 0x026b, 0xab52, 0x0066, 0x0066, 0x0066, 0x0069,
+ 0x0066, 0x006c, 0x0066, 0x0066, 0x0069, 0x0066, 0x0066, 0x006c,
+ 0x017f, 0x0074, 0x0073, 0x0074, 0x0574, 0x0576, 0x0574, 0x0565,
+ 0x0574, 0x056b, 0x057e, 0x0576, 0x0574, 0x056d, 0x05e2, 0x05d0,
+ 0x05d3, 0x05d4, 0x05db, 0x05dc, 0x05dd, 0x05e8, 0x05ea, 0x002b,
+ 0x05d0, 0x05dc, 0x0671, 0x0671, 0x067b, 0x067b, 0x067b, 0x067b,
+ 0x067e, 0x067e, 0x067e, 0x067e, 0x0680, 0x0680, 0x0680, 0x0680,
+ 0x067a, 0x067a, 0x067a, 0x067a, 0x067f, 0x067f, 0x067f, 0x067f,
+ 0x0679, 0x0679, 0x0679, 0x0679, 0x06a4, 0x06a4, 0x06a4, 0x06a4,
+ 0x06a6, 0x06a6, 0x06a6, 0x06a6, 0x0684, 0x0684, 0x0684, 0x0684,
+ 0x0683, 0x0683, 0x0683, 0x0683, 0x0686, 0x0686, 0x0686, 0x0686,
+ 0x0687, 0x0687, 0x0687, 0x0687, 0x068d, 0x068d, 0x068c, 0x068c,
+ 0x068e, 0x068e, 0x0688, 0x0688, 0x0698, 0x0698, 0x0691, 0x0691,
+ 0x06a9, 0x06a9, 0x06a9, 0x06a9, 0x06af, 0x06af, 0x06af, 0x06af,
+ 0x06b3, 0x06b3, 0x06b3, 0x06b3, 0x06b1, 0x06b1, 0x06b1, 0x06b1,
+ 0x06ba, 0x06ba, 0x06bb, 0x06bb, 0x06bb, 0x06bb, 0x06c0, 0x06c0,
+ 0x06c1, 0x06c1, 0x06c1, 0x06c1, 0x06be, 0x06be, 0x06be, 0x06be,
+ 0x06d2, 0x06d2, 0x06d3, 0x06d3, 0x06ad, 0x06ad, 0x06ad, 0x06ad,
+ 0x06c7, 0x06c7, 0x06c6, 0x06c6, 0x06c8, 0x06c8, 0x0677, 0x06cb,
+ 0x06cb, 0x06c5, 0x06c5, 0x06c9, 0x06c9, 0x06d0, 0x06d0, 0x06d0,
+ 0x06d0, 0x0649, 0x0649, 0x0626, 0x0627, 0x0626, 0x0627, 0x0626,
+ 0x06d5, 0x0626, 0x06d5, 0x0626, 0x0648, 0x0626, 0x0648, 0x0626,
+ 0x06c7, 0x0626, 0x06c7, 0x0626, 0x06c6, 0x0626, 0x06c6, 0x0626,
+ 0x06c8, 0x0626, 0x06c8, 0x0626, 0x06d0, 0x0626, 0x06d0, 0x0626,
+ 0x06d0, 0x0626, 0x0649, 0x0626, 0x0649, 0x0626, 0x0649, 0x06cc,
+ 0x06cc, 0x06cc, 0x06cc, 0x0626, 0x062c, 0x0626, 0x062d, 0x0626,
+ 0x0645, 0x0626, 0x0649, 0x0626, 0x064a, 0x0628, 0x062c, 0x0628,
+ 0x062d, 0x0628, 0x062e, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628,
+ 0x064a, 0x062a, 0x062c, 0x062a, 0x062d, 0x062a, 0x062e, 0x062a,
+ 0x0645, 0x062a, 0x0649, 0x062a, 0x064a, 0x062b, 0x062c, 0x062b,
+ 0x0645, 0x062b, 0x0649, 0x062b, 0x064a, 0x062c, 0x062d, 0x062c,
0x0645, 0x062d, 0x062c, 0x062d, 0x0645, 0x062e, 0x062c, 0x062e,
- 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633, 0x062e, 0x0633,
- 0x0645, 0x0635, 0x062d, 0x0635, 0x062e, 0x0635, 0x0645, 0x0636,
+ 0x062d, 0x062e, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633,
+ 0x062e, 0x0633, 0x0645, 0x0635, 0x062d, 0x0635, 0x0645, 0x0636,
0x062c, 0x0636, 0x062d, 0x0636, 0x062e, 0x0636, 0x0645, 0x0637,
- 0x062d, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639, 0x0645, 0x063a,
- 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641, 0x062d, 0x0641,
- 0x062e, 0x0641, 0x0645, 0x0642, 0x062d, 0x0642, 0x0645, 0x0643,
- 0x062c, 0x0643, 0x062d, 0x0643, 0x062e, 0x0643, 0x0644, 0x0643,
- 0x0645, 0x0644, 0x062c, 0x0644, 0x062d, 0x0644, 0x062e, 0x0644,
- 0x0645, 0x0644, 0x0647, 0x0645, 0x062c, 0x0645, 0x062d, 0x0645,
- 0x062e, 0x0645, 0x0645, 0x0646, 0x062c, 0x0646, 0x062d, 0x0646,
- 0x062e, 0x0646, 0x0645, 0x0646, 0x0647, 0x0647, 0x062c, 0x0647,
- 0x0645, 0x0647, 0x0670, 0x064a, 0x062c, 0x064a, 0x062d, 0x064a,
- 0x062e, 0x064a, 0x0645, 0x064a, 0x0647, 0x0626, 0x0645, 0x0626,
- 0x0647, 0x0628, 0x0645, 0x0628, 0x0647, 0x062a, 0x0645, 0x062a,
- 0x0647, 0x062b, 0x0645, 0x062b, 0x0647, 0x0633, 0x0645, 0x0633,
- 0x0647, 0x0634, 0x0645, 0x0634, 0x0647, 0x0643, 0x0644, 0x0643,
- 0x0645, 0x0644, 0x0645, 0x0646, 0x0645, 0x0646, 0x0647, 0x064a,
- 0x0645, 0x064a, 0x0647, 0x0640, 0x064e, 0x0651, 0x0640, 0x064f,
- 0x0651, 0x0640, 0x0650, 0x0651, 0x0637, 0x0649, 0x0637, 0x064a,
- 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649, 0x063a, 0x064a,
- 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649, 0x0634, 0x064a,
- 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649, 0x062c, 0x064a,
- 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649, 0x0635, 0x064a,
- 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c, 0x0634, 0x062d,
- 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631, 0x0633, 0x0631,
- 0x0635, 0x0631, 0x0636, 0x0631, 0x0637, 0x0649, 0x0637, 0x064a,
- 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649, 0x063a, 0x064a,
- 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649, 0x0634, 0x064a,
- 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649, 0x062c, 0x064a,
- 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649, 0x0635, 0x064a,
- 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c, 0x0634, 0x062d,
- 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631, 0x0633, 0x0631,
- 0x0635, 0x0631, 0x0636, 0x0631, 0x0634, 0x062c, 0x0634, 0x062d,
- 0x0634, 0x062e, 0x0634, 0x0645, 0x0633, 0x0647, 0x0634, 0x0647,
- 0x0637, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633, 0x062e,
- 0x0634, 0x062c, 0x0634, 0x062d, 0x0634, 0x062e, 0x0637, 0x0645,
- 0x0638, 0x0645, 0x0627, 0x064b, 0x0627, 0x064b, 0x062a, 0x062c,
- 0x0645, 0x062a, 0x062d, 0x062c, 0x062a, 0x062d, 0x062c, 0x062a,
- 0x062d, 0x0645, 0x062a, 0x062e, 0x0645, 0x062a, 0x0645, 0x062c,
- 0x062a, 0x0645, 0x062d, 0x062a, 0x0645, 0x062e, 0x062c, 0x0645,
- 0x062d, 0x062c, 0x0645, 0x062d, 0x062d, 0x0645, 0x064a, 0x062d,
- 0x0645, 0x0649, 0x0633, 0x062d, 0x062c, 0x0633, 0x062c, 0x062d,
- 0x0633, 0x062c, 0x0649, 0x0633, 0x0645, 0x062d, 0x0633, 0x0645,
- 0x062d, 0x0633, 0x0645, 0x062c, 0x0633, 0x0645, 0x0645, 0x0633,
- 0x0645, 0x0645, 0x0635, 0x062d, 0x062d, 0x0635, 0x062d, 0x062d,
- 0x0635, 0x0645, 0x0645, 0x0634, 0x062d, 0x0645, 0x0634, 0x062d,
- 0x0645, 0x0634, 0x062c, 0x064a, 0x0634, 0x0645, 0x062e, 0x0634,
- 0x0645, 0x062e, 0x0634, 0x0645, 0x0645, 0x0634, 0x0645, 0x0645,
- 0x0636, 0x062d, 0x0649, 0x0636, 0x062e, 0x0645, 0x0636, 0x062e,
- 0x0645, 0x0637, 0x0645, 0x062d, 0x0637, 0x0645, 0x062d, 0x0637,
- 0x0645, 0x0645, 0x0637, 0x0645, 0x064a, 0x0639, 0x062c, 0x0645,
- 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0645, 0x0639, 0x0645,
- 0x0649, 0x063a, 0x0645, 0x0645, 0x063a, 0x0645, 0x064a, 0x063a,
- 0x0645, 0x0649, 0x0641, 0x062e, 0x0645, 0x0641, 0x062e, 0x0645,
- 0x0642, 0x0645, 0x062d, 0x0642, 0x0645, 0x0645, 0x0644, 0x062d,
- 0x0645, 0x0644, 0x062d, 0x064a, 0x0644, 0x062d, 0x0649, 0x0644,
- 0x062c, 0x062c, 0x0644, 0x062c, 0x062c, 0x0644, 0x062e, 0x0645,
- 0x0644, 0x062e, 0x0645, 0x0644, 0x0645, 0x062d, 0x0644, 0x0645,
- 0x062d, 0x0645, 0x062d, 0x062c, 0x0645, 0x062d, 0x0645, 0x0645,
- 0x062d, 0x064a, 0x0645, 0x062c, 0x062d, 0x0645, 0x062c, 0x0645,
- 0x0645, 0x062e, 0x062c, 0x0645, 0x062e, 0x0645, 0x0645, 0x062c,
- 0x062e, 0x0647, 0x0645, 0x062c, 0x0647, 0x0645, 0x0645, 0x0646,
- 0x062d, 0x0645, 0x0646, 0x062d, 0x0649, 0x0646, 0x062c, 0x0645,
- 0x0646, 0x062c, 0x0645, 0x0646, 0x062c, 0x0649, 0x0646, 0x0645,
- 0x064a, 0x0646, 0x0645, 0x0649, 0x064a, 0x0645, 0x0645, 0x064a,
- 0x0645, 0x0645, 0x0628, 0x062e, 0x064a, 0x062a, 0x062c, 0x064a,
- 0x062a, 0x062c, 0x0649, 0x062a, 0x062e, 0x064a, 0x062a, 0x062e,
- 0x0649, 0x062a, 0x0645, 0x064a, 0x062a, 0x0645, 0x0649, 0x062c,
- 0x0645, 0x064a, 0x062c, 0x062d, 0x0649, 0x062c, 0x0645, 0x0649,
- 0x0633, 0x062e, 0x0649, 0x0635, 0x062d, 0x064a, 0x0634, 0x062d,
- 0x064a, 0x0636, 0x062d, 0x064a, 0x0644, 0x062c, 0x064a, 0x0644,
- 0x0645, 0x064a, 0x064a, 0x062d, 0x064a, 0x064a, 0x062c, 0x064a,
- 0x064a, 0x0645, 0x064a, 0x0645, 0x0645, 0x064a, 0x0642, 0x0645,
- 0x064a, 0x0646, 0x062d, 0x064a, 0x0642, 0x0645, 0x062d, 0x0644,
- 0x062d, 0x0645, 0x0639, 0x0645, 0x064a, 0x0643, 0x0645, 0x064a,
- 0x0646, 0x062c, 0x062d, 0x0645, 0x062e, 0x064a, 0x0644, 0x062c,
- 0x0645, 0x0643, 0x0645, 0x0645, 0x0644, 0x062c, 0x0645, 0x0646,
- 0x062c, 0x062d, 0x062c, 0x062d, 0x064a, 0x062d, 0x062c, 0x064a,
- 0x0645, 0x062c, 0x064a, 0x0641, 0x0645, 0x064a, 0x0628, 0x062d,
- 0x064a, 0x0643, 0x0645, 0x0645, 0x0639, 0x062c, 0x0645, 0x0635,
- 0x0645, 0x0645, 0x0633, 0x062e, 0x064a, 0x0646, 0x062c, 0x064a,
- 0x0635, 0x0644, 0x06d2, 0x0642, 0x0644, 0x06d2, 0x0627, 0x0644,
- 0x0644, 0x0647, 0x0627, 0x0643, 0x0628, 0x0631, 0x0645, 0x062d,
- 0x0645, 0x062f, 0x0635, 0x0644, 0x0639, 0x0645, 0x0631, 0x0633,
- 0x0648, 0x0644, 0x0639, 0x0644, 0x064a, 0x0647, 0x0648, 0x0633,
- 0x0644, 0x0645, 0x0635, 0x0644, 0x0649, 0x0635, 0x0644, 0x0649,
- 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644,
- 0x064a, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0x062c,
- 0x0644, 0x0020, 0x062c, 0x0644, 0x0627, 0x0644, 0x0647, 0x0631,
- 0x06cc, 0x0627, 0x0644, 0x002c, 0x3001, 0x3002, 0x003a, 0x003b,
- 0x0021, 0x003f, 0x3016, 0x3017, 0x2026, 0x2025, 0x2014, 0x2013,
- 0x005f, 0x005f, 0x0028, 0x0029, 0x007b, 0x007d, 0x3014, 0x3015,
- 0x3010, 0x3011, 0x300a, 0x300b, 0x3008, 0x3009, 0x300c, 0x300d,
- 0x300e, 0x300f, 0x005b, 0x005d, 0x203e, 0x203e, 0x203e, 0x203e,
- 0x005f, 0x005f, 0x005f, 0x002c, 0x3001, 0x002e, 0x003b, 0x003a,
- 0x003f, 0x0021, 0x2014, 0x0028, 0x0029, 0x007b, 0x007d, 0x3014,
- 0x3015, 0x0023, 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e,
- 0x003d, 0x005c, 0x0024, 0x0025, 0x0040, 0x0020, 0x064b, 0x0640,
- 0x064b, 0x0020, 0x064c, 0x0020, 0x064d, 0x0020, 0x064e, 0x0640,
- 0x064e, 0x0020, 0x064f, 0x0640, 0x064f, 0x0020, 0x0650, 0x0640,
- 0x0650, 0x0020, 0x0651, 0x0640, 0x0651, 0x0020, 0x0652, 0x0640,
- 0x0652, 0x0621, 0x0622, 0x0622, 0x0623, 0x0623, 0x0624, 0x0624,
- 0x0625, 0x0625, 0x0626, 0x0626, 0x0626, 0x0626, 0x0627, 0x0627,
- 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629, 0x062a, 0x062a,
- 0x062a, 0x062a, 0x062b, 0x062b, 0x062b, 0x062b, 0x062c, 0x062c,
- 0x062c, 0x062c, 0x062d, 0x062d, 0x062d, 0x062d, 0x062e, 0x062e,
- 0x062e, 0x062e, 0x062f, 0x062f, 0x0630, 0x0630, 0x0631, 0x0631,
- 0x0632, 0x0632, 0x0633, 0x0633, 0x0633, 0x0633, 0x0634, 0x0634,
- 0x0634, 0x0634, 0x0635, 0x0635, 0x0635, 0x0635, 0x0636, 0x0636,
- 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637, 0x0638, 0x0638,
- 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639, 0x063a, 0x063a,
- 0x063a, 0x063a, 0x0641, 0x0641, 0x0641, 0x0641, 0x0642, 0x0642,
- 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643, 0x0644, 0x0644,
- 0x0644, 0x0644, 0x0645, 0x0645, 0x0645, 0x0645, 0x0646, 0x0646,
- 0x0646, 0x0646, 0x0647, 0x0647, 0x0647, 0x0647, 0x0648, 0x0648,
- 0x0649, 0x0649, 0x064a, 0x064a, 0x064a, 0x064a, 0x0644, 0x0622,
- 0x0644, 0x0622, 0x0644, 0x0623, 0x0644, 0x0623, 0x0644, 0x0625,
- 0x0644, 0x0625, 0x0644, 0x0627, 0x0644, 0x0627, 0x0021, 0x0022,
- 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a,
- 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032,
- 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a,
- 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042,
- 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a,
- 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052,
- 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a,
- 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062,
- 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a,
- 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072,
- 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a,
- 0x007b, 0x007c, 0x007d, 0x007e, 0x2985, 0x2986, 0x3002, 0x300c,
- 0x300d, 0x3001, 0x30fb, 0x30f2, 0x30a1, 0x30a3, 0x30a5, 0x30a7,
- 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, 0x30fc, 0x30a2, 0x30a4,
- 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3,
- 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c4,
- 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
- 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1,
- 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec,
- 0x30ed, 0x30ef, 0x30f3, 0x3099, 0x309a, 0x3164, 0x3131, 0x3132,
- 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313a,
- 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142,
- 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314a,
- 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, 0x3152,
- 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a,
- 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162,
- 0x3163, 0x00a2, 0x00a3, 0x00ac, 0x00af, 0x00a6, 0x00a5, 0x20a9,
- 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0, 0x25cb
+ 0x062d, 0x0637, 0x0645, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639,
+ 0x0645, 0x063a, 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641,
+ 0x062d, 0x0641, 0x062e, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641,
+ 0x064a, 0x0642, 0x062d, 0x0642, 0x0645, 0x0642, 0x0649, 0x0642,
+ 0x064a, 0x0643, 0x0627, 0x0643, 0x062c, 0x0643, 0x062d, 0x0643,
+ 0x062e, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643,
+ 0x064a, 0x0644, 0x062c, 0x0644, 0x062d, 0x0644, 0x062e, 0x0644,
+ 0x0645, 0x0644, 0x0649, 0x0644, 0x064a, 0x0645, 0x062c, 0x0645,
+ 0x062d, 0x0645, 0x062e, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645,
+ 0x064a, 0x0646, 0x062c, 0x0646, 0x062d, 0x0646, 0x062e, 0x0646,
+ 0x0645, 0x0646, 0x0649, 0x0646, 0x064a, 0x0647, 0x062c, 0x0647,
+ 0x0645, 0x0647, 0x0649, 0x0647, 0x064a, 0x064a, 0x062c, 0x064a,
+ 0x062d, 0x064a, 0x062e, 0x064a, 0x0645, 0x064a, 0x0649, 0x064a,
+ 0x064a, 0x0630, 0x0670, 0x0631, 0x0670, 0x0649, 0x0670, 0x0020,
+ 0x064c, 0x0651, 0x0020, 0x064d, 0x0651, 0x0020, 0x064e, 0x0651,
+ 0x0020, 0x064f, 0x0651, 0x0020, 0x0650, 0x0651, 0x0020, 0x0651,
+ 0x0670, 0x0626, 0x0631, 0x0626, 0x0632, 0x0626, 0x0645, 0x0626,
+ 0x0646, 0x0626, 0x0649, 0x0626, 0x064a, 0x0628, 0x0631, 0x0628,
+ 0x0632, 0x0628, 0x0645, 0x0628, 0x0646, 0x0628, 0x0649, 0x0628,
+ 0x064a, 0x062a, 0x0631, 0x062a, 0x0632, 0x062a, 0x0645, 0x062a,
+ 0x0646, 0x062a, 0x0649, 0x062a, 0x064a, 0x062b, 0x0631, 0x062b,
+ 0x0632, 0x062b, 0x0645, 0x062b, 0x0646, 0x062b, 0x0649, 0x062b,
+ 0x064a, 0x0641, 0x0649, 0x0641, 0x064a, 0x0642, 0x0649, 0x0642,
+ 0x064a, 0x0643, 0x0627, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643,
+ 0x0649, 0x0643, 0x064a, 0x0644, 0x0645, 0x0644, 0x0649, 0x0644,
+ 0x064a, 0x0645, 0x0627, 0x0645, 0x0645, 0x0646, 0x0631, 0x0646,
+ 0x0632, 0x0646, 0x0645, 0x0646, 0x0646, 0x0646, 0x0649, 0x0646,
+ 0x064a, 0x0649, 0x0670, 0x064a, 0x0631, 0x064a, 0x0632, 0x064a,
+ 0x0645, 0x064a, 0x0646, 0x064a, 0x0649, 0x064a, 0x064a, 0x0626,
+ 0x062c, 0x0626, 0x062d, 0x0626, 0x062e, 0x0626, 0x0645, 0x0626,
+ 0x0647, 0x0628, 0x062c, 0x0628, 0x062d, 0x0628, 0x062e, 0x0628,
+ 0x0645, 0x0628, 0x0647, 0x062a, 0x062c, 0x062a, 0x062d, 0x062a,
+ 0x062e, 0x062a, 0x0645, 0x062a, 0x0647, 0x062b, 0x0645, 0x062c,
+ 0x062d, 0x062c, 0x0645, 0x062d, 0x062c, 0x062d, 0x0645, 0x062e,
+ 0x062c, 0x062e, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633,
+ 0x062e, 0x0633, 0x0645, 0x0635, 0x062d, 0x0635, 0x062e, 0x0635,
+ 0x0645, 0x0636, 0x062c, 0x0636, 0x062d, 0x0636, 0x062e, 0x0636,
+ 0x0645, 0x0637, 0x062d, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639,
+ 0x0645, 0x063a, 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641,
+ 0x062d, 0x0641, 0x062e, 0x0641, 0x0645, 0x0642, 0x062d, 0x0642,
+ 0x0645, 0x0643, 0x062c, 0x0643, 0x062d, 0x0643, 0x062e, 0x0643,
+ 0x0644, 0x0643, 0x0645, 0x0644, 0x062c, 0x0644, 0x062d, 0x0644,
+ 0x062e, 0x0644, 0x0645, 0x0644, 0x0647, 0x0645, 0x062c, 0x0645,
+ 0x062d, 0x0645, 0x062e, 0x0645, 0x0645, 0x0646, 0x062c, 0x0646,
+ 0x062d, 0x0646, 0x062e, 0x0646, 0x0645, 0x0646, 0x0647, 0x0647,
+ 0x062c, 0x0647, 0x0645, 0x0647, 0x0670, 0x064a, 0x062c, 0x064a,
+ 0x062d, 0x064a, 0x062e, 0x064a, 0x0645, 0x064a, 0x0647, 0x0626,
+ 0x0645, 0x0626, 0x0647, 0x0628, 0x0645, 0x0628, 0x0647, 0x062a,
+ 0x0645, 0x062a, 0x0647, 0x062b, 0x0645, 0x062b, 0x0647, 0x0633,
+ 0x0645, 0x0633, 0x0647, 0x0634, 0x0645, 0x0634, 0x0647, 0x0643,
+ 0x0644, 0x0643, 0x0645, 0x0644, 0x0645, 0x0646, 0x0645, 0x0646,
+ 0x0647, 0x064a, 0x0645, 0x064a, 0x0647, 0x0640, 0x064e, 0x0651,
+ 0x0640, 0x064f, 0x0651, 0x0640, 0x0650, 0x0651, 0x0637, 0x0649,
+ 0x0637, 0x064a, 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649,
+ 0x063a, 0x064a, 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649,
+ 0x0634, 0x064a, 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649,
+ 0x062c, 0x064a, 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649,
+ 0x0635, 0x064a, 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c,
+ 0x0634, 0x062d, 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631,
+ 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0637, 0x0649,
+ 0x0637, 0x064a, 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649,
+ 0x063a, 0x064a, 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649,
+ 0x0634, 0x064a, 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649,
+ 0x062c, 0x064a, 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649,
+ 0x0635, 0x064a, 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c,
+ 0x0634, 0x062d, 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631,
+ 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0634, 0x062c,
+ 0x0634, 0x062d, 0x0634, 0x062e, 0x0634, 0x0645, 0x0633, 0x0647,
+ 0x0634, 0x0647, 0x0637, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d,
+ 0x0633, 0x062e, 0x0634, 0x062c, 0x0634, 0x062d, 0x0634, 0x062e,
+ 0x0637, 0x0645, 0x0638, 0x0645, 0x0627, 0x064b, 0x0627, 0x064b,
+ 0x062a, 0x062c, 0x0645, 0x062a, 0x062d, 0x062c, 0x062a, 0x062d,
+ 0x062c, 0x062a, 0x062d, 0x0645, 0x062a, 0x062e, 0x0645, 0x062a,
+ 0x0645, 0x062c, 0x062a, 0x0645, 0x062d, 0x062a, 0x0645, 0x062e,
+ 0x062c, 0x0645, 0x062d, 0x062c, 0x0645, 0x062d, 0x062d, 0x0645,
+ 0x064a, 0x062d, 0x0645, 0x0649, 0x0633, 0x062d, 0x062c, 0x0633,
+ 0x062c, 0x062d, 0x0633, 0x062c, 0x0649, 0x0633, 0x0645, 0x062d,
+ 0x0633, 0x0645, 0x062d, 0x0633, 0x0645, 0x062c, 0x0633, 0x0645,
+ 0x0645, 0x0633, 0x0645, 0x0645, 0x0635, 0x062d, 0x062d, 0x0635,
+ 0x062d, 0x062d, 0x0635, 0x0645, 0x0645, 0x0634, 0x062d, 0x0645,
+ 0x0634, 0x062d, 0x0645, 0x0634, 0x062c, 0x064a, 0x0634, 0x0645,
+ 0x062e, 0x0634, 0x0645, 0x062e, 0x0634, 0x0645, 0x0645, 0x0634,
+ 0x0645, 0x0645, 0x0636, 0x062d, 0x0649, 0x0636, 0x062e, 0x0645,
+ 0x0636, 0x062e, 0x0645, 0x0637, 0x0645, 0x062d, 0x0637, 0x0645,
+ 0x062d, 0x0637, 0x0645, 0x0645, 0x0637, 0x0645, 0x064a, 0x0639,
+ 0x062c, 0x0645, 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0645,
+ 0x0639, 0x0645, 0x0649, 0x063a, 0x0645, 0x0645, 0x063a, 0x0645,
+ 0x064a, 0x063a, 0x0645, 0x0649, 0x0641, 0x062e, 0x0645, 0x0641,
+ 0x062e, 0x0645, 0x0642, 0x0645, 0x062d, 0x0642, 0x0645, 0x0645,
+ 0x0644, 0x062d, 0x0645, 0x0644, 0x062d, 0x064a, 0x0644, 0x062d,
+ 0x0649, 0x0644, 0x062c, 0x062c, 0x0644, 0x062c, 0x062c, 0x0644,
+ 0x062e, 0x0645, 0x0644, 0x062e, 0x0645, 0x0644, 0x0645, 0x062d,
+ 0x0644, 0x0645, 0x062d, 0x0645, 0x062d, 0x062c, 0x0645, 0x062d,
+ 0x0645, 0x0645, 0x062d, 0x064a, 0x0645, 0x062c, 0x062d, 0x0645,
+ 0x062c, 0x0645, 0x0645, 0x062e, 0x062c, 0x0645, 0x062e, 0x0645,
+ 0x0645, 0x062c, 0x062e, 0x0647, 0x0645, 0x062c, 0x0647, 0x0645,
+ 0x0645, 0x0646, 0x062d, 0x0645, 0x0646, 0x062d, 0x0649, 0x0646,
+ 0x062c, 0x0645, 0x0646, 0x062c, 0x0645, 0x0646, 0x062c, 0x0649,
+ 0x0646, 0x0645, 0x064a, 0x0646, 0x0645, 0x0649, 0x064a, 0x0645,
+ 0x0645, 0x064a, 0x0645, 0x0645, 0x0628, 0x062e, 0x064a, 0x062a,
+ 0x062c, 0x064a, 0x062a, 0x062c, 0x0649, 0x062a, 0x062e, 0x064a,
+ 0x062a, 0x062e, 0x0649, 0x062a, 0x0645, 0x064a, 0x062a, 0x0645,
+ 0x0649, 0x062c, 0x0645, 0x064a, 0x062c, 0x062d, 0x0649, 0x062c,
+ 0x0645, 0x0649, 0x0633, 0x062e, 0x0649, 0x0635, 0x062d, 0x064a,
+ 0x0634, 0x062d, 0x064a, 0x0636, 0x062d, 0x064a, 0x0644, 0x062c,
+ 0x064a, 0x0644, 0x0645, 0x064a, 0x064a, 0x062d, 0x064a, 0x064a,
+ 0x062c, 0x064a, 0x064a, 0x0645, 0x064a, 0x0645, 0x0645, 0x064a,
+ 0x0642, 0x0645, 0x064a, 0x0646, 0x062d, 0x064a, 0x0642, 0x0645,
+ 0x062d, 0x0644, 0x062d, 0x0645, 0x0639, 0x0645, 0x064a, 0x0643,
+ 0x0645, 0x064a, 0x0646, 0x062c, 0x062d, 0x0645, 0x062e, 0x064a,
+ 0x0644, 0x062c, 0x0645, 0x0643, 0x0645, 0x0645, 0x0644, 0x062c,
+ 0x0645, 0x0646, 0x062c, 0x062d, 0x062c, 0x062d, 0x064a, 0x062d,
+ 0x062c, 0x064a, 0x0645, 0x062c, 0x064a, 0x0641, 0x0645, 0x064a,
+ 0x0628, 0x062d, 0x064a, 0x0643, 0x0645, 0x0645, 0x0639, 0x062c,
+ 0x0645, 0x0635, 0x0645, 0x0645, 0x0633, 0x062e, 0x064a, 0x0646,
+ 0x062c, 0x064a, 0x0635, 0x0644, 0x06d2, 0x0642, 0x0644, 0x06d2,
+ 0x0627, 0x0644, 0x0644, 0x0647, 0x0627, 0x0643, 0x0628, 0x0631,
+ 0x0645, 0x062d, 0x0645, 0x062f, 0x0635, 0x0644, 0x0639, 0x0645,
+ 0x0631, 0x0633, 0x0648, 0x0644, 0x0639, 0x0644, 0x064a, 0x0647,
+ 0x0648, 0x0633, 0x0644, 0x0645, 0x0635, 0x0644, 0x0649, 0x0635,
+ 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020,
+ 0x0639, 0x0644, 0x064a, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644,
+ 0x0645, 0x062c, 0x0644, 0x0020, 0x062c, 0x0644, 0x0627, 0x0644,
+ 0x0647, 0x0631, 0x06cc, 0x0627, 0x0644, 0x002c, 0x3001, 0x3002,
+ 0x003a, 0x003b, 0x0021, 0x003f, 0x3016, 0x3017, 0x2026, 0x2025,
+ 0x2014, 0x2013, 0x005f, 0x005f, 0x0028, 0x0029, 0x007b, 0x007d,
+ 0x3014, 0x3015, 0x3010, 0x3011, 0x300a, 0x300b, 0x3008, 0x3009,
+ 0x300c, 0x300d, 0x300e, 0x300f, 0x005b, 0x005d, 0x203e, 0x203e,
+ 0x203e, 0x203e, 0x005f, 0x005f, 0x005f, 0x002c, 0x3001, 0x002e,
+ 0x003b, 0x003a, 0x003f, 0x0021, 0x2014, 0x0028, 0x0029, 0x007b,
+ 0x007d, 0x3014, 0x3015, 0x0023, 0x0026, 0x002a, 0x002b, 0x002d,
+ 0x003c, 0x003e, 0x003d, 0x005c, 0x0024, 0x0025, 0x0040, 0x0020,
+ 0x064b, 0x0640, 0x064b, 0x0020, 0x064c, 0x0020, 0x064d, 0x0020,
+ 0x064e, 0x0640, 0x064e, 0x0020, 0x064f, 0x0640, 0x064f, 0x0020,
+ 0x0650, 0x0640, 0x0650, 0x0020, 0x0651, 0x0640, 0x0651, 0x0020,
+ 0x0652, 0x0640, 0x0652, 0x0621, 0x0622, 0x0622, 0x0623, 0x0623,
+ 0x0624, 0x0624, 0x0625, 0x0625, 0x0626, 0x0626, 0x0626, 0x0626,
+ 0x0627, 0x0627, 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629,
+ 0x062a, 0x062a, 0x062a, 0x062a, 0x062b, 0x062b, 0x062b, 0x062b,
+ 0x062c, 0x062c, 0x062c, 0x062c, 0x062d, 0x062d, 0x062d, 0x062d,
+ 0x062e, 0x062e, 0x062e, 0x062e, 0x062f, 0x062f, 0x0630, 0x0630,
+ 0x0631, 0x0631, 0x0632, 0x0632, 0x0633, 0x0633, 0x0633, 0x0633,
+ 0x0634, 0x0634, 0x0634, 0x0634, 0x0635, 0x0635, 0x0635, 0x0635,
+ 0x0636, 0x0636, 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637,
+ 0x0638, 0x0638, 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639,
+ 0x063a, 0x063a, 0x063a, 0x063a, 0x0641, 0x0641, 0x0641, 0x0641,
+ 0x0642, 0x0642, 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643,
+ 0x0644, 0x0644, 0x0644, 0x0644, 0x0645, 0x0645, 0x0645, 0x0645,
+ 0x0646, 0x0646, 0x0646, 0x0646, 0x0647, 0x0647, 0x0647, 0x0647,
+ 0x0648, 0x0648, 0x0649, 0x0649, 0x064a, 0x064a, 0x064a, 0x064a,
+ 0x0644, 0x0622, 0x0644, 0x0622, 0x0644, 0x0623, 0x0644, 0x0623,
+ 0x0644, 0x0625, 0x0644, 0x0625, 0x0644, 0x0627, 0x0644, 0x0627,
+ 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
+ 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030,
+ 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+ 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040,
+ 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048,
+ 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060,
+ 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068,
+ 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2985, 0x2986,
+ 0x3002, 0x300c, 0x300d, 0x3001, 0x30fb, 0x30f2, 0x30a1, 0x30a3,
+ 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, 0x30fc,
+ 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, 0x30af,
+ 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, 0x30bf,
+ 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd,
+ 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df,
+ 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, 0x30ea,
+ 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3, 0x3099, 0x309a, 0x3164,
+ 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
+ 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
+ 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
+ 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
+ 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
+ 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
+ 0x3161, 0x3162, 0x3163, 0x00a2, 0x00a3, 0x00ac, 0x00af, 0x00a6,
+ 0x00a5, 0x20a9, 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0,
+ 0x25cb
};
#include "wine/unicode.h"
diff --git a/libs/port/digitmap.c b/libs/port/digitmap.c
index 99be476545..0af6011ea7 100644
--- a/libs/port/digitmap.c
+++ b/libs/port/digitmap.c
@@ -1,5 +1,5 @@
/* Unicode digit folding mappings */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/wctype.c b/libs/port/wctype.c
index 661966c5a1..5439e7db57 100644
--- a/libs/port/wctype.c
+++ b/libs/port/wctype.c
@@ -1606,7 +1606,7 @@ const unsigned short wine_wctype_table[17152] =
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
- 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000,
+ 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
diff --git a/tools/make_unicode b/tools/make_unicode
index 3e2d3e88fc..5644fab05e 100755
--- a/tools/make_unicode
+++ b/tools/make_unicode
@@ -23,7 +23,7 @@ use strict;
# base URLs for www.unicode.org files
my $MAPPINGS = "http://www.unicode.org/Public/MAPPINGS";
-my $UNIDATA = "http://www.unicode.org/Public/12.0.0/ucd";
+my $UNIDATA = "http://www.unicode.org/Public/12.1.0/ucd";
my $REPORTS = "http://www.unicode.org/reports";
my $RFCS = "http://www.rfc-editor.org/rfc";
--
2.24.0
Dec. 9, 2019
[PATCH 2/2] dwrite: Implement returning axis values from face reference.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/font.c | 11 +++++++++--
dlls/dwrite/tests/font.c | 10 ++++++++++
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 84e3af8b70..9280b5d32a 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -6280,9 +6280,16 @@ static UINT32 WINAPI fontfacereference1_GetFontAxisValueCount(IDWriteFontFaceRef
static HRESULT WINAPI fontfacereference1_GetFontAxisValues(IDWriteFontFaceReference1 *iface,
DWRITE_FONT_AXIS_VALUE *axis_values, UINT32 value_count)
{
- FIXME("%p, %p, %u.\n", iface, axis_values, value_count);
+ struct dwrite_fontfacereference *reference = impl_from_IDWriteFontFaceReference1(iface);
- return E_NOTIMPL;
+ TRACE("%p, %p, %u.\n", iface, axis_values, value_count);
+
+ if (value_count < reference->axis_values_count)
+ return E_NOT_SUFFICIENT_BUFFER;
+
+ memcpy(axis_values, reference->axis_values, value_count * sizeof(*axis_values));
+
+ return S_OK;
}
static const IDWriteFontFaceReference1Vtbl fontfacereferencevtbl =
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 219a0510ea..3dff4a6191 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -9408,6 +9408,16 @@ static void test_font_resource(void)
ok(!ret, "Unexpected result.\n");
IDWriteFontFaceReference1_Release(reference2);
+ memset(axis_values, 0, sizeof(axis_values));
+ hr = IDWriteFontFaceReference1_GetFontAxisValues(reference, axis_values, 1);
+ ok(hr == E_NOT_SUFFICIENT_BUFFER, "Unexpected hr %#x.\n", hr);
+ ok(!axis_values[0].axisTag, "Unexpected axis tag.\n");
+
+ memset(axis_values, 0, sizeof(axis_values));
+ hr = IDWriteFontFaceReference1_GetFontAxisValues(reference, axis_values, 2);
+ ok(hr == S_OK, "Failed to get axis values, hr %#x.\n", hr);
+ ok(axis_values[0].axisTag == DWRITE_FONT_AXIS_TAG_WEIGHT, "Unexpected axis tag.\n");
+
IDWriteFontFaceReference1_Release(reference);
IDWriteFontFile_Release(fontfile);
--
2.24.0
Dec. 9, 2019
[PATCH 1/2] dwrite: Compare axis values when testing for face reference equality.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/font.c | 28 +++++++++++++------
dlls/dwrite/tests/font.c | 60 ++++++++++++++++++++++++++++++++++++----
2 files changed, 75 insertions(+), 13 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 2670a22839..84e3af8b70 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -236,6 +236,8 @@ struct dwrite_fontfacereference
IDWriteFactory7 *factory;
};
+static const IDWriteFontFaceReference1Vtbl fontfacereferencevtbl;
+
struct dwrite_fontresource
{
IDWriteFontResource IDWriteFontResource_iface;
@@ -1896,6 +1898,16 @@ struct dwrite_fontface *unsafe_impl_from_IDWriteFontFace(IDWriteFontFace *iface)
return CONTAINING_RECORD(iface, struct dwrite_fontface, IDWriteFontFace5_iface);
}
+static struct dwrite_fontfacereference *unsafe_impl_from_IDWriteFontFaceReference(IDWriteFontFaceReference *iface)
+{
+ if (!iface)
+ return NULL;
+ if (iface->lpVtbl != (IDWriteFontFaceReferenceVtbl *)&fontfacereferencevtbl)
+ return NULL;
+ return CONTAINING_RECORD((IDWriteFontFaceReference1 *)iface, struct dwrite_fontfacereference,
+ IDWriteFontFaceReference1_iface);
+}
+
void get_logfont_from_font(IDWriteFont *iface, LOGFONTW *lf)
{
struct dwrite_font *font = unsafe_impl_from_IDWriteFont(iface);
@@ -6132,18 +6144,18 @@ static HRESULT WINAPI fontfacereference_CreateFontFaceWithSimulations(IDWriteFon
static BOOL WINAPI fontfacereference_Equals(IDWriteFontFaceReference1 *iface, IDWriteFontFaceReference *ref)
{
struct dwrite_fontfacereference *reference = impl_from_IDWriteFontFaceReference1(iface);
- IDWriteFontFile *file;
+ struct dwrite_fontfacereference *other = unsafe_impl_from_IDWriteFontFaceReference(ref);
BOOL ret;
TRACE("%p, %p.\n", iface, ref);
- if (FAILED(IDWriteFontFaceReference_GetFontFile(ref, &file)))
- return FALSE;
-
- ret = is_same_fontfile(reference->file, file) &&
- reference->index == IDWriteFontFaceReference_GetFontFaceIndex(ref) &&
- reference->simulations == IDWriteFontFaceReference_GetSimulations(ref);
- IDWriteFontFile_Release(file);
+ ret = is_same_fontfile(reference->file, other->file) && reference->index == other->index &&
+ reference->simulations == other->simulations;
+ if (reference->axis_values_count)
+ {
+ ret &= reference->axis_values_count == other->axis_values_count &&
+ !memcmp(reference->axis_values, other->axis_values, reference->axis_values_count * sizeof(*reference->axis_values));
+ }
return ret;
}
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index a0d36e2f0b..219a0510ea 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -9279,13 +9279,14 @@ static void test_font_resource(void)
IDWriteFontFaceReference1 *reference, *reference2;
IDWriteFontResource *resource, *resource2;
IDWriteFontFile *fontfile, *fontfile2;
- DWRITE_FONT_AXIS_VALUE axis_value;
+ DWRITE_FONT_AXIS_VALUE axis_values[2];
IDWriteFontFace5 *fontface5;
IDWriteFontFace *fontface;
IDWriteFactory6 *factory;
UINT32 count, index;
HRESULT hr;
ULONG ref;
+ BOOL ret;
if (!(factory = create_factory_iid(&IID_IDWriteFactory6)))
{
@@ -9316,9 +9317,9 @@ static void test_font_resource(void)
ok(!index, "Unexpected index %u.\n", index);
/* Specify axis value, font has no variations. */
- axis_value.axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
- axis_value.value = 400.0f;
- hr = IDWriteFontResource_CreateFontFaceReference(resource, DWRITE_FONT_SIMULATIONS_NONE, &axis_value, 1, &reference);
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[0].value = 400.0f;
+ hr = IDWriteFontResource_CreateFontFaceReference(resource, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 1, &reference);
ok(hr == S_OK, "Failed to create reference object, hr %#x.\n", hr);
count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference);
@@ -9326,7 +9327,7 @@ static void test_font_resource(void)
IDWriteFontFaceReference1_Release(reference);
- hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, &axis_value, 1,
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 1,
&reference);
count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference);
ok(count == 1, "Unexpected axis value count.\n");
@@ -9360,6 +9361,55 @@ static void test_font_resource(void)
IDWriteFontFace5_Release(fontface5);
+ /* Reference equality regarding set axis values. */
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[0].value = 400.0f;
+ axis_values[1].axisTag = DWRITE_FONT_AXIS_TAG_ITALIC;
+ axis_values[1].value = 1.0f;
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 2,
+ &reference);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference);
+ ok(count == 2, "Unexpected axis value count.\n");
+
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, NULL, 0,
+ &reference2);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference2);
+ ok(!count, "Unexpected axis value count.\n");
+
+ ret = IDWriteFontFaceReference1_Equals(reference, (IDWriteFontFaceReference *)reference2);
+ ok(!ret, "Unexpected result.\n");
+ IDWriteFontFaceReference1_Release(reference2);
+
+ /* Different values order. */
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_ITALIC;
+ axis_values[0].value = 1.0f;
+ axis_values[1].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[1].value = 400.0f;
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 2,
+ &reference2);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference2);
+ ok(count == 2, "Unexpected axis value count.\n");
+
+ ret = IDWriteFontFaceReference1_Equals(reference, (IDWriteFontFaceReference *)reference2);
+ ok(!ret, "Unexpected result.\n");
+ IDWriteFontFaceReference1_Release(reference2);
+
+ /* Different axis values. */
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_ITALIC;
+ axis_values[0].value = 1.0f;
+ axis_values[1].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[1].value = 401.0f;
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 2,
+ &reference2);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference2);
+ ok(count == 2, "Unexpected axis value count.\n");
+
+ ret = IDWriteFontFaceReference1_Equals(reference, (IDWriteFontFaceReference *)reference2);
+ ok(!ret, "Unexpected result.\n");
+ IDWriteFontFaceReference1_Release(reference2);
+
+ IDWriteFontFaceReference1_Release(reference);
+
IDWriteFontFile_Release(fontfile);
IDWriteFontFace_Release(fontface);
--
2.24.0
Dec. 9, 2019
[PATCH] oleaut32/typelib: No need to query self for supported interface.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/oleaut32/typelib.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index eb713a4e2f..6e8a18c9d7 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -11180,7 +11180,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface,
static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
{
ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
- ITypeInfo *tinfo;
+ ITypeInfo2 *tinfo = &This->ITypeInfo2_iface;
TLBFuncDesc *func_desc;
UINT user_vft = 0, i, depth = 0;
HRESULT hres = S_OK;
@@ -11189,25 +11189,20 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
This->needs_layout = FALSE;
- hres = ICreateTypeInfo2_QueryInterface(iface, &IID_ITypeInfo, (LPVOID*)&tinfo);
- if (FAILED(hres))
- return hres;
-
if (This->typeattr.typekind == TKIND_INTERFACE) {
ITypeInfo *inh;
TYPEATTR *attr;
HREFTYPE inh_href;
- hres = ITypeInfo_GetRefTypeOfImplType(tinfo, 0, &inh_href);
+ hres = ITypeInfo2_GetRefTypeOfImplType(tinfo, 0, &inh_href);
if (SUCCEEDED(hres)) {
- hres = ITypeInfo_GetRefTypeInfo(tinfo, inh_href, &inh);
+ hres = ITypeInfo2_GetRefTypeInfo(tinfo, inh_href, &inh);
if (SUCCEEDED(hres)) {
hres = ITypeInfo_GetTypeAttr(inh, &attr);
if (FAILED(hres)) {
ITypeInfo_Release(inh);
- ITypeInfo_Release(tinfo);
return hres;
}
This->typeattr.cbSizeVft = attr->cbSizeVft;
@@ -11231,17 +11226,13 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
} else if (hres == TYPE_E_ELEMENTNOTFOUND) {
This->typeattr.cbSizeVft = 0;
hres = S_OK;
- } else {
- ITypeInfo_Release(tinfo);
+ } else
return hres;
- }
} else if (hres == TYPE_E_ELEMENTNOTFOUND) {
This->typeattr.cbSizeVft = 0;
hres = S_OK;
- } else {
- ITypeInfo_Release(tinfo);
+ } else
return hres;
- }
} else if (This->typeattr.typekind == TKIND_DISPATCH)
This->typeattr.cbSizeVft = 7 * This->pTypeLib->ptr_size;
else
@@ -11316,7 +11307,6 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
}
}
- ITypeInfo_Release(tinfo);
return hres;
}
--
2.24.0
Dec. 9, 2019
[PATCH] ntdll/tests: Enable some more string API tests.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/ntdll/tests/rtlstr.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/tests/rtlstr.c b/dlls/ntdll/tests/rtlstr.c
index 6f59e956c2..d2091859b8 100644
--- a/dlls/ntdll/tests/rtlstr.c
+++ b/dlls/ntdll/tests/rtlstr.c
@@ -597,6 +597,7 @@ static void test_RtlUpcaseUnicodeChar(void)
} else {
expected_upper_ch = ch;
}
+todo_wine_if(ch == 0xb5)
ok(upper_ch == expected_upper_ch,
"RtlUpcaseUnicodeChar('%c'[=0x%x]) has result '%c'[=0x%x], expected: '%c'[=0x%x]\n",
ch, ch, upper_ch, upper_ch, expected_upper_ch, expected_upper_ch);
@@ -646,6 +647,7 @@ static void test_RtlUpcaseUnicodeString(void)
pRtlUpcaseUnicodeString(&result_str, &ascii_str, 0);
for (i = 0; i <= 255; i++) {
+todo_wine_if(ascii_str.Buffer[i] == 0xb5)
ok(result_str.Buffer[i] == upper_str.Buffer[i],
"RtlUpcaseUnicodeString works wrong: '%c'[=0x%x] is converted to '%c'[=0x%x], expected: '%c'[=0x%x]\n",
ascii_str.Buffer[i], ascii_str.Buffer[i],
@@ -2615,10 +2617,10 @@ START_TEST(rtlstr)
test_RtlStringFromGUID();
test_RtlIsTextUnicode();
test_RtlCompareUnicodeString();
+ test_RtlUpcaseUnicodeChar();
+ test_RtlUpcaseUnicodeString();
if(0)
{
- test_RtlUpcaseUnicodeChar();
- test_RtlUpcaseUnicodeString();
test_RtlDowncaseUnicodeString();
}
test_RtlHashUnicodeString();
--
2.24.0
Dec. 9, 2019
Re: TestBot job 61617 results: [PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Francois Gouget
On Mon, 9 Dec 2019, Louis Lenders wrote:
> patch apparently failed to apply on testbot , but applies here on my
> wine-tree. Don`t know why....
Starting from a clean tree 'patch -p1' tells me there is some fuzz. But
the TestBot uses 'git apply' which is stricter and fails to apply the
patch in my source tree too.
Looking at it manually, it seems the '/*****...' line at the bottom of
the patch does not have the right number of stars. Probably because a
patch adding GetApplicationRestartSettings() was committed after you
generated your patch.
--
Francois Gouget <fgouget(a)codeweavers.com>
Dec. 9, 2019
Re: TestBot job 61617 results: [PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Louis Lenders
patch apparently failed to apply on testbot , but applies here on my
wine-tree. Don`t know why....
Op ma 9 dec. 2019 om 07:49 schreef Marvin <testbot(a)winehq.org>:
> VM Status Failures Command
> debian10 badpatch
> debian10 badpatch
>
> You can also see the results at:
> https://testbot.winehq.org/JobDetails.pl?Key=61617
>
>
> === debian10 (build log) ===
>
> error: patch failed: dlls/kernel32/process.c:4153
> Task: Patch failed to apply
>
> === debian10 (build log) ===
>
> error: patch failed: dlls/kernel32/process.c:4153
> Task: Patch failed to apply
>
Dec. 9, 2019
Re: [PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61617
Your paranoid android.
=== debian10 (build log) ===
error: patch failed: dlls/kernel32/process.c:4153
Task: Patch failed to apply
=== debian10 (build log) ===
error: patch failed: dlls/kernel32/process.c:4153
Task: Patch failed to apply
Dec. 9, 2019
[PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Louis Lenders
https://bugs.winehq.org/show_bug.cgi?id=43817
Signed-off-by: Louis Lenders <xerox.xerox2000x(a)gmail.com>
---
dlls/kernel32/process.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 939ec9b..48dde58 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -4153,9 +4153,8 @@ HRESULT WINAPI ApplicationRecoveryInProgress(PBOOL canceled)
*/
HRESULT WINAPI RegisterApplicationRecoveryCallback(APPLICATION_RECOVERY_CALLBACK callback, PVOID param, DWORD pingint, DWORD flags)
{
- FIXME("%p, %p, %d, %d: stub\n", callback, param, pingint, flags);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return E_FAIL;
+ FIXME("%p, %p, %d, %d: stub, faking succes\n", callback, param, pingint, flags);
+ return S_OK;
}
/**********************************************************************
--
2.7.4
Dec. 9, 2019