headers: Import dwrite IDLs from Wine.

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index 6582d37..554d5b9 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -96,6 +96,7 @@
   include/d3d12shader.idl \
   include/d3dcommon.idl \
   include/dbgprop.idl \
+  include/dcommon.idl \
   include/dcompanimation.idl \
   include/ddstream.idl \
   include/dinputd.idl \
@@ -109,6 +110,10 @@
   include/downloadmgr.idl \
   include/drmexternals.idl \
   include/dvdif.idl \
+  include/dwrite.idl \
+  include/dwrite_1.idl \
+  include/dwrite_2.idl \
+  include/dwrite_3.idl \
   include/dxgi.idl \
   include/dxgi1_2.idl \
   include/dxgi1_3.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index be1fa0f..88e942f 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -396,6 +396,7 @@
 @HAVE_WIDL_TRUE@  include/d3d12shader.idl \
 @HAVE_WIDL_TRUE@  include/d3dcommon.idl \
 @HAVE_WIDL_TRUE@  include/dbgprop.idl \
+@HAVE_WIDL_TRUE@  include/dcommon.idl \
 @HAVE_WIDL_TRUE@  include/dcompanimation.idl \
 @HAVE_WIDL_TRUE@  include/ddstream.idl \
 @HAVE_WIDL_TRUE@  include/dinputd.idl \
@@ -409,6 +410,10 @@
 @HAVE_WIDL_TRUE@  include/downloadmgr.idl \
 @HAVE_WIDL_TRUE@  include/drmexternals.idl \
 @HAVE_WIDL_TRUE@  include/dvdif.idl \
+@HAVE_WIDL_TRUE@  include/dwrite.idl \
+@HAVE_WIDL_TRUE@  include/dwrite_1.idl \
+@HAVE_WIDL_TRUE@  include/dwrite_2.idl \
+@HAVE_WIDL_TRUE@  include/dwrite_3.idl \
 @HAVE_WIDL_TRUE@  include/dxgi.idl \
 @HAVE_WIDL_TRUE@  include/dxgi1_2.idl \
 @HAVE_WIDL_TRUE@  include/dxgi1_3.idl \
diff --git a/mingw-w64-headers/include/d2d1.h b/mingw-w64-headers/include/d2d1.h
index 8368cf4..66f3ee4 100644
--- a/mingw-w64-headers/include/d2d1.h
+++ b/mingw-w64-headers/include/d2d1.h
@@ -341,6 +341,14 @@
 typedef struct D2D1_STROKE_STYLE_PROPERTIES D2D1_STROKE_STYLE_PROPERTIES;
 typedef struct D2D1_TRIANGLE D2D1_TRIANGLE;
 
+typedef D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F;
+typedef D2D_RECT_F D2D1_RECT_F;
+typedef D2D_SIZE_F D2D1_SIZE_F;
+typedef UINT64 D2D1_TAG;
+typedef D2D_POINT_2U D2D1_POINT_2U;
+typedef D2D_RECT_U D2D1_RECT_U;
+typedef D2D_COLOR_F D2D1_COLOR_F;
+
 struct D2D1_ARC_SEGMENT {
   D2D1_POINT_2F        point;
   D2D1_SIZE_F          size;
diff --git a/mingw-w64-headers/include/d2dbasetypes.h b/mingw-w64-headers/include/d2dbasetypes.h
index 387d193..93c99fc 100644
--- a/mingw-w64-headers/include/d2dbasetypes.h
+++ b/mingw-w64-headers/include/d2dbasetypes.h
@@ -1,126 +1,63 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
-
- * d2dbasetypes.h - Header file for the Direct2D API
- * No original Microsoft headers were used in the creation of this
- * file.
- *API docs available at: http://msdn.microsoft.com/en-us/library/dd372349%28v=VS.85%29.aspx
+/*
+ * Copyright 2013 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#ifndef _D2DBASETYPES_H
-#define _D2DBASETYPES_H
+#ifndef _D2DBASETYPES_INCLUDED
+#define _D2DBASETYPES_INCLUDED
 
-#include <d3d9types.h>
+#ifndef D3DCOLORVALUE_DEFINED
+typedef struct D3DCOLORVALUE
+{
+    float r;
+    float g;
+    float b;
+    float a;
+} D3DCOLORVALUE;
+#define D3DCOLORVALUE_DEFINED
+#endif
 
 typedef D3DCOLORVALUE D2D_COLOR_F;
 
-struct D2D_MATRIX_3X2_F {
-  FLOAT _11;
-  FLOAT _12;
-  FLOAT _21;
-  FLOAT _22;
-  FLOAT _31;
-  FLOAT _32;
-};
+typedef struct D2D_RECT_F
+{
+    float left;
+    float top;
+    float right;
+    float bottom;
+} D2D_RECT_F;
 
-typedef struct D2D_MATRIX_4X3_F {
-    __C89_NAMELESS union {
-        __C89_NAMELESS struct {
-            FLOAT _11, _12, _13;
-            FLOAT _21, _22, _23;
-            FLOAT _31, _32, _33;
-            FLOAT _41, _42, _43;
-        };
-        FLOAT m[4][3];
-    };
-} D2D_MATRIX_4X3_F;
+typedef struct D2D_SIZE_F
+{
+    float width;
+    float height;
+} D2D_SIZE_F;
 
-typedef struct D2D_MATRIX_4X4_F {
-    __C89_NAMELESS union {
-        __C89_NAMELESS struct {
-            FLOAT _11, _12, _13, _14;
-            FLOAT _21, _22, _23, _24;
-            FLOAT _31, _32, _33, _34;
-            FLOAT _41, _42, _43, _44;
-        };
-        FLOAT m[4][4];
-    };
-} D2D_MATRIX_4X4_F;
+typedef struct D2D_POINT_2U
+{
+    UINT32 x;
+    UINT32 y;
+} D2D_POINT_2U;
 
-typedef struct D2D_MATRIX_5X4_F {
-    __C89_NAMELESS union {
-        __C89_NAMELESS struct {
-            FLOAT _11, _12, _13, _14;
-            FLOAT _21, _22, _23, _24;
-            FLOAT _31, _32, _33, _34;
-            FLOAT _41, _42, _43, _44;
-            FLOAT _51, _52, _53, _54;
-        };
-        FLOAT m[5][4];
-    };
-} D2D_MATRIX_5X4_F;
+typedef struct D2D_RECT_U
+{
+    UINT32 left;
+    UINT32 top;
+    UINT32 right;
+    UINT32 bottom;
+} D2D_RECT_U;
 
-struct D2D_POINT_2F {
-  FLOAT x;
-  FLOAT y;
-};
-
-struct D2D_POINT_2U {
-  UINT32 x;
-  UINT32 y;
-};
-
-struct D2D_RECT_F {
-  FLOAT left;
-  FLOAT top;
-  FLOAT right;
-  FLOAT bottom;
-};
-
-struct D2D_RECT_U {
-  UINT32 left;
-  UINT32 top;
-  UINT32 right;
-  UINT32 bottom;
-};
-
-typedef RECT D2D_RECT_L;
-
-struct D2D_SIZE_F {
-  FLOAT width;
-  FLOAT height;
-};
-
-typedef D2D_COLOR_F D2D1_COLOR_F;
-
-typedef struct D2D_POINT_2F D2D1_POINT_2F;
-
-typedef struct D2D_POINT_2U D2D1_POINT_2U;
-
-typedef struct D2D_RECT_F D2D1_RECT_F;
-
-typedef struct D2D_RECT_U D2D1_RECT_U;
-
-typedef struct D2D_SIZE_F D2D1_SIZE_F;
-
-typedef struct D2D_VECTOR_2F {
-    FLOAT x;
-    FLOAT y;
-} D2D_VECTOR_2F;
-
-typedef struct D2D_VECTOR_3F {
-    FLOAT x;
-    FLOAT y;
-    FLOAT z;
-} D2D_VECTOR_3F;
-
-typedef struct D2D_VECTOR_4F {
-    FLOAT x;
-    FLOAT y;
-    FLOAT z;
-    FLOAT w;
-} D2D_VECTOR_4F;
-
-#endif /* _D2DBASETYPES_H */
+#endif /* _D2DBASETYPES_INCLUDED */
diff --git a/mingw-w64-headers/include/dcommon.h b/mingw-w64-headers/include/dcommon.h
index 7babc82..d876955 100644
--- a/mingw-w64-headers/include/dcommon.h
+++ b/mingw-w64-headers/include/dcommon.h
@@ -1,52 +1,197 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#ifndef __INC_DCOMMON__
-#define __INC_DCOMMON__
+/*** Autogenerated by WIDL 5.13 from include/dcommon.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __dcommon_h__
+#define __dcommon_h__
+
+/* Forward declarations */
+
+/* Headers for imported files */
 
 #include <dxgiformat.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+typedef struct __WIDL_dcommon_generated_name_00000000 {
+    LONG x;
+    LONG y;
+} POINT;
+typedef struct __WIDL_dcommon_generated_name_00000001 {
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECT;
+typedef unsigned int UINT32;
+#endif
 typedef enum DWRITE_MEASURING_MODE {
-  DWRITE_MEASURING_MODE_NATURAL = 0,
-  DWRITE_MEASURING_MODE_GDI_CLASSIC,
-  DWRITE_MEASURING_MODE_GDI_NATURAL 
+    DWRITE_MEASURING_MODE_NATURAL = 0,
+    DWRITE_MEASURING_MODE_GDI_CLASSIC = 1,
+    DWRITE_MEASURING_MODE_GDI_NATURAL = 2
 } DWRITE_MEASURING_MODE;
-
-enum DWRITE_GLYPH_IMAGE_FORMATS {
-    DWRITE_GLYPH_IMAGE_FORMATS_NONE      = 0x0000,
-    DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE  = 0x0001,
-    DWRITE_GLYPH_IMAGE_FORMATS_CFF       = 0x0002,
-    DWRITE_GLYPH_IMAGE_FORMATS_COLR      = 0x0004,
-    DWRITE_GLYPH_IMAGE_FORMATS_SVG       = 0x0008,
-    DWRITE_GLYPH_IMAGE_FORMATS_PNG       = 0x0010,
-    DWRITE_GLYPH_IMAGE_FORMATS_JPEG      = 0x0020,
-    DWRITE_GLYPH_IMAGE_FORMATS_TIFF      = 0x0040,
-    DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 0x0080,
-};
-
+typedef enum DWRITE_GLYPH_IMAGE_FORMATS {
+    DWRITE_GLYPH_IMAGE_FORMATS_NONE = 0,
+    DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE = 1 << 0,
+    DWRITE_GLYPH_IMAGE_FORMATS_CFF = 1 << 1,
+    DWRITE_GLYPH_IMAGE_FORMATS_COLR = 1 << 2,
+    DWRITE_GLYPH_IMAGE_FORMATS_SVG = 1 << 3,
+    DWRITE_GLYPH_IMAGE_FORMATS_PNG = 1 << 4,
+    DWRITE_GLYPH_IMAGE_FORMATS_JPEG = 1 << 5,
+    DWRITE_GLYPH_IMAGE_FORMATS_TIFF = 1 << 6,
+    DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 1 << 7
+} DWRITE_GLYPH_IMAGE_FORMATS;
 typedef enum D2D1_ALPHA_MODE {
-  D2D1_ALPHA_MODE_UNKNOWN = 0,
-  D2D1_ALPHA_MODE_PREMULTIPLIED = 1,
-  D2D1_ALPHA_MODE_STRAIGHT = 2,
-  D2D1_ALPHA_MODE_IGNORE = 3,
-  D2D1_ALPHA_MODE_FORCE_DWORD = 0xffffffff
+    D2D1_ALPHA_MODE_UNKNOWN = 0,
+    D2D1_ALPHA_MODE_PREMULTIPLIED = 1,
+    D2D1_ALPHA_MODE_STRAIGHT = 2,
+    D2D1_ALPHA_MODE_IGNORE = 3,
+    D2D1_ALPHA_MODE_FORCE_DWORD = 0xffffffff
 } D2D1_ALPHA_MODE;
-
 typedef struct D2D1_PIXEL_FORMAT {
-  DXGI_FORMAT format;
-  D2D1_ALPHA_MODE alphaMode;
+    DXGI_FORMAT format;
+    D2D1_ALPHA_MODE alphaMode;
 } D2D1_PIXEL_FORMAT;
-
+typedef struct D2D_POINT_2F {
+    float x;
+    float y;
+} D2D_POINT_2F;
+typedef struct D2D_POINT_2F D2D1_POINT_2F;
 typedef POINT D2D_POINT_2L;
-typedef D2D_POINT_2L D2D1_POINT_2L;
-
-struct D2D_SIZE_U {
-  UINT32 width;
-  UINT32 height;
-};
-
+typedef POINT D2D1_POINT_2L;
+typedef struct D2D_VECTOR_2F {
+    float x;
+    float y;
+} D2D_VECTOR_2F;
+typedef struct D2D_VECTOR_3F {
+    float x;
+    float y;
+    float z;
+} D2D_VECTOR_3F;
+typedef struct D2D_VECTOR_4F {
+    float x;
+    float y;
+    float z;
+    float w;
+} D2D_VECTOR_4F;
+typedef RECT D2D_RECT_L;
+typedef RECT D2D1_RECT_L;
+typedef struct D2D_SIZE_U {
+    UINT32 width;
+    UINT32 height;
+} D2D_SIZE_U;
 typedef struct D2D_SIZE_U D2D1_SIZE_U;
+typedef struct D2D_MATRIX_3X2_F {
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            float m11;
+            float m12;
+            float m21;
+            float m22;
+            float dx;
+            float dy;
+        } __C89_NAMELESSSTRUCTNAME1;
+        __C89_NAMELESS struct {
+            float _11;
+            float _12;
+            float _21;
+            float _22;
+            float _31;
+            float _32;
+        } __C89_NAMELESSSTRUCTNAME2;
+        float m[3][2];
+    } __C89_NAMELESSUNIONNAME;
+} D2D_MATRIX_3X2_F;
+typedef struct D2D_MATRIX_4X3_F {
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            float _11;
+            float _12;
+            float _13;
+            float _21;
+            float _22;
+            float _23;
+            float _31;
+            float _32;
+            float _33;
+            float _41;
+            float _42;
+            float _43;
+        } __C89_NAMELESSSTRUCTNAME;
+        float m[4][3];
+    } __C89_NAMELESSUNIONNAME;
+} D2D_MATRIX_4X3_F;
+typedef struct D2D_MATRIX_4X4_F {
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            float _11;
+            float _12;
+            float _13;
+            float _14;
+            float _21;
+            float _22;
+            float _23;
+            float _24;
+            float _31;
+            float _32;
+            float _33;
+            float _34;
+            float _41;
+            float _42;
+            float _43;
+            float _44;
+        } __C89_NAMELESSSTRUCTNAME;
+        float m[4][4];
+    } __C89_NAMELESSUNIONNAME;
+} D2D_MATRIX_4X4_F;
+typedef struct D2D_MATRIX_5X4_F {
+    __C89_NAMELESS union {
+        __C89_NAMELESS struct {
+            float _11;
+            float _12;
+            float _13;
+            float _14;
+            float _21;
+            float _22;
+            float _23;
+            float _24;
+            float _31;
+            float _32;
+            float _33;
+            float _34;
+            float _41;
+            float _42;
+            float _43;
+            float _44;
+            float _51;
+            float _52;
+            float _53;
+            float _54;
+        } __C89_NAMELESSSTRUCTNAME;
+        float m[5][4];
+    } __C89_NAMELESSUNIONNAME;
+} D2D_MATRIX_5X4_F;
+/* Begin additional prototypes for all interfaces */
 
-#endif /*#define __INC_DCOMMON__*/
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dcommon_h__ */
diff --git a/mingw-w64-headers/include/dcommon.idl b/mingw-w64-headers/include/dcommon.idl
new file mode 100644
index 0000000..43c82eb
--- /dev/null
+++ b/mingw-w64-headers/include/dcommon.idl
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2012 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "dxgiformat.idl";
+
+cpp_quote("#if 0")
+typedef struct
+{
+    long x, y;
+} POINT;
+
+typedef struct
+{
+    long left, top, right, bottom;
+} RECT;
+
+typedef unsigned int UINT32;
+cpp_quote("#endif")
+
+typedef enum DWRITE_MEASURING_MODE
+{
+    DWRITE_MEASURING_MODE_NATURAL,
+    DWRITE_MEASURING_MODE_GDI_CLASSIC,
+    DWRITE_MEASURING_MODE_GDI_NATURAL
+} DWRITE_MEASURING_MODE;
+
+typedef enum DWRITE_GLYPH_IMAGE_FORMATS
+{
+    DWRITE_GLYPH_IMAGE_FORMATS_NONE                   = 0,
+    DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE               = 1 << 0,
+    DWRITE_GLYPH_IMAGE_FORMATS_CFF                    = 1 << 1,
+    DWRITE_GLYPH_IMAGE_FORMATS_COLR                   = 1 << 2,
+    DWRITE_GLYPH_IMAGE_FORMATS_SVG                    = 1 << 3,
+    DWRITE_GLYPH_IMAGE_FORMATS_PNG                    = 1 << 4,
+    DWRITE_GLYPH_IMAGE_FORMATS_JPEG                   = 1 << 5,
+    DWRITE_GLYPH_IMAGE_FORMATS_TIFF                   = 1 << 6,
+    DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 1 << 7
+} DWRITE_GLYPH_IMAGE_FORMATS;
+
+typedef enum D2D1_ALPHA_MODE
+{
+    D2D1_ALPHA_MODE_UNKNOWN = 0,
+    D2D1_ALPHA_MODE_PREMULTIPLIED = 1,
+    D2D1_ALPHA_MODE_STRAIGHT = 2,
+    D2D1_ALPHA_MODE_IGNORE = 3,
+    D2D1_ALPHA_MODE_FORCE_DWORD = 0xffffffff
+} D2D1_ALPHA_MODE;
+
+typedef struct D2D1_PIXEL_FORMAT
+{
+    DXGI_FORMAT format;
+    D2D1_ALPHA_MODE alphaMode;
+} D2D1_PIXEL_FORMAT;
+
+typedef struct D2D_POINT_2F
+{
+    float x;
+    float y;
+} D2D_POINT_2F, D2D1_POINT_2F;
+
+typedef POINT D2D_POINT_2L, D2D1_POINT_2L;
+
+typedef struct D2D_VECTOR_2F
+{
+    float x;
+    float y;
+} D2D_VECTOR_2F;
+
+typedef struct D2D_VECTOR_3F
+{
+    float x;
+    float y;
+    float z;
+} D2D_VECTOR_3F;
+
+typedef struct D2D_VECTOR_4F
+{
+    float x;
+    float y;
+    float z;
+    float w;
+} D2D_VECTOR_4F;
+
+typedef RECT D2D_RECT_L, D2D1_RECT_L;
+
+typedef struct D2D_SIZE_U
+{
+    UINT32 width;
+    UINT32 height;
+} D2D_SIZE_U, D2D1_SIZE_U;
+
+typedef struct D2D_MATRIX_3X2_F
+{
+    union
+    {
+        struct
+        {
+            float m11;
+            float m12;
+            float m21;
+            float m22;
+            float dx;
+            float dy;
+        };
+
+        struct
+        {
+            float _11, _12;
+            float _21, _22;
+            float _31, _32;
+        };
+
+        float m[3][2];
+    };
+} D2D_MATRIX_3X2_F;
+
+typedef struct D2D_MATRIX_4X3_F
+{
+    union
+    {
+        struct
+        {
+            float _11, _12, _13;
+            float _21, _22, _23;
+            float _31, _32, _33;
+            float _41, _42, _43;
+        };
+
+        float m[4][3];
+    };
+} D2D_MATRIX_4X3_F;
+
+typedef struct D2D_MATRIX_4X4_F
+{
+    union
+    {
+        struct
+        {
+            float _11, _12, _13, _14;
+            float _21, _22, _23, _24;
+            float _31, _32, _33, _34;
+            float _41, _42, _43, _44;
+        };
+
+        float m[4][4];
+    };
+} D2D_MATRIX_4X4_F;
+
+typedef struct D2D_MATRIX_5X4_F
+{
+    union
+    {
+        struct
+        {
+            float _11, _12, _13, _14;
+            float _21, _22, _23, _24;
+            float _31, _32, _33, _34;
+            float _41, _42, _43, _44;
+            float _51, _52, _53, _54;
+        };
+
+        float m[5][4];
+    };
+} D2D_MATRIX_5X4_F;
diff --git a/mingw-w64-headers/include/dwrite.h b/mingw-w64-headers/include/dwrite.h
index 96bbf55..3ab1503 100644
--- a/mingw-w64-headers/include/dwrite.h
+++ b/mingw-w64-headers/include/dwrite.h
@@ -1,2389 +1,5515 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#ifndef __INC_DWRITE__
-#define __INC_DWRITE__
+/*** Autogenerated by WIDL 5.13 from include/dwrite.idl - Do not edit ***/
 
-#define DWRITEAPI DECLSPEC_IMPORT
-
-#include <unknwn.h>
-
-#ifndef DWRITE_DECLARE_INTERFACE
-#define DWRITE_DECLARE_INTERFACE(iid) DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
 #endif
 
-#ifndef __IDWriteBitmapRenderTarget_FWD_DEFINED__
-#define __IDWriteBitmapRenderTarget_FWD_DEFINED__
-typedef struct IDWriteBitmapRenderTarget IDWriteBitmapRenderTarget;
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
 #endif
 
-#ifndef __IDWriteFactory_FWD_DEFINED__
-#define __IDWriteFactory_FWD_DEFINED__
-typedef struct IDWriteFactory IDWriteFactory;
-#endif
+#ifndef __dwrite_h__
+#define __dwrite_h__
 
-#ifndef __IDWriteFont_FWD_DEFINED__
-#define __IDWriteFont_FWD_DEFINED__
-typedef struct IDWriteFont IDWriteFont;
-#endif
+/* Forward declarations */
 
-#ifndef __IDWriteFontCollection_FWD_DEFINED__
-#define __IDWriteFontCollection_FWD_DEFINED__
-typedef struct IDWriteFontCollection IDWriteFontCollection;
-#endif
-
-#ifndef __IDWriteFontFace_FWD_DEFINED__
-#define __IDWriteFontFace_FWD_DEFINED__
-typedef struct IDWriteFontFace IDWriteFontFace;
-#endif
-
-#ifndef __IDWriteFontFamily_FWD_DEFINED__
-#define __IDWriteFontFamily_FWD_DEFINED__
-typedef struct IDWriteFontFamily IDWriteFontFamily;
-#endif
-
-#ifndef __IDWriteFontList_FWD_DEFINED__
-#define __IDWriteFontList_FWD_DEFINED__
-typedef struct IDWriteFontList IDWriteFontList;
-#endif
-
-#ifndef __IDWriteFontFile_FWD_DEFINED__
-#define __IDWriteFontFile_FWD_DEFINED__
-typedef struct IDWriteFontFile IDWriteFontFile;
+#ifndef __IDWriteFontFileStream_FWD_DEFINED__
+#define __IDWriteFontFileStream_FWD_DEFINED__
+typedef interface IDWriteFontFileStream IDWriteFontFileStream;
+#ifdef __cplusplus
+interface IDWriteFontFileStream;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteFontFileLoader_FWD_DEFINED__
 #define __IDWriteFontFileLoader_FWD_DEFINED__
-typedef struct IDWriteFontFileLoader IDWriteFontFileLoader;
-#endif
-
-#ifndef __IDWriteFontFileStream_FWD_DEFINED__
-#define __IDWriteFontFileStream_FWD_DEFINED__
-typedef struct IDWriteFontFileStream IDWriteFontFileStream;
-#endif
-
-#ifndef __IDWriteFontCollectionLoader_FWD_DEFINED__
-#define __IDWriteFontCollectionLoader_FWD_DEFINED__
-typedef struct IDWriteFontCollectionLoader IDWriteFontCollectionLoader;
-#endif
-
-#ifndef __IDWriteFontFileEnumerator_FWD_DEFINED__
-#define __IDWriteFontFileEnumerator_FWD_DEFINED__
-typedef struct IDWriteFontFileEnumerator IDWriteFontFileEnumerator;
-#endif
-
-#ifndef __IDWriteGdiInterop_FWD_DEFINED__
-#define __IDWriteGdiInterop_FWD_DEFINED__
-typedef struct IDWriteGdiInterop IDWriteGdiInterop;
-#endif
-
-/* Fixme: MSDN says its a typedef, needs verification */
-/* http://msdn.microsoft.com/en-us/library/dd756614%28v=VS.85%29.aspx */
-#ifndef __IDWriteGeometrySink_FWD_DEFINED__
-#define __IDWriteGeometrySink_FWD_DEFINED__
-typedef struct ID2D1SimplifiedGeometrySink IDWriteGeometrySink;
-#endif
-
-#ifndef __IDWriteGlyphRunAnalysis_FWD_DEFINED__
-#define __IDWriteGlyphRunAnalysis_FWD_DEFINED__
-typedef struct IDWriteGlyphRunAnalysis IDWriteGlyphRunAnalysis;
-#endif
-
-#ifndef __IDWriteInlineObject_FWD_DEFINED__
-#define __IDWriteInlineObject_FWD_DEFINED__
-typedef struct IDWriteInlineObject IDWriteInlineObject;
+typedef interface IDWriteFontFileLoader IDWriteFontFileLoader;
+#ifdef __cplusplus
+interface IDWriteFontFileLoader;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteLocalFontFileLoader_FWD_DEFINED__
 #define __IDWriteLocalFontFileLoader_FWD_DEFINED__
-typedef struct IDWriteLocalFontFileLoader IDWriteLocalFontFileLoader;
+typedef interface IDWriteLocalFontFileLoader IDWriteLocalFontFileLoader;
+#ifdef __cplusplus
+interface IDWriteLocalFontFileLoader;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFile_FWD_DEFINED__
+#define __IDWriteFontFile_FWD_DEFINED__
+typedef interface IDWriteFontFile IDWriteFontFile;
+#ifdef __cplusplus
+interface IDWriteFontFile;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFileEnumerator_FWD_DEFINED__
+#define __IDWriteFontFileEnumerator_FWD_DEFINED__
+typedef interface IDWriteFontFileEnumerator IDWriteFontFileEnumerator;
+#ifdef __cplusplus
+interface IDWriteFontFileEnumerator;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontCollectionLoader_FWD_DEFINED__
+#define __IDWriteFontCollectionLoader_FWD_DEFINED__
+typedef interface IDWriteFontCollectionLoader IDWriteFontCollectionLoader;
+#ifdef __cplusplus
+interface IDWriteFontCollectionLoader;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteLocalizedStrings_FWD_DEFINED__
 #define __IDWriteLocalizedStrings_FWD_DEFINED__
-typedef struct IDWriteLocalizedStrings IDWriteLocalizedStrings;
-#endif
-
-#ifndef __IDWriteNumberSubstitution_FWD_DEFINED__
-#define __IDWriteNumberSubstitution_FWD_DEFINED__
-typedef struct IDWriteNumberSubstitution IDWriteNumberSubstitution;
-#endif
-
-#ifndef __IDWritePixelSnapping_FWD_DEFINED__
-#define __IDWritePixelSnapping_FWD_DEFINED__
-typedef struct IDWritePixelSnapping IDWritePixelSnapping;
+typedef interface IDWriteLocalizedStrings IDWriteLocalizedStrings;
+#ifdef __cplusplus
+interface IDWriteLocalizedStrings;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteRenderingParams_FWD_DEFINED__
 #define __IDWriteRenderingParams_FWD_DEFINED__
-typedef struct IDWriteRenderingParams IDWriteRenderingParams;
+typedef interface IDWriteRenderingParams IDWriteRenderingParams;
+#ifdef __cplusplus
+interface IDWriteRenderingParams;
+#endif /* __cplusplus */
 #endif
 
-#ifndef __IDWriteTextAnalysisSink_FWD_DEFINED__
-#define __IDWriteTextAnalysisSink_FWD_DEFINED__
-typedef struct IDWriteTextAnalysisSink IDWriteTextAnalysisSink;
+#ifndef __IDWriteFontFace_FWD_DEFINED__
+#define __IDWriteFontFace_FWD_DEFINED__
+typedef interface IDWriteFontFace IDWriteFontFace;
+#ifdef __cplusplus
+interface IDWriteFontFace;
+#endif /* __cplusplus */
 #endif
 
-#ifndef __IDWriteTextAnalysisSource_FWD_DEFINED__
-#define __IDWriteTextAnalysisSource_FWD_DEFINED__
-typedef struct IDWriteTextAnalysisSource IDWriteTextAnalysisSource;
+#ifndef __IDWriteFont_FWD_DEFINED__
+#define __IDWriteFont_FWD_DEFINED__
+typedef interface IDWriteFont IDWriteFont;
+#ifdef __cplusplus
+interface IDWriteFont;
+#endif /* __cplusplus */
 #endif
 
-#ifndef __IDWriteTextAnalyzer_FWD_DEFINED__
-#define __IDWriteTextAnalyzer_FWD_DEFINED__
-typedef struct IDWriteTextAnalyzer IDWriteTextAnalyzer;
+#ifndef __IDWriteFontList_FWD_DEFINED__
+#define __IDWriteFontList_FWD_DEFINED__
+typedef interface IDWriteFontList IDWriteFontList;
+#ifdef __cplusplus
+interface IDWriteFontList;
+#endif /* __cplusplus */
 #endif
 
-#ifndef __IDWriteTextFormat_FWD_DEFINED__
-#define __IDWriteTextFormat_FWD_DEFINED__
-typedef struct IDWriteTextFormat IDWriteTextFormat;
+#ifndef __IDWriteFontFamily_FWD_DEFINED__
+#define __IDWriteFontFamily_FWD_DEFINED__
+typedef interface IDWriteFontFamily IDWriteFontFamily;
+#ifdef __cplusplus
+interface IDWriteFontFamily;
+#endif /* __cplusplus */
 #endif
 
-#ifndef __IDWriteTextLayout_FWD_DEFINED__
-#define __IDWriteTextLayout_FWD_DEFINED__
-typedef struct IDWriteTextLayout IDWriteTextLayout;
+#ifndef __IDWriteFontCollection_FWD_DEFINED__
+#define __IDWriteFontCollection_FWD_DEFINED__
+typedef interface IDWriteFontCollection IDWriteFontCollection;
+#ifdef __cplusplus
+interface IDWriteFontCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWritePixelSnapping_FWD_DEFINED__
+#define __IDWritePixelSnapping_FWD_DEFINED__
+typedef interface IDWritePixelSnapping IDWritePixelSnapping;
+#ifdef __cplusplus
+interface IDWritePixelSnapping;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteTextRenderer_FWD_DEFINED__
 #define __IDWriteTextRenderer_FWD_DEFINED__
-typedef struct IDWriteTextRenderer IDWriteTextRenderer;
+typedef interface IDWriteTextRenderer IDWriteTextRenderer;
+#ifdef __cplusplus
+interface IDWriteTextRenderer;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteInlineObject_FWD_DEFINED__
+#define __IDWriteInlineObject_FWD_DEFINED__
+typedef interface IDWriteInlineObject IDWriteInlineObject;
+#ifdef __cplusplus
+interface IDWriteInlineObject;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextFormat_FWD_DEFINED__
+#define __IDWriteTextFormat_FWD_DEFINED__
+typedef interface IDWriteTextFormat IDWriteTextFormat;
+#ifdef __cplusplus
+interface IDWriteTextFormat;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteTypography_FWD_DEFINED__
 #define __IDWriteTypography_FWD_DEFINED__
-typedef struct IDWriteTypography IDWriteTypography;
-#endif
-
-#include <dcommon.h>
-
-typedef enum DWRITE_INFORMATIONAL_STRING_ID {
-  DWRITE_INFORMATIONAL_STRING_NONE = 0,
-  DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,
-  DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,
-  DWRITE_INFORMATIONAL_STRING_TRADEMARK,
-  DWRITE_INFORMATIONAL_STRING_MANUFACTURER,
-  DWRITE_INFORMATIONAL_STRING_DESIGNER,
-  DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,
-  DWRITE_INFORMATIONAL_STRING_DESCRIPTION,
-  DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,
-  DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,
-  DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,
-  DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,
-  DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,
-  DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES,
-  DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,
-  DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT,
-  DWRITE_INFORMATIONAL_STRING_FULL_NAME,
-  DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME,
-  DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME
-} DWRITE_INFORMATIONAL_STRING_ID;
-
-typedef enum DWRITE_BREAK_CONDITION {
-  DWRITE_BREAK_CONDITION_NEUTRAL         = 0,
-  DWRITE_BREAK_CONDITION_CAN_BREAK       = 1,
-  DWRITE_BREAK_CONDITION_MAY_NOT_BREAK   = 2,
-  DWRITE_BREAK_CONDITION_MUST_BREAK      = 3 
-} DWRITE_BREAK_CONDITION;
-
-typedef enum DWRITE_FACTORY_TYPE {
-  DWRITE_FACTORY_TYPE_SHARED = 0,
-  DWRITE_FACTORY_TYPE_ISOLATED 
-} DWRITE_FACTORY_TYPE;
-
-typedef enum DWRITE_FLOW_DIRECTION {
-  DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM 
-} DWRITE_FLOW_DIRECTION;
-
-typedef enum DWRITE_FONT_FACE_TYPE {
-  DWRITE_FONT_FACE_TYPE_CFF = 0,
-  DWRITE_FONT_FACE_TYPE_TRUETYPE,
-  DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION,
-  DWRITE_FONT_FACE_TYPE_TYPE1,
-  DWRITE_FONT_FACE_TYPE_VECTOR,
-  DWRITE_FONT_FACE_TYPE_BITMAP,
-  DWRITE_FONT_FACE_TYPE_UNKNOWN 
-} DWRITE_FONT_FACE_TYPE;
-
-typedef enum DWRITE_FONT_FEATURE_TAG {
-  DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS             = 0x63726661,
-  DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS     = 0x63703263,
-  DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS      = 0x63733263,
-  DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES             = 0x746c6163,
-  DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS              = 0x65736163,
-  DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION   = 0x706d6363,
-  DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES              = 0x67696c63,
-  DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING                   = 0x70737063,
-  DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH                  = 0x68777363,
-  DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING               = 0x73727563,
-  DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES           = 0x67696c64,
-  DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS                      = 0x74707865,
-  DWRITE_FONT_FEATURE_TAG_FRACTIONS                         = 0x63617266,
-  DWRITE_FONT_FEATURE_TAG_FULL_WIDTH                        = 0x64697766,
-  DWRITE_FONT_FEATURE_TAG_HALF_FORMS                        = 0x666c6168,
-  DWRITE_FONT_FEATURE_TAG_HALANT_FORMS                      = 0x6e6c6168,
-  DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH              = 0x746c6168,
-  DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS                  = 0x74736968,
-  DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES        = 0x616e6b68,
-  DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES              = 0x67696c68,
-  DWRITE_FONT_FEATURE_TAG_HALF_WIDTH                        = 0x64697768,
-  DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS                  = 0x6f6a6f68,
-  DWRITE_FONT_FEATURE_TAG_JIS04_FORMS                       = 0x3430706a,
-  DWRITE_FONT_FEATURE_TAG_JIS78_FORMS                       = 0x3837706a,
-  DWRITE_FONT_FEATURE_TAG_JIS83_FORMS                       = 0x3338706a,
-  DWRITE_FONT_FEATURE_TAG_JIS90_FORMS                       = 0x3039706a,
-  DWRITE_FONT_FEATURE_TAG_KERNING                           = 0x6e72656b,
-  DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES                = 0x6167696c,
-  DWRITE_FONT_FEATURE_TAG_LINING_FIGURES                    = 0x6d756e6c,
-  DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS                   = 0x6c636f6c,
-  DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING                  = 0x6b72616d,
-  DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK                = 0x6b72676d,
-  DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING          = 0x6b6d6b6d,
-  DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS        = 0x746c616e,
-  DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS                   = 0x6b636c6e,
-  DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES                 = 0x6d756e6f,
-  DWRITE_FONT_FEATURE_TAG_ORDINALS                          = 0x6e64726f,
-  DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH      = 0x746c6170,
-  DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS                   = 0x70616370,
-  DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES              = 0x6d756e70,
-  DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS               = 0x64697770,
-  DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS                    = 0x64697771,
-  DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES                = 0x67696c72,
-  DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS               = 0x79627572,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES              = 0x746c6173,
-  DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS              = 0x666e6973,
-  DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS                    = 0x70636d73,
-  DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS                  = 0x6c706d73,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1                   = 0x31307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2                   = 0x32307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3                   = 0x33307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4                   = 0x34307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5                   = 0x35307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6                   = 0x36307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7                   = 0x37307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8                   = 0x38307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9                   = 0x39307373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10                  = 0x30317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11                  = 0x31317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12                  = 0x32317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13                  = 0x33317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14                  = 0x34317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15                  = 0x35317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16                  = 0x36317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17                  = 0x37317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18                  = 0x38317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19                  = 0x39317373,
-  DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20                  = 0x30327373,
-  DWRITE_FONT_FEATURE_TAG_SUBSCRIPT                         = 0x73627573,
-  DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT                       = 0x73707573,
-  DWRITE_FONT_FEATURE_TAG_SWASH                             = 0x68737773,
-  DWRITE_FONT_FEATURE_TAG_TITLING                           = 0x6c746974,
-  DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS            = 0x6d616e74,
-  DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES                   = 0x6d756e74,
-  DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS                 = 0x64617274,
-  DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS                      = 0x64697774,
-  DWRITE_FONT_FEATURE_TAG_UNICASE                           = 0x63696e75,
-  DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO                      = 0x6f72657a 
-} DWRITE_FONT_FEATURE_TAG;
-
-typedef enum DWRITE_FONT_FILE_TYPE {
-  DWRITE_FONT_FILE_TYPE_UNKNOWN = 0,
-  DWRITE_FONT_FILE_TYPE_CFF,
-  DWRITE_FONT_FILE_TYPE_TRUETYPE,
-  DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION,
-  DWRITE_FONT_FILE_TYPE_TYPE1_PFM,
-  DWRITE_FONT_FILE_TYPE_TYPE1_PFB,
-  DWRITE_FONT_FILE_TYPE_VECTOR,
-  DWRITE_FONT_FILE_TYPE_BITMAP 
-} DWRITE_FONT_FILE_TYPE;
-
-typedef enum DWRITE_FONT_SIMULATIONS {
-  DWRITE_FONT_SIMULATIONS_NONE      = 0x0000,
-  DWRITE_FONT_SIMULATIONS_BOLD      = 0x0001,
-  DWRITE_FONT_SIMULATIONS_OBLIQUE   = 0x0002 
-} DWRITE_FONT_SIMULATIONS;
-
-#ifdef DEFINE_ENUM_FLAG_OPERATORS
-DEFINE_ENUM_FLAG_OPERATORS(DWRITE_FONT_SIMULATIONS);
-#endif
-
-typedef enum DWRITE_FONT_STRETCH {
-  DWRITE_FONT_STRETCH_UNDEFINED         = 0,
-  DWRITE_FONT_STRETCH_ULTRA_CONDENSED   = 1,
-  DWRITE_FONT_STRETCH_EXTRA_CONDENSED   = 2,
-  DWRITE_FONT_STRETCH_CONDENSED         = 3,
-  DWRITE_FONT_STRETCH_SEMI_CONDENSED    = 4,
-  DWRITE_FONT_STRETCH_NORMAL            = 5,
-  DWRITE_FONT_STRETCH_MEDIUM            = 5,
-  DWRITE_FONT_STRETCH_SEMI_EXPANDED     = 6,
-  DWRITE_FONT_STRETCH_EXPANDED          = 7,
-  DWRITE_FONT_STRETCH_EXTRA_EXPANDED    = 8,
-  DWRITE_FONT_STRETCH_ULTRA_EXPANDED    = 9 
-} DWRITE_FONT_STRETCH;
-
-typedef enum DWRITE_FONT_STYLE {
-  DWRITE_FONT_STYLE_NORMAL = 0,
-  DWRITE_FONT_STYLE_OBLIQUE,
-  DWRITE_FONT_STYLE_ITALIC 
-} DWRITE_FONT_STYLE;
-
-typedef enum DWRITE_FONT_WEIGHT {
-  DWRITE_FONT_WEIGHT_THIN          = 100,
-  DWRITE_FONT_WEIGHT_EXTRA_LIGHT   = 200,
-  DWRITE_FONT_WEIGHT_ULTRA_LIGHT   = 200,
-  DWRITE_FONT_WEIGHT_LIGHT         = 300,
-  DWRITE_FONT_WEIGHT_NORMAL        = 400,
-  DWRITE_FONT_WEIGHT_REGULAR       = 400,
-  DWRITE_FONT_WEIGHT_MEDIUM        = 500,
-  DWRITE_FONT_WEIGHT_DEMI_BOLD     = 600,
-  DWRITE_FONT_WEIGHT_SEMI_BOLD     = 600,
-  DWRITE_FONT_WEIGHT_BOLD          = 700,
-  DWRITE_FONT_WEIGHT_EXTRA_BOLD    = 800,
-  DWRITE_FONT_WEIGHT_ULTRA_BOLD    = 800,
-  DWRITE_FONT_WEIGHT_BLACK         = 900,
-  DWRITE_FONT_WEIGHT_HEAVY         = 900,
-  DWRITE_FONT_WEIGHT_EXTRA_BLACK   = 950,
-  DWRITE_FONT_WEIGHT_ULTRA_BLACK   = 950 
-} DWRITE_FONT_WEIGHT;
-
-typedef enum DWRITE_LINE_SPACING_METHOD {
-  DWRITE_LINE_SPACING_METHOD_DEFAULT = 0,
-  DWRITE_LINE_SPACING_METHOD_UNIFORM 
-} DWRITE_LINE_SPACING_METHOD;
-
-typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD {
-  DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE = 0,
-  DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,
-  DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,
-  DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,
-  DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL 
-} DWRITE_NUMBER_SUBSTITUTION_METHOD;
-
-typedef enum DWRITE_PARAGRAPH_ALIGNMENT {
-  DWRITE_PARAGRAPH_ALIGNMENT_NEAR = 0,
-  DWRITE_PARAGRAPH_ALIGNMENT_FAR,
-  DWRITE_PARAGRAPH_ALIGNMENT_CENTER 
-} DWRITE_PARAGRAPH_ALIGNMENT;
-
-typedef enum DWRITE_PIXEL_GEOMETRY {
-  DWRITE_PIXEL_GEOMETRY_FLAT = 0,
-  DWRITE_PIXEL_GEOMETRY_RGB,
-  DWRITE_PIXEL_GEOMETRY_BGR 
-} DWRITE_PIXEL_GEOMETRY;
-
-typedef enum DWRITE_READING_DIRECTION {
-  DWRITE_READING_DIRECTION_LEFT_TO_RIGHT = 0,
-  DWRITE_READING_DIRECTION_RIGHT_TO_LEFT 
-} DWRITE_READING_DIRECTION;
-
-typedef enum DWRITE_RENDERING_MODE {
-  DWRITE_RENDERING_MODE_DEFAULT = 0,
-  DWRITE_RENDERING_MODE_ALIASED,
-  DWRITE_RENDERING_MODE_GDI_CLASSIC,
-  DWRITE_RENDERING_MODE_GDI_NATURAL,
-  DWRITE_RENDERING_MODE_NATURAL,
-  DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
-  DWRITE_RENDERING_MODE_OUTLINE,
-  DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC       = DWRITE_RENDERING_MODE_GDI_CLASSIC,
-  DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL       = DWRITE_RENDERING_MODE_GDI_NATURAL,
-  DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL           = DWRITE_RENDERING_MODE_NATURAL,
-  DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC
-} DWRITE_RENDERING_MODE;
-
-typedef enum DWRITE_SCRIPT_SHAPES {
-  DWRITE_SCRIPT_SHAPES_DEFAULT     = 0,
-  DWRITE_SCRIPT_SHAPES_NO_VISUAL   = 1 
-} DWRITE_SCRIPT_SHAPES;
-
-typedef enum DWRITE_TEXT_ALIGNMENT {
-  DWRITE_TEXT_ALIGNMENT_LEADING = 0,
-  DWRITE_TEXT_ALIGNMENT_TRAILING,
-  DWRITE_TEXT_ALIGNMENT_CENTER 
-} DWRITE_TEXT_ALIGNMENT;
-
-typedef enum DWRITE_TEXTURE_TYPE {
-  DWRITE_TEXTURE_ALIASED_1x1 = 0,
-  DWRITE_TEXTURE_CLEARTYPE_3x1 
-} DWRITE_TEXTURE_TYPE;
-
-typedef enum DWRITE_TRIMMING_GRANULARITY {
-  DWRITE_TRIMMING_GRANULARITY_NONE,
-  DWRITE_TRIMMING_GRANULARITY_CHARACTER,
-  DWRITE_TRIMMING_GRANULARITY_WORD 
-} DWRITE_TRIMMING_GRANULARITY;
-
-typedef enum DWRITE_WORD_WRAPPING {
-  DWRITE_WORD_WRAPPING_WRAP,
-  DWRITE_WORD_WRAPPING_NO_WRAP 
-} DWRITE_WORD_WRAPPING;
-
-typedef struct _DWRITE_OVERHANG_METRICS {
-  FLOAT left;
-  FLOAT top;
-  FLOAT right;
-  FLOAT bottom;
-} DWRITE_OVERHANG_METRICS, *PDWRITE_OVERHANG_METRICS;
-
-typedef struct DWRITE_CLUSTER_METRICS {
-  FLOAT  width;
-  UINT16 length;
-  UINT16 canWrapLineAfter  :1;
-  UINT16 isWhitespace  :1;
-  UINT16 isNewline  :1;
-  UINT16 isSoftHyphen  :1;
-  UINT16 isRightToLeft  :1;
-  UINT16 padding  :11;
-} DWRITE_CLUSTER_METRICS;
-
-typedef struct DWRITE_FONT_FEATURE {
-  DWRITE_FONT_FEATURE_TAG nameTag;
-  UINT32                  parameter;
-} DWRITE_FONT_FEATURE;
-
-typedef struct DWRITE_FONT_METRICS {
-  UINT16 designUnitsPerEm;
-  UINT16 ascent;
-  UINT16 descent;
-  INT16  lineGap;
-  UINT16 capHeight;
-  UINT16 xHeight;
-  INT16  underlinePosition;
-  UINT16 underlineThickness;
-  INT16  strikethroughPosition;
-  UINT16 strikethroughThickness;
-} DWRITE_FONT_METRICS;
-
-typedef struct DWRITE_GLYPH_METRICS {
-  INT32  leftSideBearing;
-  UINT32 advanceWidth;
-  INT32  rightSideBearing;
-  INT32  topSideBearing;
-  UINT32 advanceHeight;
-  INT32  bottomSideBearing;
-  INT32  verticalOriginY;
-} DWRITE_GLYPH_METRICS;
-
-typedef struct DWRITE_GLYPH_OFFSET {
-  FLOAT advanceOffset;
-  FLOAT ascenderOffset;
-} DWRITE_GLYPH_OFFSET;
-
-typedef struct DWRITE_GLYPH_RUN {
-  IDWriteFontFace           *fontFace;
-  FLOAT                     fontEmSize;
-  UINT32                    glyphCount;
-  const UINT16              *glyphIndices;
-  const FLOAT               *glyphAdvances;
-  const DWRITE_GLYPH_OFFSET *glyphOffsets;
-  WINBOOL                   isSideways;
-  UINT32                    bidiLevel;
-} DWRITE_GLYPH_RUN;
-
-typedef struct DWRITE_GLYPH_RUN_DESCRIPTION {
-  const WCHAR  *localeName;
-  const WCHAR  *string;
-  UINT32       stringLength;
-  const UINT16 *clusterMap;
-  UINT32       textPosition;
-} DWRITE_GLYPH_RUN_DESCRIPTION;
-
-typedef struct DWRITE_HIT_TEST_METRICS {
-  UINT32  textPosition;
-  UINT32  length;
-  FLOAT   left;
-  FLOAT   top;
-  FLOAT   width;
-  FLOAT   height;
-  UINT32  bidiLevel;
-  WINBOOL isText;
-  WINBOOL isTrimmed;
-} DWRITE_HIT_TEST_METRICS;
-
-typedef struct DWRITE_INLINE_OBJECT_METRICS {
-  FLOAT   width;
-  FLOAT   height;
-  FLOAT   baseline;
-  WINBOOL supportsSideways;
-} DWRITE_INLINE_OBJECT_METRICS;
-
-typedef struct DWRITE_LINE_BREAKPOINT {
-  UINT8 breakConditionBefore  :2;
-  UINT8 breakConditionAfter  :2;
-  UINT8 isWhitespace  :1;
-  UINT8 isSoftHyphen  :1;
-  UINT8 padding  :2;
-} DWRITE_LINE_BREAKPOINT;
-
-typedef struct DWRITE_LINE_METRICS {
-  UINT32  length;
-  UINT32  trailingWhitespaceLength;
-  UINT32  newlineLength;
-  FLOAT   height;
-  FLOAT   baseline;
-  WINBOOL isTrimmed;
-} DWRITE_LINE_METRICS;
-
-typedef struct DWRITE_MATRIX {
-  FLOAT m11;
-  FLOAT m12;
-  FLOAT m21;
-  FLOAT m22;
-  FLOAT dx;
-  FLOAT dy;
-} DWRITE_MATRIX;
-
-typedef struct DWRITE_SCRIPT_ANALYSIS {
-  UINT16               script;
-  DWRITE_SCRIPT_SHAPES shapes;
-} DWRITE_SCRIPT_ANALYSIS;
-
-typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES {
-  UINT16 justification  :4;
-  UINT16 isClusterStart  :1;
-  UINT16 isDiacritic  :1;
-  UINT16 isZeroWidthSpace  :1;
-  UINT16 reserved  :9;
-} DWRITE_SHAPING_GLYPH_PROPERTIES;
-
-typedef struct DWRITE_SHAPING_TEXT_PROPERTIES {
-  UINT16 isShapedAlone  :1;
-  UINT16 reserved  :15;
-} DWRITE_SHAPING_TEXT_PROPERTIES;
-
-typedef struct DWRITE_STRIKETHROUGH {
-  FLOAT                    width;
-  FLOAT                    thickness;
-  FLOAT                    offset;
-  DWRITE_READING_DIRECTION readingDirection;
-  DWRITE_FLOW_DIRECTION    flowDirection;
-  const WCHAR              *localeName;
-  DWRITE_MEASURING_MODE    measuringMode;
-} DWRITE_STRIKETHROUGH;
-
-typedef struct DWRITE_TEXT_METRICS {
-  FLOAT  left;
-  FLOAT  top;
-  FLOAT  width;
-  FLOAT  widthIncludingTrailingWhitespace;
-  FLOAT  height;
-  FLOAT  layoutWidth;
-  FLOAT  layoutHeight;
-  UINT32 maxBidiReorderingDepth;
-  UINT32 lineCount;
-} DWRITE_TEXT_METRICS;
-
-typedef struct DWRITE_TEXT_RANGE {
-  UINT32 startPosition;
-  UINT32 length;
-} DWRITE_TEXT_RANGE;
-
-typedef struct DWRITE_TRIMMING {
-  DWRITE_TRIMMING_GRANULARITY granularity;
-  UINT32                      delimiter;
-  UINT32                      delimiterCount;
-} DWRITE_TRIMMING;
-
-typedef struct DWRITE_TYPOGRAPHIC_FEATURES {
-  DWRITE_FONT_FEATURE *features;
-  UINT32              featureCount;
-} DWRITE_TYPOGRAPHIC_FEATURES;
-
-typedef struct DWRITE_UNDERLINE {
-  FLOAT                    width;
-  FLOAT                    thickness;
-  FLOAT                    offset;
-  FLOAT                    runHeight;
-  DWRITE_READING_DIRECTION readingDirection;
-  DWRITE_FLOW_DIRECTION    flowDirection;
-  const WCHAR              *localeName;
-  DWRITE_MEASURING_MODE    measuringMode;
-} DWRITE_UNDERLINE;
-
-#define DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d) ( \
-    (static_cast<UINT32>(static_cast<UINT8>(d)) << 24) | \
-    (static_cast<UINT32>(static_cast<UINT8>(c)) << 16) | \
-    (static_cast<UINT32>(static_cast<UINT8>(b)) << 8) | \
-     static_cast<UINT32>(static_cast<UINT8>(a)))
-
-#ifndef __MINGW_DEF_ARG_VAL
+typedef interface IDWriteTypography IDWriteTypography;
 #ifdef __cplusplus
-#define __MINGW_DEF_ARG_VAL(x) = x
-#else
-#define __MINGW_DEF_ARG_VAL(x)
-#endif
+interface IDWriteTypography;
+#endif /* __cplusplus */
 #endif
 
-#undef  INTERFACE
-#define INTERFACE IDWriteBitmapRenderTarget
-DECLARE_INTERFACE_(IDWriteBitmapRenderTarget,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteBitmapRenderTarget_FWD_DEFINED__
+#define __IDWriteBitmapRenderTarget_FWD_DEFINED__
+typedef interface IDWriteBitmapRenderTarget IDWriteBitmapRenderTarget;
+#ifdef __cplusplus
+interface IDWriteBitmapRenderTarget;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteBitmapRenderTarget methods */
-    STDMETHOD(DrawGlyphRun)(THIS_
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        DWRITE_MEASURING_MODE measuringMode,
-        DWRITE_GLYPH_RUN const *glyphRun,
-        IDWriteRenderingParams *renderingParams,
-        COLORREF textColor,
-        RECT *blackBoxRect __MINGW_DEF_ARG_VAL(NULL)) PURE;
-
-    STDMETHOD_(HDC, GetMemoryDC)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetPixelsPerDip)(THIS) PURE;
-
-    STDMETHOD(SetPixelsPerDip)(THIS_
-        FLOAT pixelsPerDip) PURE;
-
-    STDMETHOD(GetCurrentTransform)(THIS_
-        DWRITE_MATRIX* transform) PURE;
-
-    STDMETHOD(SetCurrentTransform)(THIS_
-        DWRITE_MATRIX const *transform) PURE;
-
-    STDMETHOD(GetSize)(THIS_
-        SIZE *size) PURE;
-
-    STDMETHOD(Resize)(THIS_
-        UINT32 width,
-        UINT32 height) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteBitmapRenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteBitmapRenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteBitmapRenderTarget_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteBitmapRenderTarget_DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuringMode,glyphRun,renderingParams,textColor,blackBoxRect) (This)->lpVtbl->DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuringMode,glyphRun,renderingParams,textColor,blackBoxRect)
-#define IDWriteBitmapRenderTarget_GetCurrentTransform(This,transform) (This)->lpVtbl->GetCurrentTransform(This,transform)
-#define IDWriteBitmapRenderTarget_GetMemoryDC() (This)->lpVtbl->GetMemoryDC(This)
-#define IDWriteBitmapRenderTarget_GetPixelsPerDip() (This)->lpVtbl->GetPixelsPerDip(This)
-#define IDWriteBitmapRenderTarget_GetSize(This,size) (This)->lpVtbl->GetSize(This,size)
-#define IDWriteBitmapRenderTarget_Resize(This,width,height) (This)->lpVtbl->Resize(This,width,height)
-#define IDWriteBitmapRenderTarget_SetCurrentTransform(This,transform) (This)->lpVtbl->SetCurrentTransform(This,transform)
-#define IDWriteBitmapRenderTarget_SetPixelsPerDip(This,pixelsPerDip) (This)->lpVtbl->SetPixelsPerDip(This,pixelsPerDip)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFactory
-DECLARE_INTERFACE_(IDWriteFactory,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteGdiInterop_FWD_DEFINED__
+#define __IDWriteGdiInterop_FWD_DEFINED__
+typedef interface IDWriteGdiInterop IDWriteGdiInterop;
+#ifdef __cplusplus
+interface IDWriteGdiInterop;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFactory methods */
-    STDMETHOD(GetSystemFontCollection)(THIS_
-        IDWriteFontCollection **fontCollection,
-        WINBOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(CreateCustomFontCollection)(THIS_
-        IDWriteFontCollectionLoader *collectionLoader,
-        void const *collectionKey,
-        UINT32 collectionKeySize,
-        IDWriteFontCollection **fontCollection) PURE;
-
-    STDMETHOD(RegisterFontCollectionLoader)(THIS_
-        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
-
-    STDMETHOD(UnregisterFontCollectionLoader)(THIS_
-        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
-
-    STDMETHOD(CreateFontFileReference)(THIS_
-        WCHAR const *filePath,
-        FILETIME const *lastWriteTime,
-        IDWriteFontFile **fontFile) PURE;
-
-    STDMETHOD(CreateCustomFontFileReference)(THIS_
-        void const *fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        IDWriteFontFileLoader *fontFileLoader,
-        IDWriteFontFile **fontFile) PURE;
-
-    STDMETHOD(CreateFontFace)(THIS_
-        DWRITE_FONT_FACE_TYPE fontFaceType,
-        UINT32 numberOfFiles,
-        IDWriteFontFile *const *fontFiles,
-        UINT32 faceIndex,
-        DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,
-        IDWriteFontFace **fontFace) PURE;
-
-    STDMETHOD(CreateRenderingParams)(THIS_
-        IDWriteRenderingParams **renderingParams) PURE;
-
-    STDMETHOD(CreateMonitorRenderingParams)(THIS_
-        HMONITOR monitor,
-        IDWriteRenderingParams **renderingParams) PURE;
-
-    STDMETHOD(CreateCustomRenderingParams)(THIS_
-        FLOAT gamma,
-        FLOAT enhancedContrast,
-        FLOAT clearTypeLevel,
-        DWRITE_PIXEL_GEOMETRY pixelGeometry,
-        DWRITE_RENDERING_MODE renderingMode,
-        IDWriteRenderingParams **renderingParams) PURE;
-
-    STDMETHOD(RegisterFontFileLoader)(THIS_
-        IDWriteFontFileLoader *fontFileLoader) PURE;
-
-    STDMETHOD(UnregisterFontFileLoader)(THIS_
-        IDWriteFontFileLoader *fontFileLoader) PURE;
-
-    STDMETHOD(CreateTextFormat)(THIS_
-        WCHAR const *fontFamilyName,
-        IDWriteFontCollection *fontCollection,
-        DWRITE_FONT_WEIGHT fontWeight,
-        DWRITE_FONT_STYLE fontStyle,
-        DWRITE_FONT_STRETCH fontStretch,
-        FLOAT fontSize,
-        WCHAR const *localeName,
-        IDWriteTextFormat **textFormat) PURE;
-
-    STDMETHOD(CreateTypography)(THIS_
-        IDWriteTypography **typography) PURE;
-
-    STDMETHOD(GetGdiInterop)(THIS_
-        IDWriteGdiInterop **gdiInterop) PURE;
-
-    STDMETHOD(CreateTextLayout)(THIS_
-        WCHAR const *string,
-        UINT32 stringLength,
-        IDWriteTextFormat *textFormat,
-        FLOAT maxWidth,
-        FLOAT maxHeight,
-        IDWriteTextLayout **textLayout) PURE;
-
-    STDMETHOD(CreateGdiCompatibleTextLayout)(THIS_
-        WCHAR const *string,
-        UINT32 stringLength,
-        IDWriteTextFormat *textFormat,
-        FLOAT layoutWidth,
-        FLOAT layoutHeight,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        IDWriteTextLayout **textLayout) PURE;
-
-    STDMETHOD(CreateEllipsisTrimmingSign)(THIS_
-        IDWriteTextFormat *textFormat,
-        IDWriteInlineObject **trimmingSign) PURE;
-
-    STDMETHOD(CreateTextAnalyzer)(THIS_
-        IDWriteTextAnalyzer **textAnalyzer) PURE;
-
-    STDMETHOD(CreateNumberSubstitution)(THIS_
-        DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,
-        WCHAR const *localeName,
-        WINBOOL ignoreUserOverride,
-        IDWriteNumberSubstitution **numberSubstitution) PURE;
-
-    STDMETHOD(CreateGlyphRunAnalysis)(THIS_
-        DWRITE_GLYPH_RUN const *glyphRun,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_RENDERING_MODE renderingMode,
-        DWRITE_MEASURING_MODE measuringMode,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        IDWriteGlyphRunAnalysis **glyphRunAnalysis) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFactory_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFactory_CreateCustomFontCollection(This,collectionLoader,collectionKey,collectionKeySize,fontCollection) (This)->lpVtbl->CreateCustomFontCollection(This,collectionLoader,collectionKey,collectionKeySize,fontCollection)
-#define IDWriteFactory_CreateCustomFontFileReference(This,fontFileReferenceKey,fontFileReferenceKeySize,fontFileLoader,fontFile) (This)->lpVtbl->CreateCustomFontFileReference(This,fontFileReferenceKey,fontFileReferenceKeySize,fontFileLoader,fontFile)
-#define IDWriteFactory_CreateCustomRenderingParams(This,gamma,enhancedContrast,clearTypeLevel,pixelGeometry,renderingMode,renderingParams) (This)->lpVtbl->CreateCustomRenderingParams(This,gamma,enhancedContrast,clearTypeLevel,pixelGeometry,renderingMode,renderingParams)
-#define IDWriteFactory_CreateGdiCompatibleTextLayout(This,string,stringLength,textFormat,layoutWidth,layoutHeight,pixelsPerDip,transform,useGdiNatural,textLayout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,stringLength,textFormat,layoutWidth,layoutHeight,pixelsPerDip,transform,useGdiNatural,textLayout)
-#define IDWriteFactory_CreateEllipsisTrimmingSign(This,textFormat,trimmingSign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,textFormat,trimmingSign)
-#define IDWriteFactory_CreateFontFace(This,fontFaceType,numberOfFiles,fontFiles,faceIndex,fontFaceSimulationFlags,fontFace) (This)->lpVtbl->CreateFontFace(This,fontFaceType,numberOfFiles,fontFiles,faceIndex,fontFaceSimulationFlags,fontFace)
-#define IDWriteFactory_CreateFontFileReference(This,filePath,lastWriteTime,fontFile) (This)->lpVtbl->CreateFontFileReference(This,filePath,lastWriteTime,fontFile)
-#define IDWriteFactory_CreateGlyphRunAnalysis(This,glyphRun,pixelsPerDip,transform,renderingMode,measuringMode,baselineOriginX,baselineOriginY,glyphRunAnalysis) (This)->lpVtbl->CreateGlyphRunAnalysis(This,glyphRun,pixelsPerDip,transform,renderingMode,measuringMode,baselineOriginX,baselineOriginY,glyphRunAnalysis)
-#define IDWriteFactory_CreateMonitorRenderingParams(This,monitor,renderingParams) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,renderingParams)
-#define IDWriteFactory_CreateNumberSubstitution(This,substitutionMethod,localeName,ignoreUserOverride,numberSubstitution) (This)->lpVtbl->CreateNumberSubstitution(This,substitutionMethod,localeName,ignoreUserOverride,numberSubstitution)
-#define IDWriteFactory_CreateRenderingParams(This,renderingParams) (This)->lpVtbl->CreateRenderingParams(This,renderingParams)
-#define IDWriteFactory_CreateTextAnalyzer(This,textAnalyzer) (This)->lpVtbl->CreateTextAnalyzer(This,textAnalyzer)
-#define IDWriteFactory_CreateTextFormat(This,fontFamilyName,fontCollection,fontWeight,fontStyle,fontStretch,fontSize,localeName,textFormat) (This)->lpVtbl->CreateTextFormat(This,fontFamilyName,fontCollection,fontWeight,fontStyle,fontStretch,fontSize,localeName,textFormat)
-#define IDWriteFactory_CreateTextLayout(This,string,stringLength,textFormat,maxWidth,maxHeight,textLayout) (This)->lpVtbl->CreateTextLayout(This,string,stringLength,textFormat,maxWidth,maxHeight,textLayout)
-#define IDWriteFactory_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
-#define IDWriteFactory_GetGdiInterop(This,gdiInterop) (This)->lpVtbl->GetGdiInterop(This,gdiInterop)
-#define IDWriteFactory_GetSystemFontCollection(This,fontCollection,checkForUpdates) (This)->lpVtbl->GetSystemFontCollection(This,fontCollection,checkForUpdates)
-#define IDWriteFactory_RegisterFontCollectionLoader(This,fontCollectionLoader) (This)->lpVtbl->RegisterFontCollectionLoader(This,fontCollectionLoader)
-#define IDWriteFactory_RegisterFontFileLoader(This,fontFileLoader) (This)->lpVtbl->RegisterFontFileLoader(This,fontFileLoader)
-#define IDWriteFactory_UnregisterFontCollectionLoader(This,fontCollectionLoader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,fontCollectionLoader)
-#define IDWriteFactory_UnregisterFontFileLoader(This,fontFileLoader) (This)->lpVtbl->UnregisterFontFileLoader(This,fontFileLoader)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFont
-DECLARE_INTERFACE_(IDWriteFont,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteTextLayout_FWD_DEFINED__
+#define __IDWriteTextLayout_FWD_DEFINED__
+typedef interface IDWriteTextLayout IDWriteTextLayout;
+#ifdef __cplusplus
+interface IDWriteTextLayout;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFont methods */
-    STDMETHOD(GetFontFamily)(THIS_
-        IDWriteFontFamily **fontFamily) PURE;
-
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
-
-    STDMETHOD(GetFaceNames)(THIS_
-        IDWriteLocalizedStrings **names) PURE;
-
-    STDMETHOD(GetInformationalStrings)(THIS_
-        DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
-        IDWriteLocalizedStrings **informationalStrings,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
-
-    STDMETHOD_(void, GetMetrics)(THIS_
-        DWRITE_FONT_METRICS *fontMetrics) PURE;
-
-    STDMETHOD(HasCharacter)(THIS_
-        UINT32 unicodeValue,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD(CreateFontFace)(THIS_
-        IDWriteFontFace **fontFace) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFont_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFont_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFont_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFont_CreateFontFace(This,fontFace) (This)->lpVtbl->CreateFontFace(This,fontFace)
-#define IDWriteFont_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
-#define IDWriteFont_GetFontFamily(This,fontFamily) (This)->lpVtbl->GetFontFamily(This,fontFamily)
-#define IDWriteFont_GetInformationalStrings(This,informationalStringID,informationalStrings,exists) (This)->lpVtbl->GetInformationalStrings(This,informationalStringID,informationalStrings,exists)
-#define IDWriteFont_GetMetrics(This,fontMetrics) (This)->lpVtbl->GetMetrics(This,fontMetrics)
-#define IDWriteFont_GetSimulations() (This)->lpVtbl->GetSimulations(This)
-#define IDWriteFont_GetStretch() (This)->lpVtbl->GetStretch(This)
-#define IDWriteFont_GetStyle() (This)->lpVtbl->GetStyle(This)
-#define IDWriteFont_GetWeight() (This)->lpVtbl->GetWeight(This)
-#define IDWriteFont_HasCharacter(This,unicodeValue,exists) (This)->lpVtbl->HasCharacter(This,unicodeValue,exists)
-#define IDWriteFont_IsSymbolFont() (This)->lpVtbl->IsSymbolFont(This)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontCollection
-DECLARE_INTERFACE_(IDWriteFontCollection,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteNumberSubstitution_FWD_DEFINED__
+#define __IDWriteNumberSubstitution_FWD_DEFINED__
+typedef interface IDWriteNumberSubstitution IDWriteNumberSubstitution;
+#ifdef __cplusplus
+interface IDWriteNumberSubstitution;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFontCollection methods */
-    STDMETHOD_(UINT32, GetFontFamilyCount)(THIS) PURE;
-
-    STDMETHOD(GetFontFamily)(THIS_
-        UINT32 index,
-        IDWriteFontFamily **fontFamily) PURE;
-
-    STDMETHOD(FindFamilyName)(THIS_
-        WCHAR const *familyName,
-        UINT32 *index,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD(GetFontFromFontFace)(THIS_
-        IDWriteFontFace* fontFace,
-        IDWriteFont **font) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontCollection_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontCollection_FindFamilyName(This,familyName,index,exists) (This)->lpVtbl->FindFamilyName(This,familyName,index,exists)
-#define IDWriteFontCollection_GetFontFamily(This,index,fontFamily) (This)->lpVtbl->GetFontFamily(This,index,fontFamily)
-#define IDWriteFontCollection_GetFontFamilyCount() (This)->lpVtbl->GetFontFamilyCount(This)
-#define IDWriteFontCollection_GetFontFromFontFace(This,fontFace,font) (This)->lpVtbl->GetFontFromFontFace(This,fontFace,font)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFace
-DECLARE_INTERFACE_(IDWriteFontFace,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteTextAnalysisSource_FWD_DEFINED__
+#define __IDWriteTextAnalysisSource_FWD_DEFINED__
+typedef interface IDWriteTextAnalysisSource IDWriteTextAnalysisSource;
+#ifdef __cplusplus
+interface IDWriteTextAnalysisSource;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFontFace methods */
-    STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
-
-    STDMETHOD(GetFiles)(THIS_
-        UINT32 *numberOfFiles,
-        IDWriteFontFile **fontFiles) PURE;
-
-    STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
-
-    STDMETHOD_(void, GetMetrics)(THIS_
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-    STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
-
-    STDMETHOD(GetDesignGlyphMetrics)(THIS_
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(GetGlyphIndices)(THIS_
-        UINT32 const *codePoints,
-        UINT32 codePointCount,
-        UINT16 *glyphIndices) PURE;
-
-    STDMETHOD(TryGetFontTable)(THIS_
-        UINT32 openTypeTableTag,
-        const void **tableData,
-        UINT32 *tableSize,
-        void **tableContext,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD_(void, ReleaseFontTable)(THIS_
-        void *tableContext) PURE;
-
-    STDMETHOD(GetGlyphRunOutline)(THIS_
-        FLOAT emSize,
-        UINT16 const *glyphIndices,
-        FLOAT const *glyphAdvances,
-        DWRITE_GLYPH_OFFSET const *glyphOffsets,
-        UINT32 glyphCount,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        IDWriteGeometrySink *geometrySink) PURE;
-
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE *renderingMode) PURE;
-
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-
-    STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontFace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontFace_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontFace_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontFace_GetDesignGlyphMetrics(This,glyphIndices,glyphCount,glyphMetrics,isSideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyphIndices,glyphCount,glyphMetrics,isSideways)
-#define IDWriteFontFace_GetFiles(This,fontFiles) (This)->lpVtbl->GetFiles(This,fontFiles)
-#define IDWriteFontFace_GetGdiCompatibleMetrics(This,emSize,pixelsPerDip,transform,fontFaceMetrics) (This)->lpVtbl->GetGdiCompatibleMetrics(This,emSize,pixelsPerDip,transform,fontFaceMetrics)
-#define IDWriteFontFace_GetGdiCompatibleGlyphMetrics(This,emSize,pixelsPerDip,transform,useGdiNatural,glyphIndices,glyphCount,glyphMetrics,isSideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixelsPerDip,transform,useGdiNatural,glyphIndices,glyphCount,glyphMetrics,isSideways)
-#define IDWriteFontFace_GetGlyphCount() (This)->lpVtbl->GetGlyphCount(This)
-#define IDWriteFontFace_GetGlyphIndices(This,codePoints,codePointCount,glyphIndices) (This)->lpVtbl->GetGlyphIndices(This,codePoints,codePointCount,glyphIndices)
-#define IDWriteFontFace_GetGlyphRunOutline(This,emSize,glyphIndices,glyphOffsets,glyphCount,isSideways,isRightToLeft,geometrySink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyphIndices,glyphOffsets,glyphCount,isSideways,isRightToLeft,geometrySink)
-#define IDWriteFontFace_GetIndex() (This)->lpVtbl->GetIndex(This)
-#define IDWriteFontFace_GetMetrics(This,fontFaceMetrics) (This)->lpVtbl->GetMetrics(This,fontFaceMetrics)
-#define IDWriteFontFace_GetRecommendedRenderingMode(This,emSize,pixelsPerDip,measuringMode,renderingParams,renderingMode) (This)->lpVtbl->GetRecommendedRenderingMode(This,emSize,pixelsPerDip,measuringMode,renderingParams,renderingMode)
-#define IDWriteFontFace_GetSimulations() (This)->lpVtbl->GetSimulations(This)
-#define IDWriteFontFace_GetType() (This)->lpVtbl->GetType(This)
-#define IDWriteFontFace_IsSymbolFont() (This)->lpVtbl->IsSymbolFont(This)
-#define IDWriteFontFace_ReleaseFontTable(This,tableContext) (This)->lpVtbl->ReleaseFontTable(This,tableContext)
-#define IDWriteFontFace_TryGetFontTable(This,openTypeTableTag,tableData,tableSize,tableContext,exists) (This)->lpVtbl->TryGetFontTable(This,openTypeTableTag,tableData,tableSize,tableContext,exists)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontList
-DECLARE_INTERFACE_(IDWriteFontList,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteTextAnalysisSink_FWD_DEFINED__
+#define __IDWriteTextAnalysisSink_FWD_DEFINED__
+typedef interface IDWriteTextAnalysisSink IDWriteTextAnalysisSink;
+#ifdef __cplusplus
+interface IDWriteTextAnalysisSink;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFontList methods */
-    STDMETHOD(GetFontCollection)(THIS_
-        IDWriteFontCollection** fontCollection) PURE;
-
-    STDMETHOD_(UINT32, GetFontCount)(THIS) PURE;
-
-    STDMETHOD(GetFont)(THIS_
-        UINT32 index,
-        IDWriteFont **font) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontList_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontList_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontList_GetFont(This,index,font) (This)->lpVtbl->GetFont(This,index,font)
-#define IDWriteFontList_GetFontCollection(This,fontCollection) (This)->lpVtbl->GetFontCollection(This,fontCollection)
-#define IDWriteFontList_GetFontCount() (This)->lpVtbl->GetFontCount(This)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFamily
-DECLARE_INTERFACE_(IDWriteFontFamily,IDWriteFontList)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWriteFontList methods */
-    STDMETHOD(GetFontCollection)(THIS_
-        IDWriteFontCollection** fontCollection) PURE;
-
-    STDMETHOD_(UINT32, GetFontCount)(THIS) PURE;
-
-    STDMETHOD(GetFont)(THIS_
-        UINT32 index,
-        IDWriteFont **font) PURE;
+#ifndef __IDWriteTextAnalyzer_FWD_DEFINED__
+#define __IDWriteTextAnalyzer_FWD_DEFINED__
+typedef interface IDWriteTextAnalyzer IDWriteTextAnalyzer;
+#ifdef __cplusplus
+interface IDWriteTextAnalyzer;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFontFamily methods */
-    STDMETHOD(GetFamilyNames)(THIS_
-        IDWriteLocalizedStrings **names) PURE;
-
-    STDMETHOD(GetFirstMatchingFont)(THIS_
-        DWRITE_FONT_WEIGHT weight,
-        DWRITE_FONT_STRETCH stretch,
-        DWRITE_FONT_STYLE style,
-        IDWriteFont **matchingFont) PURE;
-
-    STDMETHOD(GetMatchingFonts)(THIS_
-        DWRITE_FONT_WEIGHT weight,
-        DWRITE_FONT_STRETCH stretch,
-        DWRITE_FONT_STYLE style,
-        IDWriteFontList **matchingFonts) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontFamily_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontFamily_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontFamily_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontFamily_GetFont(This,index,font) (This)->lpVtbl->GetFont(This,index,font)
-#define IDWriteFontFamily_GetFontCollection(This,fontCollection) (This)->lpVtbl->GetFontCollection(This,fontCollection)
-#define IDWriteFontFamily_GetFontCount() (This)->lpVtbl->GetFontCount(This)
-#define IDWriteFontFamily_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
-#define IDWriteFontFamily_GetFirstMatchingFont(This,weight,stretch,style,matchingFont) (This)->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,matchingFont)
-#define IDWriteFontFamily_GetMatchingFonts(This,weight,stretch,style,matchingFonts) (This)->lpVtbl->GetMatchingFonts(This,weight,stretch,style,matchingFonts)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFile
-DECLARE_INTERFACE_(IDWriteFontFile,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteGlyphRunAnalysis_FWD_DEFINED__
+#define __IDWriteGlyphRunAnalysis_FWD_DEFINED__
+typedef interface IDWriteGlyphRunAnalysis IDWriteGlyphRunAnalysis;
+#ifdef __cplusplus
+interface IDWriteGlyphRunAnalysis;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFontFile methods */
-    STDMETHOD(GetReferenceKey)(THIS_
-        void const **fontFileReferenceKey,
-        UINT32 *fontFileReferenceKeySize) PURE;
-
-    STDMETHOD(GetLoader)(THIS_
-        IDWriteFontFileLoader **fontFileLoader) PURE;
-
-    STDMETHOD(Analyze)(THIS_
-        WINBOOL *isSupportedFontType,
-        DWRITE_FONT_FILE_TYPE *fontFileType,
-        DWRITE_FONT_FACE_TYPE *fontFaceType,
-        UINT32 *numberOfFaces) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontFile_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontFile_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontFile_Analyze(This,isSupportedFontType,fontFileType,fontFaceType,numberOfFaces) (This)->lpVtbl->Analyze(This,isSupportedFontType,fontFileType,fontFaceType,numberOfFaces)
-#define IDWriteFontFile_GetLoader(This,fontFileLoader) (This)->lpVtbl->GetLoader(This,fontFileLoader)
-#define IDWriteFontFile_GetReferenceKey(This,fontFileReferenceKey,fontFileReferenceKeySize) (This)->lpVtbl->GetReferenceKey(This,fontFileReferenceKey,fontFileReferenceKeySize)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFileLoader
-DECLARE_INTERFACE_(IDWriteFontFileLoader,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+#ifndef __IDWriteFactory_FWD_DEFINED__
+#define __IDWriteFactory_FWD_DEFINED__
+typedef interface IDWriteFactory IDWriteFactory;
+#ifdef __cplusplus
+interface IDWriteFactory;
+#endif /* __cplusplus */
 #endif
 
-    /* IDWriteFontFileLoader methods */
-    STDMETHOD(CreateStreamFromKey)(
-        void const *fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        IDWriteFontFileStream **fontFileStream) PURE;
+/* Headers for imported files */
 
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontFileLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontFileLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontFileLoader_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontFileLoader_CreateStreamFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,fontFileStream) (This)->lpVtbl->CreateStreamFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,fontFileStream)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFileStream
-DECLARE_INTERFACE_(IDWriteFontFileStream,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteFontFileStream methods */
-    STDMETHOD(ReadFileFragment)(THIS_
-        void const **fragmentStart,
-        UINT64 fileOffset,
-        UINT64 fragmentSize,
-        void** fragmentContext) PURE;
-
-    STDMETHOD_(void, ReleaseFileFragment)(THIS_
-        void *fragmentContext) PURE;
-
-    STDMETHOD(GetFileSize)(THIS_
-        UINT64 *fileSize) PURE;
-
-    STDMETHOD(GetLastWriteTime)(THIS_
-        UINT64 *lastWriteTime) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontFileStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontFileStream_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontFileStream_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontFileStream_GetFileSize(This,fileSize) (This)->lpVtbl->GetFileSize(This,fileSize)
-#define IDWriteFontFileStream_GetLastWriteTime(This,lastWriteTime) (This)->lpVtbl->GetLastWriteTime(This,lastWriteTime)
-#define IDWriteFontFileStream_ReadFileFragment(This,fragmentStart,fileOffset,fragmentSize,fragmentContext) (This)->lpVtbl->ReadFileFragment(This,fragmentStart,fileOffset,fragmentSize,fragmentContext)
-#define IDWriteFontFileStream_ReleaseFileFragment(This,fragmentContext) (This)->lpVtbl->ReleaseFileFragment(This,fragmentContext)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontCollectionLoader
-DECLARE_INTERFACE_(IDWriteFontCollectionLoader,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteFontCollectionLoader methods */
-    STDMETHOD_(HRESULT,CreateEnumeratorFromKey)(THIS_ IDWriteFactory * factory,const void * collectionKey,UINT32  collectionKeySize,IDWriteFontFileEnumerator ** fontFileEnumerator) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontCollectionLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontCollectionLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontCollectionLoader_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontCollectionLoader_CreateEnumeratorFromKey(This,factory,collectionKey,collectionKeySize,fontFileEnumerator) (This)->lpVtbl->CreateEnumeratorFromKey(This,factory,collectionKey,collectionKeySize,fontFileEnumerator)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFileEnumerator
-DECLARE_INTERFACE_(IDWriteFontFileEnumerator,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteFontFileEnumerator methods */
-    STDMETHOD_(HRESULT,MoveNext)(THIS_ WINBOOL * hasCurrentFile) PURE;
-    STDMETHOD_(HRESULT,GetCurrentFontFile)(THIS_ IDWriteFontFile ** fontFile) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteFontFileEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteFontFileEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteFontFileEnumerator_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteFontFileEnumerator_GetCurrentFontFile(This,fontFile) (This)->lpVtbl->GetCurrentFontFile(This,fontFile)
-#define IDWriteFontFileEnumerator_MoveNext(This,hasCurrentFile) (This)->lpVtbl->MoveNext(This,hasCurrentFile)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteGdiInterop
-DECLARE_INTERFACE_(IDWriteGdiInterop,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteGdiInterop methods */
-    STDMETHOD(CreateFontFromLOGFONT)(THIS_
-        LOGFONTW const *logFont,
-        IDWriteFont **font) PURE;
-
-    STDMETHOD(ConvertFontToLOGFONT)(THIS_
-        IDWriteFont *font,
-        LOGFONTW *logFont,
-        WINBOOL *isSystemFont) PURE;
-
-    STDMETHOD(ConvertFontFaceToLOGFONT)(THIS_
-        IDWriteFontFace *font,
-        LOGFONTW *logFont) PURE;
-
-    STDMETHOD(CreateFontFaceFromHdc)(THIS_
-        HDC hdc,
-        IDWriteFontFace **fontFace) PURE;
-
-    STDMETHOD(CreateBitmapRenderTarget)(THIS_
-        HDC hdc,
-        UINT32 width,
-        UINT32 height,
-        IDWriteBitmapRenderTarget **renderTarget) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteGdiInterop_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteGdiInterop_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteGdiInterop_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteGdiInterop_ConvertFontFaceToLOGFONT(This,font,logFont) (This)->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logFont)
-#define IDWriteGdiInterop_ConvertFontToLOGFONT(This,font,logFont,isSystemFont) (This)->lpVtbl->ConvertFontToLOGFONT(This,font,logFont,isSystemFont)
-#define IDWriteGdiInterop_CreateBitmapRenderTarget(This,hdc,width,height,renderTarget) (This)->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,renderTarget)
-#define IDWriteGdiInterop_CreateFontFaceFromHdc(This,hdc,fontFace) (This)->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontFace)
-#define IDWriteGdiInterop_CreateFontFromLOGFONT(This,logFont,font) (This)->lpVtbl->CreateFontFromLOGFONT(This,logFont,font)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteGlyphRunAnalysis
-DECLARE_INTERFACE_(IDWriteGlyphRunAnalysis,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteGlyphRunAnalysis methods */
-    STDMETHOD(GetAlphaTextureBounds)(THIS_
-        DWRITE_TEXTURE_TYPE textureType,
-        RECT *textureBounds) PURE;
-
-    STDMETHOD(CreateAlphaTexture)(THIS_
-        DWRITE_TEXTURE_TYPE textureType,
-        RECT const *textureBounds,
-        BYTE *alphaValues,
-        UINT32 bufferSize) PURE;
-
-    STDMETHOD(GetAlphaBlendParams)(THIS_
-        IDWriteRenderingParams *renderingParams,
-        FLOAT *blendGamma,
-        FLOAT *blendEnhancedContrast,
-        FLOAT *blendClearTypeLevel) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteGlyphRunAnalysis_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteGlyphRunAnalysis_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteGlyphRunAnalysis_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteGlyphRunAnalysis_CreateAlphaTexture(This,textureType,textureBounds,alphaValues,bufferSize) (This)->lpVtbl->CreateAlphaTexture(This,textureType,textureBounds,alphaValues,bufferSize)
-#define IDWriteGlyphRunAnalysis_GetAlphaBlendParams(This,renderingParams,blendGamma,blendEnhancedContrast,blendClearTypeLevel) (This)->lpVtbl->GetAlphaBlendParams(This,renderingParams,blendGamma,blendEnhancedContrast,blendClearTypeLevel)
-#define IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(This,textureType,textureBounds) (This)->lpVtbl->GetAlphaTextureBounds(This,textureType,textureBounds)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteInlineObject
-DECLARE_INTERFACE_(IDWriteInlineObject,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteInlineObject methods */
-    STDMETHOD(Draw)(THIS_
-            void *clientDrawingContext,
-            IDWriteTextRenderer *renderer,
-            FLOAT originX,
-            FLOAT originY,
-            WINBOOL isSideways,
-            WINBOOL isRightToLeft,
-            IUnknown *clientDrawingEffect) PURE;
-    STDMETHOD(GetMetrics)(THIS_
-            DWRITE_INLINE_OBJECT_METRICS *metrics) PURE;
-    STDMETHOD(GetOverhangMetrics)(THIS_
-            DWRITE_OVERHANG_METRICS *overhangs) PURE;
-    STDMETHOD(GetBreakConditions)(THIS_
-            DWRITE_BREAK_CONDITION *breakConditionBefore,
-            DWRITE_BREAK_CONDITION *breakConditionAfter) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteInlineObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteInlineObject_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteInlineObject_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteInlineObject_Draw(This,clientDrawingContext,renderer,originX,originY,isSideways,isRightToLeft,clientDrawingEffect) (This)->lpVtbl->Draw(This,clientDrawingContext,renderer,originX,originY,isSideways,isRightToLeft,clientDrawingEffect)
-#define IDWriteInlineObject_GetBreakConditions(This,breakConditionBefore,breakConditionAfter) (This)->lpVtbl->GetBreakConditions(This,breakConditionBefore,breakConditionAfter)
-#define IDWriteInlineObject_GetMetrics(This,metrics) (This)->lpVtbl->GetMetrics(This,metrics)
-#define IDWriteInlineObject_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteLocalFontFileLoader
-DECLARE_INTERFACE_(IDWriteLocalFontFileLoader,IDWriteFontFileLoader)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWriteFontFileLoader methods */
-    STDMETHOD(CreateStreamFromKey)(THIS_ const void *fontFileReferenceKey,UINT32 fontFileReferenceKeySize,IDWriteFontFileStream **fileStream) PURE;
-#endif
-
-    /* IDWriteLocalFontFileLoader methods */
-    STDMETHOD(GetFilePathLengthFromKey)(THIS_ const void *fontFileReferenceKey,UINT32 fontFileReferenceKeySize,UINT32 *filePathLength) PURE;
-    STDMETHOD(GetFilePathFromKey)(THIS_ const void *fontFileReferenceKey,UINT32 fontFileReferenceKeySize,WCHAR *filePath,UINT32 filePathSize) PURE;
-    STDMETHOD(GetLastWriteTimeFromKey)(THIS_ const void *fontFileReferenceKey,UINT32 fontFileReferenceKeySize,FILETIME *lastWriteTime) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteLocalFontFileLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteLocalFontFileLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteLocalFontFileLoader_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteLocalFontFileLoader_CreateStreamFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,fileStream) (This)->lpVtbl->CreateStreamFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,fileStream)
-#define IDWriteLocalFontFileLoader_GetFilePathLengthFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,filePathLength) (This)->lpVtbl->GetFilePathLengthFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,filePathLength)
-#define IDWriteLocalFontFileLoader_GetFilePathFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,filePath,filePathSize) (This)->lpVtbl->GetFilePathFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,filePath,filePathSize)
-#define IDWriteLocalFontFileLoader_GetLastWriteTimeFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,lastWriteTime) (This)->lpVtbl->GetLastWriteTimeFromKey(This,fontFileReferenceKey,fontFileReferenceKeySize,lastWriteTime)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteLocalizedStrings
-DECLARE_INTERFACE_(IDWriteLocalizedStrings,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteLocalizedStrings methods */
-    STDMETHOD_(UINT32, GetCount)(THIS) PURE;
-
-    STDMETHOD(FindLocaleName)(THIS_
-        WCHAR const *localeName,
-        UINT32 *index,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD(GetLocaleNameLength)(THIS_
-        UINT32 index,
-        UINT32 *length) PURE;
-
-    STDMETHOD(GetLocaleName)(THIS_
-        UINT32 index,
-        WCHAR *localeName,
-        UINT32 size) PURE;
-
-    STDMETHOD(GetStringLength)(THIS_
-        UINT32 index,
-        UINT32 *length) PURE;
-
-    STDMETHOD(GetString)(THIS_
-        UINT32 index,
-        WCHAR *stringBuffer,
-        UINT32 size) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteLocalizedStrings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteLocalizedStrings_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteLocalizedStrings_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteLocalizedStrings_FindLocaleName(This,localeName,index,exists) (This)->lpVtbl->FindLocaleName(This,localeName,index,exists)
-#define IDWriteLocalizedStrings_GetCount() (This)->lpVtbl->GetCount(This)
-#define IDWriteLocalizedStrings_GetLocaleName(This,index,localeName,size) (This)->lpVtbl->GetLocaleName(This,index,localeName,size)
-#define IDWriteLocalizedStrings_GetLocaleNameLength(This,index,length) (This)->lpVtbl->GetLocaleNameLength(This,index,length)
-#define IDWriteLocalizedStrings_GetString(This,index,stringBuffer,size) (This)->lpVtbl->GetString(This,index,stringBuffer,size)
-#define IDWriteLocalizedStrings_GetStringLength(This,index,length) (This)->lpVtbl->GetStringLength(This,index,length)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteNumberSubstitution
-DECLARE_INTERFACE_(IDWriteNumberSubstitution,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteNumberSubstitution methods */
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteNumberSubstitution_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteNumberSubstitution_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteNumberSubstitution_Release(This) (This)->lpVtbl->Release(This)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWritePixelSnapping
-DECLARE_INTERFACE_(IDWritePixelSnapping,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWritePixelSnapping methods */
-    STDMETHOD(IsPixelSnappingDisabled)(THIS_
-            void *clientDrawingContext,
-            WINBOOL *isDisabled) PURE;
-    STDMETHOD(GetCurrentTransform)(THIS_
-            void *clientDrawingContext,
-            DWRITE_MATRIX *transform) PURE;
-    STDMETHOD(GetPixelsPerDip)(THIS_
-            void *clientDrawingContext,
-            FLOAT *pixelsPerDip) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWritePixelSnapping_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWritePixelSnapping_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWritePixelSnapping_Release(This) (This)->lpVtbl->Release(This)
-#define IDWritePixelSnapping_GetCurrentTransform(This,clientDrawingContext,transform) (This)->lpVtbl->GetCurrentTransform(This,clientDrawingContext,transform)
-#define IDWritePixelSnapping_GetPixelsPerDip(This,clientDrawingContext,pixelsPerDip) (This)->lpVtbl->GetPixelsPerDip(This,clientDrawingContext,pixelsPerDip)
-#define IDWritePixelSnapping_IsPixelSnappingEnabled(This,clientDrawingContext,isDisabled) (This)->lpVtbl->IsPixelSnappingEnabled(This,clientDrawingContext,isDisabled)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteRenderingParams
-DECLARE_INTERFACE_(IDWriteRenderingParams,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteRenderingParams methods */
-    STDMETHOD_(FLOAT, GetGamma)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetEnhancedContrast)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetClearTypeLevel)(THIS) PURE;
-    STDMETHOD_(DWRITE_PIXEL_GEOMETRY, GetPixelGeometry)(THIS) PURE;
-    STDMETHOD_(DWRITE_RENDERING_MODE, GetRenderingMode)(THIS) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteRenderingParams_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteRenderingParams_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteRenderingParams_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteRenderingParams_GetClearTypeLevel() (This)->lpVtbl->GetClearTypeLevel(This)
-#define IDWriteRenderingParams_GetEnhancedContrast() (This)->lpVtbl->GetEnhancedContrast(This)
-#define IDWriteRenderingParams_GetGamma() (This)->lpVtbl->GetGamma(This)
-#define IDWriteRenderingParams_GetPixelGeometry() (This)->lpVtbl->GetPixelGeometry(This)
-#define IDWriteRenderingParams_GetRenderingMode() (This)->lpVtbl->GetRenderingMode(This)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextAnalysisSink
-DECLARE_INTERFACE_(IDWriteTextAnalysisSink,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteTextAnalysisSink methods */
-    STDMETHOD(SetScriptAnalysis)(
-            UINT32 textPosition,
-            UINT32 textLength,
-            DWRITE_SCRIPT_ANALYSIS const *scriptAnalysis) PURE;
-
-    STDMETHOD(SetLineBreakpoints)(
-            UINT32 textPosition,
-            UINT32 textLength,
-            DWRITE_LINE_BREAKPOINT const *lineBreakpoints) PURE;
-
-    STDMETHOD(SetBidiLevel)(
-            UINT32 textPosition,
-            UINT32 textLength,
-            UINT8 explicitLevel,
-            UINT8 resolvedLevel) PURE;
-
-    STDMETHOD(SetNumberSubstitution)(
-            UINT32 textPosition,
-            UINT32 textLength,
-            IDWriteNumberSubstitution *numberSubstitution) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteTextAnalysisSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteTextAnalysisSink_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteTextAnalysisSink_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteTextAnalysisSink_SetBidiLevel(This,textPosition,textLength,explicitLevel,resolvedLevel) (This)->lpVtbl->SetBidiLevel(This,textPosition,textLength,explicitLevel,resolvedLevel)
-#define IDWriteTextAnalysisSink_SetLineBreakpoints(This,textPosition,textLength,lineBreakpoints) (This)->lpVtbl->SetLineBreakpoints(This,textPosition,textLength,lineBreakpoints)
-#define IDWriteTextAnalysisSink_SetNumberSubstitution(This,textPosition,textLength,numberSubstitution) (This)->lpVtbl->SetNumberSubstitution(This,textPosition,textLength,numberSubstitution)
-#define IDWriteTextAnalysisSink_SetScriptAnalysis(This,textPosition,textLength,scriptAnalysis) (This)->lpVtbl->SetScriptAnalysis(This,textPosition,textLength,scriptAnalysis)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextAnalysisSource
-DECLARE_INTERFACE_(IDWriteTextAnalysisSource,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteTextAnalysisSource methods */
-    STDMETHOD(GetTextAtPosition)(THIS_
-        UINT32 textPosition,
-        WCHAR const **textString,
-        UINT32 *textLength) PURE;
-
-    STDMETHOD(GetTextBeforePosition)(THIS_
-        UINT32 textPosition,
-        WCHAR const **textString,
-        UINT32 *textLength) PURE;
-
-    STDMETHOD_(DWRITE_READING_DIRECTION, GetParagraphReadingDirection)(THIS) PURE;
-
-    STDMETHOD(GetLocaleName)(THIS_
-        UINT32 textPosition,
-        UINT32 *textLength,
-        WCHAR const **localeName) PURE;
-
-    STDMETHOD(GetNumberSubstitution)(THIS_
-        UINT32 textPosition,
-        UINT32 *textLength,
-        IDWriteNumberSubstitution **numberSubstitution) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteTextAnalysisSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteTextAnalysisSource_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteTextAnalysisSource_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteTextAnalysisSource_GetLocaleName(This,textPosition,textLength,localeName) (This)->lpVtbl->GetLocaleName(This,textPosition,textLength,localeName)
-#define IDWriteTextAnalysisSource_GetNumberSubstitution(This,textPosition,textLength,numberSubstitution) (This)->lpVtbl->GetNumberSubstitution(This,textPosition,textLength,numberSubstitution)
-#define IDWriteTextAnalysisSource_GetParagraphReadingDirection() (This)->lpVtbl->GetParagraphReadingDirection(This)
-#define IDWriteTextAnalysisSource_GetTextAtPosition(This,textPosition,textString,textLength) (This)->lpVtbl->GetTextAtPosition(This,textPosition,textString,textLength)
-#define IDWriteTextAnalysisSource_GetTextBeforePosition(This,textPosition,textString,textLength) (This)->lpVtbl->GetTextBeforePosition(This,textPosition,textString,textLength)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextAnalyzer
-DECLARE_INTERFACE_(IDWriteTextAnalyzer,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteTextAnalyzer methods */
-    STDMETHOD(AnalyzeScript)(THIS_
-        IDWriteTextAnalysisSource* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink *analysisSink) PURE;
-
-    STDMETHOD(AnalyzeBidi)(THIS_
-        IDWriteTextAnalysisSource *analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink *analysisSink) PURE;
-
-    STDMETHOD(AnalyzeNumberSubstitution)(THIS_
-        IDWriteTextAnalysisSource *analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink *analysisSink) PURE;
-
-    STDMETHOD(AnalyzeLineBreakpoints)(THIS_
-        IDWriteTextAnalysisSource *analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink *analysisSink) PURE;
-
-    STDMETHOD(GetGlyphs)(THIS_
-        WCHAR const *textString,
-        UINT32 textLength,
-        IDWriteFontFace *fontFace,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        DWRITE_SCRIPT_ANALYSIS const *scriptAnalysis,
-        WCHAR const *localeName,
-        IDWriteNumberSubstitution *numberSubstitution,
-        DWRITE_TYPOGRAPHIC_FEATURES const **features,
-        UINT32 const *featureRangeLengths,
-        UINT32 featureRanges,
-        UINT32 maxGlyphCount,
-        UINT16 *clusterMap,
-        DWRITE_SHAPING_TEXT_PROPERTIES *textProps,
-        UINT16 *glyphIndices,
-        DWRITE_SHAPING_GLYPH_PROPERTIES *glyphProps,
-        UINT32 *actualGlyphCount) PURE;
-
-    STDMETHOD(GetGlyphPlacements)(THIS_
-        WCHAR const *textString,
-        UINT16 const *clusterMap,
-        DWRITE_SHAPING_TEXT_PROPERTIES *textProps,
-        UINT32 textLength,
-        UINT16 const *glyphIndices,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const *glyphProps,
-        UINT32 glyphCount,
-        IDWriteFontFace *fontFace,
-        FLOAT fontEmSize,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        DWRITE_SCRIPT_ANALYSIS const *scriptAnalysis,
-        WCHAR const *localeName,
-        DWRITE_TYPOGRAPHIC_FEATURES const **features,
-        UINT32 const *featureRangeLengths,
-        UINT32 featureRanges,
-        FLOAT *glyphAdvances,
-        DWRITE_GLYPH_OFFSET *glyphOffsets) PURE;
-
-    STDMETHOD(GetGdiCompatibleGlyphPlacements)(THIS_
-        WCHAR const *textString,
-        UINT16 const *clusterMap,
-        DWRITE_SHAPING_TEXT_PROPERTIES *textProps,
-        UINT32 textLength,
-        UINT16 const *glyphIndices,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const *glyphProps,
-        UINT32 glyphCount,
-        IDWriteFontFace *fontFace,
-        FLOAT fontEmSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis,
-        WCHAR const *localeName,
-        DWRITE_TYPOGRAPHIC_FEATURES const **features,
-        UINT32 const *featureRangeLengths,
-        UINT32 featureRanges,
-        FLOAT *glyphAdvances,
-        DWRITE_GLYPH_OFFSET *glyphOffsets) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteTextAnalyzer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteTextAnalyzer_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteTextAnalyzer_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteTextAnalyzer_AnalyzeBidi(This,analysisSource,textPosition,textLength,analysisSink) (This)->lpVtbl->AnalyzeBidi(This,analysisSource,textPosition,textLength,analysisSink)
-#define IDWriteTextAnalyzer_AnalyzeLineBreakpoints(This,analysisSource,textPosition,textLength,analysisSink) (This)->lpVtbl->AnalyzeLineBreakpoints(This,analysisSource,textPosition,textLength,analysisSink)
-#define IDWriteTextAnalyzer_AnalyzeNumberSubstitution(This,analysisSource,textPosition,textLength,analysisSink) (This)->lpVtbl->AnalyzeNumberSubstitution(This,analysisSource,textPosition,textLength,analysisSink)
-#define IDWriteTextAnalyzer_AnalyzeScript(This,analysisSource,textPosition,textLength,analysisSink) (This)->lpVtbl->AnalyzeScript(This,analysisSource,textPosition,textLength,analysisSink)
-#define IDWriteTextAnalyzer_GetGdiCompatibleGlyphPlacements(This,textString,clusterMap,textProps,textLength,glyphIndices,glyphProps,glyphCount,fontFace,fontEmSize,pixelsPerDip,transform,useGdiNatural,isSideways,isRightToLeft,scriptAnalysis,featureRangeLengths,featureRanges,glyphAdvances,glyphOffsets) (This)->lpVtbl->GetGdiCompatibleGlyphPlacements(This,textString,clusterMap,textProps,textLength,glyphIndices,glyphProps,glyphCount,fontFace,fontEmSize,pixelsPerDip,transform,useGdiNatural,isSideways,isRightToLeft,scriptAnalysis,featureRangeLengths,featureRanges,glyphAdvances,glyphOffsets)
-#define IDWriteTextAnalyzer_GetGlyphPlacements(This,textString,clusterMap,textProps,textLength,glyphIndices,glyphProps,glyphCount,fontFace,fontEmSize,isSideways,isRightToLeft,scriptAnalysis,featureRangeLengths,featureRanges,glyphAdvances,glyphOffsets) (This)->lpVtbl->GetGlyphPlacements(This,textString,clusterMap,textProps,textLength,glyphIndices,glyphProps,glyphCount,fontFace,fontEmSize,isSideways,isRightToLeft,scriptAnalysis,featureRangeLengths,featureRanges,glyphAdvances,glyphOffsets)
-#define IDWriteTextAnalyzer_GetGlyphs(This,textString,textLength,fontFace,isSideways,isRightToLeft,scriptAnalysis,featureRangeLengths,featureRanges,maxGlyphCount,clusterMap,textProps,glyphIndices,glyphProps,actualGlyphCount) (This)->lpVtbl->GetGlyphs(This,textString,textLength,fontFace,isSideways,isRightToLeft,scriptAnalysis,featureRangeLengths,featureRanges,maxGlyphCount,clusterMap,textProps,glyphIndices,glyphProps,actualGlyphCount)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextFormat
-DECLARE_INTERFACE_(IDWriteTextFormat,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteTextFormat methods */
-    STDMETHOD(SetTextAlignment)(THIS_
-            DWRITE_TEXT_ALIGNMENT textAlignment) PURE;
-    STDMETHOD(SetParagraphAlignment)(THIS_
-            DWRITE_PARAGRAPH_ALIGNMENT paragraphAlignment) PURE;
-    STDMETHOD(SetWordWrapping)(THIS_
-            DWRITE_WORD_WRAPPING wordWrapping) PURE;
-    STDMETHOD(SetReadingDirection)(THIS_
-            DWRITE_READING_DIRECTION readingDirection) PURE;
-    STDMETHOD(SetFlowDirection)(THIS_
-            DWRITE_FLOW_DIRECTION flowDirection) PURE;
-    STDMETHOD(SetIncrementalTabStop)(THIS_
-            FLOAT incrementalTabStop) PURE;
-    STDMETHOD(SetTrimming)(THIS_
-            DWRITE_TRIMMING const *trimmingOptions,
-            IDWriteInlineObject *trimmingSign) PURE;
-    STDMETHOD(SetLineSpacing)(THIS_
-            DWRITE_LINE_SPACING_METHOD lineSpacingMethod,
-            FLOAT lineSpacing,
-            FLOAT baseline) PURE;
-    STDMETHOD_(DWRITE_TEXT_ALIGNMENT, GetTextAlignment)(THIS) PURE;
-    STDMETHOD_(DWRITE_PARAGRAPH_ALIGNMENT, GetParagraphAlignment)(THIS) PURE;
-    STDMETHOD_(DWRITE_WORD_WRAPPING, GetWordWrapping)(THIS) PURE;
-    STDMETHOD_(DWRITE_READING_DIRECTION, GetReadingDirection)(THIS) PURE;
-    STDMETHOD_(DWRITE_FLOW_DIRECTION, GetFlowDirection)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetIncrementalTabStop)(THIS) PURE;
-    STDMETHOD(GetTrimming)(THIS_
-            DWRITE_TRIMMING* trimmingOptions,
-            IDWriteInlineObject **trimmingSign) PURE;
-    STDMETHOD(GetLineSpacing)(THIS_
-            DWRITE_LINE_SPACING_METHOD *lineSpacingMethod,
-            FLOAT *lineSpacing,
-            FLOAT *baseline) PURE;
-    STDMETHOD(GetFontCollection)(THIS_
-            IDWriteFontCollection **fontCollection) PURE;
-    STDMETHOD_(UINT32, GetFontFamilyNameLength)(THIS) PURE;
-    STDMETHOD(GetFontFamilyName)(THIS_
-            WCHAR *fontFamilyName,
-            UINT32 nameSize) PURE;
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetFontWeight)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STYLE, GetFontStyle)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetFontStretch)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetFontSize)(THIS) PURE;
-    STDMETHOD_(UINT32, GetLocaleNameLength)(THIS) PURE;
-    STDMETHOD(GetLocaleName)(THIS_
-            WCHAR *localeName,
-            UINT32 nameSize) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteTextFormat_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteTextFormat_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteTextFormat_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteTextFormat_GetFlowDirection() (This)->lpVtbl->GetFlowDirection(This)
-#define IDWriteTextFormat_GetFontCollection(This,fontCollection) (This)->lpVtbl->GetFontCollection(This,fontCollection)
-#define IDWriteTextFormat_GetFontFamilyName(This,fontFamilyName,nameSize) (This)->lpVtbl->GetFontFamilyName(This,fontFamilyName,nameSize)
-#define IDWriteTextFormat_GetFontFamilyNameLength() (This)->lpVtbl->GetFontFamilyNameLength(This)
-#define IDWriteTextFormat_GetFontSize() (This)->lpVtbl->GetFontSize(This)
-#define IDWriteTextFormat_GetFontStretch() (This)->lpVtbl->GetFontStretch(This)
-#define IDWriteTextFormat_GetFontStyle() (This)->lpVtbl->GetFontStyle(This)
-#define IDWriteTextFormat_GetFontWeight() (This)->lpVtbl->GetFontWeight(This)
-#define IDWriteTextFormat_GetIncrementalTabStop() (This)->lpVtbl->GetIncrementalTabStop(This)
-#define IDWriteTextFormat_GetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline) (This)->lpVtbl->GetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline)
-#define IDWriteTextFormat_GetLocaleName(This,localeName,nameSize) (This)->lpVtbl->GetLocaleName(This,localeName,nameSize)
-#define IDWriteTextFormat_GetLocaleNameLength() (This)->lpVtbl->GetLocaleNameLength(This)
-#define IDWriteTextFormat_GetParagraphAlignment() (This)->lpVtbl->GetParagraphAlignment(This)
-#define IDWriteTextFormat_GetReadingDirection() (This)->lpVtbl->GetReadingDirection(This)
-#define IDWriteTextFormat_GetTextAlignment() (This)->lpVtbl->GetTextAlignment(This)
-#define IDWriteTextFormat_GetTrimming(This,trimmingOptions,trimmingSign) (This)->lpVtbl->GetTrimming(This,trimmingOptions,trimmingSign)
-#define IDWriteTextFormat_GetWordWrapping() (This)->lpVtbl->GetWordWrapping(This)
-#define IDWriteTextFormat_SetFlowDirection(This,flowDirection) (This)->lpVtbl->SetFlowDirection(This,flowDirection)
-#define IDWriteTextFormat_SetIncrementalTabStop(This,incrementalTabStop) (This)->lpVtbl->SetIncrementalTabStop(This,incrementalTabStop)
-#define IDWriteTextFormat_SetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline) (This)->lpVtbl->SetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline)
-#define IDWriteTextFormat_SetParagraphAlignment(This,paragraphAlignment) (This)->lpVtbl->SetParagraphAlignment(This,paragraphAlignment)
-#define IDWriteTextFormat_SetReadingDirection(This,readingDirection) (This)->lpVtbl->SetReadingDirection(This,readingDirection)
-#define IDWriteTextFormat_SetTextAlignment(This,textAlignment) (This)->lpVtbl->SetTextAlignment(This,textAlignment)
-#define IDWriteTextFormat_SetTrimming(This,trimmingOptions,trimmingSign) (This)->lpVtbl->SetTrimming(This,trimmingOptions,trimmingSign)
-#define IDWriteTextFormat_SetWordWrapping(This,wordWrapping) (This)->lpVtbl->SetWordWrapping(This,wordWrapping)
-#endif /*COBJMACROS*/
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextLayout
-DECLARE_INTERFACE_(IDWriteTextLayout,IDWriteTextFormat)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD(SetMaxWidth)(FLOAT maxWidth) PURE;
-    STDMETHOD(SetMaxHeight)(FLOAT maxHeight) PURE;
-    STDMETHOD(SetFontCollection)(IDWriteFontCollection *fontCollection,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontFamilyName)(WCHAR const *fontFamilyName,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontWeight)(DWRITE_FONT_WEIGHT fontWeight,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontStyle)(DWRITE_FONT_STYLE fontStyle,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontStretch)(DWRITE_FONT_STRETCH fontStretch,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontSize)(FLOAT fontSize,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetUnderline)(WINBOOL hasUnderline,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetStrikethrough)(WINBOOL hasStrikethrough,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetDrawingEffect)(IUnknown *drawingEffect,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetInlineObject)(IDWriteInlineObject *inlineObject,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetTypography)(IDWriteTypography *typography,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetLocaleName)(WCHAR const *localeName,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD_(FLOAT, GetMaxWidth)(void) PURE;
-    STDMETHOD_(FLOAT, GetMaxHeight)(void) PURE;
-    STDMETHOD(GetFontCollection)(UINT32 currentPosition,
-            IDWriteFontCollection** fontCollection,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontFamilyNameLength)(UINT32 currentPosition,
-            UINT32 *nameLength,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontFamilyName)(UINT32 currentPosition,
-            WCHAR *fontFamilyName,
-            UINT32 nameSize,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontWeight)(UINT32 currentPosition,
-            DWRITE_FONT_WEIGHT *fontWeight,
-            DWRITE_TEXT_RANGE* textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontStyle)(UINT32 currentPosition,
-            DWRITE_FONT_STYLE *fontStyle,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontStretch)(UINT32 currentPosition,
-            DWRITE_FONT_STRETCH* fontStretch,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontSize)(UINT32 currentPosition,
-            FLOAT *fontSize,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetUnderline)(UINT32 currentPosition,
-            WINBOOL *hasUnderline,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetStrikethrough)(UINT32 currentPosition,
-            WINBOOL *hasStrikethrough,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetDrawingEffect)(UINT32 currentPosition,
-            IUnknown **drawingEffect,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetInlineObject)(UINT32 currentPosition,
-            IDWriteInlineObject **inlineObject,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetTypography)(UINT32 currentPosition,
-            IDWriteTypography **typography,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetLocaleNameLength)(UINT32 currentPosition,
-            UINT32 *nameLength,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetLocaleName)(UINT32 currentPosition,
-            WCHAR *localeName,
-            UINT32 nameSize,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(Draw)(void *clientDrawingContext,
-            IDWriteTextRenderer *renderer,
-            FLOAT originX,
-            FLOAT originY) PURE;
-    STDMETHOD(GetLineMetrics)(DWRITE_LINE_METRICS *lineMetrics,
-            UINT32 maxLineCount,
-            UINT32 *actualLineCount) PURE;
-    STDMETHOD(GetMetrics)(DWRITE_TEXT_METRICS *textMetrics) PURE;
-    STDMETHOD(GetOverhangMetrics)(DWRITE_OVERHANG_METRICS *overhangs) PURE;
-    STDMETHOD(GetClusterMetrics)(DWRITE_CLUSTER_METRICS *clusterMetrics,
-            UINT32 maxClusterCount,
-            UINT32 *actualClusterCount) PURE;
-    STDMETHOD(DetermineMinWidth)(FLOAT *minWidth) PURE;
-    STDMETHOD(HitTestPoint)(FLOAT pointX,
-            FLOAT pointY,
-            WINBOOL *isTrailingHit,
-            WINBOOL *isInside,
-            DWRITE_HIT_TEST_METRICS *hitTestMetrics) PURE;
-    STDMETHOD(HitTestTextPosition)(UINT32 textPosition,
-            WINBOOL isTrailingHit,
-            FLOAT *pointX,
-            FLOAT *pointY,
-            DWRITE_HIT_TEST_METRICS *hitTestMetrics) PURE;
-    STDMETHOD(HitTestTextRange)(UINT32 textPosition,
-            UINT32 textLength,
-            FLOAT originX,
-            FLOAT originY,
-            DWRITE_HIT_TEST_METRICS *hitTestMetrics,
-            UINT32 maxHitTestMetricsCount,
-            UINT32 *actualHitTestMetricsCount) PURE;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteTextLayoutVtbl
-{
-    IDWriteTextFormatVtbl Base;
-
-    STDMETHOD(SetMaxWidth)(IDWriteTextLayout *This,
-            FLOAT maxWidth) PURE;
-    STDMETHOD(SetMaxHeight)(IDWriteTextLayout *This,
-            FLOAT maxHeight) PURE;
-    STDMETHOD(SetFontCollection)(IDWriteTextLayout *This,
-            IDWriteFontCollection *fontCollection,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontFamilyName)(IDWriteTextLayout *This,
-            WCHAR const *fontFamilyName,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontWeight)(IDWriteTextLayout *This,
-            DWRITE_FONT_WEIGHT fontWeight,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontStyle)(IDWriteTextLayout *This,
-            DWRITE_FONT_STYLE fontStyle,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontStretch)(IDWriteTextLayout *This,
-            DWRITE_FONT_STRETCH fontStretch,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetFontSize)(IDWriteTextLayout *This,
-            FLOAT fontSize,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetUnderline)(IDWriteTextLayout *This,
-            WINBOOL hasUnderline,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetStrikethrough)(IDWriteTextLayout *This,
-            WINBOOL hasStrikethrough,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetDrawingEffect)(IDWriteTextLayout *This,
-            IUnknown *drawingEffect,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetInlineObject)(IDWriteTextLayout *This,
-            IDWriteInlineObject *inlineObject,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetTypography)(IDWriteTextLayout *This,
-            IDWriteTypography *typography,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(SetLocaleName)(IDWriteTextLayout *This,
-            WCHAR const *localeName,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD_(FLOAT, GetMaxWidth)(IDWriteTextLayout *This) PURE;
-    STDMETHOD_(FLOAT, GetMaxHeight)(IDWriteTextLayout *This) PURE;
-    STDMETHOD(GetFontCollection)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            IDWriteFontCollection** fontCollection,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontFamilyNameLength)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            UINT32 *nameLength,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontFamilyName)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            WCHAR *fontFamilyName,
-            UINT32 nameSize,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontWeight)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            DWRITE_FONT_WEIGHT *fontWeight,
-            DWRITE_TEXT_RANGE* textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontStyle)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            DWRITE_FONT_STYLE *fontStyle,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontStretch)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            DWRITE_FONT_STRETCH* fontStretch,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetFontSize)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            FLOAT *fontSize,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetUnderline)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            WINBOOL *hasUnderline,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetStrikethrough)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            WINBOOL *hasStrikethrough,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetDrawingEffect)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            IUnknown **drawingEffect,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetInlineObject)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            IDWriteInlineObject **inlineObject,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetTypography)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            IDWriteTypography **typography,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetLocaleNameLength)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            UINT32 *nameLength,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(GetLocaleName)(IDWriteTextLayout *This,
-            UINT32 currentPosition,
-            WCHAR *localeName,
-            UINT32 nameSize,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(Draw)(IDWriteTextLayout *This,
-            void *clientDrawingContext,
-            IDWriteTextRenderer *renderer,
-            FLOAT originX,
-            FLOAT originY) PURE;
-    STDMETHOD(GetLineMetrics)(IDWriteTextLayout *This,
-            DWRITE_LINE_METRICS *lineMetrics,
-            UINT32 maxLineCount,
-            UINT32 *actualLineCount) PURE;
-    STDMETHOD(GetMetrics)(IDWriteTextLayout *This,
-            DWRITE_TEXT_METRICS *textMetrics) PURE;
-    STDMETHOD(GetOverhangMetrics)(IDWriteTextLayout *This,
-            DWRITE_OVERHANG_METRICS *overhangs) PURE;
-    STDMETHOD(GetClusterMetrics)(IDWriteTextLayout *This,
-            DWRITE_CLUSTER_METRICS *clusterMetrics,
-            UINT32 maxClusterCount,
-            UINT32 *actualClusterCount) PURE;
-    STDMETHOD(DetermineMinWidth)(IDWriteTextLayout *This,
-            FLOAT *minWidth) PURE;
-    STDMETHOD(HitTestPoint)(IDWriteTextLayout *This,
-            FLOAT pointX,
-            FLOAT pointY,
-            WINBOOL *isTrailingHit,
-            WINBOOL *isInside,
-            DWRITE_HIT_TEST_METRICS *hitTestMetrics) PURE;
-    STDMETHOD(HitTestTextPosition)(IDWriteTextLayout *This,
-            UINT32 textPosition,
-            WINBOOL isTrailingHit,
-            FLOAT *pointX,
-            FLOAT *pointY,
-            DWRITE_HIT_TEST_METRICS *hitTestMetrics) PURE;
-    STDMETHOD(HitTestTextRange)(IDWriteTextLayout *This,
-            UINT32 textPosition,
-            UINT32 textLength,
-            FLOAT originX,
-            FLOAT originY,
-            DWRITE_HIT_TEST_METRICS *hitTestMetrics,
-            UINT32 maxHitTestMetricsCount,
-            UINT32 *actualHitTestMetricsCount) PURE;
-}
-IDWriteTextLayoutVtbl;
-
-interface IDWriteTextLayout
-{
-    const IDWriteTextLayoutVtbl *lpVtbl;
-};
-
-#ifdef COBJMACROS
-/* Wrappers for IUnknown members. */
-#define IDWriteTextLayout_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->Base.QueryInterface((IDWriteTextFormat *)(This),riid,ppvObject)
-#define IDWriteTextLayout_AddRef(This) (This)->lpVtbl->Base.AddRef((IDWriteTextFormat *)(This))
-#define IDWriteTextLayout_Release(This) (This)->lpVtbl->Base.Release((IDWriteTextFormat *)(This))
-/* Wrappers for IDWriteTextFormat members. */
-#define IDWriteTextLayout_GetFlowDirection(This) (This)->lpVtbl->Base.GetFlowDirection(This)
-/* Use IDWriteTextFormat_GetFontXXXX macros instead of the following ones.  The
- * latters are for the IDWriteTextLayout's overloaded member function.
-#define IDWriteTextLayout_GetFontCollection(This,fontCollection) (This)->lpVtbl->Base.GetFontCollection(This,fontCollection)
-#define IDWriteTextLayout_GetFontFamilyName(This,fontFamilyName,nameSize) (This)->lpVtbl->Base.GetFontFamilyName(This,fontFamilyName,nameSize)
-#define IDWriteTextLayout_GetFontFamilyNameLength(This) (This)->lpVtbl->Base.GetFontFamilyNameLength(This)
-#define IDWriteTextLayout_GetFontSize(This) (This)->lpVtbl->Base.GetFontSize(This)
-#define IDWriteTextLayout_GetFontStretch(This) (This)->lpVtbl->Base.GetFontStretch(This)
-#define IDWriteTextLayout_GetFontStyle(This) (This)->lpVtbl->Base.GetFontStyle(This)
-#define IDWriteTextLayout_GetFontWeight(This) (This)->lpVtbl->GetFontWeight(This)
- */
-#define IDWriteTextLayout_GetIncrementalTabStop(This) (This)->lpVtbl->Base.GetIncrementalTabStop(This)
-#define IDWriteTextLayout_GetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline) (This)->lpVtbl->Base.GetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline)
-/* Use IDWriteTextFormat_GetLocaleNameXXXX macros instead.
-#define IDWriteTextLayout_GetLocaleName(This,localeName,nameSize) (This)->lpVtbl->Base.GetLocaleName(This,localeName,nameSize)
-#define IDWriteTextLayout_GetLocaleNameLength(This) (This)->lpVtbl->Base.GetLocaleNameLength(This)
- */
-#define IDWriteTextLayout_GetParagraphAlignment(This) (This)->lpVtbl->Base.GetParagraphAlignment(This)
-#define IDWriteTextLayout_GetReadingDirection(This) (This)->lpVtbl->Base.GetReadingDirection(This)
-#define IDWriteTextLayout_GetTextAlignment(This) (This)->lpVtbl->Base.GetTextAlignment(This)
-#define IDWriteTextLayout_GetTrimming(This,trimmingOptions,trimmingSign) (This)->lpVtbl->Base.GetTrimming(This,trimmingOptions,trimmingSign)
-#define IDWriteTextLayout_GetWordWrapping(This) (This)->lpVtbl->Base.GetWordWrapping(This)
-#define IDWriteTextLayout_SetFlowDirection(This,flowDirection) (This)->lpVtbl->Base.SetFlowDirection(This,flowDirection)
-#define IDWriteTextLayout_SetIncrementalTabStop(This,incrementalTabStop) (This)->lpVtbl->Base.SetIncrementalTabStop(This,incrementalTabStop)
-#define IDWriteTextLayout_SetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline) (This)->lpVtbl->Base.SetLineSpacing(This,lineSpacingMethod,lineSpacing,baseline)
-#define IDWriteTextLayout_SetParagraphAlignment(This,paragraphAlignment) (This)->lpVtbl->SetParagraphAlignment(This,paragraphAlignment)
-#define IDWriteTextLayout_SetReadingDirection(This,readingDirection) (This)->lpVtbl->Base.SetReadingDirection(This,readingDirection)
-#define IDWriteTextLayout_SetTextAlignment(This,textAlignment) (This)->lpVtbl->Base.SetTextAlignment(This,textAlignment)
-#define IDWriteTextLayout_SetTrimming(This,trimmingOptions,trimmingSign) (This)->lpVtbl->Base.SetTrimming(This,trimmingOptions,trimmingSign)
-#define IDWriteTextLayout_SetWordWrapping(This,wordWrapping) (This)->lpVtbl->Base.SetWordWrapping(This,wordWrapping)
-/* Wrappers for IDWriteTextLayout members. */
-#define IDWriteTextLayout_Draw(This,clientDrawingContext,renderer,originX,originY) (This)->lpVtbl->Draw(This,clientDrawingContext,renderer,originX,originY)
-#define IDWriteTextLayout_GetClusterMetrics(This,clusterMetrics,maxClusterCount,actualClusterCount) (This)->lpVtbl->GetClusterMetrics(This,clusterMetrics,maxClusterCount,actualClusterCount)
-#define IDWriteTextLayout_DetermineMinWidth(This,minWidth) (This)->lpVtbl->DetermineMinWidth(This,minWidth)
-#define IDWriteTextLayout_GetDrawingEffect(This,currentPosition,drawingEffect,textRange) (This)->lpVtbl->GetDrawingEffect(This,currentPosition,drawingEffect,textRange)
-#define IDWriteTextLayout_GetFontCollection(This,currentPosition,fontCollection,textRange) (This)->lpVtbl->GetFontCollection(This,currentPosition,fontCollection,textRange)
-#define IDWriteTextLayout_GetFontFamilyName(This,currentPosition,fontFamilyName,nameSize,textRange) (This)->lpVtbl->GetFontFamilyName(This,currentPosition,fontFamilyName,nameSize,textRange)
-#define IDWriteTextLayout_GetFontFamilyNameLength(This,currentPosition,nameLength,textRange) (This)->lpVtbl->GetFontFamilyNameLength(This,currentPosition,nameLength,textRange)
-#define IDWriteTextLayout_GetFontSize(This,currentPosition,fontSize,textRange) (This)->lpVtbl->GetFontSize(This,currentPosition,fontSize,textRange)
-#define IDWriteTextLayout_GetFontStretch(This,currentPosition,fontStretch,textRange) (This)->lpVtbl->GetFontStretch(This,currentPosition,fontStretch,textRange)
-#define IDWriteTextLayout_GetFontStyle(This,currentPosition,fontStyle,textRange) (This)->lpVtbl->GetFontStyle(This,currentPosition,fontStyle,textRange)
-#define IDWriteTextLayout_GetFontWeight(This,currentPosition,fontWeight,textRange) (This)->lpVtbl->GetFontWeight(This,currentPosition,fontWeight,textRange)
-#define IDWriteTextLayout_GetInlineObject(This,currentPosition,inlineObject,textRange) (This)->lpVtbl->GetInlineObject(This,currentPosition,inlineObject,textRange)
-#define IDWriteTextLayout_GetLineMetrics(This,lineMetrics,maxLineCount,actualLineCount) (This)->lpVtbl->GetLineMetrics(This,lineMetrics,maxLineCount,actualLineCount)
-#define IDWriteTextLayout_GetLocaleName(This,currentPosition,localeName,nameSize,textRange) (This)->lpVtbl->GetLocaleName(This,currentPosition,localeName,nameSize,textRange)
-#define IDWriteTextLayout_GetLocaleNameLength(This,currentPosition,nameLength,textRange) (This)->lpVtbl->GetLocaleNameLength(This,currentPosition,nameLength,textRange)
-#define IDWriteTextLayout_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
-#define IDWriteTextLayout_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
-#define IDWriteTextLayout_GetMetrics(This,textMetrics) (This)->lpVtbl->GetMetrics(This,textMetrics)
-#define IDWriteTextLayout_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
-#define IDWriteTextLayout_GetStrikethrough(This,currentPosition,hasStrikethrough,textRange) (This)->lpVtbl->GetStrikethrough(This,currentPosition,hasStrikethrough,textRange)
-#define IDWriteTextLayout_GetTypography(This,currentPosition,typography,textRange) (This)->lpVtbl->GetTypography(This,currentPosition,typography,textRange)
-#define IDWriteTextLayout_GetUnderline(This,currentPosition,hasUnderline,textRange) (This)->lpVtbl->GetUnderline(This,currentPosition,hasUnderline,textRange)
-#define IDWriteTextLayout_HitTestPoint(This,pointX,pointY,isTrailingHit,isInside,hitTestMetrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,isTrailingHit,isInside,hitTestMetrics)
-#define IDWriteTextLayout_HitTestTextPosition(This,textPosition,isTrailingHit,pointX,pointY,hitTestMetrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,isTrailingHit,pointX,pointY,hitTestMetrics)
-#define IDWriteTextLayout_HitTestTextRange(This,textPosition,textLength,originX,originY,hitTestMetrics,maxHitTestMetricsCount,actualHitTestMetricsCount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,hitTestMetrics,maxHitTestMetricsCount,actualHitTestMetricsCount)
-#define IDWriteTextLayout_SetDrawingEffect(This,drawingEffect,textRange) (This)->lpVtbl->SetDrawingEffect(This,drawingEffect,textRange)
-#define IDWriteTextLayout_SetFontCollection(This,fontCollection,textRange) (This)->lpVtbl->SetFontCollection(This,fontCollection,textRange)
-#define IDWriteTextLayout_SetFontFamilyName(This,fontFamilyName,textRange) (This)->lpVtbl->SetFontFamilyName(This,fontFamilyName,textRange)
-#define IDWriteTextLayout_SetFontSize(This,fontSize,textRange) (This)->lpVtbl->SetFontSize(This,fontSize,textRange)
-#define IDWriteTextLayout_SetFontStretch(This,fontStretch,textRange) (This)->lpVtbl->SetFontStretch(This,fontStretch,textRange)
-#define IDWriteTextLayout_SetFontStyle(This,fontStyle,textRange) (This)->lpVtbl->SetFontStyle(This,fontStyle,textRange)
-#define IDWriteTextLayout_SetFontWeight(This,fontWeight,textRange) (This)->lpVtbl->SetFontWeight(This,fontWeight,textRange)
-#define IDWriteTextLayout_SetInlineObject(This,inlineObject,textRange) (This)->lpVtbl->SetInlineObject(This,inlineObject,textRange)
-#define IDWriteTextLayout_SetLocaleName(This,localeName,textRange) (This)->lpVtbl->SetLocaleName(This,localeName,textRange)
-#define IDWriteTextLayout_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
-#define IDWriteTextLayout_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
-#define IDWriteTextLayout_SetStrikethrough(This,hasStrikethrough,textRange) (This)->lpVtbl->SetStrikethrough(This,hasStrikethrough,textRange)
-#define IDWriteTextLayout_SetTypography(This,typography,textRange) (This)->lpVtbl->SetTypography(This,typography,textRange)
-#define IDWriteTextLayout_SetUnderline(This,hasUnderline,textRange) (This)->lpVtbl->SetUnderline(This,hasUnderline,textRange)
-#endif /*COBJMACROS*/
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextRenderer
-DECLARE_INTERFACE_(IDWriteTextRenderer,IDWritePixelSnapping)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWritePixelSnapping methods */
-    STDMETHOD(IsPixelSnappingDisabled)(THIS_
-            void *clientDrawingContext,
-            WINBOOL *isDisabled) PURE;
-    STDMETHOD(GetCurrentTransform)(THIS_
-            void *clientDrawingContext,
-            DWRITE_MATRIX *transform) PURE;
-    STDMETHOD(GetPixelsPerDip)(THIS_
-            void *clientDrawingContext,
-            FLOAT *pixelsPerDip) PURE;
-#endif
-
-    /* IDWriteTextRenderer methods */
-    STDMETHOD(DrawGlyphRun)(THIS_
-            void *clientDrawingContext,
-            FLOAT baselineOriginX,
-            FLOAT baselineOriginY,
-            DWRITE_MEASURING_MODE measuringMode,
-            DWRITE_GLYPH_RUN const *glyphRun,
-            DWRITE_GLYPH_RUN_DESCRIPTION const *glyphRunDescription,
-            IUnknown* clientDrawingEffect) PURE;
-    STDMETHOD(DrawUnderline)(THIS_
-            void *clientDrawingContext,
-            FLOAT baselineOriginX,
-            FLOAT baselineOriginY,
-            DWRITE_UNDERLINE const *underline,
-            IUnknown *clientDrawingEffect) PURE;
-    STDMETHOD(DrawStrikethrough)(THIS_
-            void *clientDrawingContext,
-            FLOAT baselineOriginX,
-            FLOAT baselineOriginY,
-            DWRITE_STRIKETHROUGH const *strikethrough,
-            IUnknown* clientDrawingEffect) PURE;
-    STDMETHOD(DrawInlineObject)(
-            void *clientDrawingContext,
-            FLOAT originX,
-            FLOAT originY,
-            IDWriteInlineObject *inlineObject,
-            WINBOOL isSideways,
-            WINBOOL isRightToLeft,
-            IUnknown *clientDrawingEffect) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteTextRenderer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteTextRenderer_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteTextRenderer_GetCurrentTransform(This,clientDrawingContext,transform) (This)->lpVtbl->GetCurrentTransform(This,clientDrawingContext,transform)
-#define IDWriteTextRenderer_GetPixelsPerDip(This,clientDrawingContext,pixelsPerDip) (This)->lpVtbl->GetPixelsPerDip(This,clientDrawingContext,pixelsPerDip)
-#define IDWriteTextRenderer_IsPixelSnappingEnabled(This,clientDrawingContext,isDisabled) (This)->lpVtbl->IsPixelSnappingEnabled(This,clientDrawingContext,isDisabled)
-#define IDWriteTextRenderer_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteTextRenderer_DrawGlyphRun(This,clientDrawingContext,baselineOriginX,baselineOriginY,measuringMode,glyphRun,glyphRunDescription,clientDrawingEffect) (This)->lpVtbl->DrawGlyphRun(This,clientDrawingContext,baselineOriginX,baselineOriginY,measuringMode,glyphRun,glyphRunDescription,clientDrawingEffect)
-#define IDWriteTextRenderer_DrawInlineObject(This,clientDrawingContext,originX,originY,inlineObject,isSideways,isRightToLeft,clientDrawingEffect) (This)->lpVtbl->DrawInlineObject(This,clientDrawingContext,originX,originY,inlineObject,isSideways,isRightToLeft,clientDrawingEffect)
-#define IDWriteTextRenderer_DrawStrikethrough(This,clientDrawingContext,baselineOriginX,baselineOriginY,strikethrough,clientDrawingEffect) (This)->lpVtbl->DrawStrikethrough(This,clientDrawingContext,baselineOriginX,baselineOriginY,strikethrough,clientDrawingEffect)
-#define IDWriteTextRenderer_DrawUnderline(This,clientDrawingContext,baselineOriginX,baselineOriginY,underline,clientDrawingEffect) (This)->lpVtbl->DrawUnderline(This,clientDrawingContext,baselineOriginX,baselineOriginY,underline,clientDrawingEffect)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTypography
-DECLARE_INTERFACE_(IDWriteTypography,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    /* IDWriteTypography methods */
-    STDMETHOD(AddFontFeature)(THIS_ DWRITE_FONT_FEATURE fontFeature) PURE;
-    STDMETHOD_(UINT32,GetFontFeatureCount)(THIS) PURE;
-    STDMETHOD(GetFontFeature)(THIS_ UINT32 fontFeatureIndex, DWRITE_FONT_FEATURE *fontFeature) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IDWriteTypography_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IDWriteTypography_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IDWriteTypography_Release(This) (This)->lpVtbl->Release(This)
-#define IDWriteTypography_AddFontFeature(This,fontFeature) (This)->lpVtbl->AddFontFeature(This,fontFeature)
-#define IDWriteTypography_GetFontFeatureCount() (This)->lpVtbl->GetFontFeatureCount(This)
-#define IDWriteTypography_GetFontFeature(This,fontFeatureIndex,fontFeature) (This)->lpVtbl->GetFontFeature(This,fontFeatureIndex,fontFeature)
-#endif /*COBJMACROS*/
+#include <unknwn.h>
+#include <dcommon.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-DWRITEAPI HRESULT WINAPI DWriteCreateFactory(
-  DWRITE_FACTORY_TYPE factoryType,
-  REFIID iid,
-  IUnknown **factory
-);
+#ifndef __IDWriteFactory_FWD_DEFINED__
+#define __IDWriteFactory_FWD_DEFINED__
+typedef interface IDWriteFactory IDWriteFactory;
+#ifdef __cplusplus
+interface IDWriteFactory;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontCollection_FWD_DEFINED__
+#define __IDWriteFontCollection_FWD_DEFINED__
+typedef interface IDWriteFontCollection IDWriteFontCollection;
+#ifdef __cplusplus
+interface IDWriteFontCollection;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFamily_FWD_DEFINED__
+#define __IDWriteFontFamily_FWD_DEFINED__
+typedef interface IDWriteFontFamily IDWriteFontFamily;
+#ifdef __cplusplus
+interface IDWriteFontFamily;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace_FWD_DEFINED__
+#define __IDWriteFontFace_FWD_DEFINED__
+typedef interface IDWriteFontFace IDWriteFontFace;
+#ifdef __cplusplus
+interface IDWriteFontFace;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteInlineObject_FWD_DEFINED__
+#define __IDWriteInlineObject_FWD_DEFINED__
+typedef interface IDWriteInlineObject IDWriteInlineObject;
+#ifdef __cplusplus
+interface IDWriteInlineObject;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID2D1SimplifiedGeometrySink_FWD_DEFINED__
+#define __ID2D1SimplifiedGeometrySink_FWD_DEFINED__
+typedef interface ID2D1SimplifiedGeometrySink ID2D1SimplifiedGeometrySink;
+#ifdef __cplusplus
+interface ID2D1SimplifiedGeometrySink;
+#endif /* __cplusplus */
+#endif
+
+typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink;
+#ifndef _WINDEF_
+typedef void *HMONITOR;
+#endif /* _WINDEF_ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetGlyphIndices
+#endif
+typedef enum DWRITE_FACTORY_TYPE {
+    DWRITE_FACTORY_TYPE_SHARED = 0,
+    DWRITE_FACTORY_TYPE_ISOLATED = 1
+} DWRITE_FACTORY_TYPE;
+typedef enum DWRITE_FONT_FILE_TYPE {
+    DWRITE_FONT_FILE_TYPE_UNKNOWN = 0,
+    DWRITE_FONT_FILE_TYPE_CFF = 1,
+    DWRITE_FONT_FILE_TYPE_TRUETYPE = 2,
+    DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION = 3,
+    DWRITE_FONT_FILE_TYPE_TYPE1_PFM = 4,
+    DWRITE_FONT_FILE_TYPE_TYPE1_PFB = 5,
+    DWRITE_FONT_FILE_TYPE_VECTOR = 6,
+    DWRITE_FONT_FILE_TYPE_BITMAP = 7,
+    DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION
+} DWRITE_FONT_FILE_TYPE;
+typedef enum DWRITE_FONT_FACE_TYPE {
+    DWRITE_FONT_FACE_TYPE_CFF = 0,
+    DWRITE_FONT_FACE_TYPE_TRUETYPE = 1,
+    DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION = 2,
+    DWRITE_FONT_FACE_TYPE_TYPE1 = 3,
+    DWRITE_FONT_FACE_TYPE_VECTOR = 4,
+    DWRITE_FONT_FACE_TYPE_BITMAP = 5,
+    DWRITE_FONT_FACE_TYPE_UNKNOWN = 6,
+    DWRITE_FONT_FACE_TYPE_RAW_CFF = 7,
+    DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION
+} DWRITE_FONT_FACE_TYPE;
+typedef enum DWRITE_FONT_WEIGHT {
+    DWRITE_FONT_WEIGHT_THIN = 100,
+    DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,
+    DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,
+    DWRITE_FONT_WEIGHT_LIGHT = 300,
+    DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350,
+    DWRITE_FONT_WEIGHT_NORMAL = 400,
+    DWRITE_FONT_WEIGHT_REGULAR = 400,
+    DWRITE_FONT_WEIGHT_MEDIUM = 500,
+    DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,
+    DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,
+    DWRITE_FONT_WEIGHT_BOLD = 700,
+    DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,
+    DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,
+    DWRITE_FONT_WEIGHT_BLACK = 900,
+    DWRITE_FONT_WEIGHT_HEAVY = 900,
+    DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,
+    DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950
+} DWRITE_FONT_WEIGHT;
+typedef enum DWRITE_FONT_STRETCH {
+    DWRITE_FONT_STRETCH_UNDEFINED = 0,
+    DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,
+    DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,
+    DWRITE_FONT_STRETCH_CONDENSED = 3,
+    DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,
+    DWRITE_FONT_STRETCH_NORMAL = 5,
+    DWRITE_FONT_STRETCH_MEDIUM = 5,
+    DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,
+    DWRITE_FONT_STRETCH_EXPANDED = 7,
+    DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,
+    DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9
+} DWRITE_FONT_STRETCH;
+typedef enum DWRITE_FONT_STYLE {
+    DWRITE_FONT_STYLE_NORMAL = 0,
+    DWRITE_FONT_STYLE_OBLIQUE = 1,
+    DWRITE_FONT_STYLE_ITALIC = 2
+} DWRITE_FONT_STYLE;
+typedef enum DWRITE_INFORMATIONAL_STRING_ID {
+    DWRITE_INFORMATIONAL_STRING_NONE = 0,
+    DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE = 1,
+    DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS = 2,
+    DWRITE_INFORMATIONAL_STRING_TRADEMARK = 3,
+    DWRITE_INFORMATIONAL_STRING_MANUFACTURER = 4,
+    DWRITE_INFORMATIONAL_STRING_DESIGNER = 5,
+    DWRITE_INFORMATIONAL_STRING_DESIGNER_URL = 6,
+    DWRITE_INFORMATIONAL_STRING_DESCRIPTION = 7,
+    DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL = 8,
+    DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION = 9,
+    DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL = 10,
+    DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES = 11,
+    DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES = 12,
+    DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_FAMILY_NAMES = 13,
+    DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_SUBFAMILY_NAMES = 14,
+    DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT = 15,
+    DWRITE_INFORMATIONAL_STRING_FULL_NAME = 16,
+    DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME = 17,
+    DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME = 18,
+    DWRITE_INFORMATIONAL_STRING_WEIGHT_STRETCH_STYLE_FAMILY_NAME = 19,
+    DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG = 20,
+    DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG = 21,
+    DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_FAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_SUBFAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME = DWRITE_INFORMATIONAL_STRING_WEIGHT_STRETCH_STYLE_FAMILY_NAME
+} DWRITE_INFORMATIONAL_STRING_ID;
+typedef enum DWRITE_FONT_SIMULATIONS {
+    DWRITE_FONT_SIMULATIONS_NONE = 0,
+    DWRITE_FONT_SIMULATIONS_BOLD = 1,
+    DWRITE_FONT_SIMULATIONS_OBLIQUE = 2
+} DWRITE_FONT_SIMULATIONS;
+#ifdef DEFINE_ENUM_FLAG_OPERATORS
+DEFINE_ENUM_FLAG_OPERATORS(DWRITE_FONT_SIMULATIONS);
+#endif
+typedef enum DWRITE_PIXEL_GEOMETRY {
+    DWRITE_PIXEL_GEOMETRY_FLAT = 0,
+    DWRITE_PIXEL_GEOMETRY_RGB = 1,
+    DWRITE_PIXEL_GEOMETRY_BGR = 2
+} DWRITE_PIXEL_GEOMETRY;
+typedef enum DWRITE_RENDERING_MODE {
+    DWRITE_RENDERING_MODE_DEFAULT = 0,
+    DWRITE_RENDERING_MODE_ALIASED = 1,
+    DWRITE_RENDERING_MODE_GDI_CLASSIC = 2,
+    DWRITE_RENDERING_MODE_GDI_NATURAL = 3,
+    DWRITE_RENDERING_MODE_NATURAL = 4,
+    DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC = 5,
+    DWRITE_RENDERING_MODE_OUTLINE = 6,
+    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,
+    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
+    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
+    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC
+} DWRITE_RENDERING_MODE;
+typedef enum DWRITE_TEXT_ALIGNMENT {
+    DWRITE_TEXT_ALIGNMENT_LEADING = 0,
+    DWRITE_TEXT_ALIGNMENT_TRAILING = 1,
+    DWRITE_TEXT_ALIGNMENT_CENTER = 2,
+    DWRITE_TEXT_ALIGNMENT_JUSTIFIED = 3
+} DWRITE_TEXT_ALIGNMENT;
+typedef enum DWRITE_PARAGRAPH_ALIGNMENT {
+    DWRITE_PARAGRAPH_ALIGNMENT_NEAR = 0,
+    DWRITE_PARAGRAPH_ALIGNMENT_FAR = 1,
+    DWRITE_PARAGRAPH_ALIGNMENT_CENTER = 2
+} DWRITE_PARAGRAPH_ALIGNMENT;
+typedef enum DWRITE_WORD_WRAPPING {
+    DWRITE_WORD_WRAPPING_WRAP = 0,
+    DWRITE_WORD_WRAPPING_NO_WRAP = 1,
+    DWRITE_WORD_WRAPPING_EMERGENCY_BREAK = 2,
+    DWRITE_WORD_WRAPPING_WHOLE_WORD = 3,
+    DWRITE_WORD_WRAPPING_CHARACTER = 4
+} DWRITE_WORD_WRAPPING;
+typedef enum DWRITE_READING_DIRECTION {
+    DWRITE_READING_DIRECTION_LEFT_TO_RIGHT = 0,
+    DWRITE_READING_DIRECTION_RIGHT_TO_LEFT = 1,
+    DWRITE_READING_DIRECTION_TOP_TO_BOTTOM = 2,
+    DWRITE_READING_DIRECTION_BOTTOM_TO_TOP = 3
+} DWRITE_READING_DIRECTION;
+typedef enum DWRITE_FLOW_DIRECTION {
+    DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM = 0,
+    DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP = 1,
+    DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT = 2,
+    DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT = 3
+} DWRITE_FLOW_DIRECTION;
+typedef enum DWRITE_TRIMMING_GRANULARITY {
+    DWRITE_TRIMMING_GRANULARITY_NONE = 0,
+    DWRITE_TRIMMING_GRANULARITY_CHARACTER = 1,
+    DWRITE_TRIMMING_GRANULARITY_WORD = 2
+} DWRITE_TRIMMING_GRANULARITY;
+typedef enum DWRITE_BREAK_CONDITION {
+    DWRITE_BREAK_CONDITION_NEUTRAL = 0,
+    DWRITE_BREAK_CONDITION_CAN_BREAK = 1,
+    DWRITE_BREAK_CONDITION_MAY_NOT_BREAK = 2,
+    DWRITE_BREAK_CONDITION_MUST_BREAK = 3
+} DWRITE_BREAK_CONDITION;
+typedef enum DWRITE_LINE_SPACING_METHOD {
+    DWRITE_LINE_SPACING_METHOD_DEFAULT = 0,
+    DWRITE_LINE_SPACING_METHOD_UNIFORM = 1,
+    DWRITE_LINE_SPACING_METHOD_PROPORTIONAL = 2
+} DWRITE_LINE_SPACING_METHOD;
+#define DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d) ( \
+    ((UINT32)(UINT8)(d) << 24) | \
+    ((UINT32)(UINT8)(c) << 16) | \
+    ((UINT32)(UINT8)(b) <<  8) | \
+     (UINT32)(UINT8)(a))
+typedef enum DWRITE_FONT_FEATURE_TAG {
+    DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661,
+    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263,
+    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263,
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163,
+    DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163,
+    DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363,
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63,
+    DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063,
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363,
+    DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563,
+    DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664,
+    DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64,
+    DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865,
+    DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266,
+    DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766,
+    DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168,
+    DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168,
+    DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168,
+    DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968,
+    DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68,
+    DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68,
+    DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768,
+    DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68,
+    DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a,
+    DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a,
+    DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a,
+    DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a,
+    DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b,
+    DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c,
+    DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c,
+    DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c,
+    DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d,
+    DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d,
+    DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d,
+    DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e,
+    DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e,
+    DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f,
+    DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f,
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170,
+    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370,
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70,
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770,
+    DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771,
+    DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72,
+    DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173,
+    DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973,
+    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73,
+    DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373,
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373,
+    DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573,
+    DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573,
+    DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773,
+    DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974,
+    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74,
+    DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74,
+    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274,
+    DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774,
+    DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75,
+    DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING = 0x74726576,
+    DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION = 0x32747276,
+    DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a
+} DWRITE_FONT_FEATURE_TAG;
+typedef enum DWRITE_SCRIPT_SHAPES {
+    DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
+    DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
+} DWRITE_SCRIPT_SHAPES;
+typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD {
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE = 0,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL = 1,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE = 2,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL = 3,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL = 4
+} DWRITE_NUMBER_SUBSTITUTION_METHOD;
+#define DWRITE_ALPHA_MAX 255
+typedef enum DWRITE_TEXTURE_TYPE {
+    DWRITE_TEXTURE_ALIASED_1x1 = 0,
+    DWRITE_TEXTURE_CLEARTYPE_3x1 = 1
+} DWRITE_TEXTURE_TYPE;
+typedef struct DWRITE_FONT_METRICS {
+    UINT16 designUnitsPerEm;
+    UINT16 ascent;
+    UINT16 descent;
+    INT16 lineGap;
+    UINT16 capHeight;
+    UINT16 xHeight;
+    INT16 underlinePosition;
+    UINT16 underlineThickness;
+    INT16 strikethroughPosition;
+    UINT16 strikethroughThickness;
+} DWRITE_FONT_METRICS;
+typedef struct DWRITE_GLYPH_METRICS {
+    INT32 leftSideBearing;
+    UINT32 advanceWidth;
+    INT32 rightSideBearing;
+    INT32 topSideBearing;
+    UINT32 advanceHeight;
+    INT32 bottomSideBearing;
+    INT32 verticalOriginY;
+} DWRITE_GLYPH_METRICS;
+typedef struct DWRITE_GLYPH_OFFSET {
+    FLOAT advanceOffset;
+    FLOAT ascenderOffset;
+} DWRITE_GLYPH_OFFSET;
+typedef struct DWRITE_MATRIX {
+    FLOAT m11;
+    FLOAT m12;
+    FLOAT m21;
+    FLOAT m22;
+    FLOAT dx;
+    FLOAT dy;
+} DWRITE_MATRIX;
+typedef struct DWRITE_TRIMMING {
+    DWRITE_TRIMMING_GRANULARITY granularity;
+    UINT32 delimiter;
+    UINT32 delimiterCount;
+} DWRITE_TRIMMING;
+#ifndef __d2d1_h__
+typedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN;
+#endif /* __d2d1_h__ */
+struct DWRITE_GLYPH_RUN {
+    IDWriteFontFace *fontFace;
+    FLOAT fontEmSize;
+    UINT32 glyphCount;
+    const UINT16 *glyphIndices;
+    const FLOAT *glyphAdvances;
+    const DWRITE_GLYPH_OFFSET *glyphOffsets;
+    WINBOOL isSideways;
+    UINT32 bidiLevel;
+};
+#ifndef __d2d1_1_h__
+typedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION;
+#endif /* __d2d1_1_h__ */
+struct DWRITE_GLYPH_RUN_DESCRIPTION {
+    const WCHAR *localeName;
+    const WCHAR *string;
+    UINT32 stringLength;
+    const UINT16 *clusterMap;
+    UINT32 textPosition;
+};
+typedef struct DWRITE_UNDERLINE {
+    FLOAT width;
+    FLOAT thickness;
+    FLOAT offset;
+    FLOAT runHeight;
+    DWRITE_READING_DIRECTION readingDirection;
+    DWRITE_FLOW_DIRECTION flowDirection;
+    const WCHAR *localeName;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_UNDERLINE;
+typedef struct DWRITE_STRIKETHROUGH {
+    FLOAT width;
+    FLOAT thickness;
+    FLOAT offset;
+    DWRITE_READING_DIRECTION readingDirection;
+    DWRITE_FLOW_DIRECTION flowDirection;
+    const WCHAR *localeName;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_STRIKETHROUGH;
+typedef struct DWRITE_INLINE_OBJECT_METRICS {
+    FLOAT width;
+    FLOAT height;
+    FLOAT baseline;
+    WINBOOL supportsSideways;
+} DWRITE_INLINE_OBJECT_METRICS;
+typedef struct DWRITE_OVERHANG_METRICS {
+    FLOAT left;
+    FLOAT top;
+    FLOAT right;
+    FLOAT bottom;
+} DWRITE_OVERHANG_METRICS;
+typedef struct DWRITE_FONT_FEATURE {
+    DWRITE_FONT_FEATURE_TAG nameTag;
+    UINT32 parameter;
+} DWRITE_FONT_FEATURE;
+typedef struct DWRITE_TEXT_RANGE {
+    UINT32 startPosition;
+    UINT32 length;
+} DWRITE_TEXT_RANGE;
+typedef struct DWRITE_LINE_METRICS {
+    UINT32 length;
+    UINT32 trailingWhitespaceLength;
+    UINT32 newlineLength;
+    FLOAT height;
+    FLOAT baseline;
+    WINBOOL isTrimmed;
+} DWRITE_LINE_METRICS;
+typedef struct DWRITE_TEXT_METRICS {
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT widthIncludingTrailingWhitespace;
+    FLOAT height;
+    FLOAT layoutWidth;
+    FLOAT layoutHeight;
+    UINT32 maxBidiReorderingDepth;
+    UINT32 lineCount;
+} DWRITE_TEXT_METRICS;
+typedef struct DWRITE_CLUSTER_METRICS {
+    FLOAT width;
+    UINT16 length;
+    UINT16 canWrapLineAfter : 1;
+    UINT16 isWhitespace : 1;
+    UINT16 isNewline : 1;
+    UINT16 isSoftHyphen : 1;
+    UINT16 isRightToLeft : 1;
+    UINT16 padding : 11;
+} DWRITE_CLUSTER_METRICS;
+typedef struct DWRITE_HIT_TEST_METRICS {
+    UINT32 textPosition;
+    UINT32 length;
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT height;
+    UINT32 bidiLevel;
+    WINBOOL isText;
+    WINBOOL isTrimmed;
+} DWRITE_HIT_TEST_METRICS;
+typedef struct DWRITE_SCRIPT_ANALYSIS {
+    UINT16 script;
+    DWRITE_SCRIPT_SHAPES shapes;
+} DWRITE_SCRIPT_ANALYSIS;
+typedef struct DWRITE_LINE_BREAKPOINT {
+    UINT8 breakConditionBefore : 2;
+    UINT8 breakConditionAfter : 2;
+    UINT8 isWhitespace : 1;
+    UINT8 isSoftHyphen : 1;
+    UINT8 padding : 2;
+} DWRITE_LINE_BREAKPOINT;
+typedef struct DWRITE_TYPOGRAPHIC_FEATURES {
+    DWRITE_FONT_FEATURE *features;
+    UINT32 featureCount;
+} DWRITE_TYPOGRAPHIC_FEATURES;
+typedef struct DWRITE_SHAPING_TEXT_PROPERTIES {
+    UINT16 isShapedAlone : 1;
+    UINT16 reserved1 : 1;
+    UINT16 canBreakShapingAfter : 1;
+    UINT16 reserved : 13;
+} DWRITE_SHAPING_TEXT_PROPERTIES;
+typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES {
+    UINT16 justification : 4;
+    UINT16 isClusterStart : 1;
+    UINT16 isDiacritic : 1;
+    UINT16 isZeroWidthSpace : 1;
+    UINT16 reserved : 9;
+} DWRITE_SHAPING_GLYPH_PROPERTIES;
+/*****************************************************************************
+ * IDWriteFontFileStream interface
+ */
+#ifndef __IDWriteFontFileStream_INTERFACE_DEFINED__
+#define __IDWriteFontFileStream_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFileStream, 0x6d4865fe, 0x0ab8, 0x4d91, 0x8f,0x62, 0x5d,0xd6,0xbe,0x34,0xa3,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0")
+IDWriteFontFileStream : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ReadFileFragment(
+        const void **fragment_start,
+        UINT64 offset,
+        UINT64 fragment_size,
+        void **fragment_context) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseFileFragment(
+        void *fragment_context) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFileSize(
+        UINT64 *size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(
+        UINT64 *last_writetime) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFileStream, 0x6d4865fe, 0x0ab8, 0x4d91, 0x8f,0x62, 0x5d,0xd6,0xbe,0x34,0xa3,0xe0)
+#endif
+#else
+typedef struct IDWriteFontFileStreamVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFileStream *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFileStream *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFileStream *This);
+
+    /*** IDWriteFontFileStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *ReadFileFragment)(
+        IDWriteFontFileStream *This,
+        const void **fragment_start,
+        UINT64 offset,
+        UINT64 fragment_size,
+        void **fragment_context);
+
+    void (STDMETHODCALLTYPE *ReleaseFileFragment)(
+        IDWriteFontFileStream *This,
+        void *fragment_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetFileSize)(
+        IDWriteFontFileStream *This,
+        UINT64 *size);
+
+    HRESULT (STDMETHODCALLTYPE *GetLastWriteTime)(
+        IDWriteFontFileStream *This,
+        UINT64 *last_writetime);
+
+    END_INTERFACE
+} IDWriteFontFileStreamVtbl;
+
+interface IDWriteFontFileStream {
+    CONST_VTBL IDWriteFontFileStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFileStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFileStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFileStream_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileStream methods ***/
+#define IDWriteFontFileStream_ReadFileFragment(This,fragment_start,offset,fragment_size,fragment_context) (This)->lpVtbl->ReadFileFragment(This,fragment_start,offset,fragment_size,fragment_context)
+#define IDWriteFontFileStream_ReleaseFileFragment(This,fragment_context) (This)->lpVtbl->ReleaseFileFragment(This,fragment_context)
+#define IDWriteFontFileStream_GetFileSize(This,size) (This)->lpVtbl->GetFileSize(This,size)
+#define IDWriteFontFileStream_GetLastWriteTime(This,last_writetime) (This)->lpVtbl->GetLastWriteTime(This,last_writetime)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFileStream_QueryInterface(IDWriteFontFileStream* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFileStream_AddRef(IDWriteFontFileStream* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFileStream_Release(IDWriteFontFileStream* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileStream methods ***/
+static FORCEINLINE HRESULT IDWriteFontFileStream_ReadFileFragment(IDWriteFontFileStream* This,const void **fragment_start,UINT64 offset,UINT64 fragment_size,void **fragment_context) {
+    return This->lpVtbl->ReadFileFragment(This,fragment_start,offset,fragment_size,fragment_context);
+}
+static FORCEINLINE void IDWriteFontFileStream_ReleaseFileFragment(IDWriteFontFileStream* This,void *fragment_context) {
+    This->lpVtbl->ReleaseFileFragment(This,fragment_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFileStream_GetFileSize(IDWriteFontFileStream* This,UINT64 *size) {
+    return This->lpVtbl->GetFileSize(This,size);
+}
+static FORCEINLINE HRESULT IDWriteFontFileStream_GetLastWriteTime(IDWriteFontFileStream* This,UINT64 *last_writetime) {
+    return This->lpVtbl->GetLastWriteTime(This,last_writetime);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFileStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFileLoader interface
+ */
+#ifndef __IDWriteFontFileLoader_INTERFACE_DEFINED__
+#define __IDWriteFontFileLoader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFileLoader, 0x727cad4e, 0xd6af, 0x4c9e, 0x8a,0x08, 0xd6,0x95,0xb1,0x1c,0xaa,0x49);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("727cad4e-d6af-4c9e-8a08-d695b11caa49")
+IDWriteFontFileLoader : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey(
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFileLoader, 0x727cad4e, 0xd6af, 0x4c9e, 0x8a,0x08, 0xd6,0x95,0xb1,0x1c,0xaa,0x49)
+#endif
+#else
+typedef struct IDWriteFontFileLoaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFileLoader *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFileLoader *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFileLoader *This);
+
+    /*** IDWriteFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateStreamFromKey)(
+        IDWriteFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream);
+
+    END_INTERFACE
+} IDWriteFontFileLoaderVtbl;
+
+interface IDWriteFontFileLoader {
+    CONST_VTBL IDWriteFontFileLoaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFileLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFileLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFileLoader_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileLoader methods ***/
+#define IDWriteFontFileLoader_CreateStreamFromKey(This,key,key_size,stream) (This)->lpVtbl->CreateStreamFromKey(This,key,key_size,stream)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFileLoader_QueryInterface(IDWriteFontFileLoader* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFileLoader_AddRef(IDWriteFontFileLoader* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFileLoader_Release(IDWriteFontFileLoader* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteFontFileLoader_CreateStreamFromKey(IDWriteFontFileLoader* This,const void *key,UINT32 key_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->CreateStreamFromKey(This,key,key_size,stream);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFileLoader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteLocalFontFileLoader interface
+ */
+#ifndef __IDWriteLocalFontFileLoader_INTERFACE_DEFINED__
+#define __IDWriteLocalFontFileLoader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteLocalFontFileLoader, 0xb2d9f3ec, 0xc9fe, 0x4a11, 0xa2,0xec, 0xd8,0x62,0x08,0xf7,0xc0,0xa2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2")
+IDWriteLocalFontFileLoader : public IDWriteFontFileLoader
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFilePathLengthFromKey(
+        const void *key,
+        UINT32 key_size,
+        UINT32 *length) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFilePathFromKey(
+        const void *key,
+        UINT32 key_size,
+        WCHAR *path,
+        UINT32 length) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLastWriteTimeFromKey(
+        const void *key,
+        UINT32 key_size,
+        FILETIME *writetime) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteLocalFontFileLoader, 0xb2d9f3ec, 0xc9fe, 0x4a11, 0xa2,0xec, 0xd8,0x62,0x08,0xf7,0xc0,0xa2)
+#endif
+#else
+typedef struct IDWriteLocalFontFileLoaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteLocalFontFileLoader *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteLocalFontFileLoader *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteLocalFontFileLoader *This);
+
+    /*** IDWriteFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateStreamFromKey)(
+        IDWriteLocalFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream);
+
+    /*** IDWriteLocalFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFilePathLengthFromKey)(
+        IDWriteLocalFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        UINT32 *length);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilePathFromKey)(
+        IDWriteLocalFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        WCHAR *path,
+        UINT32 length);
+
+    HRESULT (STDMETHODCALLTYPE *GetLastWriteTimeFromKey)(
+        IDWriteLocalFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        FILETIME *writetime);
+
+    END_INTERFACE
+} IDWriteLocalFontFileLoaderVtbl;
+
+interface IDWriteLocalFontFileLoader {
+    CONST_VTBL IDWriteLocalFontFileLoaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteLocalFontFileLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteLocalFontFileLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteLocalFontFileLoader_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileLoader methods ***/
+#define IDWriteLocalFontFileLoader_CreateStreamFromKey(This,key,key_size,stream) (This)->lpVtbl->CreateStreamFromKey(This,key,key_size,stream)
+/*** IDWriteLocalFontFileLoader methods ***/
+#define IDWriteLocalFontFileLoader_GetFilePathLengthFromKey(This,key,key_size,length) (This)->lpVtbl->GetFilePathLengthFromKey(This,key,key_size,length)
+#define IDWriteLocalFontFileLoader_GetFilePathFromKey(This,key,key_size,path,length) (This)->lpVtbl->GetFilePathFromKey(This,key,key_size,path,length)
+#define IDWriteLocalFontFileLoader_GetLastWriteTimeFromKey(This,key,key_size,writetime) (This)->lpVtbl->GetLastWriteTimeFromKey(This,key,key_size,writetime)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteLocalFontFileLoader_QueryInterface(IDWriteLocalFontFileLoader* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteLocalFontFileLoader_AddRef(IDWriteLocalFontFileLoader* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteLocalFontFileLoader_Release(IDWriteLocalFontFileLoader* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteLocalFontFileLoader_CreateStreamFromKey(IDWriteLocalFontFileLoader* This,const void *key,UINT32 key_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->CreateStreamFromKey(This,key,key_size,stream);
+}
+/*** IDWriteLocalFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteLocalFontFileLoader_GetFilePathLengthFromKey(IDWriteLocalFontFileLoader* This,const void *key,UINT32 key_size,UINT32 *length) {
+    return This->lpVtbl->GetFilePathLengthFromKey(This,key,key_size,length);
+}
+static FORCEINLINE HRESULT IDWriteLocalFontFileLoader_GetFilePathFromKey(IDWriteLocalFontFileLoader* This,const void *key,UINT32 key_size,WCHAR *path,UINT32 length) {
+    return This->lpVtbl->GetFilePathFromKey(This,key,key_size,path,length);
+}
+static FORCEINLINE HRESULT IDWriteLocalFontFileLoader_GetLastWriteTimeFromKey(IDWriteLocalFontFileLoader* This,const void *key,UINT32 key_size,FILETIME *writetime) {
+    return This->lpVtbl->GetLastWriteTimeFromKey(This,key,key_size,writetime);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteLocalFontFileLoader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFile interface
+ */
+#ifndef __IDWriteFontFile_INTERFACE_DEFINED__
+#define __IDWriteFontFile_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFile, 0x739d886a, 0xcef5, 0x47dc, 0x87,0x69, 0x1a,0x8b,0x41,0xbe,0xbb,0xb0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("739d886a-cef5-47dc-8769-1a8b41bebbb0")
+IDWriteFontFile : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetReferenceKey(
+        const void **key,
+        UINT32 *key_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLoader(
+        IDWriteFontFileLoader **loader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Analyze(
+        WINBOOL *is_supported_fonttype,
+        DWRITE_FONT_FILE_TYPE *file_type,
+        DWRITE_FONT_FACE_TYPE *face_type,
+        UINT32 *faces_num) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFile, 0x739d886a, 0xcef5, 0x47dc, 0x87,0x69, 0x1a,0x8b,0x41,0xbe,0xbb,0xb0)
+#endif
+#else
+typedef struct IDWriteFontFileVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFile *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFile *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFile *This);
+
+    /*** IDWriteFontFile methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetReferenceKey)(
+        IDWriteFontFile *This,
+        const void **key,
+        UINT32 *key_size);
+
+    HRESULT (STDMETHODCALLTYPE *GetLoader)(
+        IDWriteFontFile *This,
+        IDWriteFontFileLoader **loader);
+
+    HRESULT (STDMETHODCALLTYPE *Analyze)(
+        IDWriteFontFile *This,
+        WINBOOL *is_supported_fonttype,
+        DWRITE_FONT_FILE_TYPE *file_type,
+        DWRITE_FONT_FACE_TYPE *face_type,
+        UINT32 *faces_num);
+
+    END_INTERFACE
+} IDWriteFontFileVtbl;
+
+interface IDWriteFontFile {
+    CONST_VTBL IDWriteFontFileVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFile_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFile methods ***/
+#define IDWriteFontFile_GetReferenceKey(This,key,key_size) (This)->lpVtbl->GetReferenceKey(This,key,key_size)
+#define IDWriteFontFile_GetLoader(This,loader) (This)->lpVtbl->GetLoader(This,loader)
+#define IDWriteFontFile_Analyze(This,is_supported_fonttype,file_type,face_type,faces_num) (This)->lpVtbl->Analyze(This,is_supported_fonttype,file_type,face_type,faces_num)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFile_QueryInterface(IDWriteFontFile* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFile_AddRef(IDWriteFontFile* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFile_Release(IDWriteFontFile* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFile methods ***/
+static FORCEINLINE HRESULT IDWriteFontFile_GetReferenceKey(IDWriteFontFile* This,const void **key,UINT32 *key_size) {
+    return This->lpVtbl->GetReferenceKey(This,key,key_size);
+}
+static FORCEINLINE HRESULT IDWriteFontFile_GetLoader(IDWriteFontFile* This,IDWriteFontFileLoader **loader) {
+    return This->lpVtbl->GetLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFontFile_Analyze(IDWriteFontFile* This,WINBOOL *is_supported_fonttype,DWRITE_FONT_FILE_TYPE *file_type,DWRITE_FONT_FACE_TYPE *face_type,UINT32 *faces_num) {
+    return This->lpVtbl->Analyze(This,is_supported_fonttype,file_type,face_type,faces_num);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFile_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFileEnumerator interface
+ */
+#ifndef __IDWriteFontFileEnumerator_INTERFACE_DEFINED__
+#define __IDWriteFontFileEnumerator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFileEnumerator, 0x72755049, 0x5ff7, 0x435d, 0x83,0x48, 0x4b,0xe9,0x7c,0xfa,0x6c,0x7c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("72755049-5ff7-435d-8348-4be97cfa6c7c")
+IDWriteFontFileEnumerator : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE MoveNext(
+        WINBOOL *has_current_file) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentFontFile(
+        IDWriteFontFile **font_file) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFileEnumerator, 0x72755049, 0x5ff7, 0x435d, 0x83,0x48, 0x4b,0xe9,0x7c,0xfa,0x6c,0x7c)
+#endif
+#else
+typedef struct IDWriteFontFileEnumeratorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFileEnumerator *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFileEnumerator *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFileEnumerator *This);
+
+    /*** IDWriteFontFileEnumerator methods ***/
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        IDWriteFontFileEnumerator *This,
+        WINBOOL *has_current_file);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentFontFile)(
+        IDWriteFontFileEnumerator *This,
+        IDWriteFontFile **font_file);
+
+    END_INTERFACE
+} IDWriteFontFileEnumeratorVtbl;
+
+interface IDWriteFontFileEnumerator {
+    CONST_VTBL IDWriteFontFileEnumeratorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFileEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFileEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFileEnumerator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileEnumerator methods ***/
+#define IDWriteFontFileEnumerator_MoveNext(This,has_current_file) (This)->lpVtbl->MoveNext(This,has_current_file)
+#define IDWriteFontFileEnumerator_GetCurrentFontFile(This,font_file) (This)->lpVtbl->GetCurrentFontFile(This,font_file)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFileEnumerator_QueryInterface(IDWriteFontFileEnumerator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFileEnumerator_AddRef(IDWriteFontFileEnumerator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFileEnumerator_Release(IDWriteFontFileEnumerator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileEnumerator methods ***/
+static FORCEINLINE HRESULT IDWriteFontFileEnumerator_MoveNext(IDWriteFontFileEnumerator* This,WINBOOL *has_current_file) {
+    return This->lpVtbl->MoveNext(This,has_current_file);
+}
+static FORCEINLINE HRESULT IDWriteFontFileEnumerator_GetCurrentFontFile(IDWriteFontFileEnumerator* This,IDWriteFontFile **font_file) {
+    return This->lpVtbl->GetCurrentFontFile(This,font_file);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFileEnumerator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontCollectionLoader interface
+ */
+#ifndef __IDWriteFontCollectionLoader_INTERFACE_DEFINED__
+#define __IDWriteFontCollectionLoader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontCollectionLoader, 0xcca920e4, 0x52f0, 0x492b, 0xbf,0xa8, 0x29,0xc7,0x2e,0xe0,0xa4,0x68);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("cca920e4-52f0-492b-bfa8-29c72ee0a468")
+IDWriteFontCollectionLoader : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateEnumeratorFromKey(
+        IDWriteFactory *factory,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileEnumerator **enumerator) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontCollectionLoader, 0xcca920e4, 0x52f0, 0x492b, 0xbf,0xa8, 0x29,0xc7,0x2e,0xe0,0xa4,0x68)
+#endif
+#else
+typedef struct IDWriteFontCollectionLoaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontCollectionLoader *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontCollectionLoader *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontCollectionLoader *This);
+
+    /*** IDWriteFontCollectionLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateEnumeratorFromKey)(
+        IDWriteFontCollectionLoader *This,
+        IDWriteFactory *factory,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileEnumerator **enumerator);
+
+    END_INTERFACE
+} IDWriteFontCollectionLoaderVtbl;
+
+interface IDWriteFontCollectionLoader {
+    CONST_VTBL IDWriteFontCollectionLoaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontCollectionLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontCollectionLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontCollectionLoader_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontCollectionLoader methods ***/
+#define IDWriteFontCollectionLoader_CreateEnumeratorFromKey(This,factory,key,key_size,enumerator) (This)->lpVtbl->CreateEnumeratorFromKey(This,factory,key,key_size,enumerator)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollectionLoader_QueryInterface(IDWriteFontCollectionLoader* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontCollectionLoader_AddRef(IDWriteFontCollectionLoader* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontCollectionLoader_Release(IDWriteFontCollectionLoader* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontCollectionLoader methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollectionLoader_CreateEnumeratorFromKey(IDWriteFontCollectionLoader* This,IDWriteFactory *factory,const void *key,UINT32 key_size,IDWriteFontFileEnumerator **enumerator) {
+    return This->lpVtbl->CreateEnumeratorFromKey(This,factory,key,key_size,enumerator);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontCollectionLoader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteLocalizedStrings interface
+ */
+#ifndef __IDWriteLocalizedStrings_INTERFACE_DEFINED__
+#define __IDWriteLocalizedStrings_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteLocalizedStrings, 0x08256209, 0x099a, 0x4b34, 0xb8,0x6d, 0xc2,0x2b,0x11,0x0e,0x77,0x71);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("08256209-099a-4b34-b86d-c22b110e7771")
+IDWriteLocalizedStrings : public IUnknown
+{
+    virtual UINT32 STDMETHODCALLTYPE GetCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindLocaleName(
+        const WCHAR *locale_name,
+        UINT32 *index,
+        WINBOOL *exists) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleNameLength(
+        UINT32 index,
+        UINT32 *length) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleName(
+        UINT32 index,
+        WCHAR *locale_name,
+        UINT32 size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStringLength(
+        UINT32 index,
+        UINT32 *length) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetString(
+        UINT32 index,
+        WCHAR *buffer,
+        UINT32 size) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteLocalizedStrings, 0x08256209, 0x099a, 0x4b34, 0xb8,0x6d, 0xc2,0x2b,0x11,0x0e,0x77,0x71)
+#endif
+#else
+typedef struct IDWriteLocalizedStringsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteLocalizedStrings *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteLocalizedStrings *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteLocalizedStrings *This);
+
+    /*** IDWriteLocalizedStrings methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetCount)(
+        IDWriteLocalizedStrings *This);
+
+    HRESULT (STDMETHODCALLTYPE *FindLocaleName)(
+        IDWriteLocalizedStrings *This,
+        const WCHAR *locale_name,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteLocalizedStrings *This,
+        UINT32 index,
+        UINT32 *length);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteLocalizedStrings *This,
+        UINT32 index,
+        WCHAR *locale_name,
+        UINT32 size);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
+        IDWriteLocalizedStrings *This,
+        UINT32 index,
+        UINT32 *length);
+
+    HRESULT (STDMETHODCALLTYPE *GetString)(
+        IDWriteLocalizedStrings *This,
+        UINT32 index,
+        WCHAR *buffer,
+        UINT32 size);
+
+    END_INTERFACE
+} IDWriteLocalizedStringsVtbl;
+
+interface IDWriteLocalizedStrings {
+    CONST_VTBL IDWriteLocalizedStringsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteLocalizedStrings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteLocalizedStrings_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteLocalizedStrings_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteLocalizedStrings methods ***/
+#define IDWriteLocalizedStrings_GetCount(This) (This)->lpVtbl->GetCount(This)
+#define IDWriteLocalizedStrings_FindLocaleName(This,locale_name,index,exists) (This)->lpVtbl->FindLocaleName(This,locale_name,index,exists)
+#define IDWriteLocalizedStrings_GetLocaleNameLength(This,index,length) (This)->lpVtbl->GetLocaleNameLength(This,index,length)
+#define IDWriteLocalizedStrings_GetLocaleName(This,index,locale_name,size) (This)->lpVtbl->GetLocaleName(This,index,locale_name,size)
+#define IDWriteLocalizedStrings_GetStringLength(This,index,length) (This)->lpVtbl->GetStringLength(This,index,length)
+#define IDWriteLocalizedStrings_GetString(This,index,buffer,size) (This)->lpVtbl->GetString(This,index,buffer,size)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteLocalizedStrings_QueryInterface(IDWriteLocalizedStrings* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteLocalizedStrings_AddRef(IDWriteLocalizedStrings* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteLocalizedStrings_Release(IDWriteLocalizedStrings* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteLocalizedStrings methods ***/
+static FORCEINLINE UINT32 IDWriteLocalizedStrings_GetCount(IDWriteLocalizedStrings* This) {
+    return This->lpVtbl->GetCount(This);
+}
+static FORCEINLINE HRESULT IDWriteLocalizedStrings_FindLocaleName(IDWriteLocalizedStrings* This,const WCHAR *locale_name,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindLocaleName(This,locale_name,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteLocalizedStrings_GetLocaleNameLength(IDWriteLocalizedStrings* This,UINT32 index,UINT32 *length) {
+    return This->lpVtbl->GetLocaleNameLength(This,index,length);
+}
+static FORCEINLINE HRESULT IDWriteLocalizedStrings_GetLocaleName(IDWriteLocalizedStrings* This,UINT32 index,WCHAR *locale_name,UINT32 size) {
+    return This->lpVtbl->GetLocaleName(This,index,locale_name,size);
+}
+static FORCEINLINE HRESULT IDWriteLocalizedStrings_GetStringLength(IDWriteLocalizedStrings* This,UINT32 index,UINT32 *length) {
+    return This->lpVtbl->GetStringLength(This,index,length);
+}
+static FORCEINLINE HRESULT IDWriteLocalizedStrings_GetString(IDWriteLocalizedStrings* This,UINT32 index,WCHAR *buffer,UINT32 size) {
+    return This->lpVtbl->GetString(This,index,buffer,size);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteLocalizedStrings_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteRenderingParams interface
+ */
+#ifndef __IDWriteRenderingParams_INTERFACE_DEFINED__
+#define __IDWriteRenderingParams_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteRenderingParams, 0x2f0da53a, 0x2add, 0x47cd, 0x82,0xee, 0xd9,0xec,0x34,0x68,0x8e,0x75);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2f0da53a-2add-47cd-82ee-d9ec34688e75")
+IDWriteRenderingParams : public IUnknown
+{
+    virtual FLOAT STDMETHODCALLTYPE GetGamma(
+        ) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetEnhancedContrast(
+        ) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetClearTypeLevel(
+        ) = 0;
+
+    virtual DWRITE_PIXEL_GEOMETRY STDMETHODCALLTYPE GetPixelGeometry(
+        ) = 0;
+
+    virtual DWRITE_RENDERING_MODE STDMETHODCALLTYPE GetRenderingMode(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteRenderingParams, 0x2f0da53a, 0x2add, 0x47cd, 0x82,0xee, 0xd9,0xec,0x34,0x68,0x8e,0x75)
+#endif
+#else
+typedef struct IDWriteRenderingParamsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteRenderingParams *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteRenderingParams *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteRenderingParams *This);
+
+    /*** IDWriteRenderingParams methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGamma)(
+        IDWriteRenderingParams *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetEnhancedContrast)(
+        IDWriteRenderingParams *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetClearTypeLevel)(
+        IDWriteRenderingParams *This);
+
+    DWRITE_PIXEL_GEOMETRY (STDMETHODCALLTYPE *GetPixelGeometry)(
+        IDWriteRenderingParams *This);
+
+    DWRITE_RENDERING_MODE (STDMETHODCALLTYPE *GetRenderingMode)(
+        IDWriteRenderingParams *This);
+
+    END_INTERFACE
+} IDWriteRenderingParamsVtbl;
+
+interface IDWriteRenderingParams {
+    CONST_VTBL IDWriteRenderingParamsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteRenderingParams_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteRenderingParams_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteRenderingParams_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteRenderingParams methods ***/
+#define IDWriteRenderingParams_GetGamma(This) (This)->lpVtbl->GetGamma(This)
+#define IDWriteRenderingParams_GetEnhancedContrast(This) (This)->lpVtbl->GetEnhancedContrast(This)
+#define IDWriteRenderingParams_GetClearTypeLevel(This) (This)->lpVtbl->GetClearTypeLevel(This)
+#define IDWriteRenderingParams_GetPixelGeometry(This) (This)->lpVtbl->GetPixelGeometry(This)
+#define IDWriteRenderingParams_GetRenderingMode(This) (This)->lpVtbl->GetRenderingMode(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteRenderingParams_QueryInterface(IDWriteRenderingParams* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams_AddRef(IDWriteRenderingParams* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams_Release(IDWriteRenderingParams* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteRenderingParams methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams_GetGamma(IDWriteRenderingParams* This) {
+    return This->lpVtbl->GetGamma(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams_GetEnhancedContrast(IDWriteRenderingParams* This) {
+    return This->lpVtbl->GetEnhancedContrast(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams_GetClearTypeLevel(IDWriteRenderingParams* This) {
+    return This->lpVtbl->GetClearTypeLevel(This);
+}
+static FORCEINLINE DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams_GetPixelGeometry(IDWriteRenderingParams* This) {
+    return This->lpVtbl->GetPixelGeometry(This);
+}
+static FORCEINLINE DWRITE_RENDERING_MODE IDWriteRenderingParams_GetRenderingMode(IDWriteRenderingParams* This) {
+    return This->lpVtbl->GetRenderingMode(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteRenderingParams_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFace interface
+ */
+#ifndef __IDWriteFontFace_INTERFACE_DEFINED__
+#define __IDWriteFontFace_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFace, 0x5f49804d, 0x7024, 0x4d43, 0xbf,0xa9, 0xd2,0x59,0x84,0xf5,0x38,0x49);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5f49804d-7024-4d43-bfa9-d25984f53849")
+IDWriteFontFace : public IUnknown
+{
+    virtual DWRITE_FONT_FACE_TYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFiles(
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetIndex(
+        ) = 0;
+
+    virtual DWRITE_FONT_SIMULATIONS STDMETHODCALLTYPE GetSimulations(
+        ) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsSymbolFont(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE GetMetrics(
+        DWRITE_FONT_METRICS *metrics) = 0;
+
+    virtual UINT16 STDMETHODCALLTYPE GetGlyphCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesignGlyphMetrics(
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways = FALSE) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphIndices(
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TryGetFontTable(
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseFontTable(
+        void *table_context) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphRunOutline(
+        FLOAT emSize,
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRecommendedRenderingMode(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGdiCompatibleMetrics(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGdiCompatibleGlyphMetrics(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways = FALSE) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFace, 0x5f49804d, 0x7024, 0x4d43, 0xbf,0xa9, 0xd2,0x59,0x84,0xf5,0x38,0x49)
+#endif
+#else
+typedef struct IDWriteFontFaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFace *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFace *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFace *This);
+
+    /*** IDWriteFontFace methods ***/
+    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
+        IDWriteFontFace *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFiles)(
+        IDWriteFontFace *This,
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles);
+
+    UINT32 (STDMETHODCALLTYPE *GetIndex)(
+        IDWriteFontFace *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFace *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFontFace *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFontFace *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
+        IDWriteFontFace *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
+        IDWriteFontFace *This,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
+        IDWriteFontFace *This,
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
+        IDWriteFontFace *This,
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists);
+
+    void (STDMETHODCALLTYPE *ReleaseFontTable)(
+        IDWriteFontFace *This,
+        void *table_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
+        IDWriteFontFace *This,
+        FLOAT emSize,
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
+        IDWriteFontFace *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
+        IDWriteFontFace *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
+        IDWriteFontFace *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    END_INTERFACE
+} IDWriteFontFaceVtbl;
+
+interface IDWriteFontFace {
+    CONST_VTBL IDWriteFontFaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFace_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFace_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFace methods ***/
+#define IDWriteFontFace_GetType(This) (This)->lpVtbl->GetType(This)
+#define IDWriteFontFace_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
+#define IDWriteFontFace_GetIndex(This) (This)->lpVtbl->GetIndex(This)
+#define IDWriteFontFace_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFace_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFontFace_GetMetrics(This,metrics) (This)->lpVtbl->GetMetrics(This,metrics)
+#define IDWriteFontFace_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
+#define IDWriteFontFace_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
+#define IDWriteFontFace_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
+#define IDWriteFontFace_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
+#define IDWriteFontFace_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
+#define IDWriteFontFace_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
+#define IDWriteFontFace_GetRecommendedRenderingMode(This,emSize,pixels_per_dip,mode,params,rendering_mode) (This)->lpVtbl->GetRecommendedRenderingMode(This,emSize,pixels_per_dip,mode,params,rendering_mode)
+#define IDWriteFontFace_GetGdiCompatibleMetrics(This,emSize,pixels_per_dip,transform,metrics) (This)->lpVtbl->GetGdiCompatibleMetrics(This,emSize,pixels_per_dip,transform,metrics)
+#define IDWriteFontFace_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace_QueryInterface(IDWriteFontFace* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFace_AddRef(IDWriteFontFace* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFace_Release(IDWriteFontFace* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFace methods ***/
+static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace_GetType(IDWriteFontFace* This) {
+    return This->lpVtbl->GetType(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetFiles(IDWriteFontFace* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
+    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
+}
+static FORCEINLINE UINT32 IDWriteFontFace_GetIndex(IDWriteFontFace* This) {
+    return This->lpVtbl->GetIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace_GetSimulations(IDWriteFontFace* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace_IsSymbolFont(IDWriteFontFace* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE void IDWriteFontFace_GetMetrics(IDWriteFontFace* This,DWRITE_FONT_METRICS *metrics) {
+    This->lpVtbl->GetMetrics(This,metrics);
+}
+static FORCEINLINE UINT16 IDWriteFontFace_GetGlyphCount(IDWriteFontFace* This) {
+    return This->lpVtbl->GetGlyphCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetDesignGlyphMetrics(IDWriteFontFace* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetGlyphIndices(IDWriteFontFace* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
+    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_TryGetFontTable(IDWriteFontFace* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,WINBOOL *exists) {
+    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
+}
+static FORCEINLINE void IDWriteFontFace_ReleaseFontTable(IDWriteFontFace* This,void *table_context) {
+    This->lpVtbl->ReleaseFontTable(This,table_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetGlyphRunOutline(IDWriteFontFace* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,WINBOOL is_sideways,WINBOOL is_rtl,IDWriteGeometrySink *geometrysink) {
+    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetRecommendedRenderingMode(IDWriteFontFace* This,FLOAT emSize,FLOAT pixels_per_dip,DWRITE_MEASURING_MODE mode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE *rendering_mode) {
+    return This->lpVtbl->GetRecommendedRenderingMode(This,emSize,pixels_per_dip,mode,params,rendering_mode);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetGdiCompatibleMetrics(IDWriteFontFace* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS *metrics) {
+    return This->lpVtbl->GetGdiCompatibleMetrics(This,emSize,pixels_per_dip,transform,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace_GetGdiCompatibleGlyphMetrics(IDWriteFontFace* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFace_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFont interface
+ */
+#ifndef __IDWriteFont_INTERFACE_DEFINED__
+#define __IDWriteFont_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFont, 0xacd16696, 0x8c14, 0x4f5d, 0x87,0x7e, 0xfe,0x3f,0xc1,0xd3,0x27,0x37);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("acd16696-8c14-4f5d-877e-fe3fc1d32737")
+IDWriteFont : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamily(
+        IDWriteFontFamily **family) = 0;
+
+    virtual DWRITE_FONT_WEIGHT STDMETHODCALLTYPE GetWeight(
+        ) = 0;
+
+    virtual DWRITE_FONT_STRETCH STDMETHODCALLTYPE GetStretch(
+        ) = 0;
+
+    virtual DWRITE_FONT_STYLE STDMETHODCALLTYPE GetStyle(
+        ) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsSymbolFont(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFaceNames(
+        IDWriteLocalizedStrings **names) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInformationalStrings(
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists) = 0;
+
+    virtual DWRITE_FONT_SIMULATIONS STDMETHODCALLTYPE GetSimulations(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE GetMetrics(
+        DWRITE_FONT_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HasCharacter(
+        UINT32 value,
+        WINBOOL *exists) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        IDWriteFontFace **face) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFont, 0xacd16696, 0x8c14, 0x4f5d, 0x87,0x7e, 0xfe,0x3f,0xc1,0xd3,0x27,0x37)
+#endif
+#else
+typedef struct IDWriteFontVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFont *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFont *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFont *This);
+
+    /*** IDWriteFont methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFont *This,
+        IDWriteFontFamily **family);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFont *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFont *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFont *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFont *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFont *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFont *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFont *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFont *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFont *This,
+        UINT32 value,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFont *This,
+        IDWriteFontFace **face);
+
+    END_INTERFACE
+} IDWriteFontVtbl;
+
+interface IDWriteFont {
+    CONST_VTBL IDWriteFontVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFont_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFont_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFont_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFont methods ***/
+#define IDWriteFont_GetFontFamily(This,family) (This)->lpVtbl->GetFontFamily(This,family)
+#define IDWriteFont_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFont_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFont_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFont_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFont_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFont_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFont_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFont_GetMetrics(This,metrics) (This)->lpVtbl->GetMetrics(This,metrics)
+#define IDWriteFont_HasCharacter(This,value,exists) (This)->lpVtbl->HasCharacter(This,value,exists)
+#define IDWriteFont_CreateFontFace(This,face) (This)->lpVtbl->CreateFontFace(This,face)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFont_QueryInterface(IDWriteFont* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFont_AddRef(IDWriteFont* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFont_Release(IDWriteFont* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFont methods ***/
+static FORCEINLINE HRESULT IDWriteFont_GetFontFamily(IDWriteFont* This,IDWriteFontFamily **family) {
+    return This->lpVtbl->GetFontFamily(This,family);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFont_GetWeight(IDWriteFont* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFont_GetStretch(IDWriteFont* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFont_GetStyle(IDWriteFont* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE WINBOOL IDWriteFont_IsSymbolFont(IDWriteFont* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFont_GetFaceNames(IDWriteFont* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFont_GetInformationalStrings(IDWriteFont* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFont_GetSimulations(IDWriteFont* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE void IDWriteFont_GetMetrics(IDWriteFont* This,DWRITE_FONT_METRICS *metrics) {
+    This->lpVtbl->GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFont_HasCharacter(IDWriteFont* This,UINT32 value,WINBOOL *exists) {
+    return This->lpVtbl->HasCharacter(This,value,exists);
+}
+static FORCEINLINE HRESULT IDWriteFont_CreateFontFace(IDWriteFont* This,IDWriteFontFace **face) {
+    return This->lpVtbl->CreateFontFace(This,face);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFont_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontList interface
+ */
+#ifndef __IDWriteFontList_INTERFACE_DEFINED__
+#define __IDWriteFontList_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontList, 0x1a0d8438, 0x1d97, 0x4ec1, 0xae,0xf9, 0xa2,0xfb,0x86,0xed,0x6a,0xcb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb")
+IDWriteFontList : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontCollection(
+        IDWriteFontCollection **collection) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFont(
+        UINT32 index,
+        IDWriteFont **font) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontList, 0x1a0d8438, 0x1d97, 0x4ec1, 0xae,0xf9, 0xa2,0xfb,0x86,0xed,0x6a,0xcb)
+#endif
+#else
+typedef struct IDWriteFontListVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontList *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontList *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontList *This);
+
+    /*** IDWriteFontList methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteFontList *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontList *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFont)(
+        IDWriteFontList *This,
+        UINT32 index,
+        IDWriteFont **font);
+
+    END_INTERFACE
+} IDWriteFontListVtbl;
+
+interface IDWriteFontList {
+    CONST_VTBL IDWriteFontListVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontList_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontList_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontList methods ***/
+#define IDWriteFontList_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteFontList_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+#define IDWriteFontList_GetFont(This,index,font) (This)->lpVtbl->GetFont(This,index,font)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontList_QueryInterface(IDWriteFontList* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontList_AddRef(IDWriteFontList* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontList_Release(IDWriteFontList* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontList methods ***/
+static FORCEINLINE HRESULT IDWriteFontList_GetFontCollection(IDWriteFontList* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteFontList_GetFontCount(IDWriteFontList* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontList_GetFont(IDWriteFontList* This,UINT32 index,IDWriteFont **font) {
+    return This->lpVtbl->GetFont(This,index,font);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontList_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFamily interface
+ */
+#ifndef __IDWriteFontFamily_INTERFACE_DEFINED__
+#define __IDWriteFontFamily_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFamily, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xdd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("da20d8ef-812a-4c43-9802-62ec4abd7add")
+IDWriteFontFamily : public IDWriteFontList
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFamilyNames(
+        IDWriteLocalizedStrings **names) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFirstMatchingFont(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFont **font) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontList **fonts) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFamily, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xdd)
+#endif
+#else
+typedef struct IDWriteFontFamilyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFamily *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFamily *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFamily *This);
+
+    /*** IDWriteFontList methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteFontFamily *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontFamily *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFont)(
+        IDWriteFontFamily *This,
+        UINT32 index,
+        IDWriteFont **font);
+
+    /*** IDWriteFontFamily methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
+        IDWriteFontFamily *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstMatchingFont)(
+        IDWriteFontFamily *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFont **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontFamily *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontList **fonts);
+
+    END_INTERFACE
+} IDWriteFontFamilyVtbl;
+
+interface IDWriteFontFamily {
+    CONST_VTBL IDWriteFontFamilyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFamily_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFamily_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFamily_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontList methods ***/
+#define IDWriteFontFamily_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteFontFamily_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+#define IDWriteFontFamily_GetFont(This,index,font) (This)->lpVtbl->GetFont(This,index,font)
+/*** IDWriteFontFamily methods ***/
+#define IDWriteFontFamily_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
+#define IDWriteFontFamily_GetFirstMatchingFont(This,weight,stretch,style,font) (This)->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font)
+#define IDWriteFontFamily_GetMatchingFonts(This,weight,stretch,style,fonts) (This)->lpVtbl->GetMatchingFonts(This,weight,stretch,style,fonts)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily_QueryInterface(IDWriteFontFamily* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFamily_AddRef(IDWriteFontFamily* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFamily_Release(IDWriteFontFamily* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontList methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily_GetFontCollection(IDWriteFontFamily* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteFontFamily_GetFontCount(IDWriteFontFamily* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily_GetFont(IDWriteFontFamily* This,UINT32 index,IDWriteFont **font) {
+    return This->lpVtbl->GetFont(This,index,font);
+}
+/*** IDWriteFontFamily methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily_GetFamilyNames(IDWriteFontFamily* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFamilyNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily_GetFirstMatchingFont(IDWriteFontFamily* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFont **font) {
+    return This->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily_GetMatchingFonts(IDWriteFontFamily* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontList **fonts) {
+    return This->lpVtbl->GetMatchingFonts(This,weight,stretch,style,fonts);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFamily_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontCollection interface
+ */
+#ifndef __IDWriteFontCollection_INTERFACE_DEFINED__
+#define __IDWriteFontCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontCollection, 0xa84cee02, 0x3eea, 0x4eee, 0xa8,0x27, 0x87,0xc1,0xa0,0x2a,0x0f,0xcc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a84cee02-3eea-4eee-a827-87c1a02a0fcc")
+IDWriteFontCollection : public IUnknown
+{
+    virtual UINT32 STDMETHODCALLTYPE GetFontFamilyCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamily(
+        UINT32 index,
+        IDWriteFontFamily **family) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindFamilyName(
+        const WCHAR *name,
+        UINT32 *index,
+        WINBOOL *exists) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFromFontFace(
+        IDWriteFontFace *face,
+        IDWriteFont **font) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontCollection, 0xa84cee02, 0x3eea, 0x4eee, 0xa8,0x27, 0x87,0xc1,0xa0,0x2a,0x0f,0xcc)
+#endif
+#else
+typedef struct IDWriteFontCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontCollection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontCollection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontCollection *This);
+
+    /*** IDWriteFontCollection methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyCount)(
+        IDWriteFontCollection *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFontCollection *This,
+        UINT32 index,
+        IDWriteFontFamily **family);
+
+    HRESULT (STDMETHODCALLTYPE *FindFamilyName)(
+        IDWriteFontCollection *This,
+        const WCHAR *name,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFromFontFace)(
+        IDWriteFontCollection *This,
+        IDWriteFontFace *face,
+        IDWriteFont **font);
+
+    END_INTERFACE
+} IDWriteFontCollectionVtbl;
+
+interface IDWriteFontCollection {
+    CONST_VTBL IDWriteFontCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontCollection methods ***/
+#define IDWriteFontCollection_GetFontFamilyCount(This) (This)->lpVtbl->GetFontFamilyCount(This)
+#define IDWriteFontCollection_GetFontFamily(This,index,family) (This)->lpVtbl->GetFontFamily(This,index,family)
+#define IDWriteFontCollection_FindFamilyName(This,name,index,exists) (This)->lpVtbl->FindFamilyName(This,name,index,exists)
+#define IDWriteFontCollection_GetFontFromFontFace(This,face,font) (This)->lpVtbl->GetFontFromFontFace(This,face,font)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection_QueryInterface(IDWriteFontCollection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontCollection_AddRef(IDWriteFontCollection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontCollection_Release(IDWriteFontCollection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontCollection methods ***/
+static FORCEINLINE UINT32 IDWriteFontCollection_GetFontFamilyCount(IDWriteFontCollection* This) {
+    return This->lpVtbl->GetFontFamilyCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection_GetFontFamily(IDWriteFontCollection* This,UINT32 index,IDWriteFontFamily **family) {
+    return This->lpVtbl->GetFontFamily(This,index,family);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection_FindFamilyName(IDWriteFontCollection* This,const WCHAR *name,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFamilyName(This,name,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection_GetFontFromFontFace(IDWriteFontCollection* This,IDWriteFontFace *face,IDWriteFont **font) {
+    return This->lpVtbl->GetFontFromFontFace(This,face,font);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWritePixelSnapping interface
+ */
+#ifndef __IDWritePixelSnapping_INTERFACE_DEFINED__
+#define __IDWritePixelSnapping_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWritePixelSnapping, 0xeaf3a2da, 0xecf4, 0x4d24, 0xb6,0x44, 0xb3,0x4f,0x68,0x42,0x02,0x4b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("eaf3a2da-ecf4-4d24-b644-b34f6842024b")
+IDWritePixelSnapping : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE IsPixelSnappingDisabled(
+        void *client_drawingcontext,
+        WINBOOL *disabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentTransform(
+        void *client_drawingcontext,
+        DWRITE_MATRIX *transform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelsPerDip(
+        void *client_drawingcontext,
+        FLOAT *pixels_per_dip) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWritePixelSnapping, 0xeaf3a2da, 0xecf4, 0x4d24, 0xb6,0x44, 0xb3,0x4f,0x68,0x42,0x02,0x4b)
+#endif
+#else
+typedef struct IDWritePixelSnappingVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWritePixelSnapping *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWritePixelSnapping *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWritePixelSnapping *This);
+
+    /*** IDWritePixelSnapping methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsPixelSnappingDisabled)(
+        IDWritePixelSnapping *This,
+        void *client_drawingcontext,
+        WINBOOL *disabled);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTransform)(
+        IDWritePixelSnapping *This,
+        void *client_drawingcontext,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelsPerDip)(
+        IDWritePixelSnapping *This,
+        void *client_drawingcontext,
+        FLOAT *pixels_per_dip);
+
+    END_INTERFACE
+} IDWritePixelSnappingVtbl;
+
+interface IDWritePixelSnapping {
+    CONST_VTBL IDWritePixelSnappingVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWritePixelSnapping_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWritePixelSnapping_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWritePixelSnapping_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWritePixelSnapping methods ***/
+#define IDWritePixelSnapping_IsPixelSnappingDisabled(This,client_drawingcontext,disabled) (This)->lpVtbl->IsPixelSnappingDisabled(This,client_drawingcontext,disabled)
+#define IDWritePixelSnapping_GetCurrentTransform(This,client_drawingcontext,transform) (This)->lpVtbl->GetCurrentTransform(This,client_drawingcontext,transform)
+#define IDWritePixelSnapping_GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip) (This)->lpVtbl->GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWritePixelSnapping_QueryInterface(IDWritePixelSnapping* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWritePixelSnapping_AddRef(IDWritePixelSnapping* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWritePixelSnapping_Release(IDWritePixelSnapping* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWritePixelSnapping methods ***/
+static FORCEINLINE HRESULT IDWritePixelSnapping_IsPixelSnappingDisabled(IDWritePixelSnapping* This,void *client_drawingcontext,WINBOOL *disabled) {
+    return This->lpVtbl->IsPixelSnappingDisabled(This,client_drawingcontext,disabled);
+}
+static FORCEINLINE HRESULT IDWritePixelSnapping_GetCurrentTransform(IDWritePixelSnapping* This,void *client_drawingcontext,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->GetCurrentTransform(This,client_drawingcontext,transform);
+}
+static FORCEINLINE HRESULT IDWritePixelSnapping_GetPixelsPerDip(IDWritePixelSnapping* This,void *client_drawingcontext,FLOAT *pixels_per_dip) {
+    return This->lpVtbl->GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWritePixelSnapping_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextRenderer interface
+ */
+#ifndef __IDWriteTextRenderer_INTERFACE_DEFINED__
+#define __IDWriteTextRenderer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextRenderer, 0xef8a8135, 0x5cc6, 0x45fe, 0x88,0x25, 0xc5,0xa0,0x72,0x4e,0xb8,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ef8a8135-5cc6-45fe-8825-c5a0724eb819")
+IDWriteTextRenderer : public IDWritePixelSnapping
+{
+    virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_descr,
+        IUnknown *drawing_effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawUnderline(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        const DWRITE_UNDERLINE *underline,
+        IUnknown *drawing_effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawStrikethrough(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        const DWRITE_STRIKETHROUGH *strikethrough,
+        IUnknown *drawing_effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawInlineObject(
+        void *client_drawingcontext,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteInlineObject *object,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *drawing_effect) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextRenderer, 0xef8a8135, 0x5cc6, 0x45fe, 0x88,0x25, 0xc5,0xa0,0x72,0x4e,0xb8,0x19)
+#endif
+#else
+typedef struct IDWriteTextRendererVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextRenderer *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextRenderer *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextRenderer *This);
+
+    /*** IDWritePixelSnapping methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsPixelSnappingDisabled)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        WINBOOL *disabled);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTransform)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelsPerDip)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        FLOAT *pixels_per_dip);
+
+    /*** IDWriteTextRenderer methods ***/
+    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_descr,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *DrawUnderline)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        const DWRITE_UNDERLINE *underline,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *DrawStrikethrough)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        const DWRITE_STRIKETHROUGH *strikethrough,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *DrawInlineObject)(
+        IDWriteTextRenderer *This,
+        void *client_drawingcontext,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteInlineObject *object,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *drawing_effect);
+
+    END_INTERFACE
+} IDWriteTextRendererVtbl;
+
+interface IDWriteTextRenderer {
+    CONST_VTBL IDWriteTextRendererVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextRenderer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextRenderer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextRenderer_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWritePixelSnapping methods ***/
+#define IDWriteTextRenderer_IsPixelSnappingDisabled(This,client_drawingcontext,disabled) (This)->lpVtbl->IsPixelSnappingDisabled(This,client_drawingcontext,disabled)
+#define IDWriteTextRenderer_GetCurrentTransform(This,client_drawingcontext,transform) (This)->lpVtbl->GetCurrentTransform(This,client_drawingcontext,transform)
+#define IDWriteTextRenderer_GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip) (This)->lpVtbl->GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip)
+/*** IDWriteTextRenderer methods ***/
+#define IDWriteTextRenderer_DrawGlyphRun(This,client_drawingcontext,baselineOriginX,baselineOriginY,mode,glyph_run,run_descr,drawing_effect) (This)->lpVtbl->DrawGlyphRun(This,client_drawingcontext,baselineOriginX,baselineOriginY,mode,glyph_run,run_descr,drawing_effect)
+#define IDWriteTextRenderer_DrawUnderline(This,client_drawingcontext,baselineOriginX,baselineOriginY,underline,drawing_effect) (This)->lpVtbl->DrawUnderline(This,client_drawingcontext,baselineOriginX,baselineOriginY,underline,drawing_effect)
+#define IDWriteTextRenderer_DrawStrikethrough(This,client_drawingcontext,baselineOriginX,baselineOriginY,strikethrough,drawing_effect) (This)->lpVtbl->DrawStrikethrough(This,client_drawingcontext,baselineOriginX,baselineOriginY,strikethrough,drawing_effect)
+#define IDWriteTextRenderer_DrawInlineObject(This,client_drawingcontext,originX,originY,object,is_sideways,is_rtl,drawing_effect) (This)->lpVtbl->DrawInlineObject(This,client_drawingcontext,originX,originY,object,is_sideways,is_rtl,drawing_effect)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextRenderer_QueryInterface(IDWriteTextRenderer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextRenderer_AddRef(IDWriteTextRenderer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextRenderer_Release(IDWriteTextRenderer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWritePixelSnapping methods ***/
+static FORCEINLINE HRESULT IDWriteTextRenderer_IsPixelSnappingDisabled(IDWriteTextRenderer* This,void *client_drawingcontext,WINBOOL *disabled) {
+    return This->lpVtbl->IsPixelSnappingDisabled(This,client_drawingcontext,disabled);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer_GetCurrentTransform(IDWriteTextRenderer* This,void *client_drawingcontext,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->GetCurrentTransform(This,client_drawingcontext,transform);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer_GetPixelsPerDip(IDWriteTextRenderer* This,void *client_drawingcontext,FLOAT *pixels_per_dip) {
+    return This->lpVtbl->GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip);
+}
+/*** IDWriteTextRenderer methods ***/
+static FORCEINLINE HRESULT IDWriteTextRenderer_DrawGlyphRun(IDWriteTextRenderer* This,void *client_drawingcontext,FLOAT baselineOriginX,FLOAT baselineOriginY,DWRITE_MEASURING_MODE mode,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_descr,IUnknown *drawing_effect) {
+    return This->lpVtbl->DrawGlyphRun(This,client_drawingcontext,baselineOriginX,baselineOriginY,mode,glyph_run,run_descr,drawing_effect);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer_DrawUnderline(IDWriteTextRenderer* This,void *client_drawingcontext,FLOAT baselineOriginX,FLOAT baselineOriginY,const DWRITE_UNDERLINE *underline,IUnknown *drawing_effect) {
+    return This->lpVtbl->DrawUnderline(This,client_drawingcontext,baselineOriginX,baselineOriginY,underline,drawing_effect);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer_DrawStrikethrough(IDWriteTextRenderer* This,void *client_drawingcontext,FLOAT baselineOriginX,FLOAT baselineOriginY,const DWRITE_STRIKETHROUGH *strikethrough,IUnknown *drawing_effect) {
+    return This->lpVtbl->DrawStrikethrough(This,client_drawingcontext,baselineOriginX,baselineOriginY,strikethrough,drawing_effect);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer_DrawInlineObject(IDWriteTextRenderer* This,void *client_drawingcontext,FLOAT originX,FLOAT originY,IDWriteInlineObject *object,WINBOOL is_sideways,WINBOOL is_rtl,IUnknown *drawing_effect) {
+    return This->lpVtbl->DrawInlineObject(This,client_drawingcontext,originX,originY,object,is_sideways,is_rtl,drawing_effect);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextRenderer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteInlineObject interface
+ */
+#ifndef __IDWriteInlineObject_INTERFACE_DEFINED__
+#define __IDWriteInlineObject_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteInlineObject, 0x8339fde3, 0x106f, 0x47ab, 0x83,0x73, 0x1c,0x62,0x95,0xeb,0x10,0xb3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8339fde3-106f-47ab-8373-1c6295eb10b3")
+IDWriteInlineObject : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Draw(
+        void *client_drawingontext,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *drawing_effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMetrics(
+        DWRITE_INLINE_OBJECT_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOverhangMetrics(
+        DWRITE_OVERHANG_METRICS *overhangs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBreakConditions(
+        DWRITE_BREAK_CONDITION *condition_before,
+        DWRITE_BREAK_CONDITION *condition_after) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteInlineObject, 0x8339fde3, 0x106f, 0x47ab, 0x83,0x73, 0x1c,0x62,0x95,0xeb,0x10,0xb3)
+#endif
+#else
+typedef struct IDWriteInlineObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteInlineObject *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteInlineObject *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteInlineObject *This);
+
+    /*** IDWriteInlineObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IDWriteInlineObject *This,
+        void *client_drawingontext,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteInlineObject *This,
+        DWRITE_INLINE_OBJECT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
+        IDWriteInlineObject *This,
+        DWRITE_OVERHANG_METRICS *overhangs);
+
+    HRESULT (STDMETHODCALLTYPE *GetBreakConditions)(
+        IDWriteInlineObject *This,
+        DWRITE_BREAK_CONDITION *condition_before,
+        DWRITE_BREAK_CONDITION *condition_after);
+
+    END_INTERFACE
+} IDWriteInlineObjectVtbl;
+
+interface IDWriteInlineObject {
+    CONST_VTBL IDWriteInlineObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteInlineObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteInlineObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteInlineObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteInlineObject methods ***/
+#define IDWriteInlineObject_Draw(This,client_drawingontext,renderer,originX,originY,is_sideways,is_rtl,drawing_effect) (This)->lpVtbl->Draw(This,client_drawingontext,renderer,originX,originY,is_sideways,is_rtl,drawing_effect)
+#define IDWriteInlineObject_GetMetrics(This,metrics) (This)->lpVtbl->GetMetrics(This,metrics)
+#define IDWriteInlineObject_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
+#define IDWriteInlineObject_GetBreakConditions(This,condition_before,condition_after) (This)->lpVtbl->GetBreakConditions(This,condition_before,condition_after)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteInlineObject_QueryInterface(IDWriteInlineObject* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteInlineObject_AddRef(IDWriteInlineObject* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteInlineObject_Release(IDWriteInlineObject* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteInlineObject methods ***/
+static FORCEINLINE HRESULT IDWriteInlineObject_Draw(IDWriteInlineObject* This,void *client_drawingontext,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY,WINBOOL is_sideways,WINBOOL is_rtl,IUnknown *drawing_effect) {
+    return This->lpVtbl->Draw(This,client_drawingontext,renderer,originX,originY,is_sideways,is_rtl,drawing_effect);
+}
+static FORCEINLINE HRESULT IDWriteInlineObject_GetMetrics(IDWriteInlineObject* This,DWRITE_INLINE_OBJECT_METRICS *metrics) {
+    return This->lpVtbl->GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteInlineObject_GetOverhangMetrics(IDWriteInlineObject* This,DWRITE_OVERHANG_METRICS *overhangs) {
+    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
+}
+static FORCEINLINE HRESULT IDWriteInlineObject_GetBreakConditions(IDWriteInlineObject* This,DWRITE_BREAK_CONDITION *condition_before,DWRITE_BREAK_CONDITION *condition_after) {
+    return This->lpVtbl->GetBreakConditions(This,condition_before,condition_after);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteInlineObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextFormat interface
+ */
+#ifndef __IDWriteTextFormat_INTERFACE_DEFINED__
+#define __IDWriteTextFormat_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextFormat, 0x9c906818, 0x31d7, 0x4fd3, 0xa1,0x51, 0x7c,0x5e,0x22,0x5d,0xb5,0x5a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9c906818-31d7-4fd3-a151-7c5e225db55a")
+IDWriteTextFormat : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetTextAlignment(
+        DWRITE_TEXT_ALIGNMENT alignment) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetParagraphAlignment(
+        DWRITE_PARAGRAPH_ALIGNMENT alignment) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetWordWrapping(
+        DWRITE_WORD_WRAPPING wrapping) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetReadingDirection(
+        DWRITE_READING_DIRECTION direction) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFlowDirection(
+        DWRITE_FLOW_DIRECTION direction) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIncrementalTabStop(
+        FLOAT tabstop) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTrimming(
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLineSpacing(
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline) = 0;
+
+    virtual DWRITE_TEXT_ALIGNMENT STDMETHODCALLTYPE GetTextAlignment(
+        ) = 0;
+
+    virtual DWRITE_PARAGRAPH_ALIGNMENT STDMETHODCALLTYPE GetParagraphAlignment(
+        ) = 0;
+
+    virtual DWRITE_WORD_WRAPPING STDMETHODCALLTYPE GetWordWrapping(
+        ) = 0;
+
+    virtual DWRITE_READING_DIRECTION STDMETHODCALLTYPE GetReadingDirection(
+        ) = 0;
+
+    virtual DWRITE_FLOW_DIRECTION STDMETHODCALLTYPE GetFlowDirection(
+        ) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetIncrementalTabStop(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTrimming(
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLineSpacing(
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontCollection(
+        IDWriteFontCollection **collection) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontFamilyNameLength(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamilyName(
+        WCHAR *name,
+        UINT32 size) = 0;
+
+    virtual DWRITE_FONT_WEIGHT STDMETHODCALLTYPE GetFontWeight(
+        ) = 0;
+
+    virtual DWRITE_FONT_STYLE STDMETHODCALLTYPE GetFontStyle(
+        ) = 0;
+
+    virtual DWRITE_FONT_STRETCH STDMETHODCALLTYPE GetFontStretch(
+        ) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetFontSize(
+        ) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetLocaleNameLength(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleName(
+        WCHAR *name,
+        UINT32 size) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextFormat, 0x9c906818, 0x31d7, 0x4fd3, 0xa1,0x51, 0x7c,0x5e,0x22,0x5d,0xb5,0x5a)
+#endif
+#else
+typedef struct IDWriteTextFormatVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextFormat *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextFormat *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextFormat *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextFormat *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextFormat *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextFormat *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextFormat *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextFormat *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextFormat *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextFormat *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextFormat *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextFormat *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextFormat *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextFormat *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextFormat *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextFormat *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextFormat *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextFormat *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextFormat *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextFormat *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextFormat *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextFormat *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextFormat *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextFormat *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextFormat *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextFormat *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextFormat *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextFormat *This,
+        WCHAR *name,
+        UINT32 size);
+
+    END_INTERFACE
+} IDWriteTextFormatVtbl;
+
+interface IDWriteTextFormat {
+    CONST_VTBL IDWriteTextFormatVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextFormat_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextFormat_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextFormat_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextFormat_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextFormat_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextFormat_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextFormat_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextFormat_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextFormat_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextFormat_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextFormat_SetLineSpacing(This,spacing,line_spacing,baseline) (This)->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline)
+#define IDWriteTextFormat_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextFormat_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextFormat_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextFormat_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextFormat_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextFormat_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextFormat_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextFormat_GetLineSpacing(This,method,spacing,baseline) (This)->lpVtbl->GetLineSpacing(This,method,spacing,baseline)
+#define IDWriteTextFormat_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteTextFormat_GetFontFamilyNameLength(This) (This)->lpVtbl->GetFontFamilyNameLength(This)
+#define IDWriteTextFormat_GetFontFamilyName(This,name,size) (This)->lpVtbl->GetFontFamilyName(This,name,size)
+#define IDWriteTextFormat_GetFontWeight(This) (This)->lpVtbl->GetFontWeight(This)
+#define IDWriteTextFormat_GetFontStyle(This) (This)->lpVtbl->GetFontStyle(This)
+#define IDWriteTextFormat_GetFontStretch(This) (This)->lpVtbl->GetFontStretch(This)
+#define IDWriteTextFormat_GetFontSize(This) (This)->lpVtbl->GetFontSize(This)
+#define IDWriteTextFormat_GetLocaleNameLength(This) (This)->lpVtbl->GetLocaleNameLength(This)
+#define IDWriteTextFormat_GetLocaleName(This,name,size) (This)->lpVtbl->GetLocaleName(This,name,size)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat_QueryInterface(IDWriteTextFormat* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextFormat_AddRef(IDWriteTextFormat* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextFormat_Release(IDWriteTextFormat* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat_SetTextAlignment(IDWriteTextFormat* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetParagraphAlignment(IDWriteTextFormat* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetWordWrapping(IDWriteTextFormat* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetReadingDirection(IDWriteTextFormat* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetFlowDirection(IDWriteTextFormat* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetIncrementalTabStop(IDWriteTextFormat* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetTrimming(IDWriteTextFormat* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_SetLineSpacing(IDWriteTextFormat* This,DWRITE_LINE_SPACING_METHOD spacing,FLOAT line_spacing,FLOAT baseline) {
+    return This->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextFormat_GetTextAlignment(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat_GetParagraphAlignment(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextFormat_GetWordWrapping(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextFormat_GetReadingDirection(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextFormat_GetFlowDirection(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat_GetIncrementalTabStop(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_GetTrimming(IDWriteTextFormat* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_GetLineSpacing(IDWriteTextFormat* This,DWRITE_LINE_SPACING_METHOD *method,FLOAT *spacing,FLOAT *baseline) {
+    return This->lpVtbl->GetLineSpacing(This,method,spacing,baseline);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_GetFontCollection(IDWriteTextFormat* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat_GetFontFamilyNameLength(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetFontFamilyNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_GetFontFamilyName(IDWriteTextFormat* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetFontFamilyName(This,name,size);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteTextFormat_GetFontWeight(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetFontWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteTextFormat_GetFontStyle(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetFontStyle(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteTextFormat_GetFontStretch(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetFontStretch(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat_GetFontSize(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetFontSize(This);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat_GetLocaleNameLength(IDWriteTextFormat* This) {
+    return This->lpVtbl->GetLocaleNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat_GetLocaleName(IDWriteTextFormat* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetLocaleName(This,name,size);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextFormat_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTypography interface
+ */
+#ifndef __IDWriteTypography_INTERFACE_DEFINED__
+#define __IDWriteTypography_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTypography, 0x55f1112b, 0x1dc2, 0x4b3c, 0x95,0x41, 0xf4,0x68,0x94,0xed,0x85,0xb6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("55f1112b-1dc2-4b3c-9541-f46894ed85b6")
+IDWriteTypography : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddFontFeature(
+        DWRITE_FONT_FEATURE feature) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontFeatureCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFeature(
+        UINT32 index,
+        DWRITE_FONT_FEATURE *feature) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTypography, 0x55f1112b, 0x1dc2, 0x4b3c, 0x95,0x41, 0xf4,0x68,0x94,0xed,0x85,0xb6)
+#endif
+#else
+typedef struct IDWriteTypographyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTypography *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTypography *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTypography *This);
+
+    /*** IDWriteTypography methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFontFeature)(
+        IDWriteTypography *This,
+        DWRITE_FONT_FEATURE feature);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFeatureCount)(
+        IDWriteTypography *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFeature)(
+        IDWriteTypography *This,
+        UINT32 index,
+        DWRITE_FONT_FEATURE *feature);
+
+    END_INTERFACE
+} IDWriteTypographyVtbl;
+
+interface IDWriteTypography {
+    CONST_VTBL IDWriteTypographyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTypography_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTypography_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTypography_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTypography methods ***/
+#define IDWriteTypography_AddFontFeature(This,feature) (This)->lpVtbl->AddFontFeature(This,feature)
+#define IDWriteTypography_GetFontFeatureCount(This) (This)->lpVtbl->GetFontFeatureCount(This)
+#define IDWriteTypography_GetFontFeature(This,index,feature) (This)->lpVtbl->GetFontFeature(This,index,feature)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTypography_QueryInterface(IDWriteTypography* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTypography_AddRef(IDWriteTypography* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTypography_Release(IDWriteTypography* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTypography methods ***/
+static FORCEINLINE HRESULT IDWriteTypography_AddFontFeature(IDWriteTypography* This,DWRITE_FONT_FEATURE feature) {
+    return This->lpVtbl->AddFontFeature(This,feature);
+}
+static FORCEINLINE UINT32 IDWriteTypography_GetFontFeatureCount(IDWriteTypography* This) {
+    return This->lpVtbl->GetFontFeatureCount(This);
+}
+static FORCEINLINE HRESULT IDWriteTypography_GetFontFeature(IDWriteTypography* This,UINT32 index,DWRITE_FONT_FEATURE *feature) {
+    return This->lpVtbl->GetFontFeature(This,index,feature);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTypography_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteBitmapRenderTarget interface
+ */
+#ifndef __IDWriteBitmapRenderTarget_INTERFACE_DEFINED__
+#define __IDWriteBitmapRenderTarget_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteBitmapRenderTarget, 0x5e5a32a3, 0x8dff, 0x4773, 0x9f,0xf6, 0x06,0x96,0xea,0xb7,0x72,0x67);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5e5a32a3-8dff-4773-9ff6-0696eab77267")
+IDWriteBitmapRenderTarget : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        IDWriteRenderingParams *params,
+        COLORREF textColor,
+        RECT *blackbox_rect = 0) = 0;
+
+    virtual HDC STDMETHODCALLTYPE GetMemoryDC(
+        ) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetPixelsPerDip(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelsPerDip(
+        FLOAT pixels_per_dip) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentTransform(
+        DWRITE_MATRIX *transform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCurrentTransform(
+        const DWRITE_MATRIX *transform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSize(
+        SIZE *size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Resize(
+        UINT32 width,
+        UINT32 height) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteBitmapRenderTarget, 0x5e5a32a3, 0x8dff, 0x4773, 0x9f,0xf6, 0x06,0x96,0xea,0xb7,0x72,0x67)
+#endif
+#else
+typedef struct IDWriteBitmapRenderTargetVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteBitmapRenderTarget *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteBitmapRenderTarget *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteBitmapRenderTarget *This);
+
+    /*** IDWriteBitmapRenderTarget methods ***/
+    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
+        IDWriteBitmapRenderTarget *This,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        IDWriteRenderingParams *params,
+        COLORREF textColor,
+        RECT *blackbox_rect);
+
+    HDC (STDMETHODCALLTYPE *GetMemoryDC)(
+        IDWriteBitmapRenderTarget *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetPixelsPerDip)(
+        IDWriteBitmapRenderTarget *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelsPerDip)(
+        IDWriteBitmapRenderTarget *This,
+        FLOAT pixels_per_dip);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTransform)(
+        IDWriteBitmapRenderTarget *This,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *SetCurrentTransform)(
+        IDWriteBitmapRenderTarget *This,
+        const DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetSize)(
+        IDWriteBitmapRenderTarget *This,
+        SIZE *size);
+
+    HRESULT (STDMETHODCALLTYPE *Resize)(
+        IDWriteBitmapRenderTarget *This,
+        UINT32 width,
+        UINT32 height);
+
+    END_INTERFACE
+} IDWriteBitmapRenderTargetVtbl;
+
+interface IDWriteBitmapRenderTarget {
+    CONST_VTBL IDWriteBitmapRenderTargetVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteBitmapRenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteBitmapRenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteBitmapRenderTarget_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteBitmapRenderTarget methods ***/
+#define IDWriteBitmapRenderTarget_DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuring_mode,glyph_run,params,textColor,blackbox_rect) (This)->lpVtbl->DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuring_mode,glyph_run,params,textColor,blackbox_rect)
+#define IDWriteBitmapRenderTarget_GetMemoryDC(This) (This)->lpVtbl->GetMemoryDC(This)
+#define IDWriteBitmapRenderTarget_GetPixelsPerDip(This) (This)->lpVtbl->GetPixelsPerDip(This)
+#define IDWriteBitmapRenderTarget_SetPixelsPerDip(This,pixels_per_dip) (This)->lpVtbl->SetPixelsPerDip(This,pixels_per_dip)
+#define IDWriteBitmapRenderTarget_GetCurrentTransform(This,transform) (This)->lpVtbl->GetCurrentTransform(This,transform)
+#define IDWriteBitmapRenderTarget_SetCurrentTransform(This,transform) (This)->lpVtbl->SetCurrentTransform(This,transform)
+#define IDWriteBitmapRenderTarget_GetSize(This,size) (This)->lpVtbl->GetSize(This,size)
+#define IDWriteBitmapRenderTarget_Resize(This,width,height) (This)->lpVtbl->Resize(This,width,height)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_QueryInterface(IDWriteBitmapRenderTarget* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteBitmapRenderTarget_AddRef(IDWriteBitmapRenderTarget* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteBitmapRenderTarget_Release(IDWriteBitmapRenderTarget* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteBitmapRenderTarget methods ***/
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_DrawGlyphRun(IDWriteBitmapRenderTarget* This,FLOAT baselineOriginX,FLOAT baselineOriginY,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_GLYPH_RUN *glyph_run,IDWriteRenderingParams *params,COLORREF textColor,RECT *blackbox_rect) {
+    return This->lpVtbl->DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuring_mode,glyph_run,params,textColor,blackbox_rect);
+}
+static FORCEINLINE HDC IDWriteBitmapRenderTarget_GetMemoryDC(IDWriteBitmapRenderTarget* This) {
+    return This->lpVtbl->GetMemoryDC(This);
+}
+static FORCEINLINE FLOAT IDWriteBitmapRenderTarget_GetPixelsPerDip(IDWriteBitmapRenderTarget* This) {
+    return This->lpVtbl->GetPixelsPerDip(This);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_SetPixelsPerDip(IDWriteBitmapRenderTarget* This,FLOAT pixels_per_dip) {
+    return This->lpVtbl->SetPixelsPerDip(This,pixels_per_dip);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_GetCurrentTransform(IDWriteBitmapRenderTarget* This,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->GetCurrentTransform(This,transform);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_SetCurrentTransform(IDWriteBitmapRenderTarget* This,const DWRITE_MATRIX *transform) {
+    return This->lpVtbl->SetCurrentTransform(This,transform);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_GetSize(IDWriteBitmapRenderTarget* This,SIZE *size) {
+    return This->lpVtbl->GetSize(This,size);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget_Resize(IDWriteBitmapRenderTarget* This,UINT32 width,UINT32 height) {
+    return This->lpVtbl->Resize(This,width,height);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteBitmapRenderTarget_INTERFACE_DEFINED__ */
+
+#ifndef _WINGDI_
+typedef struct tagLOGFONTW {
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    BYTE lfItalic;
+    BYTE lfUnderline;
+    BYTE lfStrikeOut;
+    BYTE lfCharSet;
+    BYTE lfOutPrecision;
+    BYTE lfClipPrecision;
+    BYTE lfQuality;
+    BYTE lfPitchAndFamily;
+    WCHAR lfFaceName[32];
+} LOGFONTW;
+typedef struct tagLOGFONTW *PLOGFONTW;
+typedef struct tagLOGFONTW *LPLOGFONTW;
+#endif /* _WINGDI_ */
+/*****************************************************************************
+ * IDWriteGdiInterop interface
+ */
+#ifndef __IDWriteGdiInterop_INTERFACE_DEFINED__
+#define __IDWriteGdiInterop_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteGdiInterop, 0x1edd9491, 0x9853, 0x4299, 0x89,0x8f, 0x64,0x32,0x98,0x3b,0x6f,0x3a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1edd9491-9853-4299-898f-6432983b6f3a")
+IDWriteGdiInterop : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFromLOGFONT(
+        const LOGFONTW *logfont,
+        IDWriteFont **font) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ConvertFontToLOGFONT(
+        IDWriteFont *font,
+        LOGFONTW *logfont,
+        WINBOOL *is_systemfont) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ConvertFontFaceToLOGFONT(
+        IDWriteFontFace *font,
+        LOGFONTW *logfont) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceFromHdc(
+        HDC hdc,
+        IDWriteFontFace **fontface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateBitmapRenderTarget(
+        HDC hdc,
+        UINT32 width,
+        UINT32 height,
+        IDWriteBitmapRenderTarget **target) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteGdiInterop, 0x1edd9491, 0x9853, 0x4299, 0x89,0x8f, 0x64,0x32,0x98,0x3b,0x6f,0x3a)
+#endif
+#else
+typedef struct IDWriteGdiInteropVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteGdiInterop *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteGdiInterop *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteGdiInterop *This);
+
+    /*** IDWriteGdiInterop methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateFontFromLOGFONT)(
+        IDWriteGdiInterop *This,
+        const LOGFONTW *logfont,
+        IDWriteFont **font);
+
+    HRESULT (STDMETHODCALLTYPE *ConvertFontToLOGFONT)(
+        IDWriteGdiInterop *This,
+        IDWriteFont *font,
+        LOGFONTW *logfont,
+        WINBOOL *is_systemfont);
+
+    HRESULT (STDMETHODCALLTYPE *ConvertFontFaceToLOGFONT)(
+        IDWriteGdiInterop *This,
+        IDWriteFontFace *font,
+        LOGFONTW *logfont);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceFromHdc)(
+        IDWriteGdiInterop *This,
+        HDC hdc,
+        IDWriteFontFace **fontface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateBitmapRenderTarget)(
+        IDWriteGdiInterop *This,
+        HDC hdc,
+        UINT32 width,
+        UINT32 height,
+        IDWriteBitmapRenderTarget **target);
+
+    END_INTERFACE
+} IDWriteGdiInteropVtbl;
+
+interface IDWriteGdiInterop {
+    CONST_VTBL IDWriteGdiInteropVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteGdiInterop_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteGdiInterop_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteGdiInterop_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteGdiInterop methods ***/
+#define IDWriteGdiInterop_CreateFontFromLOGFONT(This,logfont,font) (This)->lpVtbl->CreateFontFromLOGFONT(This,logfont,font)
+#define IDWriteGdiInterop_ConvertFontToLOGFONT(This,font,logfont,is_systemfont) (This)->lpVtbl->ConvertFontToLOGFONT(This,font,logfont,is_systemfont)
+#define IDWriteGdiInterop_ConvertFontFaceToLOGFONT(This,font,logfont) (This)->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logfont)
+#define IDWriteGdiInterop_CreateFontFaceFromHdc(This,hdc,fontface) (This)->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontface)
+#define IDWriteGdiInterop_CreateBitmapRenderTarget(This,hdc,width,height,target) (This)->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,target)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteGdiInterop_QueryInterface(IDWriteGdiInterop* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteGdiInterop_AddRef(IDWriteGdiInterop* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteGdiInterop_Release(IDWriteGdiInterop* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteGdiInterop methods ***/
+static FORCEINLINE HRESULT IDWriteGdiInterop_CreateFontFromLOGFONT(IDWriteGdiInterop* This,const LOGFONTW *logfont,IDWriteFont **font) {
+    return This->lpVtbl->CreateFontFromLOGFONT(This,logfont,font);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop_ConvertFontToLOGFONT(IDWriteGdiInterop* This,IDWriteFont *font,LOGFONTW *logfont,WINBOOL *is_systemfont) {
+    return This->lpVtbl->ConvertFontToLOGFONT(This,font,logfont,is_systemfont);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop_ConvertFontFaceToLOGFONT(IDWriteGdiInterop* This,IDWriteFontFace *font,LOGFONTW *logfont) {
+    return This->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logfont);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop_CreateFontFaceFromHdc(IDWriteGdiInterop* This,HDC hdc,IDWriteFontFace **fontface) {
+    return This->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontface);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop_CreateBitmapRenderTarget(IDWriteGdiInterop* This,HDC hdc,UINT32 width,UINT32 height,IDWriteBitmapRenderTarget **target) {
+    return This->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,target);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteGdiInterop_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextLayout interface
+ */
+#ifndef __IDWriteTextLayout_INTERFACE_DEFINED__
+#define __IDWriteTextLayout_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextLayout, 0x53737037, 0x6d14, 0x410b, 0x9b,0xfe, 0x0b,0x18,0x2b,0xb7,0x09,0x61);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("53737037-6d14-410b-9bfe-0b182bb70961")
+IDWriteTextLayout : public IDWriteTextFormat
+{
+    virtual HRESULT STDMETHODCALLTYPE SetMaxWidth(
+        FLOAT maxWidth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMaxHeight(
+        FLOAT maxHeight) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontCollection(
+        IDWriteFontCollection *collection,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontFamilyName(
+        const WCHAR *name,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontWeight(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontStyle(
+        DWRITE_FONT_STYLE style,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontStretch(
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontSize(
+        FLOAT size,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetUnderline(
+        WINBOOL underline,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStrikethrough(
+        WINBOOL strikethrough,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDrawingEffect(
+        IUnknown *effect,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetInlineObject(
+        IDWriteInlineObject *object,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTypography(
+        IDWriteTypography *typography,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLocaleName(
+        const WCHAR *locale,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetMaxWidth(
+        ) = 0;
+
+    virtual FLOAT STDMETHODCALLTYPE GetMaxHeight(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontCollection(
+        UINT32 pos,
+        IDWriteFontCollection **collection,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamilyNameLength(
+        UINT32 pos,
+        UINT32 *len,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamilyName(
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontWeight(
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontStyle(
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontStretch(
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontSize(
+        UINT32 position,
+        FLOAT *size,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUnderline(
+        UINT32 position,
+        WINBOOL *has_underline,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStrikethrough(
+        UINT32 position,
+        WINBOOL *has_strikethrough,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDrawingEffect(
+        UINT32 position,
+        IUnknown **effect,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInlineObject(
+        UINT32 position,
+        IDWriteInlineObject **object,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypography(
+        UINT32 position,
+        IDWriteTypography **typography,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleNameLength(
+        UINT32 position,
+        UINT32 *length,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleName(
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Draw(
+        void *context,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLineMetrics(
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMetrics(
+        DWRITE_TEXT_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOverhangMetrics(
+        DWRITE_OVERHANG_METRICS *overhangs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClusterMetrics(
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *act_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DetermineMinWidth(
+        FLOAT *min_width) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestPoint(
+        FLOAT pointX,
+        FLOAT pointY,
+        WINBOOL *is_trailinghit,
+        WINBOOL *is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestTextPosition(
+        UINT32 textPosition,
+        WINBOOL is_trailinghit,
+        FLOAT *pointX,
+        FLOAT *pointY,
+        DWRITE_HIT_TEST_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HitTestTextRange(
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32 *actual_metricscount) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextLayout, 0x53737037, 0x6d14, 0x410b, 0x9b,0xfe, 0x0b,0x18,0x2b,0xb7,0x09,0x61)
+#endif
+#else
+typedef struct IDWriteTextLayoutVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextLayout *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextLayout *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextLayout *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextLayout *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextLayout *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextLayout *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextLayout *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextLayout *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextLayout *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextLayout *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextLayout *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextLayout *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextLayout *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextLayout *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextLayout *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextLayout *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextLayout *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextLayout *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextLayout *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextLayout *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextLayout *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextLayout *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextLayout *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextLayout *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextLayout *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextLayout *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextLayout *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextLayout *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextLayout methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetMaxWidth)(
+        IDWriteTextLayout *This,
+        FLOAT maxWidth);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaxHeight)(
+        IDWriteTextLayout *This,
+        FLOAT maxHeight);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontCollection)(
+        IDWriteTextLayout *This,
+        IDWriteFontCollection *collection,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFamilyName)(
+        IDWriteTextLayout *This,
+        const WCHAR *name,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontWeight)(
+        IDWriteTextLayout *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStyle)(
+        IDWriteTextLayout *This,
+        DWRITE_FONT_STYLE style,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStretch)(
+        IDWriteTextLayout *This,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontSize)(
+        IDWriteTextLayout *This,
+        FLOAT size,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnderline)(
+        IDWriteTextLayout *This,
+        WINBOOL underline,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetStrikethrough)(
+        IDWriteTextLayout *This,
+        WINBOOL strikethrough,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetDrawingEffect)(
+        IDWriteTextLayout *This,
+        IUnknown *effect,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(
+        IDWriteTextLayout *This,
+        IDWriteInlineObject *object,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypography)(
+        IDWriteTextLayout *This,
+        IDWriteTypography *typography,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetLocaleName)(
+        IDWriteTextLayout *This,
+        const WCHAR *locale,
+        DWRITE_TEXT_RANGE range);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxWidth)(
+        IDWriteTextLayout *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxHeight)(
+        IDWriteTextLayout *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontCollection)(
+        IDWriteTextLayout *This,
+        UINT32 pos,
+        IDWriteFontCollection **collection,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyNameLength)(
+        IDWriteTextLayout *This,
+        UINT32 pos,
+        UINT32 *len,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyName)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontWeight)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStyle)(
+        IDWriteTextLayout *This,
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStretch)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontSize)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        FLOAT *size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnderline)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        WINBOOL *has_underline,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrikethrough)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        WINBOOL *has_strikethrough,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetDrawingEffect)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        IUnknown **effect,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        IDWriteInlineObject **object,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypography)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        IDWriteTypography **typography,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleNameLength)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        UINT32 *length,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleName)(
+        IDWriteTextLayout *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IDWriteTextLayout *This,
+        void *context,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineMetrics)(
+        IDWriteTextLayout *This,
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteTextLayout *This,
+        DWRITE_TEXT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
+        IDWriteTextLayout *This,
+        DWRITE_OVERHANG_METRICS *overhangs);
+
+    HRESULT (STDMETHODCALLTYPE *GetClusterMetrics)(
+        IDWriteTextLayout *This,
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *act_count);
+
+    HRESULT (STDMETHODCALLTYPE *DetermineMinWidth)(
+        IDWriteTextLayout *This,
+        FLOAT *min_width);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestPoint)(
+        IDWriteTextLayout *This,
+        FLOAT pointX,
+        FLOAT pointY,
+        WINBOOL *is_trailinghit,
+        WINBOOL *is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextPosition)(
+        IDWriteTextLayout *This,
+        UINT32 textPosition,
+        WINBOOL is_trailinghit,
+        FLOAT *pointX,
+        FLOAT *pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextRange)(
+        IDWriteTextLayout *This,
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32 *actual_metricscount);
+
+    END_INTERFACE
+} IDWriteTextLayoutVtbl;
+
+interface IDWriteTextLayout {
+    CONST_VTBL IDWriteTextLayoutVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextLayout_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextLayout_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextLayout_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextLayout_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextLayout_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextLayout_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextLayout_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextLayout_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextLayout_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextLayout_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextLayout_SetLineSpacing(This,spacing,line_spacing,baseline) (This)->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline)
+#define IDWriteTextLayout_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextLayout_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextLayout_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextLayout_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextLayout_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextLayout_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextLayout_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextLayout_GetLineSpacing(This,method,spacing,baseline) (This)->lpVtbl->GetLineSpacing(This,method,spacing,baseline)
+/*** IDWriteTextLayout methods ***/
+#define IDWriteTextLayout_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
+#define IDWriteTextLayout_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
+#define IDWriteTextLayout_SetFontCollection(This,collection,range) (This)->lpVtbl->SetFontCollection(This,collection,range)
+#define IDWriteTextLayout_SetFontFamilyName(This,name,range) (This)->lpVtbl->SetFontFamilyName(This,name,range)
+#define IDWriteTextLayout_SetFontWeight(This,weight,range) (This)->lpVtbl->SetFontWeight(This,weight,range)
+#define IDWriteTextLayout_SetFontStyle(This,style,range) (This)->lpVtbl->SetFontStyle(This,style,range)
+#define IDWriteTextLayout_SetFontStretch(This,stretch,range) (This)->lpVtbl->SetFontStretch(This,stretch,range)
+#define IDWriteTextLayout_SetFontSize(This,size,range) (This)->lpVtbl->SetFontSize(This,size,range)
+#define IDWriteTextLayout_SetUnderline(This,underline,range) (This)->lpVtbl->SetUnderline(This,underline,range)
+#define IDWriteTextLayout_SetStrikethrough(This,strikethrough,range) (This)->lpVtbl->SetStrikethrough(This,strikethrough,range)
+#define IDWriteTextLayout_SetDrawingEffect(This,effect,range) (This)->lpVtbl->SetDrawingEffect(This,effect,range)
+#define IDWriteTextLayout_SetInlineObject(This,object,range) (This)->lpVtbl->SetInlineObject(This,object,range)
+#define IDWriteTextLayout_SetTypography(This,typography,range) (This)->lpVtbl->SetTypography(This,typography,range)
+#define IDWriteTextLayout_SetLocaleName(This,locale,range) (This)->lpVtbl->SetLocaleName(This,locale,range)
+#define IDWriteTextLayout_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
+#define IDWriteTextLayout_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
+#define IDWriteTextLayout_GetFontCollection(This,pos,collection,range) (This)->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range)
+#define IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range)
+#define IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range)
+#define IDWriteTextLayout_GetFontWeight(This,position,weight,range) (This)->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range)
+#define IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range)
+#define IDWriteTextLayout_GetFontStretch(This,position,stretch,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range)
+#define IDWriteTextLayout_GetFontSize(This,position,size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range)
+#define IDWriteTextLayout_GetUnderline(This,position,has_underline,range) (This)->lpVtbl->GetUnderline(This,position,has_underline,range)
+#define IDWriteTextLayout_GetStrikethrough(This,position,has_strikethrough,range) (This)->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range)
+#define IDWriteTextLayout_GetDrawingEffect(This,position,effect,range) (This)->lpVtbl->GetDrawingEffect(This,position,effect,range)
+#define IDWriteTextLayout_GetInlineObject(This,position,object,range) (This)->lpVtbl->GetInlineObject(This,position,object,range)
+#define IDWriteTextLayout_GetTypography(This,position,typography,range) (This)->lpVtbl->GetTypography(This,position,typography,range)
+#define IDWriteTextLayout_GetLocaleNameLength(This,position,length,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range)
+#define IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range)
+#define IDWriteTextLayout_Draw(This,context,renderer,originX,originY) (This)->lpVtbl->Draw(This,context,renderer,originX,originY)
+#define IDWriteTextLayout_GetLineMetrics(This,metrics,max_count,actual_count) (This)->lpVtbl->GetLineMetrics(This,metrics,max_count,actual_count)
+#define IDWriteTextLayout_GetMetrics(This,metrics) (This)->lpVtbl->GetMetrics(This,metrics)
+#define IDWriteTextLayout_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
+#define IDWriteTextLayout_GetClusterMetrics(This,metrics,max_count,act_count) (This)->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count)
+#define IDWriteTextLayout_DetermineMinWidth(This,min_width) (This)->lpVtbl->DetermineMinWidth(This,min_width)
+#define IDWriteTextLayout_HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics)
+#define IDWriteTextLayout_HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics)
+#define IDWriteTextLayout_HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout_QueryInterface(IDWriteTextLayout* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextLayout_AddRef(IDWriteTextLayout* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextLayout_Release(IDWriteTextLayout* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout_SetTextAlignment(IDWriteTextLayout* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetParagraphAlignment(IDWriteTextLayout* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetWordWrapping(IDWriteTextLayout* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetReadingDirection(IDWriteTextLayout* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFlowDirection(IDWriteTextLayout* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetIncrementalTabStop(IDWriteTextLayout* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetTrimming(IDWriteTextLayout* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetLineSpacing(IDWriteTextLayout* This,DWRITE_LINE_SPACING_METHOD spacing,FLOAT line_spacing,FLOAT baseline) {
+    return This->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextLayout_GetTextAlignment(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextLayout_GetParagraphAlignment(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextLayout_GetWordWrapping(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextLayout_GetReadingDirection(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextLayout_GetFlowDirection(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout_GetIncrementalTabStop(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetTrimming(IDWriteTextLayout* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetLineSpacing(IDWriteTextLayout* This,DWRITE_LINE_SPACING_METHOD *method,FLOAT *spacing,FLOAT *baseline) {
+    return This->lpVtbl->GetLineSpacing(This,method,spacing,baseline);
+}
+/*** IDWriteTextLayout methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout_SetMaxWidth(IDWriteTextLayout* This,FLOAT maxWidth) {
+    return This->lpVtbl->SetMaxWidth(This,maxWidth);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetMaxHeight(IDWriteTextLayout* This,FLOAT maxHeight) {
+    return This->lpVtbl->SetMaxHeight(This,maxHeight);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFontCollection(IDWriteTextLayout* This,IDWriteFontCollection *collection,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontCollection(This,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFontFamilyName(IDWriteTextLayout* This,const WCHAR *name,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontFamilyName(This,name,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFontWeight(IDWriteTextLayout* This,DWRITE_FONT_WEIGHT weight,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontWeight(This,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFontStyle(IDWriteTextLayout* This,DWRITE_FONT_STYLE style,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStyle(This,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFontStretch(IDWriteTextLayout* This,DWRITE_FONT_STRETCH stretch,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStretch(This,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetFontSize(IDWriteTextLayout* This,FLOAT size,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontSize(This,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetUnderline(IDWriteTextLayout* This,WINBOOL underline,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetUnderline(This,underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetStrikethrough(IDWriteTextLayout* This,WINBOOL strikethrough,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetStrikethrough(This,strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetDrawingEffect(IDWriteTextLayout* This,IUnknown *effect,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetDrawingEffect(This,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetInlineObject(IDWriteTextLayout* This,IDWriteInlineObject *object,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetInlineObject(This,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetTypography(IDWriteTextLayout* This,IDWriteTypography *typography,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetTypography(This,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_SetLocaleName(IDWriteTextLayout* This,const WCHAR *locale,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetLocaleName(This,locale,range);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout_GetMaxWidth(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetMaxWidth(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout_GetMaxHeight(IDWriteTextLayout* This) {
+    return This->lpVtbl->GetMaxHeight(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontCollection(IDWriteTextLayout* This,UINT32 pos,IDWriteFontCollection **collection,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontFamilyNameLength(IDWriteTextLayout* This,UINT32 pos,UINT32 *len,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontFamilyName(IDWriteTextLayout* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontWeight(IDWriteTextLayout* This,UINT32 position,DWRITE_FONT_WEIGHT *weight,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontStyle(IDWriteTextLayout* This,UINT32 currentPosition,DWRITE_FONT_STYLE *style,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontStretch(IDWriteTextLayout* This,UINT32 position,DWRITE_FONT_STRETCH *stretch,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetFontSize(IDWriteTextLayout* This,UINT32 position,FLOAT *size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetUnderline(IDWriteTextLayout* This,UINT32 position,WINBOOL *has_underline,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetUnderline(This,position,has_underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetStrikethrough(IDWriteTextLayout* This,UINT32 position,WINBOOL *has_strikethrough,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetDrawingEffect(IDWriteTextLayout* This,UINT32 position,IUnknown **effect,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetDrawingEffect(This,position,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetInlineObject(IDWriteTextLayout* This,UINT32 position,IDWriteInlineObject **object,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetInlineObject(This,position,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetTypography(IDWriteTextLayout* This,UINT32 position,IDWriteTypography **typography,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetTypography(This,position,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetLocaleNameLength(IDWriteTextLayout* This,UINT32 position,UINT32 *length,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetLocaleName(IDWriteTextLayout* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_Draw(IDWriteTextLayout* This,void *context,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY) {
+    return This->lpVtbl->Draw(This,context,renderer,originX,originY);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetLineMetrics(IDWriteTextLayout* This,DWRITE_LINE_METRICS *metrics,UINT32 max_count,UINT32 *actual_count) {
+    return This->lpVtbl->GetLineMetrics(This,metrics,max_count,actual_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetMetrics(IDWriteTextLayout* This,DWRITE_TEXT_METRICS *metrics) {
+    return This->lpVtbl->GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetOverhangMetrics(IDWriteTextLayout* This,DWRITE_OVERHANG_METRICS *overhangs) {
+    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_GetClusterMetrics(IDWriteTextLayout* This,DWRITE_CLUSTER_METRICS *metrics,UINT32 max_count,UINT32 *act_count) {
+    return This->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_DetermineMinWidth(IDWriteTextLayout* This,FLOAT *min_width) {
+    return This->lpVtbl->DetermineMinWidth(This,min_width);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_HitTestPoint(IDWriteTextLayout* This,FLOAT pointX,FLOAT pointY,WINBOOL *is_trailinghit,WINBOOL *is_inside,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_HitTestTextPosition(IDWriteTextLayout* This,UINT32 textPosition,WINBOOL is_trailinghit,FLOAT *pointX,FLOAT *pointY,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout_HitTestTextRange(IDWriteTextLayout* This,UINT32 textPosition,UINT32 textLength,FLOAT originX,FLOAT originY,DWRITE_HIT_TEST_METRICS *metrics,UINT32 max_metricscount,UINT32 *actual_metricscount) {
+    return This->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextLayout_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteNumberSubstitution interface
+ */
+#ifndef __IDWriteNumberSubstitution_INTERFACE_DEFINED__
+#define __IDWriteNumberSubstitution_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteNumberSubstitution, 0x14885cc9, 0xbab0, 0x4f90, 0xb6,0xed, 0x5c,0x36,0x6a,0x2c,0xd0,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("14885cc9-bab0-4f90-b6ed-5c366a2cd03d")
+IDWriteNumberSubstitution : public IUnknown
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteNumberSubstitution, 0x14885cc9, 0xbab0, 0x4f90, 0xb6,0xed, 0x5c,0x36,0x6a,0x2c,0xd0,0x3d)
+#endif
+#else
+typedef struct IDWriteNumberSubstitutionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteNumberSubstitution *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteNumberSubstitution *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteNumberSubstitution *This);
+
+    END_INTERFACE
+} IDWriteNumberSubstitutionVtbl;
+
+interface IDWriteNumberSubstitution {
+    CONST_VTBL IDWriteNumberSubstitutionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteNumberSubstitution_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteNumberSubstitution_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteNumberSubstitution_Release(This) (This)->lpVtbl->Release(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteNumberSubstitution_QueryInterface(IDWriteNumberSubstitution* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteNumberSubstitution_AddRef(IDWriteNumberSubstitution* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteNumberSubstitution_Release(IDWriteNumberSubstitution* This) {
+    return This->lpVtbl->Release(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteNumberSubstitution_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalysisSource interface
+ */
+#ifndef __IDWriteTextAnalysisSource_INTERFACE_DEFINED__
+#define __IDWriteTextAnalysisSource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalysisSource, 0x688e1a58, 0x5094, 0x47c8, 0xad,0xc8, 0xfb,0xce,0xa6,0x0a,0xe9,0x2b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("688e1a58-5094-47c8-adc8-fbcea60ae92b")
+IDWriteTextAnalysisSource : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetTextAtPosition(
+        UINT32 position,
+        const WCHAR **text,
+        UINT32 *text_len) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextBeforePosition(
+        UINT32 position,
+        const WCHAR **text,
+        UINT32 *text_len) = 0;
+
+    virtual DWRITE_READING_DIRECTION STDMETHODCALLTYPE GetParagraphReadingDirection(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleName(
+        UINT32 position,
+        UINT32 *text_len,
+        const WCHAR **locale) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNumberSubstitution(
+        UINT32 position,
+        UINT32 *text_len,
+        IDWriteNumberSubstitution **substitution) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalysisSource, 0x688e1a58, 0x5094, 0x47c8, 0xad,0xc8, 0xfb,0xce,0xa6,0x0a,0xe9,0x2b)
+#endif
+#else
+typedef struct IDWriteTextAnalysisSourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalysisSource *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalysisSource *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalysisSource *This);
+
+    /*** IDWriteTextAnalysisSource methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTextAtPosition)(
+        IDWriteTextAnalysisSource *This,
+        UINT32 position,
+        const WCHAR **text,
+        UINT32 *text_len);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextBeforePosition)(
+        IDWriteTextAnalysisSource *This,
+        UINT32 position,
+        const WCHAR **text,
+        UINT32 *text_len);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetParagraphReadingDirection)(
+        IDWriteTextAnalysisSource *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextAnalysisSource *This,
+        UINT32 position,
+        UINT32 *text_len,
+        const WCHAR **locale);
+
+    HRESULT (STDMETHODCALLTYPE *GetNumberSubstitution)(
+        IDWriteTextAnalysisSource *This,
+        UINT32 position,
+        UINT32 *text_len,
+        IDWriteNumberSubstitution **substitution);
+
+    END_INTERFACE
+} IDWriteTextAnalysisSourceVtbl;
+
+interface IDWriteTextAnalysisSource {
+    CONST_VTBL IDWriteTextAnalysisSourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalysisSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalysisSource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalysisSource_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalysisSource methods ***/
+#define IDWriteTextAnalysisSource_GetTextAtPosition(This,position,text,text_len) (This)->lpVtbl->GetTextAtPosition(This,position,text,text_len)
+#define IDWriteTextAnalysisSource_GetTextBeforePosition(This,position,text,text_len) (This)->lpVtbl->GetTextBeforePosition(This,position,text,text_len)
+#define IDWriteTextAnalysisSource_GetParagraphReadingDirection(This) (This)->lpVtbl->GetParagraphReadingDirection(This)
+#define IDWriteTextAnalysisSource_GetLocaleName(This,position,text_len,locale) (This)->lpVtbl->GetLocaleName(This,position,text_len,locale)
+#define IDWriteTextAnalysisSource_GetNumberSubstitution(This,position,text_len,substitution) (This)->lpVtbl->GetNumberSubstitution(This,position,text_len,substitution)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource_QueryInterface(IDWriteTextAnalysisSource* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSource_AddRef(IDWriteTextAnalysisSource* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSource_Release(IDWriteTextAnalysisSource* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalysisSource methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource_GetTextAtPosition(IDWriteTextAnalysisSource* This,UINT32 position,const WCHAR **text,UINT32 *text_len) {
+    return This->lpVtbl->GetTextAtPosition(This,position,text,text_len);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource_GetTextBeforePosition(IDWriteTextAnalysisSource* This,UINT32 position,const WCHAR **text,UINT32 *text_len) {
+    return This->lpVtbl->GetTextBeforePosition(This,position,text,text_len);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextAnalysisSource_GetParagraphReadingDirection(IDWriteTextAnalysisSource* This) {
+    return This->lpVtbl->GetParagraphReadingDirection(This);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource_GetLocaleName(IDWriteTextAnalysisSource* This,UINT32 position,UINT32 *text_len,const WCHAR **locale) {
+    return This->lpVtbl->GetLocaleName(This,position,text_len,locale);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource_GetNumberSubstitution(IDWriteTextAnalysisSource* This,UINT32 position,UINT32 *text_len,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->GetNumberSubstitution(This,position,text_len,substitution);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalysisSource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalysisSink interface
+ */
+#ifndef __IDWriteTextAnalysisSink_INTERFACE_DEFINED__
+#define __IDWriteTextAnalysisSink_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalysisSink, 0x5810cd44, 0x0ca0, 0x4701, 0xb3,0xfa, 0xbe,0xc5,0x18,0x2a,0xe4,0xf6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5810cd44-0ca0-4701-b3fa-bec5182ae4f6")
+IDWriteTextAnalysisSink : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetScriptAnalysis(
+        UINT32 position,
+        UINT32 length,
+        const DWRITE_SCRIPT_ANALYSIS *scriptanalysis) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLineBreakpoints(
+        UINT32 position,
+        UINT32 length,
+        const DWRITE_LINE_BREAKPOINT *breakpoints) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBidiLevel(
+        UINT32 position,
+        UINT32 length,
+        UINT8 explicitLevel,
+        UINT8 resolvedLevel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetNumberSubstitution(
+        UINT32 position,
+        UINT32 length,
+        IDWriteNumberSubstitution *substitution) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalysisSink, 0x5810cd44, 0x0ca0, 0x4701, 0xb3,0xfa, 0xbe,0xc5,0x18,0x2a,0xe4,0xf6)
+#endif
+#else
+typedef struct IDWriteTextAnalysisSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalysisSink *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalysisSink *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalysisSink *This);
+
+    /*** IDWriteTextAnalysisSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetScriptAnalysis)(
+        IDWriteTextAnalysisSink *This,
+        UINT32 position,
+        UINT32 length,
+        const DWRITE_SCRIPT_ANALYSIS *scriptanalysis);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineBreakpoints)(
+        IDWriteTextAnalysisSink *This,
+        UINT32 position,
+        UINT32 length,
+        const DWRITE_LINE_BREAKPOINT *breakpoints);
+
+    HRESULT (STDMETHODCALLTYPE *SetBidiLevel)(
+        IDWriteTextAnalysisSink *This,
+        UINT32 position,
+        UINT32 length,
+        UINT8 explicitLevel,
+        UINT8 resolvedLevel);
+
+    HRESULT (STDMETHODCALLTYPE *SetNumberSubstitution)(
+        IDWriteTextAnalysisSink *This,
+        UINT32 position,
+        UINT32 length,
+        IDWriteNumberSubstitution *substitution);
+
+    END_INTERFACE
+} IDWriteTextAnalysisSinkVtbl;
+
+interface IDWriteTextAnalysisSink {
+    CONST_VTBL IDWriteTextAnalysisSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalysisSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalysisSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalysisSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalysisSink methods ***/
+#define IDWriteTextAnalysisSink_SetScriptAnalysis(This,position,length,scriptanalysis) (This)->lpVtbl->SetScriptAnalysis(This,position,length,scriptanalysis)
+#define IDWriteTextAnalysisSink_SetLineBreakpoints(This,position,length,breakpoints) (This)->lpVtbl->SetLineBreakpoints(This,position,length,breakpoints)
+#define IDWriteTextAnalysisSink_SetBidiLevel(This,position,length,explicitLevel,resolvedLevel) (This)->lpVtbl->SetBidiLevel(This,position,length,explicitLevel,resolvedLevel)
+#define IDWriteTextAnalysisSink_SetNumberSubstitution(This,position,length,substitution) (This)->lpVtbl->SetNumberSubstitution(This,position,length,substitution)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink_QueryInterface(IDWriteTextAnalysisSink* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSink_AddRef(IDWriteTextAnalysisSink* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSink_Release(IDWriteTextAnalysisSink* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalysisSink methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink_SetScriptAnalysis(IDWriteTextAnalysisSink* This,UINT32 position,UINT32 length,const DWRITE_SCRIPT_ANALYSIS *scriptanalysis) {
+    return This->lpVtbl->SetScriptAnalysis(This,position,length,scriptanalysis);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink_SetLineBreakpoints(IDWriteTextAnalysisSink* This,UINT32 position,UINT32 length,const DWRITE_LINE_BREAKPOINT *breakpoints) {
+    return This->lpVtbl->SetLineBreakpoints(This,position,length,breakpoints);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink_SetBidiLevel(IDWriteTextAnalysisSink* This,UINT32 position,UINT32 length,UINT8 explicitLevel,UINT8 resolvedLevel) {
+    return This->lpVtbl->SetBidiLevel(This,position,length,explicitLevel,resolvedLevel);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink_SetNumberSubstitution(IDWriteTextAnalysisSink* This,UINT32 position,UINT32 length,IDWriteNumberSubstitution *substitution) {
+    return This->lpVtbl->SetNumberSubstitution(This,position,length,substitution);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalysisSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalyzer interface
+ */
+#ifndef __IDWriteTextAnalyzer_INTERFACE_DEFINED__
+#define __IDWriteTextAnalyzer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalyzer, 0xb7e6163e, 0x7f46, 0x43b4, 0x84,0xb3, 0xe4,0xe6,0x24,0x9c,0x36,0x5d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b7e6163e-7f46-43b4-84b3-e4e6249c365d")
+IDWriteTextAnalyzer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AnalyzeScript(
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AnalyzeBidi(
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AnalyzeNumberSubstitution(
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AnalyzeLineBreakpoints(
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphs(
+        const WCHAR *text,
+        UINT32 length,
+        IDWriteFontFace *font_face,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        IDWriteNumberSubstitution *substitution,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        UINT32 max_glyph_count,
+        UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *text_props,
+        UINT16 *glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 *actual_glyph_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphPlacements(
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGdiCompatibleGlyphPlacements(
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_lengths,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalyzer, 0xb7e6163e, 0x7f46, 0x43b4, 0x84,0xb3, 0xe4,0xe6,0x24,0x9c,0x36,0x5d)
+#endif
+#else
+typedef struct IDWriteTextAnalyzerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalyzer *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalyzer *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalyzer *This);
+
+    /*** IDWriteTextAnalyzer methods ***/
+    HRESULT (STDMETHODCALLTYPE *AnalyzeScript)(
+        IDWriteTextAnalyzer *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeBidi)(
+        IDWriteTextAnalyzer *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeNumberSubstitution)(
+        IDWriteTextAnalyzer *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeLineBreakpoints)(
+        IDWriteTextAnalyzer *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphs)(
+        IDWriteTextAnalyzer *This,
+        const WCHAR *text,
+        UINT32 length,
+        IDWriteFontFace *font_face,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        IDWriteNumberSubstitution *substitution,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        UINT32 max_glyph_count,
+        UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *text_props,
+        UINT16 *glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 *actual_glyph_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphPlacements)(
+        IDWriteTextAnalyzer *This,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphPlacements)(
+        IDWriteTextAnalyzer *This,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_lengths,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets);
+
+    END_INTERFACE
+} IDWriteTextAnalyzerVtbl;
+
+interface IDWriteTextAnalyzer {
+    CONST_VTBL IDWriteTextAnalyzerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalyzer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalyzer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalyzer_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalyzer methods ***/
+#define IDWriteTextAnalyzer_AnalyzeScript(This,source,position,length,sink) (This)->lpVtbl->AnalyzeScript(This,source,position,length,sink)
+#define IDWriteTextAnalyzer_AnalyzeBidi(This,source,position,length,sink) (This)->lpVtbl->AnalyzeBidi(This,source,position,length,sink)
+#define IDWriteTextAnalyzer_AnalyzeNumberSubstitution(This,source,position,length,sink) (This)->lpVtbl->AnalyzeNumberSubstitution(This,source,position,length,sink)
+#define IDWriteTextAnalyzer_AnalyzeLineBreakpoints(This,source,position,length,sink) (This)->lpVtbl->AnalyzeLineBreakpoints(This,source,position,length,sink)
+#define IDWriteTextAnalyzer_GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count) (This)->lpVtbl->GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count)
+#define IDWriteTextAnalyzer_GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets) (This)->lpVtbl->GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets)
+#define IDWriteTextAnalyzer_GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets) (This)->lpVtbl->GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_QueryInterface(IDWriteTextAnalyzer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalyzer_AddRef(IDWriteTextAnalyzer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalyzer_Release(IDWriteTextAnalyzer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalyzer methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_AnalyzeScript(IDWriteTextAnalyzer* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeScript(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_AnalyzeBidi(IDWriteTextAnalyzer* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeBidi(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_AnalyzeNumberSubstitution(IDWriteTextAnalyzer* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeNumberSubstitution(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_AnalyzeLineBreakpoints(IDWriteTextAnalyzer* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeLineBreakpoints(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_GetGlyphs(IDWriteTextAnalyzer* This,const WCHAR *text,UINT32 length,IDWriteFontFace *font_face,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,IDWriteNumberSubstitution *substitution,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_len,UINT32 feature_ranges,UINT32 max_glyph_count,UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *text_props,UINT16 *glyph_indices,DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 *actual_glyph_count) {
+    return This->lpVtbl->GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_GetGlyphPlacements(IDWriteTextAnalyzer* This,const WCHAR *text,const UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *props,UINT32 text_len,const UINT16 *glyph_indices,const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 glyph_count,IDWriteFontFace *font_face,FLOAT fontEmSize,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_len,UINT32 feature_ranges,FLOAT *glyph_advances,DWRITE_GLYPH_OFFSET *glyph_offsets) {
+    return This->lpVtbl->GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer_GetGdiCompatibleGlyphPlacements(IDWriteTextAnalyzer* This,const WCHAR *text,const UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *props,UINT32 text_len,const UINT16 *glyph_indices,const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 glyph_count,IDWriteFontFace *font_face,FLOAT fontEmSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_lengths,UINT32 feature_ranges,FLOAT *glyph_advances,DWRITE_GLYPH_OFFSET *glyph_offsets) {
+    return This->lpVtbl->GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalyzer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteGlyphRunAnalysis interface
+ */
+#ifndef __IDWriteGlyphRunAnalysis_INTERFACE_DEFINED__
+#define __IDWriteGlyphRunAnalysis_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteGlyphRunAnalysis, 0x7d97dbf7, 0xe085, 0x42d4, 0x81,0xe3, 0x6a,0x88,0x3b,0xde,0xd1,0x18);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7d97dbf7-e085-42d4-81e3-6a883bded118")
+IDWriteGlyphRunAnalysis : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetAlphaTextureBounds(
+        DWRITE_TEXTURE_TYPE type,
+        RECT *bounds) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateAlphaTexture(
+        DWRITE_TEXTURE_TYPE type,
+        const RECT *bounds,
+        BYTE *alphaValues,
+        UINT32 bufferSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAlphaBlendParams(
+        IDWriteRenderingParams *renderingParams,
+        FLOAT *blendGamma,
+        FLOAT *blendEnhancedContrast,
+        FLOAT *blendClearTypeLevel) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteGlyphRunAnalysis, 0x7d97dbf7, 0xe085, 0x42d4, 0x81,0xe3, 0x6a,0x88,0x3b,0xde,0xd1,0x18)
+#endif
+#else
+typedef struct IDWriteGlyphRunAnalysisVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteGlyphRunAnalysis *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteGlyphRunAnalysis *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteGlyphRunAnalysis *This);
+
+    /*** IDWriteGlyphRunAnalysis methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAlphaTextureBounds)(
+        IDWriteGlyphRunAnalysis *This,
+        DWRITE_TEXTURE_TYPE type,
+        RECT *bounds);
+
+    HRESULT (STDMETHODCALLTYPE *CreateAlphaTexture)(
+        IDWriteGlyphRunAnalysis *This,
+        DWRITE_TEXTURE_TYPE type,
+        const RECT *bounds,
+        BYTE *alphaValues,
+        UINT32 bufferSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetAlphaBlendParams)(
+        IDWriteGlyphRunAnalysis *This,
+        IDWriteRenderingParams *renderingParams,
+        FLOAT *blendGamma,
+        FLOAT *blendEnhancedContrast,
+        FLOAT *blendClearTypeLevel);
+
+    END_INTERFACE
+} IDWriteGlyphRunAnalysisVtbl;
+
+interface IDWriteGlyphRunAnalysis {
+    CONST_VTBL IDWriteGlyphRunAnalysisVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteGlyphRunAnalysis_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteGlyphRunAnalysis_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteGlyphRunAnalysis_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteGlyphRunAnalysis methods ***/
+#define IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(This,type,bounds) (This)->lpVtbl->GetAlphaTextureBounds(This,type,bounds)
+#define IDWriteGlyphRunAnalysis_CreateAlphaTexture(This,type,bounds,alphaValues,bufferSize) (This)->lpVtbl->CreateAlphaTexture(This,type,bounds,alphaValues,bufferSize)
+#define IDWriteGlyphRunAnalysis_GetAlphaBlendParams(This,renderingParams,blendGamma,blendEnhancedContrast,blendClearTypeLevel) (This)->lpVtbl->GetAlphaBlendParams(This,renderingParams,blendGamma,blendEnhancedContrast,blendClearTypeLevel)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteGlyphRunAnalysis_QueryInterface(IDWriteGlyphRunAnalysis* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteGlyphRunAnalysis_AddRef(IDWriteGlyphRunAnalysis* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteGlyphRunAnalysis_Release(IDWriteGlyphRunAnalysis* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteGlyphRunAnalysis methods ***/
+static FORCEINLINE HRESULT IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(IDWriteGlyphRunAnalysis* This,DWRITE_TEXTURE_TYPE type,RECT *bounds) {
+    return This->lpVtbl->GetAlphaTextureBounds(This,type,bounds);
+}
+static FORCEINLINE HRESULT IDWriteGlyphRunAnalysis_CreateAlphaTexture(IDWriteGlyphRunAnalysis* This,DWRITE_TEXTURE_TYPE type,const RECT *bounds,BYTE *alphaValues,UINT32 bufferSize) {
+    return This->lpVtbl->CreateAlphaTexture(This,type,bounds,alphaValues,bufferSize);
+}
+static FORCEINLINE HRESULT IDWriteGlyphRunAnalysis_GetAlphaBlendParams(IDWriteGlyphRunAnalysis* This,IDWriteRenderingParams *renderingParams,FLOAT *blendGamma,FLOAT *blendEnhancedContrast,FLOAT *blendClearTypeLevel) {
+    return This->lpVtbl->GetAlphaBlendParams(This,renderingParams,blendGamma,blendEnhancedContrast,blendClearTypeLevel);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteGlyphRunAnalysis_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory interface
+ */
+#ifndef __IDWriteFactory_INTERFACE_DEFINED__
+#define __IDWriteFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory, 0xb859ee5a, 0xd838, 0x4b5b, 0xa2,0xe8, 0x1a,0xdc,0x7d,0x93,0xdb,0x48);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b859ee5a-d838-4b5b-a2e8-1adc7d93db48")
+IDWriteFactory : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontCollection(
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates = FALSE) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCustomFontCollection(
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterFontCollectionLoader(
+        IDWriteFontCollectionLoader *loader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnregisterFontCollectionLoader(
+        IDWriteFontCollectionLoader *loader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFileReference(
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCustomFontFileReference(
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRenderingParams(
+        IDWriteRenderingParams **params) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMonitorRenderingParams(
+        HMONITOR monitor,
+        IDWriteRenderingParams **params) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCustomRenderingParams(
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterFontFileLoader(
+        IDWriteFontFileLoader *loader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnregisterFontFileLoader(
+        IDWriteFontFileLoader *loader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTextFormat(
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTypography(
+        IDWriteTypography **typography) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGdiInterop(
+        IDWriteGdiInterop **gdi_interop) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTextLayout(
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateGdiCompatibleTextLayout(
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateEllipsisTrimmingSign(
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTextAnalyzer(
+        IDWriteTextAnalyzer **analyzer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateNumberSubstitution(
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateGlyphRunAnalysis(
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory, 0xb859ee5a, 0xd838, 0x4b5b, 0xa2,0xe8, 0x1a,0xdc,0x7d,0x93,0xdb,0x48)
+#endif
+#else
+typedef struct IDWriteFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory *This);
+
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory *This,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    END_INTERFACE
+} IDWriteFactoryVtbl;
+
+interface IDWriteFactory {
+    CONST_VTBL IDWriteFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory_GetSystemFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetSystemFontCollection(This,collection,check_for_updates)
+#define IDWriteFactory_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory_CreateCustomRenderingParams(This,gamma,enhancedContrast,cleartype_level,geometry,mode,params) (This)->lpVtbl->CreateCustomRenderingParams(This,gamma,enhancedContrast,cleartype_level,geometry,mode,params)
+#define IDWriteFactory_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
+#define IDWriteFactory_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+#define IDWriteFactory_CreateGlyphRunAnalysis(This,glyph_run,pixels_per_dip,transform,rendering_mode,measuring_mode,baseline_x,baseline_y,analysis) (This)->lpVtbl->CreateGlyphRunAnalysis(This,glyph_run,pixels_per_dip,transform,rendering_mode,measuring_mode,baseline_x,baseline_y,analysis)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory_QueryInterface(IDWriteFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory_AddRef(IDWriteFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory_Release(IDWriteFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory_GetSystemFontCollection(IDWriteFactory* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetSystemFontCollection(This,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateCustomFontCollection(IDWriteFactory* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory_RegisterFontCollectionLoader(IDWriteFactory* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory_UnregisterFontCollectionLoader(IDWriteFactory* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateFontFileReference(IDWriteFactory* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateCustomFontFileReference(IDWriteFactory* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateFontFace(IDWriteFactory* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateRenderingParams(IDWriteFactory* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateMonitorRenderingParams(IDWriteFactory* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateCustomRenderingParams(IDWriteFactory* This,FLOAT gamma,FLOAT enhancedContrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY geometry,DWRITE_RENDERING_MODE mode,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateCustomRenderingParams(This,gamma,enhancedContrast,cleartype_level,geometry,mode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory_RegisterFontFileLoader(IDWriteFactory* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory_UnregisterFontFileLoader(IDWriteFactory* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateTextFormat(IDWriteFactory* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
+    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateTypography(IDWriteFactory* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory_GetGdiInterop(IDWriteFactory* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateTextLayout(IDWriteFactory* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateGdiCompatibleTextLayout(IDWriteFactory* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateEllipsisTrimmingSign(IDWriteFactory* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateTextAnalyzer(IDWriteFactory* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateNumberSubstitution(IDWriteFactory* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+static FORCEINLINE HRESULT IDWriteFactory_CreateGlyphRunAnalysis(IDWriteFactory* This,const DWRITE_GLYPH_RUN *glyph_run,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE rendering_mode,DWRITE_MEASURING_MODE measuring_mode,FLOAT baseline_x,FLOAT baseline_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->CreateGlyphRunAnalysis(This,glyph_run,pixels_per_dip,transform,rendering_mode,measuring_mode,baseline_x,baseline_y,analysis);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFactory_INTERFACE_DEFINED__ */
+
+HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE,REFIID,IUnknown**);
+#define FACILITY_DWRITE 0x898
+#define DWRITE_ERR_BASE 0x5000
+#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))
+#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
 
 #ifdef __cplusplus
 }
 #endif
 
-DEFINE_GUID(IID_IDWriteFactory, 0xb859ee5a,0xd838,0x4b5b,0xa2,0xe8,0x1a,0xdc,0x7d,0x93,0xdb,0x48);
-__CRT_UUID_DECL(IDWriteBitmapRenderTarget, 0x5e5a32a3,0x8dff,0x4773,0x9f,0xf6,0x06,0x96,0xea,0xb7,0x72,0x67);
-__CRT_UUID_DECL(IDWriteFactory, 0xb859ee5a,0xd838,0x4b5b,0xa2,0xe8,0x1a,0xdc,0x7d,0x93,0xdb,0x48);
-__CRT_UUID_DECL(IDWriteFont, 0xacd16696,0x8c14,0x4f5d,0x87,0x7e,0xfe,0x3f,0xc1,0xd3,0x27,0x37);
-__CRT_UUID_DECL(IDWriteFontCollection, 0xa84cee02,0x3eea,0x4eee,0xa8,0x27,0x87,0xc1,0xa0,0x2a,0x0f,0xcc);
-__CRT_UUID_DECL(IDWriteFontFace, 0x5f49804d,0x7024,0x4d43,0xbf,0xa9,0xd2,0x59,0x84,0xf5,0x38,0x49);
-__CRT_UUID_DECL(IDWriteFontList, 0x1a0d8438,0x1d97,0x4ec1,0xae,0xf9,0xa2,0xfb,0x86,0xed,0x6a,0xcb);
-__CRT_UUID_DECL(IDWriteFontFamily, 0xda20d8ef,0x812a,0x4c43,0x98,0x02,0x62,0xec,0x4a,0xbd,0x7a,0xdd);
-__CRT_UUID_DECL(IDWriteFontFile, 0x739d886a,0xcef5,0x47dc,0x87,0x69,0x1a,0x8b,0x41,0xbe,0xbb,0xb0);
-__CRT_UUID_DECL(IDWriteFontFileLoader, 0x727cad4e,0xd6af,0x4c9e,0x8a,0x08,0xd6,0x95,0xb1,0x1c,0xaa,0x49);
-__CRT_UUID_DECL(IDWriteFontFileStream, 0x6d4865fe,0x0ab8,0x4d91,0x8f,0x62,0x5d,0xd6,0xbe,0x34,0xa3,0xe0);
-__CRT_UUID_DECL(IDWriteGdiInterop, 0x1edd9491,0x9853,0x4299,0x89,0x8f,0x64,0x32,0x98,0x3b,0x6f,0x3a);
-__CRT_UUID_DECL(IDWriteGlyphRunAnalysis, 0x7d97dbf7,0xe085,0x42d4,0x81,0xe3,0x6a,0x88,0x3b,0xde,0xd1,0x18);
-__CRT_UUID_DECL(IDWriteLocalizedStrings, 0x08256209,0x099a,0x4b34,0xb8,0x6d,0xc2,0x2b,0x11,0x0e,0x77,0x71);
-__CRT_UUID_DECL(IDWriteRenderingParams, 0x2f0da53a,0x2add,0x47cd,0x82,0xee,0xd9,0xec,0x34,0x68,0x8e,0x75);
-__CRT_UUID_DECL(IDWriteTextAnalysisSink, 0x5810cd44,0x0ca0,0x4701,0xb3,0xfa,0xbe,0xc5,0x18,0x2a,0xe4,0xf6);
-__CRT_UUID_DECL(IDWriteTextAnalysisSource, 0x688e1a58,0x5094,0x47c8,0xad,0xc8,0xfb,0xce,0xa6,0x0a,0xe9,0x2b);
-__CRT_UUID_DECL(IDWriteTextAnalyzer, 0xb7e6163e,0x7f46,0x43b4,0x84,0xb3,0xe4,0xe6,0x24,0x9c,0x36,0x5d);
-__CRT_UUID_DECL(IDWritePixelSnapping, 0xeaf3a2da,0xecf4,0x4d24,0xb6,0x44,0xb3,0x4f,0x68,0x42,0x02,0x4b);
-__CRT_UUID_DECL(IDWriteTextRenderer, 0xef8a8135,0x5cc6,0x45fe,0x88,0x25,0xc5,0xa0,0x72,0x4e,0xb8,0x19);
-__CRT_UUID_DECL(IDWriteInlineObject, 0x8339fde3,0x106f,0x47ab,0x83,0x73,0x1c,0x62,0x95,0xeb,0x10,0xb3);
-__CRT_UUID_DECL(IDWriteTextFormat, 0x9c906818,0x31d7,0x4fd3,0xa1,0x51,0x7c,0x5e,0x22,0x5d,0xb5,0x5a);
-__CRT_UUID_DECL(IDWriteTextLayout, 0x53737037,0x6d14,0x410b,0x9b,0xfe,0x0b,0x18,0x2b,0xb7,0x09,0x61);
-__CRT_UUID_DECL(IDWriteFontFileEnumerator, 0x72755049,0x5ff7,0x435d,0x83,0x48,0x4b,0xe9,0x7c,0xfa,0x6c,0x7c);
-__CRT_UUID_DECL(IDWriteFontCollectionLoader, 0xcca920e4,0x52f0,0x492b,0xbf,0xa8,0x29,0xc7,0x2e,0xe0,0xa4,0x68);
-__CRT_UUID_DECL(IDWriteTypography, 0x55f1112b,0x1dc2,0x4b3c,0x95,0x41,0xf4,0x68,0x94,0xed,0x85,0xb6);
-__CRT_UUID_DECL(IDWriteLocalFontFileLoader,0xb2d9f3ec,0xc9fe,0x4a11,0xa2,0xec,0xd8,0x62,0x08,0xf7,0xc0,0xa2);
-
-#endif /* __INC_DWRITE__ */
+#endif /* __dwrite_h__ */
diff --git a/mingw-w64-headers/include/dwrite.idl b/mingw-w64-headers/include/dwrite.idl
new file mode 100644
index 0000000..180dc97
--- /dev/null
+++ b/mingw-w64-headers/include/dwrite.idl
@@ -0,0 +1,1465 @@
+/*
+ * Copyright 2012 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "unknwn.idl";
+import "dcommon.idl";
+
+interface IDWriteFactory;
+interface IDWriteFontCollection;
+interface IDWriteFontFamily;
+interface IDWriteFontFace;
+interface IDWriteInlineObject;
+
+interface ID2D1SimplifiedGeometrySink;
+typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink;
+
+cpp_quote("#ifndef _WINDEF_")
+/* already defined in windef.h but needed for WIDL */
+typedef void *HMONITOR;
+cpp_quote("#endif /* _WINDEF_ */")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetGlyphIndices")
+cpp_quote("#endif")
+
+typedef enum DWRITE_FACTORY_TYPE
+{
+    DWRITE_FACTORY_TYPE_SHARED,
+    DWRITE_FACTORY_TYPE_ISOLATED
+} DWRITE_FACTORY_TYPE;
+
+typedef enum DWRITE_FONT_FILE_TYPE
+{
+    DWRITE_FONT_FILE_TYPE_UNKNOWN,
+    DWRITE_FONT_FILE_TYPE_CFF,
+    DWRITE_FONT_FILE_TYPE_TRUETYPE,
+    DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION,
+    DWRITE_FONT_FILE_TYPE_TYPE1_PFM,
+    DWRITE_FONT_FILE_TYPE_TYPE1_PFB,
+    DWRITE_FONT_FILE_TYPE_VECTOR,
+    DWRITE_FONT_FILE_TYPE_BITMAP,
+    DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION
+} DWRITE_FONT_FILE_TYPE;
+
+typedef enum DWRITE_FONT_FACE_TYPE
+{
+    DWRITE_FONT_FACE_TYPE_CFF,
+    DWRITE_FONT_FACE_TYPE_TRUETYPE,
+    DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION,
+    DWRITE_FONT_FACE_TYPE_TYPE1,
+    DWRITE_FONT_FACE_TYPE_VECTOR,
+    DWRITE_FONT_FACE_TYPE_BITMAP,
+    DWRITE_FONT_FACE_TYPE_UNKNOWN,
+    DWRITE_FONT_FACE_TYPE_RAW_CFF,
+    DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION
+} DWRITE_FONT_FACE_TYPE;
+
+typedef enum DWRITE_FONT_WEIGHT
+{
+    DWRITE_FONT_WEIGHT_THIN = 100,
+    DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,
+    DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,
+    DWRITE_FONT_WEIGHT_LIGHT = 300,
+    DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350,
+    DWRITE_FONT_WEIGHT_NORMAL = 400,
+    DWRITE_FONT_WEIGHT_REGULAR = 400,
+    DWRITE_FONT_WEIGHT_MEDIUM = 500,
+    DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,
+    DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,
+    DWRITE_FONT_WEIGHT_BOLD = 700,
+    DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,
+    DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,
+    DWRITE_FONT_WEIGHT_BLACK = 900,
+    DWRITE_FONT_WEIGHT_HEAVY = 900,
+    DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,
+    DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950
+} DWRITE_FONT_WEIGHT;
+
+typedef enum DWRITE_FONT_STRETCH
+{
+    DWRITE_FONT_STRETCH_UNDEFINED = 0,
+    DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,
+    DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,
+    DWRITE_FONT_STRETCH_CONDENSED = 3,
+    DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,
+    DWRITE_FONT_STRETCH_NORMAL = 5,
+    DWRITE_FONT_STRETCH_MEDIUM = 5,
+    DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,
+    DWRITE_FONT_STRETCH_EXPANDED = 7,
+    DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,
+    DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9
+} DWRITE_FONT_STRETCH;
+
+typedef enum DWRITE_FONT_STYLE
+{
+    DWRITE_FONT_STYLE_NORMAL,
+    DWRITE_FONT_STYLE_OBLIQUE,
+    DWRITE_FONT_STYLE_ITALIC
+} DWRITE_FONT_STYLE;
+
+typedef enum DWRITE_INFORMATIONAL_STRING_ID
+{
+    DWRITE_INFORMATIONAL_STRING_NONE,
+    DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,
+    DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,
+    DWRITE_INFORMATIONAL_STRING_TRADEMARK,
+    DWRITE_INFORMATIONAL_STRING_MANUFACTURER,
+    DWRITE_INFORMATIONAL_STRING_DESIGNER,
+    DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,
+    DWRITE_INFORMATIONAL_STRING_DESCRIPTION,
+    DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,
+    DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,
+    DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,
+    DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_FAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_SUBFAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT,
+    DWRITE_INFORMATIONAL_STRING_FULL_NAME,
+    DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME,
+    DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME,
+    DWRITE_INFORMATIONAL_STRING_WEIGHT_STRETCH_STYLE_FAMILY_NAME,
+    DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG,
+    DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG,
+    DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_FAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_SUBFAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME = DWRITE_INFORMATIONAL_STRING_WEIGHT_STRETCH_STYLE_FAMILY_NAME,
+} DWRITE_INFORMATIONAL_STRING_ID;
+
+typedef enum DWRITE_FONT_SIMULATIONS
+{
+    DWRITE_FONT_SIMULATIONS_NONE,
+    DWRITE_FONT_SIMULATIONS_BOLD,
+    DWRITE_FONT_SIMULATIONS_OBLIQUE
+} DWRITE_FONT_SIMULATIONS;
+
+cpp_quote("#ifdef DEFINE_ENUM_FLAG_OPERATORS")
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DWRITE_FONT_SIMULATIONS);")
+cpp_quote("#endif")
+
+typedef enum DWRITE_PIXEL_GEOMETRY
+{
+    DWRITE_PIXEL_GEOMETRY_FLAT,
+    DWRITE_PIXEL_GEOMETRY_RGB,
+    DWRITE_PIXEL_GEOMETRY_BGR
+} DWRITE_PIXEL_GEOMETRY;
+
+typedef enum DWRITE_RENDERING_MODE
+{
+    DWRITE_RENDERING_MODE_DEFAULT,
+    DWRITE_RENDERING_MODE_ALIASED,
+    DWRITE_RENDERING_MODE_GDI_CLASSIC,
+    DWRITE_RENDERING_MODE_GDI_NATURAL,
+    DWRITE_RENDERING_MODE_NATURAL,
+    DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
+    DWRITE_RENDERING_MODE_OUTLINE,
+    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,
+    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
+    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
+    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC
+} DWRITE_RENDERING_MODE;
+
+typedef enum DWRITE_TEXT_ALIGNMENT
+{
+    DWRITE_TEXT_ALIGNMENT_LEADING,
+    DWRITE_TEXT_ALIGNMENT_TRAILING,
+    DWRITE_TEXT_ALIGNMENT_CENTER,
+    DWRITE_TEXT_ALIGNMENT_JUSTIFIED
+} DWRITE_TEXT_ALIGNMENT;
+
+typedef enum DWRITE_PARAGRAPH_ALIGNMENT
+{
+    DWRITE_PARAGRAPH_ALIGNMENT_NEAR,
+    DWRITE_PARAGRAPH_ALIGNMENT_FAR,
+    DWRITE_PARAGRAPH_ALIGNMENT_CENTER
+} DWRITE_PARAGRAPH_ALIGNMENT;
+
+typedef enum DWRITE_WORD_WRAPPING
+{
+    DWRITE_WORD_WRAPPING_WRAP,
+    DWRITE_WORD_WRAPPING_NO_WRAP,
+    DWRITE_WORD_WRAPPING_EMERGENCY_BREAK,
+    DWRITE_WORD_WRAPPING_WHOLE_WORD,
+    DWRITE_WORD_WRAPPING_CHARACTER
+} DWRITE_WORD_WRAPPING;
+
+typedef enum DWRITE_READING_DIRECTION
+{
+    DWRITE_READING_DIRECTION_LEFT_TO_RIGHT,
+    DWRITE_READING_DIRECTION_RIGHT_TO_LEFT,
+    DWRITE_READING_DIRECTION_TOP_TO_BOTTOM,
+    DWRITE_READING_DIRECTION_BOTTOM_TO_TOP
+} DWRITE_READING_DIRECTION;
+
+typedef enum DWRITE_FLOW_DIRECTION
+{
+    DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM,
+    DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP,
+    DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT,
+    DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT
+} DWRITE_FLOW_DIRECTION;
+
+typedef enum DWRITE_TRIMMING_GRANULARITY
+{
+    DWRITE_TRIMMING_GRANULARITY_NONE,
+    DWRITE_TRIMMING_GRANULARITY_CHARACTER,
+    DWRITE_TRIMMING_GRANULARITY_WORD
+} DWRITE_TRIMMING_GRANULARITY;
+
+typedef enum DWRITE_BREAK_CONDITION
+{
+    DWRITE_BREAK_CONDITION_NEUTRAL,
+    DWRITE_BREAK_CONDITION_CAN_BREAK,
+    DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,
+    DWRITE_BREAK_CONDITION_MUST_BREAK
+} DWRITE_BREAK_CONDITION;
+
+typedef enum DWRITE_LINE_SPACING_METHOD
+{
+    DWRITE_LINE_SPACING_METHOD_DEFAULT,
+    DWRITE_LINE_SPACING_METHOD_UNIFORM,
+    DWRITE_LINE_SPACING_METHOD_PROPORTIONAL
+} DWRITE_LINE_SPACING_METHOD;
+
+cpp_quote("#define DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d) ( \\")
+cpp_quote("    ((UINT32)(UINT8)(d) << 24) | \\")
+cpp_quote("    ((UINT32)(UINT8)(c) << 16) | \\")
+cpp_quote("    ((UINT32)(UINT8)(b) <<  8) | \\")
+cpp_quote("     (UINT32)(UINT8)(a))")
+
+typedef enum DWRITE_FONT_FEATURE_TAG
+{
+    DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS           = 0x63726661, /* 'afrc' */
+    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS   = 0x63703263, /* 'c2pc' */
+    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS    = 0x63733263, /* 'c2sc' */
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES           = 0x746c6163, /* 'calt' */
+    DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS            = 0x65736163, /* 'case' */
+    DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, /* 'ccmp' */
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES            = 0x67696c63, /* 'clig' */
+    DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING                 = 0x70737063, /* 'cpsp' */
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH                = 0x68777363, /* 'cswh' */
+    DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING             = 0x73727563, /* 'curs' */
+    DWRITE_FONT_FEATURE_TAG_DEFAULT                         = 0x746c6664, /* 'dflt' */
+    DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES         = 0x67696c64, /* 'dlig' */
+    DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS                    = 0x74707865, /* 'expt' */
+    DWRITE_FONT_FEATURE_TAG_FRACTIONS                       = 0x63617266, /* 'frac' */
+    DWRITE_FONT_FEATURE_TAG_FULL_WIDTH                      = 0x64697766, /* 'fwid' */
+    DWRITE_FONT_FEATURE_TAG_HALF_FORMS                      = 0x666c6168, /* 'half' */
+    DWRITE_FONT_FEATURE_TAG_HALANT_FORMS                    = 0x6e6c6168, /* 'haln' */
+    DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH            = 0x746c6168, /* 'halt' */
+    DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS                = 0x74736968, /* 'hist' */
+    DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES      = 0x616e6b68, /* 'hkna' */
+    DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES            = 0x67696c68, /* 'hlig' */
+    DWRITE_FONT_FEATURE_TAG_HALF_WIDTH                      = 0x64697768, /* 'hwid' */
+    DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS                = 0x6f6a6f68, /* 'hojo' */
+    DWRITE_FONT_FEATURE_TAG_JIS04_FORMS                     = 0x3430706a, /* 'jp04' */
+    DWRITE_FONT_FEATURE_TAG_JIS78_FORMS                     = 0x3837706a, /* 'jp78' */
+    DWRITE_FONT_FEATURE_TAG_JIS83_FORMS                     = 0x3338706a, /* 'jp83' */
+    DWRITE_FONT_FEATURE_TAG_JIS90_FORMS                     = 0x3039706a, /* 'jp90' */
+    DWRITE_FONT_FEATURE_TAG_KERNING                         = 0x6e72656b, /* 'kern' */
+    DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES              = 0x6167696c, /* 'liga' */
+    DWRITE_FONT_FEATURE_TAG_LINING_FIGURES                  = 0x6d756e6c, /* 'lnum' */
+    DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS                 = 0x6c636f6c, /* 'locl' */
+    DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING                = 0x6b72616d, /* 'mark' */
+    DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK              = 0x6b72676d, /* 'mgrk' */
+    DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING        = 0x6b6d6b6d, /* 'mkmk' */
+    DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS      = 0x746c616e, /* 'nalt' */
+    DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS                 = 0x6b636c6e, /* 'nlck' */
+    DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES               = 0x6d756e6f, /* 'onum' */
+    DWRITE_FONT_FEATURE_TAG_ORDINALS                        = 0x6e64726f, /* 'ordn' */
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH    = 0x746c6170, /* 'palt' */
+    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS                 = 0x70616370, /* 'pcap' */
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES            = 0x6d756e70, /* 'pnum' */
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS             = 0x64697770, /* 'pwid' */
+    DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS                  = 0x64697771, /* 'qwid' */
+    DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES              = 0x67696c72, /* 'rlig' */
+    DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS             = 0x79627572, /* 'ruby' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES            = 0x746c6173, /* 'salt' */
+    DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS            = 0x666e6973, /* 'sinf' */
+    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS                  = 0x70636d73, /* 'smcp' */
+    DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS                = 0x6c706d73, /* 'smpl' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1                 = 0x31307373, /* 'ss01' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2                 = 0x32307373, /* 'ss02' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3                 = 0x33307373, /* 'ss03' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4                 = 0x34307373, /* 'ss04' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5                 = 0x35307373, /* 'ss05' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6                 = 0x36307373, /* 'ss06' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7                 = 0x37307373, /* 'ss07' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8                 = 0x38307373, /* 'ss08' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9                 = 0x39307373, /* 'ss09' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10                = 0x30317373, /* 'ss10' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11                = 0x31317373, /* 'ss11' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12                = 0x32317373, /* 'ss12' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13                = 0x33317373, /* 'ss13' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14                = 0x34317373, /* 'ss14' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15                = 0x35317373, /* 'ss15' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16                = 0x36317373, /* 'ss16' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17                = 0x37317373, /* 'ss17' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18                = 0x38317373, /* 'ss18' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19                = 0x39317373, /* 'ss19' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20                = 0x30327373, /* 'ss20' */
+    DWRITE_FONT_FEATURE_TAG_SUBSCRIPT                       = 0x73627573, /* 'subs' */
+    DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT                     = 0x73707573, /* 'sups' */
+    DWRITE_FONT_FEATURE_TAG_SWASH                           = 0x68737773, /* 'swsh' */
+    DWRITE_FONT_FEATURE_TAG_TITLING                         = 0x6c746974, /* 'titl' */
+    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS          = 0x6d616e74, /* 'tnam' */
+    DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES                 = 0x6d756e74, /* 'tnum' */
+    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS               = 0x64617274, /* 'trad' */
+    DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS                    = 0x64697774, /* 'twid' */
+    DWRITE_FONT_FEATURE_TAG_UNICASE                         = 0x63696e75, /* 'unic' */
+    DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING                = 0x74726576, /* 'vert' */
+    DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION= 0x32747276, /* 'vrt2' */
+    DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO                    = 0x6f72657a, /* 'zero' */
+} DWRITE_FONT_FEATURE_TAG;
+
+typedef enum DWRITE_SCRIPT_SHAPES
+{
+    DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
+    DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
+} DWRITE_SCRIPT_SHAPES;
+
+typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD
+{
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL
+} DWRITE_NUMBER_SUBSTITUTION_METHOD;
+
+cpp_quote("#define DWRITE_ALPHA_MAX 255")
+
+typedef enum DWRITE_TEXTURE_TYPE
+{
+    DWRITE_TEXTURE_ALIASED_1x1,
+    DWRITE_TEXTURE_CLEARTYPE_3x1
+} DWRITE_TEXTURE_TYPE;
+
+typedef struct DWRITE_FONT_METRICS
+{
+    UINT16 designUnitsPerEm;
+    UINT16 ascent;
+    UINT16 descent;
+    INT16 lineGap;
+    UINT16 capHeight;
+    UINT16 xHeight;
+    INT16 underlinePosition;
+    UINT16 underlineThickness;
+    INT16 strikethroughPosition;
+    UINT16 strikethroughThickness;
+} DWRITE_FONT_METRICS;
+
+typedef struct DWRITE_GLYPH_METRICS
+{
+    INT32 leftSideBearing;
+    UINT32 advanceWidth;
+    INT32 rightSideBearing;
+    INT32 topSideBearing;
+    UINT32 advanceHeight;
+    INT32 bottomSideBearing;
+    INT32 verticalOriginY;
+} DWRITE_GLYPH_METRICS;
+
+typedef struct DWRITE_GLYPH_OFFSET
+{
+    FLOAT advanceOffset;
+    FLOAT ascenderOffset;
+} DWRITE_GLYPH_OFFSET;
+
+typedef struct DWRITE_MATRIX
+{
+    FLOAT m11;
+    FLOAT m12;
+    FLOAT m21;
+    FLOAT m22;
+    FLOAT dx;
+    FLOAT dy;
+} DWRITE_MATRIX;
+
+typedef struct DWRITE_TRIMMING
+{
+    DWRITE_TRIMMING_GRANULARITY granularity;
+    UINT32 delimiter;
+    UINT32 delimiterCount;
+} DWRITE_TRIMMING;
+
+cpp_quote("#ifndef __d2d1_h__")
+typedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN;
+cpp_quote("#endif /* __d2d1_h__ */")
+
+struct DWRITE_GLYPH_RUN
+{
+    IDWriteFontFace* fontFace;
+    FLOAT fontEmSize;
+    UINT32 glyphCount;
+    UINT16 const* glyphIndices;
+    FLOAT const* glyphAdvances;
+    DWRITE_GLYPH_OFFSET const* glyphOffsets;
+    BOOL isSideways;
+    UINT32 bidiLevel;
+};
+
+cpp_quote("#ifndef __d2d1_1_h__")
+typedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION;
+cpp_quote("#endif /* __d2d1_1_h__ */")
+
+struct DWRITE_GLYPH_RUN_DESCRIPTION
+{
+    WCHAR const* localeName;
+    WCHAR const* string;
+    UINT32 stringLength;
+    UINT16 const* clusterMap;
+    UINT32 textPosition;
+};
+
+typedef struct DWRITE_UNDERLINE
+{
+    FLOAT width;
+    FLOAT thickness;
+    FLOAT offset;
+    FLOAT runHeight;
+    DWRITE_READING_DIRECTION readingDirection;
+    DWRITE_FLOW_DIRECTION flowDirection;
+    WCHAR const* localeName;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_UNDERLINE;
+
+typedef struct DWRITE_STRIKETHROUGH
+{
+    FLOAT width;
+    FLOAT thickness;
+    FLOAT offset;
+    DWRITE_READING_DIRECTION readingDirection;
+    DWRITE_FLOW_DIRECTION flowDirection;
+    WCHAR const* localeName;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_STRIKETHROUGH;
+
+typedef struct DWRITE_INLINE_OBJECT_METRICS
+{
+    FLOAT width;
+    FLOAT height;
+    FLOAT baseline;
+    BOOL  supportsSideways;
+} DWRITE_INLINE_OBJECT_METRICS;
+
+typedef struct DWRITE_OVERHANG_METRICS
+{
+    FLOAT left;
+    FLOAT top;
+    FLOAT right;
+    FLOAT bottom;
+} DWRITE_OVERHANG_METRICS;
+
+typedef struct DWRITE_FONT_FEATURE
+{
+    DWRITE_FONT_FEATURE_TAG nameTag;
+    UINT32 parameter;
+} DWRITE_FONT_FEATURE;
+
+typedef struct DWRITE_TEXT_RANGE
+{
+    UINT32 startPosition;
+    UINT32 length;
+} DWRITE_TEXT_RANGE;
+
+typedef struct DWRITE_LINE_METRICS
+{
+    UINT32 length;
+    UINT32 trailingWhitespaceLength;
+    UINT32 newlineLength;
+    FLOAT height;
+    FLOAT baseline;
+    BOOL isTrimmed;
+} DWRITE_LINE_METRICS;
+
+typedef struct DWRITE_TEXT_METRICS
+{
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT widthIncludingTrailingWhitespace;
+    FLOAT height;
+    FLOAT layoutWidth;
+    FLOAT layoutHeight;
+    UINT32 maxBidiReorderingDepth;
+    UINT32 lineCount;
+} DWRITE_TEXT_METRICS;
+
+typedef struct DWRITE_CLUSTER_METRICS
+{
+    FLOAT width;
+    UINT16 length;
+    UINT16 canWrapLineAfter : 1;
+    UINT16 isWhitespace : 1;
+    UINT16 isNewline : 1;
+    UINT16 isSoftHyphen : 1;
+    UINT16 isRightToLeft : 1;
+    UINT16 padding : 11;
+} DWRITE_CLUSTER_METRICS;
+
+typedef struct DWRITE_HIT_TEST_METRICS
+{
+    UINT32 textPosition;
+    UINT32 length;
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT height;
+    UINT32 bidiLevel;
+    BOOL isText;
+    BOOL isTrimmed;
+} DWRITE_HIT_TEST_METRICS;
+
+typedef struct DWRITE_SCRIPT_ANALYSIS
+{
+    UINT16 script;
+    DWRITE_SCRIPT_SHAPES shapes;
+} DWRITE_SCRIPT_ANALYSIS;
+
+typedef struct DWRITE_LINE_BREAKPOINT
+{
+    UINT8 breakConditionBefore : 2;
+    UINT8 breakConditionAfter : 2;
+    UINT8 isWhitespace : 1;
+    UINT8 isSoftHyphen : 1;
+    UINT8 padding : 2;
+} DWRITE_LINE_BREAKPOINT;
+
+typedef struct DWRITE_TYPOGRAPHIC_FEATURES
+{
+    DWRITE_FONT_FEATURE* features;
+    UINT32 featureCount;
+} DWRITE_TYPOGRAPHIC_FEATURES;
+
+typedef struct DWRITE_SHAPING_TEXT_PROPERTIES
+{
+    UINT16 isShapedAlone : 1;
+    UINT16 reserved1 : 1;
+    UINT16 canBreakShapingAfter : 1;
+    UINT16 reserved : 13;
+} DWRITE_SHAPING_TEXT_PROPERTIES;
+
+typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES
+{
+    UINT16 justification : 4;
+    UINT16 isClusterStart : 1;
+    UINT16 isDiacritic : 1;
+    UINT16 isZeroWidthSpace : 1;
+    UINT16 reserved : 9;
+} DWRITE_SHAPING_GLYPH_PROPERTIES;
+
+[
+local,
+object,
+uuid(6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0)
+]
+interface IDWriteFontFileStream : IUnknown
+{
+    HRESULT ReadFileFragment(
+        void const **fragment_start,
+        UINT64 offset,
+        UINT64 fragment_size,
+        void **fragment_context);
+
+    void ReleaseFileFragment(void *fragment_context);
+    HRESULT GetFileSize(UINT64 *size);
+    HRESULT GetLastWriteTime(UINT64 *last_writetime);
+}
+
+[
+local,
+object,
+uuid(727cad4e-d6af-4c9e-8a08-d695b11caa49)
+]
+interface IDWriteFontFileLoader : IUnknown
+{
+    HRESULT CreateStreamFromKey(
+        void const *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream);
+}
+
+[
+local,
+object,
+uuid(b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2)
+]
+interface IDWriteLocalFontFileLoader : IDWriteFontFileLoader
+{
+    HRESULT GetFilePathLengthFromKey(void const *key, UINT32 key_size, UINT32 *length);
+    HRESULT GetFilePathFromKey(void const *key, UINT32 key_size, WCHAR *path, UINT32 length);
+    HRESULT GetLastWriteTimeFromKey(void const *key, UINT32 key_size, FILETIME *writetime);
+}
+
+[
+local,
+object,
+uuid(739d886a-cef5-47dc-8769-1a8b41bebbb0)
+]
+interface IDWriteFontFile : IUnknown
+{
+    HRESULT GetReferenceKey(
+        void const **key,
+        UINT32 *key_size);
+
+    HRESULT GetLoader(IDWriteFontFileLoader **loader);
+
+    HRESULT Analyze(
+        BOOL *is_supported_fonttype,
+        DWRITE_FONT_FILE_TYPE *file_type,
+        DWRITE_FONT_FACE_TYPE *face_type,
+        UINT32 *faces_num);
+}
+
+[
+local,
+object,
+uuid(72755049-5ff7-435d-8348-4be97cfa6c7c)
+]
+interface IDWriteFontFileEnumerator : IUnknown
+{
+    HRESULT MoveNext(BOOL *has_current_file);
+    HRESULT GetCurrentFontFile(IDWriteFontFile **font_file);
+}
+
+[
+local,
+object,
+uuid(cca920e4-52f0-492b-bfa8-29c72ee0a468)
+]
+interface IDWriteFontCollectionLoader : IUnknown
+{
+    HRESULT CreateEnumeratorFromKey(
+        IDWriteFactory* factory,
+        void const* key,
+        UINT32 key_size,
+        IDWriteFontFileEnumerator **enumerator);
+}
+
+[
+local,
+object,
+uuid(08256209-099a-4b34-b86d-c22b110e7771)
+]
+interface IDWriteLocalizedStrings : IUnknown
+{
+    UINT32 GetCount();
+
+    HRESULT FindLocaleName(
+        WCHAR const *locale_name,
+        UINT32 *index,
+        BOOL *exists);
+
+    HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length);
+    HRESULT GetLocaleName(UINT32 index, WCHAR *locale_name, UINT32 size);
+    HRESULT GetStringLength(UINT32 index, UINT32 *length);
+    HRESULT GetString(UINT32 index, WCHAR *buffer, UINT32 size);
+}
+
+[
+local,
+object,
+uuid(2f0da53a-2add-47cd-82ee-d9ec34688e75)
+]
+interface IDWriteRenderingParams : IUnknown
+{
+    FLOAT GetGamma();
+    FLOAT GetEnhancedContrast();
+    FLOAT GetClearTypeLevel();
+    DWRITE_PIXEL_GEOMETRY GetPixelGeometry();
+    DWRITE_RENDERING_MODE GetRenderingMode();
+}
+
+[
+local,
+object,
+uuid(5f49804d-7024-4d43-bfa9-d25984f53849)
+]
+interface IDWriteFontFace : IUnknown
+{
+    DWRITE_FONT_FACE_TYPE GetType();
+    HRESULT GetFiles(UINT32 *number_of_files, IDWriteFontFile **fontfiles);
+    UINT32 GetIndex();
+    DWRITE_FONT_SIMULATIONS GetSimulations();
+    BOOL IsSymbolFont();
+    void GetMetrics(DWRITE_FONT_METRICS *metrics);
+    UINT16 GetGlyphCount();
+
+    HRESULT GetDesignGlyphMetrics(
+        UINT16 const *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        [defaultvalue(FALSE)] BOOL is_sideways);
+
+    HRESULT GetGlyphIndices(
+        UINT32 const *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT TryGetFontTable(
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        BOOL *exists);
+
+    void ReleaseFontTable(void *table_context);
+
+    HRESULT GetGlyphRunOutline(
+        FLOAT emSize,
+        UINT16 const *glyph_indices,
+        FLOAT const* glyph_advances,
+        DWRITE_GLYPH_OFFSET const *glyph_offsets,
+        UINT32 glyph_count,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT GetRecommendedRenderingMode(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams* params,
+        DWRITE_RENDERING_MODE* rendering_mode);
+
+    HRESULT GetGdiCompatibleMetrics(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT GetGdiCompatibleGlyphMetrics(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const *transform,
+        BOOL use_gdi_natural,
+        UINT16 const *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        [defaultvalue(FALSE)] BOOL is_sideways);
+}
+
+[
+local,
+object,
+uuid(acd16696-8c14-4f5d-877e-fe3fc1d32737)
+]
+interface IDWriteFont : IUnknown
+{
+    HRESULT GetFontFamily(IDWriteFontFamily **family);
+    DWRITE_FONT_WEIGHT GetWeight();
+    DWRITE_FONT_STRETCH GetStretch();
+    DWRITE_FONT_STYLE GetStyle();
+    BOOL IsSymbolFont();
+
+    HRESULT GetFaceNames(IDWriteLocalizedStrings **names);
+    HRESULT GetInformationalStrings(
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        BOOL *exists);
+
+    DWRITE_FONT_SIMULATIONS GetSimulations();
+    void GetMetrics(DWRITE_FONT_METRICS *metrics);
+    HRESULT HasCharacter(UINT32 value, BOOL *exists);
+    HRESULT CreateFontFace(IDWriteFontFace **face);
+}
+
+[
+local,
+object,
+uuid(1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb)
+]
+interface IDWriteFontList : IUnknown
+{
+    HRESULT GetFontCollection(IDWriteFontCollection **collection);
+    UINT32 GetFontCount();
+    HRESULT GetFont(UINT32 index, IDWriteFont **font);
+}
+
+[
+local,
+object,
+uuid(da20d8ef-812a-4c43-9802-62ec4abd7add)
+]
+interface IDWriteFontFamily : IDWriteFontList
+{
+    HRESULT GetFamilyNames(IDWriteLocalizedStrings **names);
+
+    HRESULT GetFirstMatchingFont(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFont **font);
+
+    HRESULT GetMatchingFonts(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontList **fonts);
+}
+
+[
+local,
+object,
+uuid(a84cee02-3eea-4eee-a827-87c1a02a0fcc)
+]
+interface IDWriteFontCollection : IUnknown
+{
+    UINT32 GetFontFamilyCount();
+    HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily **family);
+    HRESULT FindFamilyName(WCHAR const *name, UINT32 *index, BOOL *exists);
+    HRESULT GetFontFromFontFace(IDWriteFontFace *face, IDWriteFont **font);
+}
+
+[
+local,
+object,
+uuid(eaf3a2da-ecf4-4d24-b644-b34f6842024b)
+]
+interface IDWritePixelSnapping : IUnknown
+{
+    HRESULT IsPixelSnappingDisabled(
+        void *client_drawingcontext,
+        BOOL *disabled);
+
+    HRESULT GetCurrentTransform(
+        void *client_drawingcontext,
+        DWRITE_MATRIX *transform);
+
+    HRESULT GetPixelsPerDip(
+        void *client_drawingcontext,
+        FLOAT *pixels_per_dip);
+}
+
+[
+local,
+object,
+uuid(ef8a8135-5cc6-45fe-8825-c5a0724eb819)
+]
+interface IDWriteTextRenderer : IDWritePixelSnapping
+{
+    HRESULT DrawGlyphRun(
+        void* client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE mode,
+        DWRITE_GLYPH_RUN const *glyph_run,
+        DWRITE_GLYPH_RUN_DESCRIPTION const *run_descr,
+        IUnknown *drawing_effect);
+
+    HRESULT DrawUnderline(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_UNDERLINE const* underline,
+        IUnknown *drawing_effect);
+
+    HRESULT DrawStrikethrough(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_STRIKETHROUGH const* strikethrough,
+        IUnknown *drawing_effect);
+
+    HRESULT DrawInlineObject(
+        void *client_drawingcontext,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteInlineObject *object,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        IUnknown *drawing_effect);
+}
+
+[
+local,
+object,
+uuid(8339fde3-106f-47ab-8373-1c6295eb10b3)
+]
+interface IDWriteInlineObject : IUnknown
+{
+    HRESULT Draw(
+        void* client_drawingontext,
+        IDWriteTextRenderer* renderer,
+        FLOAT originX,
+        FLOAT originY,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        IUnknown *drawing_effect);
+
+    HRESULT GetMetrics(DWRITE_INLINE_OBJECT_METRICS *metrics);
+    HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);
+    HRESULT GetBreakConditions(
+        DWRITE_BREAK_CONDITION* condition_before,
+        DWRITE_BREAK_CONDITION* condition_after);
+}
+
+[
+local,
+object,
+uuid(9c906818-31d7-4fd3-a151-7c5e225db55a)
+]
+interface IDWriteTextFormat : IUnknown
+{
+    HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT alignment);
+    HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT alignment);
+    HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wrapping);
+    HRESULT SetReadingDirection(DWRITE_READING_DIRECTION direction);
+    HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION direction);
+    HRESULT SetIncrementalTabStop(FLOAT tabstop);
+    HRESULT SetTrimming(DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign);
+    HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline);
+    DWRITE_TEXT_ALIGNMENT GetTextAlignment();
+    DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment();
+    DWRITE_WORD_WRAPPING GetWordWrapping();
+    DWRITE_READING_DIRECTION GetReadingDirection();
+    DWRITE_FLOW_DIRECTION GetFlowDirection();
+    FLOAT GetIncrementalTabStop();
+    HRESULT GetTrimming(DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign);
+
+    HRESULT GetLineSpacing(
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT GetFontCollection(IDWriteFontCollection **collection);
+    UINT32 GetFontFamilyNameLength();
+    HRESULT GetFontFamilyName(WCHAR *name, UINT32 size);
+    DWRITE_FONT_WEIGHT GetFontWeight();
+    DWRITE_FONT_STYLE GetFontStyle();
+    DWRITE_FONT_STRETCH GetFontStretch();
+    FLOAT GetFontSize();
+    UINT32 GetLocaleNameLength();
+    HRESULT GetLocaleName(WCHAR *name, UINT32 size);
+}
+
+[
+local,
+object,
+uuid(55f1112b-1dc2-4b3c-9541-f46894ed85b6)
+]
+interface IDWriteTypography : IUnknown
+{
+    HRESULT AddFontFeature(DWRITE_FONT_FEATURE feature);
+    UINT32 GetFontFeatureCount();
+    HRESULT GetFontFeature(UINT32 index, DWRITE_FONT_FEATURE *feature);
+}
+
+[
+local,
+object,
+uuid(5e5a32a3-8dff-4773-9ff6-0696eab77267)
+]
+interface IDWriteBitmapRenderTarget : IUnknown
+{
+    HRESULT DrawGlyphRun(
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GLYPH_RUN const* glyph_run,
+        IDWriteRenderingParams* params,
+        COLORREF textColor,
+        [defaultvalue(NULL)] RECT *blackbox_rect);
+
+    HDC GetMemoryDC();
+    FLOAT GetPixelsPerDip();
+    HRESULT SetPixelsPerDip(FLOAT pixels_per_dip);
+    HRESULT GetCurrentTransform(DWRITE_MATRIX *transform);
+    HRESULT SetCurrentTransform(DWRITE_MATRIX const *transform);
+    HRESULT GetSize(SIZE *size);
+    HRESULT Resize(UINT32 width, UINT32 height);
+}
+
+cpp_quote("#ifndef _WINGDI_")
+/* already defined in wingdi.h but needed for WIDL */
+#define LF_FACESIZE     32
+
+    typedef struct tagLOGFONTW
+    {
+        LONG   lfHeight;
+        LONG   lfWidth;
+        LONG   lfEscapement;
+        LONG   lfOrientation;
+        LONG   lfWeight;
+        BYTE   lfItalic;
+        BYTE   lfUnderline;
+        BYTE   lfStrikeOut;
+        BYTE   lfCharSet;
+        BYTE   lfOutPrecision;
+        BYTE   lfClipPrecision;
+        BYTE   lfQuality;
+        BYTE   lfPitchAndFamily;
+        WCHAR  lfFaceName[LF_FACESIZE];
+    } LOGFONTW, *PLOGFONTW, *LPLOGFONTW;
+cpp_quote("#endif /* _WINGDI_ */")
+
+[
+local,
+object,
+uuid(1edd9491-9853-4299-898f-6432983b6f3a)
+]
+interface IDWriteGdiInterop : IUnknown
+{
+    HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFont **font);
+    HRESULT ConvertFontToLOGFONT(
+        IDWriteFont* font,
+        LOGFONTW* logfont,
+        BOOL *is_systemfont);
+
+    HRESULT ConvertFontFaceToLOGFONT(IDWriteFontFace* font, LOGFONTW* logfont);
+    HRESULT CreateFontFaceFromHdc(HDC hdc, IDWriteFontFace **fontface);
+    HRESULT CreateBitmapRenderTarget(HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target);
+}
+
+[
+local,
+object,
+uuid(53737037-6d14-410b-9bfe-0b182bb70961)
+]
+interface IDWriteTextLayout : IDWriteTextFormat
+{
+    HRESULT SetMaxWidth(FLOAT maxWidth);
+    HRESULT SetMaxHeight(FLOAT maxHeight);
+    HRESULT SetFontCollection(IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontFamilyName(WCHAR const *name, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontWeight(DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontStyle(DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontStretch(DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontSize(FLOAT size, DWRITE_TEXT_RANGE range);
+    HRESULT SetUnderline(BOOL underline, DWRITE_TEXT_RANGE range);
+    HRESULT SetStrikethrough(BOOL strikethrough, DWRITE_TEXT_RANGE range);
+    HRESULT SetDrawingEffect(IUnknown* effect, DWRITE_TEXT_RANGE range);
+    HRESULT SetInlineObject(IDWriteInlineObject *object, DWRITE_TEXT_RANGE range);
+    HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE range);
+    HRESULT SetLocaleName(WCHAR const* locale, DWRITE_TEXT_RANGE range);
+
+    FLOAT GetMaxWidth();
+    FLOAT GetMaxHeight();
+    HRESULT GetFontCollection(
+        UINT32 pos,
+        IDWriteFontCollection** collection,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontFamilyNameLength(
+        UINT32 pos,
+        UINT32* len,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontFamilyName(
+        UINT32 position,
+        WCHAR* name,
+        UINT32 name_size,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontWeight(
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontStyle(
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontStretch(
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontSize(
+        UINT32 position,
+        FLOAT *size,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetUnderline(
+        UINT32 position,
+        BOOL *has_underline,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetStrikethrough(
+        UINT32 position,
+        BOOL *has_strikethrough,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetDrawingEffect(
+        UINT32 position,
+        IUnknown **effect,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetInlineObject(
+        UINT32 position,
+        IDWriteInlineObject **object,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetTypography(
+        UINT32 position,
+        IDWriteTypography** typography,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetLocaleNameLength(
+        UINT32 position,
+        UINT32* length,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetLocaleName(
+        UINT32 position,
+        WCHAR* name,
+        UINT32 name_size,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT Draw(
+        void *context,
+        IDWriteTextRenderer* renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT GetLineMetrics(
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT GetMetrics(DWRITE_TEXT_METRICS *metrics);
+    HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);
+    HRESULT GetClusterMetrics(
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32* act_count);
+
+    HRESULT DetermineMinWidth(FLOAT* min_width);
+    HRESULT HitTestPoint(
+        FLOAT pointX,
+        FLOAT pointY,
+        BOOL* is_trailinghit,
+        BOOL* is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT HitTestTextPosition(
+        UINT32 textPosition,
+        BOOL is_trailinghit,
+        FLOAT* pointX,
+        FLOAT* pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT HitTestTextRange(
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32* actual_metricscount);
+}
+
+[
+local,
+object,
+uuid(14885cc9-bab0-4f90-b6ed-5c366a2cd03d)
+]
+interface IDWriteNumberSubstitution : IUnknown
+{
+}
+
+[
+local,
+object,
+uuid(688e1a58-5094-47c8-adc8-fbcea60ae92b)
+]
+interface IDWriteTextAnalysisSource : IUnknown
+{
+    HRESULT GetTextAtPosition(
+        UINT32 position,
+        WCHAR const** text,
+        UINT32* text_len);
+
+    HRESULT GetTextBeforePosition(
+        UINT32 position,
+        WCHAR const** text,
+        UINT32* text_len);
+
+    DWRITE_READING_DIRECTION GetParagraphReadingDirection();
+    HRESULT GetLocaleName(
+        UINT32 position,
+        UINT32* text_len,
+        WCHAR const** locale);
+
+    HRESULT GetNumberSubstitution(
+        UINT32 position,
+        UINT32* text_len,
+        IDWriteNumberSubstitution **substitution);
+}
+
+[
+local,
+object,
+uuid(5810cd44-0ca0-4701-b3fa-bec5182ae4f6)
+]
+interface IDWriteTextAnalysisSink : IUnknown
+{
+    HRESULT SetScriptAnalysis(
+        UINT32 position,
+        UINT32 length,
+        DWRITE_SCRIPT_ANALYSIS const* scriptanalysis);
+
+    HRESULT SetLineBreakpoints(
+        UINT32 position,
+        UINT32 length,
+        DWRITE_LINE_BREAKPOINT const* breakpoints);
+
+    HRESULT SetBidiLevel(
+        UINT32 position,
+        UINT32 length,
+        UINT8 explicitLevel,
+        UINT8 resolvedLevel);
+
+    HRESULT SetNumberSubstitution(
+        UINT32 position,
+        UINT32 length,
+        IDWriteNumberSubstitution* substitution);
+}
+
+[
+local,
+object,
+uuid(b7e6163e-7f46-43b4-84b3-e4e6249c365d)
+]
+interface IDWriteTextAnalyzer : IUnknown
+{
+    HRESULT AnalyzeScript(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT AnalyzeBidi(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT AnalyzeNumberSubstitution(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT AnalyzeLineBreakpoints(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT GetGlyphs(
+        WCHAR const* text,
+        UINT32 length,
+        IDWriteFontFace* font_face,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        DWRITE_SCRIPT_ANALYSIS const* analysis,
+        WCHAR const* locale,
+        IDWriteNumberSubstitution* substitution,
+        DWRITE_TYPOGRAPHIC_FEATURES const** features,
+        UINT32 const* feature_range_len,
+        UINT32 feature_ranges,
+        UINT32 max_glyph_count,
+        UINT16* clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES* text_props,
+        UINT16* glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES* glyph_props,
+        UINT32* actual_glyph_count);
+
+    HRESULT GetGlyphPlacements(
+        WCHAR const* text,
+        UINT16 const* clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES* props,
+        UINT32 text_len,
+        UINT16 const* glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace * font_face,
+        FLOAT fontEmSize,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        DWRITE_SCRIPT_ANALYSIS const* analysis,
+        WCHAR const* locale,
+        DWRITE_TYPOGRAPHIC_FEATURES const** features,
+        UINT32 const* feature_range_len,
+        UINT32 feature_ranges,
+        FLOAT* glyph_advances,
+        DWRITE_GLYPH_OFFSET* glyph_offsets);
+
+    HRESULT GetGdiCompatibleGlyphPlacements(
+        WCHAR const* text,
+        UINT16 const* clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES* props,
+        UINT32 text_len,
+        UINT16 const* glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace * font_face,
+        FLOAT fontEmSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const* transform,
+        BOOL use_gdi_natural,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        DWRITE_SCRIPT_ANALYSIS const* analysis,
+        WCHAR const* locale,
+        DWRITE_TYPOGRAPHIC_FEATURES const** features,
+        UINT32 const* feature_range_lengths,
+        UINT32 feature_ranges,
+        FLOAT* glyph_advances,
+        DWRITE_GLYPH_OFFSET* glyph_offsets);
+}
+
+[
+local,
+object,
+uuid(7d97dbf7-e085-42d4-81e3-6a883bded118)
+]
+interface IDWriteGlyphRunAnalysis : IUnknown
+{
+    HRESULT GetAlphaTextureBounds(DWRITE_TEXTURE_TYPE type, RECT* bounds);
+    HRESULT CreateAlphaTexture(DWRITE_TEXTURE_TYPE type, RECT const* bounds, BYTE* alphaValues, UINT32 bufferSize);
+    HRESULT GetAlphaBlendParams(
+        IDWriteRenderingParams* renderingParams,
+        FLOAT* blendGamma,
+        FLOAT* blendEnhancedContrast,
+        FLOAT* blendClearTypeLevel);
+}
+
+[
+local,
+object,
+uuid(b859ee5a-d838-4b5b-a2e8-1adc7d93db48)
+]
+interface IDWriteFactory : IUnknown
+{
+    HRESULT GetSystemFontCollection(IDWriteFontCollection **collection,
+                                    [defaultvalue(FALSE)] BOOL check_for_updates);
+
+    HRESULT CreateCustomFontCollection(
+        IDWriteFontCollectionLoader *loader,
+        void const *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT RegisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);
+
+    HRESULT UnregisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);
+
+    HRESULT CreateFontFileReference(
+        WCHAR const *path,
+        FILETIME const *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT CreateCustomFontFileReference(
+        void const *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT CreateFontFace(
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile* const* font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT CreateRenderingParams(IDWriteRenderingParams **params);
+
+    HRESULT CreateMonitorRenderingParams(
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT CreateCustomRenderingParams(
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT RegisterFontFileLoader(IDWriteFontFileLoader *loader);
+
+    HRESULT UnregisterFontFileLoader(IDWriteFontFileLoader *loader);
+
+    HRESULT CreateTextFormat(
+        WCHAR const* family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        WCHAR const *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT CreateTypography(IDWriteTypography **typography);
+
+    HRESULT GetGdiInterop(IDWriteGdiInterop **gdi_interop);
+
+    HRESULT CreateTextLayout(
+        WCHAR const* string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT CreateGdiCompatibleTextLayout(
+        WCHAR const* string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const* transform,
+        BOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT CreateEllipsisTrimmingSign(
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT CreateTextAnalyzer(IDWriteTextAnalyzer **analyzer);
+
+    HRESULT CreateNumberSubstitution(
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        WCHAR const* locale,
+        BOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT CreateGlyphRunAnalysis(
+        DWRITE_GLYPH_RUN const *glyph_run,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const* transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+}
+
+cpp_quote("HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE,REFIID,IUnknown**);")
+
+/* error codes */
+cpp_quote("#define FACILITY_DWRITE 0x898")
+cpp_quote("#define DWRITE_ERR_BASE 0x5000")
+cpp_quote("#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))")
+cpp_quote("#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)")
diff --git a/mingw-w64-headers/include/dwrite_1.h b/mingw-w64-headers/include/dwrite_1.h
index 527c80f..c226af2 100644
--- a/mingw-w64-headers/include/dwrite_1.h
+++ b/mingw-w64-headers/include/dwrite_1.h
@@ -1,114 +1,464 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
+/*** Autogenerated by WIDL 5.13 from include/dwrite_1.idl - Do not edit ***/
 
-#ifndef DWRITE_1_H_INCLUDED
-#define DWRITE_1_H_INCLUDED
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
 
-#include <dwrite.h>
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
 
-#ifndef __IDWriteFont1_FWD_DEFINED__
-#define __IDWriteFont1_FWD_DEFINED__
-typedef struct IDWriteFont1 IDWriteFont1;
+#ifndef __dwrite_1_h__
+#define __dwrite_1_h__
+
+/* Forward declarations */
+
+#ifndef __IDWriteFactory1_FWD_DEFINED__
+#define __IDWriteFactory1_FWD_DEFINED__
+typedef interface IDWriteFactory1 IDWriteFactory1;
+#ifdef __cplusplus
+interface IDWriteFactory1;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteFontFace1_FWD_DEFINED__
 #define __IDWriteFontFace1_FWD_DEFINED__
-typedef struct IDWriteFontFace1 IDWriteFontFace1;
+typedef interface IDWriteFontFace1 IDWriteFontFace1;
+#ifdef __cplusplus
+interface IDWriteFontFace1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFont1_FWD_DEFINED__
+#define __IDWriteFont1_FWD_DEFINED__
+typedef interface IDWriteFont1 IDWriteFont1;
+#ifdef __cplusplus
+interface IDWriteFont1;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteRenderingParams1_FWD_DEFINED__
 #define __IDWriteRenderingParams1_FWD_DEFINED__
-typedef struct IDWriteRenderingParams1 IDWriteRenderingParams1;
-#endif
-
-#ifndef __IDWriteTextAnalysisSource1_FWD_DEFINED__
-#define __IDWriteTextAnalysisSource1_FWD_DEFINED__
-typedef struct IDWriteTextAnalysisSource1 IDWriteTextAnalysisSource1;
-#endif
-
-#ifndef __IDWriteTextAnalysisSink1_FWD_DEFINED__
-#define __IDWriteTextAnalysisSink1_FWD_DEFINED__
-typedef struct IDWriteTextAnalysisSink1 IDWriteTextAnalysisSink1;
+typedef interface IDWriteRenderingParams1 IDWriteRenderingParams1;
+#ifdef __cplusplus
+interface IDWriteRenderingParams1;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteTextAnalyzer1_FWD_DEFINED__
 #define __IDWriteTextAnalyzer1_FWD_DEFINED__
-typedef struct IDWriteTextAnalyzer1 IDWriteTextAnalyzer1;
+typedef interface IDWriteTextAnalyzer1 IDWriteTextAnalyzer1;
+#ifdef __cplusplus
+interface IDWriteTextAnalyzer1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextAnalysisSource1_FWD_DEFINED__
+#define __IDWriteTextAnalysisSource1_FWD_DEFINED__
+typedef interface IDWriteTextAnalysisSource1 IDWriteTextAnalysisSource1;
+#ifdef __cplusplus
+interface IDWriteTextAnalysisSource1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextAnalysisSink1_FWD_DEFINED__
+#define __IDWriteTextAnalysisSink1_FWD_DEFINED__
+typedef interface IDWriteTextAnalysisSink1 IDWriteTextAnalysisSink1;
+#ifdef __cplusplus
+interface IDWriteTextAnalysisSink1;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteTextLayout1_FWD_DEFINED__
 #define __IDWriteTextLayout1_FWD_DEFINED__
-typedef struct IDWriteTextLayout1 IDWriteTextLayout1;
-#endif
-
-#ifndef __IDWriteFactory1_FWD_DEFINED__
-#define __IDWriteFactory1_FWD_DEFINED__
-typedef struct IDWriteFactory1 IDWriteFactory1;
+typedef interface IDWriteTextLayout1 IDWriteTextLayout1;
+#ifdef __cplusplus
+interface IDWriteTextLayout1;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDWriteBitmapRenderTarget1_FWD_DEFINED__
 #define __IDWriteBitmapRenderTarget1_FWD_DEFINED__
-typedef struct IDWriteBitmapRenderTarget1 IDWriteBitmapRenderTarget1;
-#endif
-
-enum DWRITE_OUTLINE_THRESHOLD {
-    DWRITE_OUTLINE_THRESHOLD_ANTIALIASED,
-    DWRITE_OUTLINE_THRESHOLD_ALIASED
-};
-
-enum DWRITE_BASELINE
-{
-    DWRITE_BASELINE_DEFAULT,
-    DWRITE_BASELINE_ROMAN,
-    DWRITE_BASELINE_CENTRAL,
-    DWRITE_BASELINE_MATH,
-    DWRITE_BASELINE_HANGING,
-    DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM,
-    DWRITE_BASELINE_IDEOGRAPHIC_TOP,
-    DWRITE_BASELINE_MINIMUM,
-    DWRITE_BASELINE_MAXIMUM,
-};
-
-enum DWRITE_GLYPH_ORIENTATION_ANGLE
-{
-    DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES,
-    DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES,
-    DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES,
-    DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES,
-};
-
-enum DWRITE_TEXT_ANTIALIAS_MODE
-{
-    DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
-    DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE
-};
-
-enum DWRITE_VERTICAL_GLYPH_ORIENTATION
-{
-    DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT,
-    DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED
-};
-
-struct DWRITE_CARET_METRICS {
-    INT16 slopeRise;
-    INT16 slopeRun;
-    INT16 offset;
-};
-
-struct DWRITE_UNICODE_RANGE {
-    UINT32 first;
-    UINT32 last;
-};
-
-struct DWRITE_FONT_METRICS1
+typedef interface IDWriteBitmapRenderTarget1 IDWriteBitmapRenderTarget1;
 #ifdef __cplusplus
-    : public DWRITE_FONT_METRICS
+interface IDWriteBitmapRenderTarget1;
+#endif /* __cplusplus */
 #endif
-{
-#ifndef __cplusplus
+
+/* Headers for imported files */
+
+#include <dwrite.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum DWRITE_PANOSE_FAMILY {
+    DWRITE_PANOSE_FAMILY_ANY = 0,
+    DWRITE_PANOSE_FAMILY_NO_FIT = 1,
+    DWRITE_PANOSE_FAMILY_TEXT_DISPLAY = 2,
+    DWRITE_PANOSE_FAMILY_SCRIPT = 3,
+    DWRITE_PANOSE_FAMILY_DECORATIVE = 4,
+    DWRITE_PANOSE_FAMILY_SYMBOL = 5,
+    DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY_SYMBOL
+} DWRITE_PANOSE_FAMILY;
+typedef enum DWRITE_PANOSE_SERIF_STYLE {
+    DWRITE_PANOSE_SERIF_STYLE_ANY = 0,
+    DWRITE_PANOSE_SERIF_STYLE_NO_FIT = 1,
+    DWRITE_PANOSE_SERIF_STYLE_COVE = 2,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE = 3,
+    DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE = 4,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE = 5,
+    DWRITE_PANOSE_SERIF_STYLE_SQUARE = 6,
+    DWRITE_PANOSE_SERIF_STYLE_THIN = 7,
+    DWRITE_PANOSE_SERIF_STYLE_OVAL = 8,
+    DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED = 9,
+    DWRITE_PANOSE_SERIF_STYLE_TRIANGLE = 10,
+    DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS = 11,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS = 12,
+    DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS = 13,
+    DWRITE_PANOSE_SERIF_STYLE_FLARED = 14,
+    DWRITE_PANOSE_SERIF_STYLE_ROUNDED = 15,
+    DWRITE_PANOSE_SERIF_STYLE_SCRIPT = 16,
+    DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE_OVAL
+} DWRITE_PANOSE_SERIF_STYLE;
+typedef enum DWRITE_PANOSE_WEIGHT {
+    DWRITE_PANOSE_WEIGHT_ANY = 0,
+    DWRITE_PANOSE_WEIGHT_NO_FIT = 1,
+    DWRITE_PANOSE_WEIGHT_VERY_LIGHT = 2,
+    DWRITE_PANOSE_WEIGHT_LIGHT = 3,
+    DWRITE_PANOSE_WEIGHT_THIN = 4,
+    DWRITE_PANOSE_WEIGHT_BOOK = 5,
+    DWRITE_PANOSE_WEIGHT_MEDIUM = 6,
+    DWRITE_PANOSE_WEIGHT_DEMI = 7,
+    DWRITE_PANOSE_WEIGHT_BOLD = 8,
+    DWRITE_PANOSE_WEIGHT_HEAVY = 9,
+    DWRITE_PANOSE_WEIGHT_BLACK = 10,
+    DWRITE_PANOSE_WEIGHT_EXTRA_BLACK = 11,
+    DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT_EXTRA_BLACK
+} DWRITE_PANOSE_WEIGHT;
+typedef enum DWRITE_PANOSE_PROPORTION {
+    DWRITE_PANOSE_PROPORTION_ANY = 0,
+    DWRITE_PANOSE_PROPORTION_NO_FIT = 1,
+    DWRITE_PANOSE_PROPORTION_OLD_STYLE = 2,
+    DWRITE_PANOSE_PROPORTION_MODERN = 3,
+    DWRITE_PANOSE_PROPORTION_EVEN_WIDTH = 4,
+    DWRITE_PANOSE_PROPORTION_EXPANDED = 5,
+    DWRITE_PANOSE_PROPORTION_CONDENSED = 6,
+    DWRITE_PANOSE_PROPORTION_VERY_EXPANDED = 7,
+    DWRITE_PANOSE_PROPORTION_VERY_CONDENSED = 8,
+    DWRITE_PANOSE_PROPORTION_MONOSPACED = 9
+} DWRITE_PANOSE_PROPORTION;
+typedef enum DWRITE_PANOSE_CONTRAST {
+    DWRITE_PANOSE_CONTRAST_ANY = 0,
+    DWRITE_PANOSE_CONTRAST_NO_FIT = 1,
+    DWRITE_PANOSE_CONTRAST_NONE = 2,
+    DWRITE_PANOSE_CONTRAST_VERY_LOW = 3,
+    DWRITE_PANOSE_CONTRAST_LOW = 4,
+    DWRITE_PANOSE_CONTRAST_MEDIUM_LOW = 5,
+    DWRITE_PANOSE_CONTRAST_MEDIUM = 6,
+    DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH = 7,
+    DWRITE_PANOSE_CONTRAST_HIGH = 8,
+    DWRITE_PANOSE_CONTRAST_VERY_HIGH = 9,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW = 10,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM = 11,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH = 12,
+    DWRITE_PANOSE_CONTRAST_BROKEN = 13
+} DWRITE_PANOSE_CONTRAST;
+typedef enum DWRITE_PANOSE_STROKE_VARIATION {
+    DWRITE_PANOSE_STROKE_VARIATION_ANY = 0,
+    DWRITE_PANOSE_STROKE_VARIATION_NO_FIT = 1,
+    DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION = 2,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL = 3,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL = 4,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL = 5,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL = 6,
+    DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL = 7,
+    DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL = 8,
+    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL = 9,
+    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL = 10
+} DWRITE_PANOSE_STROKE_VARIATION;
+typedef enum DWRITE_PANOSE_ARM_STYLE {
+    DWRITE_PANOSE_ARM_STYLE_ANY = 0,
+    DWRITE_PANOSE_ARM_STYLE_NO_FIT = 1,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL = 2,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE = 3,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL = 4,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF = 5,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF = 6,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL = 7,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE = 8,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL = 9,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF = 10,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF = 11,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF
+} DWRITE_PANOSE_ARM_STYLE;
+typedef enum DWRITE_PANOSE_LETTERFORM {
+    DWRITE_PANOSE_LETTERFORM_ANY = 0,
+    DWRITE_PANOSE_LETTERFORM_NO_FIT = 1,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT = 2,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED = 3,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED = 4,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED = 5,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED = 6,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER = 7,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE = 8,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT = 9,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED = 10,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED = 11,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED = 12,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED = 13,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER = 14,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE = 15
+} DWRITE_PANOSE_LETTERFORM;
+typedef enum DWRITE_PANOSE_MIDLINE {
+    DWRITE_PANOSE_MIDLINE_ANY = 0,
+    DWRITE_PANOSE_MIDLINE_NO_FIT = 1,
+    DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED = 2,
+    DWRITE_PANOSE_MIDLINE_STANDARD_POINTED = 3,
+    DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED = 4,
+    DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED = 5,
+    DWRITE_PANOSE_MIDLINE_HIGH_POINTED = 6,
+    DWRITE_PANOSE_MIDLINE_HIGH_SERIFED = 7,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED = 8,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED = 9,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED = 10,
+    DWRITE_PANOSE_MIDLINE_LOW_TRIMMED = 11,
+    DWRITE_PANOSE_MIDLINE_LOW_POINTED = 12,
+    DWRITE_PANOSE_MIDLINE_LOW_SERIFED = 13
+} DWRITE_PANOSE_MIDLINE;
+typedef enum DWRITE_PANOSE_XHEIGHT {
+    DWRITE_PANOSE_XHEIGHT_ANY = 0,
+    DWRITE_PANOSE_XHEIGHT_NO_FIT = 1,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL = 2,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD = 3,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE = 4,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL = 5,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD = 6,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE = 7,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD
+} DWRITE_PANOSE_XHEIGHT;
+typedef enum DWRITE_PANOSE_TOOL_KIND {
+    DWRITE_PANOSE_TOOL_KIND_ANY = 0,
+    DWRITE_PANOSE_TOOL_KIND_NO_FIT = 1,
+    DWRITE_PANOSE_TOOL_KIND_FLAT_NIB = 2,
+    DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT = 3,
+    DWRITE_PANOSE_TOOL_KIND_ENGRAVED = 4,
+    DWRITE_PANOSE_TOOL_KIND_BALL = 5,
+    DWRITE_PANOSE_TOOL_KIND_BRUSH = 6,
+    DWRITE_PANOSE_TOOL_KIND_ROUGH = 7,
+    DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP = 8,
+    DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH = 9
+} DWRITE_PANOSE_TOOL_KIND;
+typedef enum DWRITE_PANOSE_SPACING {
+    DWRITE_PANOSE_SPACING_ANY = 0,
+    DWRITE_PANOSE_SPACING_NO_FIT = 1,
+    DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED = 2,
+    DWRITE_PANOSE_SPACING_MONOSPACED = 3
+} DWRITE_PANOSE_SPACING;
+typedef enum DWRITE_PANOSE_ASPECT_RATIO {
+    DWRITE_PANOSE_ASPECT_RATIO_ANY = 0,
+    DWRITE_PANOSE_ASPECT_RATIO_NO_FIT = 1,
+    DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED = 2,
+    DWRITE_PANOSE_ASPECT_RATIO_CONDENSED = 3,
+    DWRITE_PANOSE_ASPECT_RATIO_NORMAL = 4,
+    DWRITE_PANOSE_ASPECT_RATIO_EXPANDED = 5,
+    DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED = 6
+} DWRITE_PANOSE_ASPECT_RATIO;
+typedef enum DWRITE_PANOSE_SCRIPT_TOPOLOGY {
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY = 0,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT = 1,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED = 2,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING = 3,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED = 4,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED = 5,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING = 6,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED = 7,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED = 8,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING = 9,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED = 10
+} DWRITE_PANOSE_SCRIPT_TOPOLOGY;
+typedef enum DWRITE_PANOSE_SCRIPT_FORM {
+    DWRITE_PANOSE_SCRIPT_FORM_ANY = 0,
+    DWRITE_PANOSE_SCRIPT_FORM_NO_FIT = 1,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING = 2,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING = 3,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING = 4,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING = 5,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING = 6,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING = 7,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING = 8,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING = 9,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING = 10,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING = 11,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING = 12,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING = 13
+} DWRITE_PANOSE_SCRIPT_FORM;
+typedef enum DWRITE_PANOSE_FINIALS {
+    DWRITE_PANOSE_FINIALS_ANY = 0,
+    DWRITE_PANOSE_FINIALS_NO_FIT = 1,
+    DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS = 2,
+    DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS = 3,
+    DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS = 4,
+    DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS = 5,
+    DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS = 6,
+    DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS = 7,
+    DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS = 8,
+    DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS = 9,
+    DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS = 10,
+    DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS = 11,
+    DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS = 12,
+    DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS = 13
+} DWRITE_PANOSE_FINIALS;
+typedef enum DWRITE_PANOSE_XASCENT {
+    DWRITE_PANOSE_XASCENT_ANY = 0,
+    DWRITE_PANOSE_XASCENT_NO_FIT = 1,
+    DWRITE_PANOSE_XASCENT_VERY_LOW = 2,
+    DWRITE_PANOSE_XASCENT_LOW = 3,
+    DWRITE_PANOSE_XASCENT_MEDIUM = 4,
+    DWRITE_PANOSE_XASCENT_HIGH = 5,
+    DWRITE_PANOSE_XASCENT_VERY_HIGH = 6
+} DWRITE_PANOSE_XASCENT;
+typedef enum DWRITE_PANOSE_DECORATIVE_CLASS {
+    DWRITE_PANOSE_DECORATIVE_CLASS_ANY = 0,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT = 1,
+    DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE = 2,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY = 3,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS = 4,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT = 5,
+    DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS = 6,
+    DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON = 7,
+    DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS = 8,
+    DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED = 9,
+    DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND = 10,
+    DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE = 11,
+    DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE = 12
+} DWRITE_PANOSE_DECORATIVE_CLASS;
+typedef enum DWRITE_PANOSE_ASPECT {
+    DWRITE_PANOSE_ASPECT_ANY = 0,
+    DWRITE_PANOSE_ASPECT_NO_FIT = 1,
+    DWRITE_PANOSE_ASPECT_SUPER_CONDENSED = 2,
+    DWRITE_PANOSE_ASPECT_VERY_CONDENSED = 3,
+    DWRITE_PANOSE_ASPECT_CONDENSED = 4,
+    DWRITE_PANOSE_ASPECT_NORMAL = 5,
+    DWRITE_PANOSE_ASPECT_EXTENDED = 6,
+    DWRITE_PANOSE_ASPECT_VERY_EXTENDED = 7,
+    DWRITE_PANOSE_ASPECT_SUPER_EXTENDED = 8,
+    DWRITE_PANOSE_ASPECT_MONOSPACED = 9
+} DWRITE_PANOSE_ASPECT;
+typedef enum DWRITE_PANOSE_FILL {
+    DWRITE_PANOSE_FILL_ANY = 0,
+    DWRITE_PANOSE_FILL_NO_FIT = 1,
+    DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL = 2,
+    DWRITE_PANOSE_FILL_NO_FILL = 3,
+    DWRITE_PANOSE_FILL_PATTERNED_FILL = 4,
+    DWRITE_PANOSE_FILL_COMPLEX_FILL = 5,
+    DWRITE_PANOSE_FILL_SHAPED_FILL = 6,
+    DWRITE_PANOSE_FILL_DRAWN_DISTRESSED = 7
+} DWRITE_PANOSE_FILL;
+typedef enum DWRITE_PANOSE_LINING {
+    DWRITE_PANOSE_LINING_ANY = 0,
+    DWRITE_PANOSE_LINING_NO_FIT = 1,
+    DWRITE_PANOSE_LINING_NONE = 2,
+    DWRITE_PANOSE_LINING_INLINE = 3,
+    DWRITE_PANOSE_LINING_OUTLINE = 4,
+    DWRITE_PANOSE_LINING_ENGRAVED = 5,
+    DWRITE_PANOSE_LINING_SHADOW = 6,
+    DWRITE_PANOSE_LINING_RELIEF = 7,
+    DWRITE_PANOSE_LINING_BACKDROP = 8
+} DWRITE_PANOSE_LINING;
+typedef enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY {
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY = 0,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT = 1,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD = 2,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE = 3,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT = 4,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO = 5,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING = 6,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS = 7,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS = 8,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS = 9,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE = 10,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY = 11,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A = 12,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE = 13,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER = 14,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE = 15
+} DWRITE_PANOSE_DECORATIVE_TOPOLOGY;
+typedef enum DWRITE_PANOSE_CHARACTER_RANGES {
+    DWRITE_PANOSE_CHARACTER_RANGES_ANY = 0,
+    DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT = 1,
+    DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION = 2,
+    DWRITE_PANOSE_CHARACTER_RANGES_LITERALS = 3,
+    DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE = 4,
+    DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS = 5
+} DWRITE_PANOSE_CHARACTER_RANGES;
+typedef enum DWRITE_PANOSE_SYMBOL_KIND {
+    DWRITE_PANOSE_SYMBOL_KIND_ANY = 0,
+    DWRITE_PANOSE_SYMBOL_KIND_NO_FIT = 1,
+    DWRITE_PANOSE_SYMBOL_KIND_MONTAGES = 2,
+    DWRITE_PANOSE_SYMBOL_KIND_PICTURES = 3,
+    DWRITE_PANOSE_SYMBOL_KIND_SHAPES = 4,
+    DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC = 5,
+    DWRITE_PANOSE_SYMBOL_KIND_MUSIC = 6,
+    DWRITE_PANOSE_SYMBOL_KIND_EXPERT = 7,
+    DWRITE_PANOSE_SYMBOL_KIND_PATTERNS = 8,
+    DWRITE_PANOSE_SYMBOL_KIND_BOARDERS = 9,
+    DWRITE_PANOSE_SYMBOL_KIND_ICONS = 10,
+    DWRITE_PANOSE_SYMBOL_KIND_LOGOS = 11,
+    DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC = 12
+} DWRITE_PANOSE_SYMBOL_KIND;
+typedef enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO {
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY = 0,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT = 1,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH = 2,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE = 3,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE = 4,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE = 5,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE = 6,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL = 7,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW = 8,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW = 9
+} DWRITE_PANOSE_SYMBOL_ASPECT_RATIO;
+typedef enum DWRITE_OUTLINE_THRESHOLD {
+    DWRITE_OUTLINE_THRESHOLD_ANTIALIASED = 0,
+    DWRITE_OUTLINE_THRESHOLD_ALIASED = 1
+} DWRITE_OUTLINE_THRESHOLD;
+typedef enum DWRITE_BASELINE {
+    DWRITE_BASELINE_DEFAULT = 0,
+    DWRITE_BASELINE_ROMAN = 1,
+    DWRITE_BASELINE_CENTRAL = 2,
+    DWRITE_BASELINE_MATH = 3,
+    DWRITE_BASELINE_HANGING = 4,
+    DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM = 5,
+    DWRITE_BASELINE_IDEOGRAPHIC_TOP = 6,
+    DWRITE_BASELINE_MINIMUM = 7,
+    DWRITE_BASELINE_MAXIMUM = 8
+} DWRITE_BASELINE;
+typedef enum DWRITE_VERTICAL_GLYPH_ORIENTATION {
+    DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT = 0,
+    DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED = 1
+} DWRITE_VERTICAL_GLYPH_ORIENTATION;
+typedef enum DWRITE_GLYPH_ORIENTATION_ANGLE {
+    DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES = 0,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES = 1,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES = 2,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES = 3
+} DWRITE_GLYPH_ORIENTATION_ANGLE;
+typedef struct DWRITE_FONT_METRICS1 {
     UINT16 designUnitsPerEm;
     UINT16 ascent;
     UINT16 descent;
@@ -119,7 +469,6 @@
     UINT16 underlineThickness;
     INT16 strikethroughPosition;
     UINT16 strikethroughThickness;
-#endif
     INT16 glyphBoxLeft;
     INT16 glyphBoxTop;
     INT16 glyphBoxRight;
@@ -133,39 +482,13 @@
     INT16 superscriptSizeX;
     INT16 superscriptSizeY;
     WINBOOL hasTypographicMetrics;
-};
-
-struct DWRITE_SCRIPT_PROPERTIES
-{
-    UINT32 isoScriptCode;
-    UINT32 isoScriptNumber;
-    UINT32 clusterLookahead;
-    UINT32 justificationCharacter;
-    UINT32 restrictCaretToClusters      : 1;
-    UINT32 usesWordDividers             : 1;
-    UINT32 isDiscreteWriting            : 1;
-    UINT32 isBlockWriting               : 1;
-    UINT32 isDistributedWithinCluster   : 1;
-    UINT32 isConnectedWriting           : 1;
-    UINT32 isCursiveWriting             : 1;
-    UINT32 reserved                     : 25;
-};
-
-struct DWRITE_JUSTIFICATION_OPPORTUNITY
-{
-    FLOAT expansionMinimum;
-    FLOAT expansionMaximum;
-    FLOAT compressionMaximum;
-    UINT32 expansionPriority         : 8;
-    UINT32 compressionPriority       : 8;
-    UINT32 allowResidualExpansion    : 1;
-    UINT32 allowResidualCompression  : 1;
-    UINT32 applyToLeadingEdge        : 1;
-    UINT32 applyToTrailingEdge       : 1;
-    UINT32 reserved                  : 12;
-};
-
-union DWRITE_PANOSE {
+} DWRITE_FONT_METRICS1;
+typedef struct DWRITE_CARET_METRICS {
+    INT16 slopeRise;
+    INT16 slopeRun;
+    INT16 offset;
+} DWRITE_CARET_METRICS;
+typedef union DWRITE_PANOSE {
     UINT8 values[10];
     UINT8 familyKind;
     struct {
@@ -216,594 +539,2585 @@
         UINT8 aspectRatio163;
         UINT8 aspectRatio211;
     } symbol;
-};
+} DWRITE_PANOSE;
+typedef struct DWRITE_UNICODE_RANGE {
+    UINT32 first;
+    UINT32 last;
+} DWRITE_UNICODE_RANGE;
+typedef struct DWRITE_SCRIPT_PROPERTIES {
+    UINT32 isoScriptCode;
+    UINT32 isoScriptNumber;
+    UINT32 clusterLookahead;
+    UINT32 justificationCharacter;
+    UINT32 restrictCaretToClusters : 1;
+    UINT32 usesWordDividers : 1;
+    UINT32 isDiscreteWriting : 1;
+    UINT32 isBlockWriting : 1;
+    UINT32 isDistributedWithinCluster : 1;
+    UINT32 isConnectedWriting : 1;
+    UINT32 isCursiveWriting : 1;
+    UINT32 reserved : 25;
+} DWRITE_SCRIPT_PROPERTIES;
+typedef struct DWRITE_JUSTIFICATION_OPPORTUNITY {
+    FLOAT expansionMinimum;
+    FLOAT expansionMaximum;
+    FLOAT compressionMaximum;
+    UINT32 expansionPriority : 8;
+    UINT32 compressionPriority : 8;
+    UINT32 allowResidualExpansion : 1;
+    UINT32 allowResidualCompression : 1;
+    UINT32 applyToLeadingEdge : 1;
+    UINT32 applyToTrailingEdge : 1;
+    UINT32 reserved : 12;
+} DWRITE_JUSTIFICATION_OPPORTUNITY;
+#ifndef __IDWriteTextAnalysisSource1_FWD_DEFINED__
+#define __IDWriteTextAnalysisSource1_FWD_DEFINED__
+typedef interface IDWriteTextAnalysisSource1 IDWriteTextAnalysisSource1;
+#ifdef __cplusplus
+interface IDWriteTextAnalysisSource1;
+#endif /* __cplusplus */
+#endif
 
-#ifndef D2D_USE_C_DEFINITIONS
+#ifndef __IDWriteTextAnalysisSink1_FWD_DEFINED__
+#define __IDWriteTextAnalysisSink1_FWD_DEFINED__
+typedef interface IDWriteTextAnalysisSink1 IDWriteTextAnalysisSink1;
+#ifdef __cplusplus
+interface IDWriteTextAnalysisSink1;
+#endif /* __cplusplus */
+#endif
 
-#undef  INTERFACE
-#define INTERFACE IDWriteFont1
-DECLARE_INTERFACE_(IDWriteFont1,IDWriteFont)
+#ifndef __IDWriteRenderingParams1_FWD_DEFINED__
+#define __IDWriteRenderingParams1_FWD_DEFINED__
+typedef interface IDWriteRenderingParams1 IDWriteRenderingParams1;
+#ifdef __cplusplus
+interface IDWriteRenderingParams1;
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IDWriteFactory1 interface
+ */
+#ifndef __IDWriteFactory1_INTERFACE_DEFINED__
+#define __IDWriteFactory1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory1, 0x30572f99, 0xdac6, 0x41db, 0xa1,0x6e, 0x04,0x86,0x30,0x7e,0x60,0x6a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("30572f99-dac6-41db-a16e-0486307e606a")
+IDWriteFactory1 : public IDWriteFactory
 {
+    virtual HRESULT STDMETHODCALLTYPE GetEudcFontCollection(
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates = FALSE) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCustomRenderingParams(
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory1, 0x30572f99, 0xdac6, 0x41db, 0xa1,0x6e, 0x04,0x86,0x30,0x7e,0x60,0x6a)
+#endif
+#else
+typedef struct IDWriteFactory1Vtbl {
     BEGIN_INTERFACE
 
-    STDMETHOD_(void, GetMetrics)(DWRITE_FONT_METRICS1 *fontMetrics) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory1 *This,
+        REFIID riid,
+        void **ppvObject);
 
-    STDMETHOD_(void, GetPanose)(DWRITE_PANOSE *panose) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory1 *This);
 
-    STDMETHOD(GetUnicodeRanges)(UINT32 maxCount,
-        DWRITE_UNICODE_RANGE *ranges,
-        UINT32 *actualCount) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory1 *This);
 
-    END_INTERFACE
-};
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory1 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
 
-#else  /* D2D_USE_C_DEFINITIONS */
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory1 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
 
-typedef struct IDWriteFont1Vtbl
-{
-    IDWriteFontVtbl Base;
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory1 *This,
+        IDWriteFontCollectionLoader *loader);
 
-    STDMETHOD_(void, GetMetrics)(IDWriteFont1 *This,
-        struct DWRITE_FONT_METRICS1 *fontMetrics) PURE;
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory1 *This,
+        IDWriteFontCollectionLoader *loader);
 
-    STDMETHOD_(void, GetPanose)(IDWriteFont1 *This,
-        union DWRITE_PANOSE *panose) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory1 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
 
-    STDMETHOD(GetUnicodeRanges)(IDWriteFont1 *This,
-        UINT32 maxCount,
-        struct DWRITE_UNICODE_RANGE *ranges,
-        UINT32 *actualCount) PURE;
-}
-IDWriteFont1Vtbl;
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory1 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
 
-interface IDWriteFont1
-{
-    const IDWriteFont1Vtbl *lpVtbl;
-};
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory1 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
 
-#endif  /* D2D_USE_C_DEFINITIONS */
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory1 *This,
+        IDWriteRenderingParams **params);
 
-__CRT_UUID_DECL(IDWriteFont1, 0xacd16696,0x8c14,0x4f5d,0x87,0x7e,0xfe,0x3f,0xc1,0xd3,0x27,0x38);
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory1 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
 
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFace1
-DECLARE_INTERFACE_(IDWriteFontFace1, IDWriteFontFace)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD_(void, GetMetrics)(DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD(GetGdiCompatibleMetrics)(FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD_(void, GetCaretMetrics)(DWRITE_CARET_METRICS*) PURE;
-    STDMETHOD(GetUnicodeRanges)(UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
-    STDMETHOD_(BOOL, IsMonospacedFont)(void) PURE;
-    STDMETHOD(GetDesignGlyphAdvances)(UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-    STDMETHOD(GetGdiCompatibleGlyphAdvances)(FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
-            UINT16 const*,INT32*) PURE;
-    STDMETHOD(GetKerningPairAdjustments)(UINT32,UINT16 const*,INT32*) PURE;
-    STDMETHOD_(BOOL, HasKerningPairs)(void);
-    STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
-            DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
-    STDMETHOD(GetVerticalGlyphVariants)(UINT32,UINT16 const*,UINT16*);
-    STDMETHOD_(BOOL, HasVerticalGlyphVariants)(void);
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteFontFace1Vtbl
-{
-    IDWriteFontFaceVtbl Base;
-
-    STDMETHOD_(void, GetMetrics)(IDWriteFontFace1 *This, struct DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD(GetGdiCompatibleMetrics)(IDWriteFontFace1 *This, FLOAT,FLOAT,DWRITE_MATRIX const*,struct DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD_(void, GetCaretMetrics)(IDWriteFontFace1 *This, struct DWRITE_CARET_METRICS*) PURE;
-    STDMETHOD(GetUnicodeRanges)(IDWriteFontFace1 *This, UINT32, struct DWRITE_UNICODE_RANGE*,UINT32*) PURE;
-    STDMETHOD_(BOOL, IsMonospacedFont)(IDWriteFontFace1 *This) PURE;
-    STDMETHOD(GetDesignGlyphAdvances)(IDWriteFontFace1 *This, UINT32,UINT16 const*,INT32*,BOOL isSideways) PURE;
-    STDMETHOD(GetGdiCompatibleGlyphAdvances)(IDWriteFontFace1 *This, FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
-            UINT16 const*,INT32*) PURE;
-    STDMETHOD(GetKerningPairAdjustments)(IDWriteFontFace1 *This, UINT32,UINT16 const*,INT32*) PURE;
-    STDMETHOD_(BOOL, HasKerningPairs)(IDWriteFontFace1 *This);
-    STDMETHOD(GetRecommendedRenderingMode)(IDWriteFontFace1 *This, FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
-            enum DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
-    STDMETHOD(GetVerticalGlyphVariants)(IDWriteFontFace1 *This, UINT32,UINT16 const*,UINT16*);
-    STDMETHOD_(BOOL, HasVerticalGlyphVariants)(IDWriteFontFace1 *This);
-}
-IDWriteFontFace1Vtbl;
-
-interface IDWriteFontFace1
-{
-    const IDWriteFontFace1Vtbl *lpVtbl;
-};
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-__CRT_UUID_DECL(IDWriteFontFace1, 0xa71efdb4,0x9fdb,0x4838,0xad,0x90,0xcf,0xc3,0xbe,0x8c,0x3d,0xaf);
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteRenderingParams1
-DECLARE_INTERFACE_(IDWriteRenderingParams1,IDWriteRenderingParams)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD_(FLOAT, GetGrayscaleEnhancedContrast)(void) PURE;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteRenderingParams1Vtbl
-{
-    IDWriteRenderingParamsVtbl Base;
-
-    STDMETHOD_(FLOAT, GetGrayscaleEnhancedContrast)(IDWriteRenderingParams1 *This) PURE;
-}
-IDWriteRenderingParams1Vtbl;
-
-interface IDWriteRenderingParams1
-{
-    const IDWriteRenderingParams1Vtbl *lpVtbl;
-};
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-__CRT_UUID_DECL(IDWriteRenderingParams1, 0x94413cf4,0xa6fc,0x4248,0x8b,0x50,0x66,0x74,0x34,0x8f,0xca,0xd3)
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextAnalysisSource1
-DECLARE_INTERFACE_(IDWriteTextAnalysisSource1,IDWriteTextAnalysisSource)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD(GetVerticalGlyphOrientation)(
-        UINT32 textPosition,
-        UINT32 *textLength,
-        DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
-        UINT8 *bidiLevel) PURE;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteTextAnalysisSource1Vtbl
-{
-    IDWriteTextAnalysisSourceVtbl Base;
-
-    STDMETHOD(GetVerticalGlyphOrientation)(IDWriteTextAnalysisSource1 *This,
-        UINT32 textPosition,
-        UINT32 *textLength,
-        enum DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
-        UINT8 *bidiLevel) PURE;
-}
-IDWriteTextAnalysisSource1Vtbl;
-
-interface IDWriteTextAnalysisSource1
-{
-    const IDWriteTextAnalysisSource1Vtbl *lpVtbl;
-};
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-__CRT_UUID_DECL(IDWriteTextAnalysisSource1, 0x639cfad8,0x0fb4,0x4b21,0xa5,0x8a,0x06,0x79,0x20,0x12,0x00,0x09);
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextAnalysisSink1
-DECLARE_INTERFACE_(IDWriteTextAnalysisSink1,IDWriteTextAnalysisSink)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD(SetGlyphOrientation)(
-            UINT32 textPosition,
-            UINT32 textLength,
-            DWRITE_GLYPH_ORIENTATION_ANGLE angle,
-            UINT8 adjustedBidilevel,
-            WINBOOL isSideways,
-            WINBOOL isRtl) PURE;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteTextAnalysisSink1Vtbl
-{
-    IDWriteTextAnalysisSinkVtbl Base;
-
-    STDMETHOD(SetGlyphOrientation)(IDWriteTextAnalysisSink1 *This,
-            UINT32 textPosition,
-            UINT32 textLength,
-            enum DWRITE_GLYPH_ORIENTATION_ANGLE angle,
-            UINT8 adjustedBidilevel,
-            WINBOOL isSideways,
-            WINBOOL isRtl) PURE;
-}
-IDWriteTextAnalysisSink1Vtbl;
-
-interface IDWriteTextAnalysisSink1
-{
-    const IDWriteTextAnalysisSink1Vtbl *lpVtbl;
-};
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-__CRT_UUID_DECL(IDWriteTextAnalysisSink1, 0xb0d941a0,0x85e7,0x4d8b,0x9f,0xd3,0x5c,0xed,0x99,0x34,0x48,0x2a);
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextAnalyzer1
-DECLARE_INTERFACE_(IDWriteTextAnalyzer1,IDWriteTextAnalyzer)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD(ApplyCharacterSpacing)(
-        FLOAT leadingSpacing,
-        FLOAT trailingSpacing,
-        FLOAT minimumAdvanceWidth,
-        UINT32 textLength,
-        UINT32 glyphCount,
-        UINT16 const* clusterMap,
-        FLOAT const* glyphAdvances,
-        DWRITE_GLYPH_OFFSET const* glyphOffsets,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProperties,
-        FLOAT* modifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets) PURE;
-
-    STDMETHOD(GetBaseline)(
-        IDWriteFontFace* fontFace,
-        DWRITE_BASELINE baseline,
-        BOOL isVertical,
-        BOOL isSimulationAllowed,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        WCHAR const* localeName,
-        INT32* baselineCoordinate,
-        BOOL* exists
-        ) PURE;
-
-    STDMETHOD(AnalyzeVerticalGlyphOrientation)(
-        IDWriteTextAnalysisSource1* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink1* analysisSink
-        ) PURE;
-
-    STDMETHOD(GetGlyphOrientationTransform)(
-        DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle,
-        BOOL isSideways,
-        DWRITE_MATRIX* transform
-        ) PURE;
-
-    STDMETHOD(GetScriptProperties)(
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        DWRITE_SCRIPT_PROPERTIES* scriptProperties
-        ) PURE;
-
-    STDMETHOD(GetTextComplexity)(
-        WCHAR const* textString,
-        UINT32 textLength,
-        IDWriteFontFace* fontFace,
-        BOOL* isTextSimple,
-        UINT32* textLengthRead,
-        UINT16* glyphIndices
-        ) PURE;
-
-    STDMETHOD(GetJustificationOpportunities)(
-        IDWriteFontFace* fontFace,
-        FLOAT fontEmSize,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        UINT32 textLength,
-        UINT32 glyphCount,
-        WCHAR const* textString,
-        UINT16 const* clusterMap,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProperties,
-        DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities
-        ) PURE;
-
-    STDMETHOD(JustifyGlyphAdvances)(
-        FLOAT lineWidth,
-        UINT32 glyphCount,
-        DWRITE_JUSTIFICATION_OPPORTUNITY const* justificationOpportunities,
-        FLOAT const* glyphAdvances,
-        DWRITE_GLYPH_OFFSET const* glyphOffsets,
-        FLOAT* justifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets
-        ) PURE;
-
-    STDMETHOD(GetJustifiedGlyphs)(
-        IDWriteFontFace* fontFace,
-        FLOAT fontEmSize,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        UINT32 textLength,
-        UINT32 glyphCount,
-        UINT32 maxGlyphCount,
-        UINT16 const* clusterMap,
-        UINT16 const* glyphIndices,
-        FLOAT const* glyphAdvances,
-        FLOAT const* justifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET const* justifiedGlyphOffsets,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProperties,
-        UINT32* actualGlyphCount,
-        UINT16* modifiedClusterMap,
-        UINT16* modifiedGlyphIndices,
-        FLOAT* modifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets
-        ) PURE;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteTextAnalyzer1Vtbl
-{
-    IDWriteTextAnalyzerVtbl Base;
-
-    STDMETHOD(ApplyCharacterSpacing)(IDWriteTextAnalyzer1 *This,
-        FLOAT leadingSpacing,
-        FLOAT trailingSpacing,
-        FLOAT minimumAdvanceWidth,
-        UINT32 textLength,
-        UINT32 glyphCount,
-        UINT16 const* clusterMap,
-        FLOAT const* glyphAdvances,
-        DWRITE_GLYPH_OFFSET const* glyphOffsets,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProperties,
-        FLOAT* modifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets) PURE;
-
-    STDMETHOD(GetBaseline)(IDWriteTextAnalyzer1 *This,
-        IDWriteFontFace* fontFace,
-        enum DWRITE_BASELINE baseline,
-        BOOL isVertical,
-        BOOL isSimulationAllowed,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        WCHAR const* localeName,
-        INT32* baselineCoordinate,
-        BOOL* exists
-        ) PURE;
-
-    STDMETHOD(AnalyzeVerticalGlyphOrientation)(IDWriteTextAnalyzer1 *This,
-        IDWriteTextAnalysisSource1* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink1* analysisSink
-        ) PURE;
-
-    STDMETHOD(GetGlyphOrientationTransform)(IDWriteTextAnalyzer1 *This,
-        enum DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle,
-        BOOL isSideways,
-        DWRITE_MATRIX* transform
-        ) PURE;
-
-    STDMETHOD(GetScriptProperties)(IDWriteTextAnalyzer1 *This,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        struct DWRITE_SCRIPT_PROPERTIES* scriptProperties
-        ) PURE;
-
-    STDMETHOD(GetTextComplexity)(IDWriteTextAnalyzer1 *This,
-        WCHAR const* textString,
-        UINT32 textLength,
-        IDWriteFontFace* fontFace,
-        BOOL* isTextSimple,
-        UINT32* textLengthRead,
-        UINT16* glyphIndices
-        ) PURE;
-
-    STDMETHOD(GetJustificationOpportunities)(IDWriteTextAnalyzer1 *This,
-        IDWriteFontFace* fontFace,
-        FLOAT fontEmSize,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        UINT32 textLength,
-        UINT32 glyphCount,
-        WCHAR const* textString,
-        UINT16 const* clusterMap,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProperties,
-        struct DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities
-        ) PURE;
-
-    STDMETHOD(JustifyGlyphAdvances)(IDWriteTextAnalyzer1 *This,
-        FLOAT lineWidth,
-        UINT32 glyphCount,
-        struct DWRITE_JUSTIFICATION_OPPORTUNITY const* justificationOpportunities,
-        FLOAT const* glyphAdvances,
-        DWRITE_GLYPH_OFFSET const* glyphOffsets,
-        FLOAT* justifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets
-        ) PURE;
-
-    STDMETHOD(GetJustifiedGlyphs)(IDWriteTextAnalyzer1 *This,
-        IDWriteFontFace* fontFace,
-        FLOAT fontEmSize,
-        DWRITE_SCRIPT_ANALYSIS scriptAnalysis,
-        UINT32 textLength,
-        UINT32 glyphCount,
-        UINT32 maxGlyphCount,
-        UINT16 const* clusterMap,
-        UINT16 const* glyphIndices,
-        FLOAT const* glyphAdvances,
-        FLOAT const* justifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET const* justifiedGlyphOffsets,
-        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProperties,
-        UINT32* actualGlyphCount,
-        UINT16* modifiedClusterMap,
-        UINT16* modifiedGlyphIndices,
-        FLOAT* modifiedGlyphAdvances,
-        DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets
-        ) PURE;
-}
-IDWriteTextAnalyzer1Vtbl;
-
-interface IDWriteTextAnalyzer1
-{
-    const IDWriteTextAnalyzer1Vtbl *lpVtbl;
-};
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-__CRT_UUID_DECL(IDWriteTextAnalyzer1, 0x80dad800,0xe21f,0x4e83,0x4e,0xce,0xbf,0xcc,0xe5,0x00,0xdb,0x7c);
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteTextLayout1
-DECLARE_INTERFACE_(IDWriteTextLayout1,IDWriteTextLayout)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD(SetPairKerning)(WINBOOL isPairKerningEnabled,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(GetPairKerning)(UINT32 position,
-            WINBOOL *isPairKerningEnabled,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-    STDMETHOD(SetCharacterSpacing)(FLOAT leadingSpacing,
-            FLOAT trailingSpacing,
-            FLOAT minimumAdvance,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(GetCharacterSpacing)(FLOAT *leadingSpacing,
-            FLOAT *trailingSpacing,
-            FLOAT *minimumAdvance,
-            DWRITE_TEXT_RANGE *textRange __MINGW_DEF_ARG_VAL(NULL)) PURE;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteTextLayout1Vtbl
-{
-    IDWriteTextLayoutVtbl Base;
-
-    STDMETHOD(SetPairKerning)(IDWriteTextLayout1 *This,
-            WINBOOL isPairKerningEnabled,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(GetPairKerning)(IDWriteTextLayout1 *This,
-            UINT32 position,
-            WINBOOL *isPairKerningEnabled,
-            DWRITE_TEXT_RANGE *textRange) PURE;
-    STDMETHOD(SetCharacterSpacing)(IDWriteTextLayout1 *This,
-            FLOAT leadingSpacing,
-            FLOAT trailingSpacing,
-            FLOAT minimumAdvance,
-            DWRITE_TEXT_RANGE textRange) PURE;
-    STDMETHOD(GetCharacterSpacing)(IDWriteTextLayout1 *This,
-            FLOAT *leadingSpacing,
-            FLOAT *trailingSpacing,
-            FLOAT *minimumAdvance,
-            DWRITE_TEXT_RANGE *textRange) PURE;
-}
-IDWriteTextLayout1Vtbl;
-
-interface IDWriteTextLayout1
-{
-    const IDWriteTextLayout1Vtbl *lpVtbl;
-};
-
-#endif  /* D2D_USE_C_DEFINITIONS */
-
-__CRT_UUID_DECL(IDWriteTextLayout1, 0x9064d822,0x80a7,0x465c,0xa9,0x86,0xdf,0x65,0xf7,0x8b,0x8f,0xeb)
-
-#ifndef D2D_USE_C_DEFINITIONS
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFactory1
-DECLARE_INTERFACE_(IDWriteFactory1,IDWriteFactory)
-{
-    BEGIN_INTERFACE
-
-    STDMETHOD(GetEudcFontCollection)(IDWriteFontCollection **fontCollection,
-        BOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(CreateCustomRenderingParams)(FLOAT gamma,
-        FLOAT enhancedContrast,
-        FLOAT enhancedContrastGrayscale,
-        FLOAT clearTypeLevel,
-        DWRITE_PIXEL_GEOMETRY pixelGeometry,
-        DWRITE_RENDERING_MODE renderingMode,
-        IDWriteRenderingParams1 **renderingParams) PURE;
-
-    using IDWriteFactory::CreateCustomRenderingParams;
-
-    END_INTERFACE
-};
-
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteFactory1Vtbl
-{
-    IDWriteFactoryVtbl Base;
-
-    STDMETHOD(GetEudcFontCollection)(IDWriteFactory1 *This,
-        IDWriteFontCollection **fontCollection,
-        BOOL checkForUpdates) PURE;
-
-    STDMETHOD(CreateCustomRenderingParams)(IDWriteFactory1 *This,
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory1 *This,
         FLOAT gamma,
         FLOAT enhancedContrast,
-        FLOAT enhancedContrastGrayscale,
-        FLOAT clearTypeLevel,
-        DWRITE_PIXEL_GEOMETRY pixelGeometry,
-        DWRITE_RENDERING_MODE renderingMode,
-        IDWriteRenderingParams1 **renderingParams) PURE;
-}
-IDWriteFactory1Vtbl;
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
 
-interface IDWriteFactory1
-{
-    const IDWriteFactory1Vtbl *lpVtbl;
-};
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory1 *This,
+        IDWriteFontFileLoader *loader);
 
-#endif  /* D2D_USE_C_DEFINITIONS */
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory1 *This,
+        IDWriteFontFileLoader *loader);
 
-DEFINE_GUID(IID_IDWriteFactory1, 0x30572f99,0xdac6,0x41db,0xa1,0x6e,0x04,0x86,0x30,0x7e,0x60,0x6a);
-__CRT_UUID_DECL(IDWriteFactory1, 0x30572f99,0xdac6,0x41db,0xa1,0x6e,0x04,0x86,0x30,0x7e,0x60,0x6a)
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory1 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
 
-#ifndef D2D_USE_C_DEFINITIONS
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory1 *This,
+        IDWriteTypography **typography);
 
-#undef  INTERFACE
-#define INTERFACE IDWriteBitmapRenderTarget1
-DECLARE_INTERFACE_(IDWriteBitmapRenderTarget1,IDWriteBitmapRenderTarget)
-{
-    BEGIN_INTERFACE
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory1 *This,
+        IDWriteGdiInterop **gdi_interop);
 
-    STDMETHOD_(DWRITE_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(void) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory1 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
 
-    STDMETHOD(SetTextAntialiasMode)(
-        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory1 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory1 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory1 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory1 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory1 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory1 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory1 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
 
     END_INTERFACE
+} IDWriteFactory1Vtbl;
+
+interface IDWriteFactory1 {
+    CONST_VTBL IDWriteFactory1Vtbl* lpVtbl;
 };
 
-#else  /* D2D_USE_C_DEFINITIONS */
-
-typedef struct IDWriteBitmapRenderTarget1Vtbl
-{
-    IDWriteBitmapRenderTargetVtbl Base;
-
-    STDMETHOD_(enum DWRITE_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(IDWriteBitmapRenderTarget1 *This) PURE;
-
-    STDMETHOD(SetTextAntialiasMode)(IDWriteBitmapRenderTarget1 *This,
-        enum DWRITE_TEXT_ANTIALIAS_MODE antialiasMode) PURE;
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory1_GetSystemFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetSystemFontCollection(This,collection,check_for_updates)
+#define IDWriteFactory1_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory1_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory1_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory1_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory1_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory1_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory1_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory1_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory1_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory1_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory1_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
+#define IDWriteFactory1_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory1_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory1_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory1_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory1_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory1_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory1_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+#define IDWriteFactory1_CreateGlyphRunAnalysis(This,glyph_run,pixels_per_dip,transform,rendering_mode,measuring_mode,baseline_x,baseline_y,analysis) (This)->lpVtbl->CreateGlyphRunAnalysis(This,glyph_run,pixels_per_dip,transform,rendering_mode,measuring_mode,baseline_x,baseline_y,analysis)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory1_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+#define IDWriteFactory1_CreateCustomRenderingParams(This,gamma,enhcontrast,enhcontrast_grayscale,cleartype_level,geometry,mode,params) (This)->lpVtbl->IDWriteFactory1_CreateCustomRenderingParams(This,gamma,enhcontrast,enhcontrast_grayscale,cleartype_level,geometry,mode,params)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory1_QueryInterface(IDWriteFactory1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 }
-IDWriteBitmapRenderTarget1Vtbl;
+static FORCEINLINE ULONG IDWriteFactory1_AddRef(IDWriteFactory1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory1_Release(IDWriteFactory1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory1_GetSystemFontCollection(IDWriteFactory1* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetSystemFontCollection(This,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateCustomFontCollection(IDWriteFactory1* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_RegisterFontCollectionLoader(IDWriteFactory1* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_UnregisterFontCollectionLoader(IDWriteFactory1* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateFontFileReference(IDWriteFactory1* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateCustomFontFileReference(IDWriteFactory1* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateFontFace(IDWriteFactory1* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateRenderingParams(IDWriteFactory1* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateMonitorRenderingParams(IDWriteFactory1* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_RegisterFontFileLoader(IDWriteFactory1* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_UnregisterFontFileLoader(IDWriteFactory1* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateTextFormat(IDWriteFactory1* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
+    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateTypography(IDWriteFactory1* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_GetGdiInterop(IDWriteFactory1* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateTextLayout(IDWriteFactory1* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateGdiCompatibleTextLayout(IDWriteFactory1* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateEllipsisTrimmingSign(IDWriteFactory1* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateTextAnalyzer(IDWriteFactory1* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateNumberSubstitution(IDWriteFactory1* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateGlyphRunAnalysis(IDWriteFactory1* This,const DWRITE_GLYPH_RUN *glyph_run,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE rendering_mode,DWRITE_MEASURING_MODE measuring_mode,FLOAT baseline_x,FLOAT baseline_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->CreateGlyphRunAnalysis(This,glyph_run,pixels_per_dip,transform,rendering_mode,measuring_mode,baseline_x,baseline_y,analysis);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory1_GetEudcFontCollection(IDWriteFactory1* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory1_CreateCustomRenderingParams(IDWriteFactory1* This,FLOAT gamma,FLOAT enhcontrast,FLOAT enhcontrast_grayscale,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY geometry,DWRITE_RENDERING_MODE mode,IDWriteRenderingParams1 **params) {
+    return This->lpVtbl->IDWriteFactory1_CreateCustomRenderingParams(This,gamma,enhcontrast,enhcontrast_grayscale,cleartype_level,geometry,mode,params);
+}
+#endif
+#endif
 
-interface IDWriteBitmapRenderTarget1
+#endif
+
+
+#endif  /* __IDWriteFactory1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFace1 interface
+ */
+#ifndef __IDWriteFontFace1_INTERFACE_DEFINED__
+#define __IDWriteFontFace1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFace1, 0xa71efdb4, 0x9fdb, 0x4838, 0xad,0x90, 0xcf,0xc3,0xbe,0x8c,0x3d,0xaf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a71efdb4-9fdb-4838-ad90-cfc3be8c3daf")
+IDWriteFontFace1 : public IDWriteFontFace
 {
-    const IDWriteBitmapRenderTarget1Vtbl *lpVtbl;
+    virtual void STDMETHODCALLTYPE GetMetrics(
+        DWRITE_FONT_METRICS1 *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGdiCompatibleMetrics(
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS1 *metrics) = 0;
+
+    virtual void STDMETHODCALLTYPE GetCaretMetrics(
+        DWRITE_CARET_METRICS *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUnicodeRanges(
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsMonospacedFont(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesignGlyphAdvances(
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances,
+        WINBOOL is_sideways = FALSE) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGdiCompatibleGlyphAdvances(
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetKerningPairAdjustments(
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *adjustments) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE HasKerningPairs(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRecommendedRenderingMode(
+        FLOAT font_emsize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_RENDERING_MODE *rendering_mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVerticalGlyphVariants(
+        UINT32 glyph_count,
+        const UINT16 *nominal_indices,
+        UINT16 *vertical_indices) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE HasVerticalGlyphVariants(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFace1, 0xa71efdb4, 0x9fdb, 0x4838, 0xad,0x90, 0xcf,0xc3,0xbe,0x8c,0x3d,0xaf)
+#endif
+#else
+typedef struct IDWriteFontFace1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFace1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFace1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFace1 *This);
+
+    /*** IDWriteFontFace methods ***/
+    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
+        IDWriteFontFace1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFiles)(
+        IDWriteFontFace1 *This,
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles);
+
+    UINT32 (STDMETHODCALLTYPE *GetIndex)(
+        IDWriteFontFace1 *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFace1 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFontFace1 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFontFace1 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
+        IDWriteFontFace1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
+        IDWriteFontFace1 *This,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
+        IDWriteFontFace1 *This,
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
+        IDWriteFontFace1 *This,
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists);
+
+    void (STDMETHODCALLTYPE *ReleaseFontTable)(
+        IDWriteFontFace1 *This,
+        void *table_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
+        IDWriteFontFace1 *This,
+        FLOAT emSize,
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
+        IDWriteFontFace1 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
+        IDWriteFontFace1 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
+        IDWriteFontFace1 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    /*** IDWriteFontFace1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
+        IDWriteFontFace1 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
+        IDWriteFontFace1 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetCaretMetrics)(
+        IDWriteFontFace1 *This,
+        DWRITE_CARET_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFontFace1 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFontFace1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
+        IDWriteFontFace1 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
+        IDWriteFontFace1 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances);
+
+    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
+        IDWriteFontFace1 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *adjustments);
+
+    WINBOOL (STDMETHODCALLTYPE *HasKerningPairs)(
+        IDWriteFontFace1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
+        IDWriteFontFace1 *This,
+        FLOAT font_emsize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
+        IDWriteFontFace1 *This,
+        UINT32 glyph_count,
+        const UINT16 *nominal_indices,
+        UINT16 *vertical_indices);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
+        IDWriteFontFace1 *This);
+
+    END_INTERFACE
+} IDWriteFontFace1Vtbl;
+
+interface IDWriteFontFace1 {
+    CONST_VTBL IDWriteFontFace1Vtbl* lpVtbl;
 };
 
-#endif  /* D2D_USE_C_DEFINITIONS */
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFace1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFace1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFace1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFace methods ***/
+#define IDWriteFontFace1_GetType(This) (This)->lpVtbl->GetType(This)
+#define IDWriteFontFace1_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
+#define IDWriteFontFace1_GetIndex(This) (This)->lpVtbl->GetIndex(This)
+#define IDWriteFontFace1_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFace1_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFontFace1_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
+#define IDWriteFontFace1_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
+#define IDWriteFontFace1_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
+#define IDWriteFontFace1_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
+#define IDWriteFontFace1_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
+#define IDWriteFontFace1_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
+#define IDWriteFontFace1_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
+/*** IDWriteFontFace1 methods ***/
+#define IDWriteFontFace1_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
+#define IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
+#define IDWriteFontFace1_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
+#define IDWriteFontFace1_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFontFace1_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+#define IDWriteFontFace1_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
+#define IDWriteFontFace1_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
+#define IDWriteFontFace1_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
+#define IDWriteFontFace1_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
+#define IDWriteFontFace1_GetRecommendedRenderingMode(This,font_emsize,dpiX,dpiY,transform,is_sideways,threshold,measuring_mode,rendering_mode) (This)->lpVtbl->IDWriteFontFace1_GetRecommendedRenderingMode(This,font_emsize,dpiX,dpiY,transform,is_sideways,threshold,measuring_mode,rendering_mode)
+#define IDWriteFontFace1_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
+#define IDWriteFontFace1_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace1_QueryInterface(IDWriteFontFace1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFace1_AddRef(IDWriteFontFace1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFace1_Release(IDWriteFontFace1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFace methods ***/
+static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace1_GetType(IDWriteFontFace1* This) {
+    return This->lpVtbl->GetType(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetFiles(IDWriteFontFace1* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
+    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
+}
+static FORCEINLINE UINT32 IDWriteFontFace1_GetIndex(IDWriteFontFace1* This) {
+    return This->lpVtbl->GetIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace1_GetSimulations(IDWriteFontFace1* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace1_IsSymbolFont(IDWriteFontFace1* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE UINT16 IDWriteFontFace1_GetGlyphCount(IDWriteFontFace1* This) {
+    return This->lpVtbl->GetGlyphCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetDesignGlyphMetrics(IDWriteFontFace1* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetGlyphIndices(IDWriteFontFace1* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
+    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_TryGetFontTable(IDWriteFontFace1* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,WINBOOL *exists) {
+    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
+}
+static FORCEINLINE void IDWriteFontFace1_ReleaseFontTable(IDWriteFontFace1* This,void *table_context) {
+    This->lpVtbl->ReleaseFontTable(This,table_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetGlyphRunOutline(IDWriteFontFace1* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,WINBOOL is_sideways,WINBOOL is_rtl,IDWriteGeometrySink *geometrysink) {
+    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetGdiCompatibleGlyphMetrics(IDWriteFontFace1* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
+}
+/*** IDWriteFontFace1 methods ***/
+static FORCEINLINE void IDWriteFontFace1_GetMetrics(IDWriteFontFace1* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetGdiCompatibleMetrics(IDWriteFontFace1* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
+}
+static FORCEINLINE void IDWriteFontFace1_GetCaretMetrics(IDWriteFontFace1* This,DWRITE_CARET_METRICS *metrics) {
+    This->lpVtbl->GetCaretMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetUnicodeRanges(IDWriteFontFace1* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace1_IsMonospacedFont(IDWriteFontFace1* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetDesignGlyphAdvances(IDWriteFontFace1* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetGdiCompatibleGlyphAdvances(IDWriteFontFace1* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
+    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetKerningPairAdjustments(IDWriteFontFace1* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
+    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace1_HasKerningPairs(IDWriteFontFace1* This) {
+    return This->lpVtbl->HasKerningPairs(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetRecommendedRenderingMode(IDWriteFontFace1* This,FLOAT font_emsize,FLOAT dpiX,FLOAT dpiY,const DWRITE_MATRIX *transform,WINBOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuring_mode,DWRITE_RENDERING_MODE *rendering_mode) {
+    return This->lpVtbl->IDWriteFontFace1_GetRecommendedRenderingMode(This,font_emsize,dpiX,dpiY,transform,is_sideways,threshold,measuring_mode,rendering_mode);
+}
+static FORCEINLINE HRESULT IDWriteFontFace1_GetVerticalGlyphVariants(IDWriteFontFace1* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
+    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace1_HasVerticalGlyphVariants(IDWriteFontFace1* This) {
+    return This->lpVtbl->HasVerticalGlyphVariants(This);
+}
+#endif
+#endif
 
-__CRT_UUID_DECL(IDWriteBitmapRenderTarget1, 0x791e8298,0x3ef3,0x4230,0x98,0x80,0xc9,0xbd,0xec,0xc4,0x20,0x64)
+#endif
 
-#endif /* DWRITE_1_H_INCLUDED */
+
+#endif  /* __IDWriteFontFace1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFont1 interface
+ */
+#ifndef __IDWriteFont1_INTERFACE_DEFINED__
+#define __IDWriteFont1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFont1, 0xacd16696, 0x8c14, 0x4f5d, 0x87,0x7e, 0xfe,0x3f,0xc1,0xd3,0x27,0x38);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("acd16696-8c14-4f5d-877e-fe3fc1d32738")
+IDWriteFont1 : public IDWriteFont
+{
+    virtual void STDMETHODCALLTYPE GetMetrics(
+        DWRITE_FONT_METRICS1 *metrics) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPanose(
+        DWRITE_PANOSE *panose) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUnicodeRanges(
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsMonospacedFont(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFont1, 0xacd16696, 0x8c14, 0x4f5d, 0x87,0x7e, 0xfe,0x3f,0xc1,0xd3,0x27,0x38)
+#endif
+#else
+typedef struct IDWriteFont1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFont1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFont1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFont1 *This);
+
+    /*** IDWriteFont methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFont1 *This,
+        IDWriteFontFamily **family);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFont1 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFont1 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFont1 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFont1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFont1 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFont1 *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFont1 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFont1 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFont1 *This,
+        UINT32 value,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFont1 *This,
+        IDWriteFontFace **face);
+
+    /*** IDWriteFont1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFont1_GetMetrics)(
+        IDWriteFont1 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetPanose)(
+        IDWriteFont1 *This,
+        DWRITE_PANOSE *panose);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFont1 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFont1 *This);
+
+    END_INTERFACE
+} IDWriteFont1Vtbl;
+
+interface IDWriteFont1 {
+    CONST_VTBL IDWriteFont1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFont1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFont1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFont1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFont methods ***/
+#define IDWriteFont1_GetFontFamily(This,family) (This)->lpVtbl->GetFontFamily(This,family)
+#define IDWriteFont1_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFont1_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFont1_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFont1_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFont1_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFont1_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFont1_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFont1_HasCharacter(This,value,exists) (This)->lpVtbl->HasCharacter(This,value,exists)
+#define IDWriteFont1_CreateFontFace(This,face) (This)->lpVtbl->CreateFontFace(This,face)
+/*** IDWriteFont1 methods ***/
+#define IDWriteFont1_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFont1_GetMetrics(This,metrics)
+#define IDWriteFont1_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
+#define IDWriteFont1_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFont1_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFont1_QueryInterface(IDWriteFont1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFont1_AddRef(IDWriteFont1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFont1_Release(IDWriteFont1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFont methods ***/
+static FORCEINLINE HRESULT IDWriteFont1_GetFontFamily(IDWriteFont1* This,IDWriteFontFamily **family) {
+    return This->lpVtbl->GetFontFamily(This,family);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFont1_GetWeight(IDWriteFont1* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFont1_GetStretch(IDWriteFont1* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFont1_GetStyle(IDWriteFont1* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE WINBOOL IDWriteFont1_IsSymbolFont(IDWriteFont1* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFont1_GetFaceNames(IDWriteFont1* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFont1_GetInformationalStrings(IDWriteFont1* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFont1_GetSimulations(IDWriteFont1* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE HRESULT IDWriteFont1_HasCharacter(IDWriteFont1* This,UINT32 value,WINBOOL *exists) {
+    return This->lpVtbl->HasCharacter(This,value,exists);
+}
+static FORCEINLINE HRESULT IDWriteFont1_CreateFontFace(IDWriteFont1* This,IDWriteFontFace **face) {
+    return This->lpVtbl->CreateFontFace(This,face);
+}
+/*** IDWriteFont1 methods ***/
+static FORCEINLINE void IDWriteFont1_GetMetrics(IDWriteFont1* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFont1_GetMetrics(This,metrics);
+}
+static FORCEINLINE void IDWriteFont1_GetPanose(IDWriteFont1* This,DWRITE_PANOSE *panose) {
+    This->lpVtbl->GetPanose(This,panose);
+}
+static FORCEINLINE HRESULT IDWriteFont1_GetUnicodeRanges(IDWriteFont1* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFont1_IsMonospacedFont(IDWriteFont1* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFont1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteRenderingParams1 interface
+ */
+#ifndef __IDWriteRenderingParams1_INTERFACE_DEFINED__
+#define __IDWriteRenderingParams1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteRenderingParams1, 0x94413cf4, 0xa6fc, 0x4248, 0x8b,0x50, 0x66,0x74,0x34,0x8f,0xca,0xd3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("94413cf4-a6fc-4248-8b50-6674348fcad3")
+IDWriteRenderingParams1 : public IDWriteRenderingParams
+{
+    virtual FLOAT STDMETHODCALLTYPE GetGrayscaleEnhancedContrast(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteRenderingParams1, 0x94413cf4, 0xa6fc, 0x4248, 0x8b,0x50, 0x66,0x74,0x34,0x8f,0xca,0xd3)
+#endif
+#else
+typedef struct IDWriteRenderingParams1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteRenderingParams1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteRenderingParams1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteRenderingParams1 *This);
+
+    /*** IDWriteRenderingParams methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGamma)(
+        IDWriteRenderingParams1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetEnhancedContrast)(
+        IDWriteRenderingParams1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetClearTypeLevel)(
+        IDWriteRenderingParams1 *This);
+
+    DWRITE_PIXEL_GEOMETRY (STDMETHODCALLTYPE *GetPixelGeometry)(
+        IDWriteRenderingParams1 *This);
+
+    DWRITE_RENDERING_MODE (STDMETHODCALLTYPE *GetRenderingMode)(
+        IDWriteRenderingParams1 *This);
+
+    /*** IDWriteRenderingParams1 methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGrayscaleEnhancedContrast)(
+        IDWriteRenderingParams1 *This);
+
+    END_INTERFACE
+} IDWriteRenderingParams1Vtbl;
+
+interface IDWriteRenderingParams1 {
+    CONST_VTBL IDWriteRenderingParams1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteRenderingParams1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteRenderingParams1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteRenderingParams1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteRenderingParams methods ***/
+#define IDWriteRenderingParams1_GetGamma(This) (This)->lpVtbl->GetGamma(This)
+#define IDWriteRenderingParams1_GetEnhancedContrast(This) (This)->lpVtbl->GetEnhancedContrast(This)
+#define IDWriteRenderingParams1_GetClearTypeLevel(This) (This)->lpVtbl->GetClearTypeLevel(This)
+#define IDWriteRenderingParams1_GetPixelGeometry(This) (This)->lpVtbl->GetPixelGeometry(This)
+#define IDWriteRenderingParams1_GetRenderingMode(This) (This)->lpVtbl->GetRenderingMode(This)
+/*** IDWriteRenderingParams1 methods ***/
+#define IDWriteRenderingParams1_GetGrayscaleEnhancedContrast(This) (This)->lpVtbl->GetGrayscaleEnhancedContrast(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteRenderingParams1_QueryInterface(IDWriteRenderingParams1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams1_AddRef(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams1_Release(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteRenderingParams methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams1_GetGamma(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->GetGamma(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams1_GetEnhancedContrast(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->GetEnhancedContrast(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams1_GetClearTypeLevel(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->GetClearTypeLevel(This);
+}
+static FORCEINLINE DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams1_GetPixelGeometry(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->GetPixelGeometry(This);
+}
+static FORCEINLINE DWRITE_RENDERING_MODE IDWriteRenderingParams1_GetRenderingMode(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->GetRenderingMode(This);
+}
+/*** IDWriteRenderingParams1 methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams1_GetGrayscaleEnhancedContrast(IDWriteRenderingParams1* This) {
+    return This->lpVtbl->GetGrayscaleEnhancedContrast(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteRenderingParams1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalyzer1 interface
+ */
+#ifndef __IDWriteTextAnalyzer1_INTERFACE_DEFINED__
+#define __IDWriteTextAnalyzer1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalyzer1, 0x80dad800, 0xe21f, 0x4e83, 0x96,0xce, 0xbf,0xcc,0xe5,0x00,0xdb,0x7c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("80dad800-e21f-4e83-96ce-bfcce500db7c")
+IDWriteTextAnalyzer1 : public IDWriteTextAnalyzer
+{
+    virtual HRESULT STDMETHODCALLTYPE ApplyCharacterSpacing(
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT min_advance_width,
+        UINT32 len,
+        UINT32 glyph_count,
+        const UINT16 *clustermap,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *props,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBaseline(
+        IDWriteFontFace *face,
+        DWRITE_BASELINE baseline,
+        WINBOOL vertical,
+        WINBOOL is_simulation_allowed,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        const WCHAR *localeName,
+        INT32 *baseline_coord,
+        WINBOOL *exists) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AnalyzeVerticalGlyphOrientation(
+        IDWriteTextAnalysisSource1 *source,
+        UINT32 text_pos,
+        UINT32 len,
+        IDWriteTextAnalysisSink1 *sink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphOrientationTransform(
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        WINBOOL is_sideways,
+        DWRITE_MATRIX *transform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetScriptProperties(
+        DWRITE_SCRIPT_ANALYSIS sa,
+        DWRITE_SCRIPT_PROPERTIES *props) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextComplexity(
+        const WCHAR *text,
+        UINT32 len,
+        IDWriteFontFace *face,
+        WINBOOL *is_simple,
+        UINT32 *len_read,
+        UINT16 *indices) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetJustificationOpportunities(
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        DWRITE_JUSTIFICATION_OPPORTUNITY *jo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE JustifyGlyphAdvances(
+        FLOAT width,
+        UINT32 glyph_count,
+        const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        FLOAT *justifiedadvances,
+        DWRITE_GLYPH_OFFSET *justifiedoffsets) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetJustifiedGlyphs(
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        UINT32 max_glyphcount,
+        const UINT16 *clustermap,
+        const UINT16 *indices,
+        const FLOAT *advances,
+        const FLOAT *justifiedadvances,
+        const DWRITE_GLYPH_OFFSET *justifiedoffsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        UINT32 *actual_count,
+        UINT16 *modified_clustermap,
+        UINT16 *modified_indices,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalyzer1, 0x80dad800, 0xe21f, 0x4e83, 0x96,0xce, 0xbf,0xcc,0xe5,0x00,0xdb,0x7c)
+#endif
+#else
+typedef struct IDWriteTextAnalyzer1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalyzer1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalyzer1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalyzer1 *This);
+
+    /*** IDWriteTextAnalyzer methods ***/
+    HRESULT (STDMETHODCALLTYPE *AnalyzeScript)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeBidi)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeNumberSubstitution)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeLineBreakpoints)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphs)(
+        IDWriteTextAnalyzer1 *This,
+        const WCHAR *text,
+        UINT32 length,
+        IDWriteFontFace *font_face,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        IDWriteNumberSubstitution *substitution,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        UINT32 max_glyph_count,
+        UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *text_props,
+        UINT16 *glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 *actual_glyph_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphPlacements)(
+        IDWriteTextAnalyzer1 *This,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphPlacements)(
+        IDWriteTextAnalyzer1 *This,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_lengths,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets);
+
+    /*** IDWriteTextAnalyzer1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *ApplyCharacterSpacing)(
+        IDWriteTextAnalyzer1 *This,
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT min_advance_width,
+        UINT32 len,
+        UINT32 glyph_count,
+        const UINT16 *clustermap,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *props,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetBaseline)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteFontFace *face,
+        DWRITE_BASELINE baseline,
+        WINBOOL vertical,
+        WINBOOL is_simulation_allowed,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        const WCHAR *localeName,
+        INT32 *baseline_coord,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeVerticalGlyphOrientation)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteTextAnalysisSource1 *source,
+        UINT32 text_pos,
+        UINT32 len,
+        IDWriteTextAnalysisSink1 *sink);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphOrientationTransform)(
+        IDWriteTextAnalyzer1 *This,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        WINBOOL is_sideways,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetScriptProperties)(
+        IDWriteTextAnalyzer1 *This,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        DWRITE_SCRIPT_PROPERTIES *props);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextComplexity)(
+        IDWriteTextAnalyzer1 *This,
+        const WCHAR *text,
+        UINT32 len,
+        IDWriteFontFace *face,
+        WINBOOL *is_simple,
+        UINT32 *len_read,
+        UINT16 *indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetJustificationOpportunities)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        DWRITE_JUSTIFICATION_OPPORTUNITY *jo);
+
+    HRESULT (STDMETHODCALLTYPE *JustifyGlyphAdvances)(
+        IDWriteTextAnalyzer1 *This,
+        FLOAT width,
+        UINT32 glyph_count,
+        const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        FLOAT *justifiedadvances,
+        DWRITE_GLYPH_OFFSET *justifiedoffsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetJustifiedGlyphs)(
+        IDWriteTextAnalyzer1 *This,
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        UINT32 max_glyphcount,
+        const UINT16 *clustermap,
+        const UINT16 *indices,
+        const FLOAT *advances,
+        const FLOAT *justifiedadvances,
+        const DWRITE_GLYPH_OFFSET *justifiedoffsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        UINT32 *actual_count,
+        UINT16 *modified_clustermap,
+        UINT16 *modified_indices,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets);
+
+    END_INTERFACE
+} IDWriteTextAnalyzer1Vtbl;
+
+interface IDWriteTextAnalyzer1 {
+    CONST_VTBL IDWriteTextAnalyzer1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalyzer1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalyzer1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalyzer1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalyzer methods ***/
+#define IDWriteTextAnalyzer1_AnalyzeScript(This,source,position,length,sink) (This)->lpVtbl->AnalyzeScript(This,source,position,length,sink)
+#define IDWriteTextAnalyzer1_AnalyzeBidi(This,source,position,length,sink) (This)->lpVtbl->AnalyzeBidi(This,source,position,length,sink)
+#define IDWriteTextAnalyzer1_AnalyzeNumberSubstitution(This,source,position,length,sink) (This)->lpVtbl->AnalyzeNumberSubstitution(This,source,position,length,sink)
+#define IDWriteTextAnalyzer1_AnalyzeLineBreakpoints(This,source,position,length,sink) (This)->lpVtbl->AnalyzeLineBreakpoints(This,source,position,length,sink)
+#define IDWriteTextAnalyzer1_GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count) (This)->lpVtbl->GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count)
+#define IDWriteTextAnalyzer1_GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets) (This)->lpVtbl->GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets)
+#define IDWriteTextAnalyzer1_GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets) (This)->lpVtbl->GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets)
+/*** IDWriteTextAnalyzer1 methods ***/
+#define IDWriteTextAnalyzer1_ApplyCharacterSpacing(This,leading_spacing,trailing_spacing,min_advance_width,len,glyph_count,clustermap,advances,offsets,props,modified_advances,modified_offsets) (This)->lpVtbl->ApplyCharacterSpacing(This,leading_spacing,trailing_spacing,min_advance_width,len,glyph_count,clustermap,advances,offsets,props,modified_advances,modified_offsets)
+#define IDWriteTextAnalyzer1_GetBaseline(This,face,baseline,vertical,is_simulation_allowed,sa,localeName,baseline_coord,exists) (This)->lpVtbl->GetBaseline(This,face,baseline,vertical,is_simulation_allowed,sa,localeName,baseline_coord,exists)
+#define IDWriteTextAnalyzer1_AnalyzeVerticalGlyphOrientation(This,source,text_pos,len,sink) (This)->lpVtbl->AnalyzeVerticalGlyphOrientation(This,source,text_pos,len,sink)
+#define IDWriteTextAnalyzer1_GetGlyphOrientationTransform(This,angle,is_sideways,transform) (This)->lpVtbl->GetGlyphOrientationTransform(This,angle,is_sideways,transform)
+#define IDWriteTextAnalyzer1_GetScriptProperties(This,sa,props) (This)->lpVtbl->GetScriptProperties(This,sa,props)
+#define IDWriteTextAnalyzer1_GetTextComplexity(This,text,len,face,is_simple,len_read,indices) (This)->lpVtbl->GetTextComplexity(This,text,len,face,is_simple,len_read,indices)
+#define IDWriteTextAnalyzer1_GetJustificationOpportunities(This,face,font_em_size,sa,length,glyph_count,text,clustermap,prop,jo) (This)->lpVtbl->GetJustificationOpportunities(This,face,font_em_size,sa,length,glyph_count,text,clustermap,prop,jo)
+#define IDWriteTextAnalyzer1_JustifyGlyphAdvances(This,width,glyph_count,jo,advances,offsets,justifiedadvances,justifiedoffsets) (This)->lpVtbl->JustifyGlyphAdvances(This,width,glyph_count,jo,advances,offsets,justifiedadvances,justifiedoffsets)
+#define IDWriteTextAnalyzer1_GetJustifiedGlyphs(This,face,font_em_size,sa,length,glyph_count,max_glyphcount,clustermap,indices,advances,justifiedadvances,justifiedoffsets,prop,actual_count,modified_clustermap,modified_indices,modified_advances,modified_offsets) (This)->lpVtbl->GetJustifiedGlyphs(This,face,font_em_size,sa,length,glyph_count,max_glyphcount,clustermap,indices,advances,justifiedadvances,justifiedoffsets,prop,actual_count,modified_clustermap,modified_indices,modified_advances,modified_offsets)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_QueryInterface(IDWriteTextAnalyzer1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalyzer1_AddRef(IDWriteTextAnalyzer1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalyzer1_Release(IDWriteTextAnalyzer1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalyzer methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_AnalyzeScript(IDWriteTextAnalyzer1* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeScript(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_AnalyzeBidi(IDWriteTextAnalyzer1* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeBidi(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_AnalyzeNumberSubstitution(IDWriteTextAnalyzer1* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeNumberSubstitution(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_AnalyzeLineBreakpoints(IDWriteTextAnalyzer1* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeLineBreakpoints(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetGlyphs(IDWriteTextAnalyzer1* This,const WCHAR *text,UINT32 length,IDWriteFontFace *font_face,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,IDWriteNumberSubstitution *substitution,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_len,UINT32 feature_ranges,UINT32 max_glyph_count,UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *text_props,UINT16 *glyph_indices,DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 *actual_glyph_count) {
+    return This->lpVtbl->GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetGlyphPlacements(IDWriteTextAnalyzer1* This,const WCHAR *text,const UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *props,UINT32 text_len,const UINT16 *glyph_indices,const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 glyph_count,IDWriteFontFace *font_face,FLOAT fontEmSize,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_len,UINT32 feature_ranges,FLOAT *glyph_advances,DWRITE_GLYPH_OFFSET *glyph_offsets) {
+    return This->lpVtbl->GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetGdiCompatibleGlyphPlacements(IDWriteTextAnalyzer1* This,const WCHAR *text,const UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *props,UINT32 text_len,const UINT16 *glyph_indices,const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 glyph_count,IDWriteFontFace *font_face,FLOAT fontEmSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_lengths,UINT32 feature_ranges,FLOAT *glyph_advances,DWRITE_GLYPH_OFFSET *glyph_offsets) {
+    return This->lpVtbl->GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets);
+}
+/*** IDWriteTextAnalyzer1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_ApplyCharacterSpacing(IDWriteTextAnalyzer1* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT min_advance_width,UINT32 len,UINT32 glyph_count,const UINT16 *clustermap,const FLOAT *advances,const DWRITE_GLYPH_OFFSET *offsets,const DWRITE_SHAPING_GLYPH_PROPERTIES *props,FLOAT *modified_advances,DWRITE_GLYPH_OFFSET *modified_offsets) {
+    return This->lpVtbl->ApplyCharacterSpacing(This,leading_spacing,trailing_spacing,min_advance_width,len,glyph_count,clustermap,advances,offsets,props,modified_advances,modified_offsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetBaseline(IDWriteTextAnalyzer1* This,IDWriteFontFace *face,DWRITE_BASELINE baseline,WINBOOL vertical,WINBOOL is_simulation_allowed,DWRITE_SCRIPT_ANALYSIS sa,const WCHAR *localeName,INT32 *baseline_coord,WINBOOL *exists) {
+    return This->lpVtbl->GetBaseline(This,face,baseline,vertical,is_simulation_allowed,sa,localeName,baseline_coord,exists);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_AnalyzeVerticalGlyphOrientation(IDWriteTextAnalyzer1* This,IDWriteTextAnalysisSource1 *source,UINT32 text_pos,UINT32 len,IDWriteTextAnalysisSink1 *sink) {
+    return This->lpVtbl->AnalyzeVerticalGlyphOrientation(This,source,text_pos,len,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetGlyphOrientationTransform(IDWriteTextAnalyzer1* This,DWRITE_GLYPH_ORIENTATION_ANGLE angle,WINBOOL is_sideways,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->GetGlyphOrientationTransform(This,angle,is_sideways,transform);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetScriptProperties(IDWriteTextAnalyzer1* This,DWRITE_SCRIPT_ANALYSIS sa,DWRITE_SCRIPT_PROPERTIES *props) {
+    return This->lpVtbl->GetScriptProperties(This,sa,props);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetTextComplexity(IDWriteTextAnalyzer1* This,const WCHAR *text,UINT32 len,IDWriteFontFace *face,WINBOOL *is_simple,UINT32 *len_read,UINT16 *indices) {
+    return This->lpVtbl->GetTextComplexity(This,text,len,face,is_simple,len_read,indices);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetJustificationOpportunities(IDWriteTextAnalyzer1* This,IDWriteFontFace *face,FLOAT font_em_size,DWRITE_SCRIPT_ANALYSIS sa,UINT32 length,UINT32 glyph_count,const WCHAR *text,const UINT16 *clustermap,const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,DWRITE_JUSTIFICATION_OPPORTUNITY *jo) {
+    return This->lpVtbl->GetJustificationOpportunities(This,face,font_em_size,sa,length,glyph_count,text,clustermap,prop,jo);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_JustifyGlyphAdvances(IDWriteTextAnalyzer1* This,FLOAT width,UINT32 glyph_count,const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,const FLOAT *advances,const DWRITE_GLYPH_OFFSET *offsets,FLOAT *justifiedadvances,DWRITE_GLYPH_OFFSET *justifiedoffsets) {
+    return This->lpVtbl->JustifyGlyphAdvances(This,width,glyph_count,jo,advances,offsets,justifiedadvances,justifiedoffsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer1_GetJustifiedGlyphs(IDWriteTextAnalyzer1* This,IDWriteFontFace *face,FLOAT font_em_size,DWRITE_SCRIPT_ANALYSIS sa,UINT32 length,UINT32 glyph_count,UINT32 max_glyphcount,const UINT16 *clustermap,const UINT16 *indices,const FLOAT *advances,const FLOAT *justifiedadvances,const DWRITE_GLYPH_OFFSET *justifiedoffsets,const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,UINT32 *actual_count,UINT16 *modified_clustermap,UINT16 *modified_indices,FLOAT *modified_advances,DWRITE_GLYPH_OFFSET *modified_offsets) {
+    return This->lpVtbl->GetJustifiedGlyphs(This,face,font_em_size,sa,length,glyph_count,max_glyphcount,clustermap,indices,advances,justifiedadvances,justifiedoffsets,prop,actual_count,modified_clustermap,modified_indices,modified_advances,modified_offsets);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalyzer1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalysisSource1 interface
+ */
+#ifndef __IDWriteTextAnalysisSource1_INTERFACE_DEFINED__
+#define __IDWriteTextAnalysisSource1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalysisSource1, 0x639cfad8, 0x0fb4, 0x4b21, 0xa5,0x8a, 0x06,0x79,0x20,0x12,0x00,0x09);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("639cfad8-0fb4-4b21-a58a-067920120009")
+IDWriteTextAnalysisSource1 : public IDWriteTextAnalysisSource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetVerticalGlyphOrientation(
+        UINT32 pos,
+        UINT32 *length,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
+        UINT8 *bidi_level) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalysisSource1, 0x639cfad8, 0x0fb4, 0x4b21, 0xa5,0x8a, 0x06,0x79,0x20,0x12,0x00,0x09)
+#endif
+#else
+typedef struct IDWriteTextAnalysisSource1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalysisSource1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalysisSource1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalysisSource1 *This);
+
+    /*** IDWriteTextAnalysisSource methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTextAtPosition)(
+        IDWriteTextAnalysisSource1 *This,
+        UINT32 position,
+        const WCHAR **text,
+        UINT32 *text_len);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextBeforePosition)(
+        IDWriteTextAnalysisSource1 *This,
+        UINT32 position,
+        const WCHAR **text,
+        UINT32 *text_len);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetParagraphReadingDirection)(
+        IDWriteTextAnalysisSource1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextAnalysisSource1 *This,
+        UINT32 position,
+        UINT32 *text_len,
+        const WCHAR **locale);
+
+    HRESULT (STDMETHODCALLTYPE *GetNumberSubstitution)(
+        IDWriteTextAnalysisSource1 *This,
+        UINT32 position,
+        UINT32 *text_len,
+        IDWriteNumberSubstitution **substitution);
+
+    /*** IDWriteTextAnalysisSource1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextAnalysisSource1 *This,
+        UINT32 pos,
+        UINT32 *length,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
+        UINT8 *bidi_level);
+
+    END_INTERFACE
+} IDWriteTextAnalysisSource1Vtbl;
+
+interface IDWriteTextAnalysisSource1 {
+    CONST_VTBL IDWriteTextAnalysisSource1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalysisSource1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalysisSource1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalysisSource1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalysisSource methods ***/
+#define IDWriteTextAnalysisSource1_GetTextAtPosition(This,position,text,text_len) (This)->lpVtbl->GetTextAtPosition(This,position,text,text_len)
+#define IDWriteTextAnalysisSource1_GetTextBeforePosition(This,position,text,text_len) (This)->lpVtbl->GetTextBeforePosition(This,position,text,text_len)
+#define IDWriteTextAnalysisSource1_GetParagraphReadingDirection(This) (This)->lpVtbl->GetParagraphReadingDirection(This)
+#define IDWriteTextAnalysisSource1_GetLocaleName(This,position,text_len,locale) (This)->lpVtbl->GetLocaleName(This,position,text_len,locale)
+#define IDWriteTextAnalysisSource1_GetNumberSubstitution(This,position,text_len,substitution) (This)->lpVtbl->GetNumberSubstitution(This,position,text_len,substitution)
+/*** IDWriteTextAnalysisSource1 methods ***/
+#define IDWriteTextAnalysisSource1_GetVerticalGlyphOrientation(This,pos,length,orientation,bidi_level) (This)->lpVtbl->GetVerticalGlyphOrientation(This,pos,length,orientation,bidi_level)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource1_QueryInterface(IDWriteTextAnalysisSource1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSource1_AddRef(IDWriteTextAnalysisSource1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSource1_Release(IDWriteTextAnalysisSource1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalysisSource methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource1_GetTextAtPosition(IDWriteTextAnalysisSource1* This,UINT32 position,const WCHAR **text,UINT32 *text_len) {
+    return This->lpVtbl->GetTextAtPosition(This,position,text,text_len);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource1_GetTextBeforePosition(IDWriteTextAnalysisSource1* This,UINT32 position,const WCHAR **text,UINT32 *text_len) {
+    return This->lpVtbl->GetTextBeforePosition(This,position,text,text_len);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextAnalysisSource1_GetParagraphReadingDirection(IDWriteTextAnalysisSource1* This) {
+    return This->lpVtbl->GetParagraphReadingDirection(This);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource1_GetLocaleName(IDWriteTextAnalysisSource1* This,UINT32 position,UINT32 *text_len,const WCHAR **locale) {
+    return This->lpVtbl->GetLocaleName(This,position,text_len,locale);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource1_GetNumberSubstitution(IDWriteTextAnalysisSource1* This,UINT32 position,UINT32 *text_len,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->GetNumberSubstitution(This,position,text_len,substitution);
+}
+/*** IDWriteTextAnalysisSource1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSource1_GetVerticalGlyphOrientation(IDWriteTextAnalysisSource1* This,UINT32 pos,UINT32 *length,DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,UINT8 *bidi_level) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This,pos,length,orientation,bidi_level);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalysisSource1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalysisSink1 interface
+ */
+#ifndef __IDWriteTextAnalysisSink1_INTERFACE_DEFINED__
+#define __IDWriteTextAnalysisSink1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalysisSink1, 0xb0d941a0, 0x85e7, 0x4d8b, 0x9f,0xd3, 0x5c,0xed,0x99,0x34,0x48,0x2a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b0d941a0-85e7-4d8b-9fd3-5ced9934482a")
+IDWriteTextAnalysisSink1 : public IDWriteTextAnalysisSink
+{
+    virtual HRESULT STDMETHODCALLTYPE SetGlyphOrientation(
+        UINT32 pos,
+        UINT32 length,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        UINT8 adjusted_bidilevel,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalysisSink1, 0xb0d941a0, 0x85e7, 0x4d8b, 0x9f,0xd3, 0x5c,0xed,0x99,0x34,0x48,0x2a)
+#endif
+#else
+typedef struct IDWriteTextAnalysisSink1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalysisSink1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalysisSink1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalysisSink1 *This);
+
+    /*** IDWriteTextAnalysisSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetScriptAnalysis)(
+        IDWriteTextAnalysisSink1 *This,
+        UINT32 position,
+        UINT32 length,
+        const DWRITE_SCRIPT_ANALYSIS *scriptanalysis);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineBreakpoints)(
+        IDWriteTextAnalysisSink1 *This,
+        UINT32 position,
+        UINT32 length,
+        const DWRITE_LINE_BREAKPOINT *breakpoints);
+
+    HRESULT (STDMETHODCALLTYPE *SetBidiLevel)(
+        IDWriteTextAnalysisSink1 *This,
+        UINT32 position,
+        UINT32 length,
+        UINT8 explicitLevel,
+        UINT8 resolvedLevel);
+
+    HRESULT (STDMETHODCALLTYPE *SetNumberSubstitution)(
+        IDWriteTextAnalysisSink1 *This,
+        UINT32 position,
+        UINT32 length,
+        IDWriteNumberSubstitution *substitution);
+
+    /*** IDWriteTextAnalysisSink1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetGlyphOrientation)(
+        IDWriteTextAnalysisSink1 *This,
+        UINT32 pos,
+        UINT32 length,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        UINT8 adjusted_bidilevel,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl);
+
+    END_INTERFACE
+} IDWriteTextAnalysisSink1Vtbl;
+
+interface IDWriteTextAnalysisSink1 {
+    CONST_VTBL IDWriteTextAnalysisSink1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalysisSink1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalysisSink1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalysisSink1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalysisSink methods ***/
+#define IDWriteTextAnalysisSink1_SetScriptAnalysis(This,position,length,scriptanalysis) (This)->lpVtbl->SetScriptAnalysis(This,position,length,scriptanalysis)
+#define IDWriteTextAnalysisSink1_SetLineBreakpoints(This,position,length,breakpoints) (This)->lpVtbl->SetLineBreakpoints(This,position,length,breakpoints)
+#define IDWriteTextAnalysisSink1_SetBidiLevel(This,position,length,explicitLevel,resolvedLevel) (This)->lpVtbl->SetBidiLevel(This,position,length,explicitLevel,resolvedLevel)
+#define IDWriteTextAnalysisSink1_SetNumberSubstitution(This,position,length,substitution) (This)->lpVtbl->SetNumberSubstitution(This,position,length,substitution)
+/*** IDWriteTextAnalysisSink1 methods ***/
+#define IDWriteTextAnalysisSink1_SetGlyphOrientation(This,pos,length,angle,adjusted_bidilevel,is_sideways,is_rtl) (This)->lpVtbl->SetGlyphOrientation(This,pos,length,angle,adjusted_bidilevel,is_sideways,is_rtl)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink1_QueryInterface(IDWriteTextAnalysisSink1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSink1_AddRef(IDWriteTextAnalysisSink1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalysisSink1_Release(IDWriteTextAnalysisSink1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalysisSink methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink1_SetScriptAnalysis(IDWriteTextAnalysisSink1* This,UINT32 position,UINT32 length,const DWRITE_SCRIPT_ANALYSIS *scriptanalysis) {
+    return This->lpVtbl->SetScriptAnalysis(This,position,length,scriptanalysis);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink1_SetLineBreakpoints(IDWriteTextAnalysisSink1* This,UINT32 position,UINT32 length,const DWRITE_LINE_BREAKPOINT *breakpoints) {
+    return This->lpVtbl->SetLineBreakpoints(This,position,length,breakpoints);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink1_SetBidiLevel(IDWriteTextAnalysisSink1* This,UINT32 position,UINT32 length,UINT8 explicitLevel,UINT8 resolvedLevel) {
+    return This->lpVtbl->SetBidiLevel(This,position,length,explicitLevel,resolvedLevel);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink1_SetNumberSubstitution(IDWriteTextAnalysisSink1* This,UINT32 position,UINT32 length,IDWriteNumberSubstitution *substitution) {
+    return This->lpVtbl->SetNumberSubstitution(This,position,length,substitution);
+}
+/*** IDWriteTextAnalysisSink1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalysisSink1_SetGlyphOrientation(IDWriteTextAnalysisSink1* This,UINT32 pos,UINT32 length,DWRITE_GLYPH_ORIENTATION_ANGLE angle,UINT8 adjusted_bidilevel,WINBOOL is_sideways,WINBOOL is_rtl) {
+    return This->lpVtbl->SetGlyphOrientation(This,pos,length,angle,adjusted_bidilevel,is_sideways,is_rtl);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalysisSink1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextLayout1 interface
+ */
+#ifndef __IDWriteTextLayout1_INTERFACE_DEFINED__
+#define __IDWriteTextLayout1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextLayout1, 0x9064d822, 0x80a7, 0x465c, 0xa9,0x86, 0xdf,0x65,0xf7,0x8b,0x8f,0xeb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9064d822-80a7-465c-a986-df65f78b8feb")
+IDWriteTextLayout1 : public IDWriteTextLayout
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPairKerning(
+        WINBOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPairKerning(
+        UINT32 position,
+        WINBOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCharacterSpacing(
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCharacterSpacing(
+        UINT32 position,
+        FLOAT *leading_spacing,
+        FLOAT *trailing_spacing,
+        FLOAT *minimum_advance_width,
+        DWRITE_TEXT_RANGE *range = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextLayout1, 0x9064d822, 0x80a7, 0x465c, 0xa9,0x86, 0xdf,0x65,0xf7,0x8b,0x8f,0xeb)
+#endif
+#else
+typedef struct IDWriteTextLayout1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextLayout1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextLayout1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextLayout1 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextLayout1 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextLayout1 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextLayout1 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextLayout1 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextLayout1 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextLayout1 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextLayout1 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextLayout1 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextLayout1 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextLayout1 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextLayout1 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextLayout1 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextLayout1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextLayout1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextLayout1 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextLayout1 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextLayout1 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextLayout1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextLayout1 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextLayout1 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextLayout1 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextLayout1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextLayout1 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextLayout1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextLayout1 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextLayout methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetMaxWidth)(
+        IDWriteTextLayout1 *This,
+        FLOAT maxWidth);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaxHeight)(
+        IDWriteTextLayout1 *This,
+        FLOAT maxHeight);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontCollection)(
+        IDWriteTextLayout1 *This,
+        IDWriteFontCollection *collection,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFamilyName)(
+        IDWriteTextLayout1 *This,
+        const WCHAR *name,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontWeight)(
+        IDWriteTextLayout1 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStyle)(
+        IDWriteTextLayout1 *This,
+        DWRITE_FONT_STYLE style,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStretch)(
+        IDWriteTextLayout1 *This,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontSize)(
+        IDWriteTextLayout1 *This,
+        FLOAT size,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnderline)(
+        IDWriteTextLayout1 *This,
+        WINBOOL underline,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetStrikethrough)(
+        IDWriteTextLayout1 *This,
+        WINBOOL strikethrough,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetDrawingEffect)(
+        IDWriteTextLayout1 *This,
+        IUnknown *effect,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(
+        IDWriteTextLayout1 *This,
+        IDWriteInlineObject *object,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypography)(
+        IDWriteTextLayout1 *This,
+        IDWriteTypography *typography,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetLocaleName)(
+        IDWriteTextLayout1 *This,
+        const WCHAR *locale,
+        DWRITE_TEXT_RANGE range);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxWidth)(
+        IDWriteTextLayout1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxHeight)(
+        IDWriteTextLayout1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontCollection)(
+        IDWriteTextLayout1 *This,
+        UINT32 pos,
+        IDWriteFontCollection **collection,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyNameLength)(
+        IDWriteTextLayout1 *This,
+        UINT32 pos,
+        UINT32 *len,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyName)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontWeight)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStyle)(
+        IDWriteTextLayout1 *This,
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStretch)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontSize)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        FLOAT *size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnderline)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        WINBOOL *has_underline,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrikethrough)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        WINBOOL *has_strikethrough,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetDrawingEffect)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        IUnknown **effect,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        IDWriteInlineObject **object,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypography)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        IDWriteTypography **typography,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleNameLength)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        UINT32 *length,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleName)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IDWriteTextLayout1 *This,
+        void *context,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineMetrics)(
+        IDWriteTextLayout1 *This,
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteTextLayout1 *This,
+        DWRITE_TEXT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
+        IDWriteTextLayout1 *This,
+        DWRITE_OVERHANG_METRICS *overhangs);
+
+    HRESULT (STDMETHODCALLTYPE *GetClusterMetrics)(
+        IDWriteTextLayout1 *This,
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *act_count);
+
+    HRESULT (STDMETHODCALLTYPE *DetermineMinWidth)(
+        IDWriteTextLayout1 *This,
+        FLOAT *min_width);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestPoint)(
+        IDWriteTextLayout1 *This,
+        FLOAT pointX,
+        FLOAT pointY,
+        WINBOOL *is_trailinghit,
+        WINBOOL *is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextPosition)(
+        IDWriteTextLayout1 *This,
+        UINT32 textPosition,
+        WINBOOL is_trailinghit,
+        FLOAT *pointX,
+        FLOAT *pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextRange)(
+        IDWriteTextLayout1 *This,
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32 *actual_metricscount);
+
+    /*** IDWriteTextLayout1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPairKerning)(
+        IDWriteTextLayout1 *This,
+        WINBOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetPairKerning)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        WINBOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *SetCharacterSpacing)(
+        IDWriteTextLayout1 *This,
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetCharacterSpacing)(
+        IDWriteTextLayout1 *This,
+        UINT32 position,
+        FLOAT *leading_spacing,
+        FLOAT *trailing_spacing,
+        FLOAT *minimum_advance_width,
+        DWRITE_TEXT_RANGE *range);
+
+    END_INTERFACE
+} IDWriteTextLayout1Vtbl;
+
+interface IDWriteTextLayout1 {
+    CONST_VTBL IDWriteTextLayout1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextLayout1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextLayout1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextLayout1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextLayout1_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextLayout1_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextLayout1_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextLayout1_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextLayout1_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextLayout1_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextLayout1_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextLayout1_SetLineSpacing(This,spacing,line_spacing,baseline) (This)->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline)
+#define IDWriteTextLayout1_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextLayout1_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextLayout1_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextLayout1_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextLayout1_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextLayout1_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextLayout1_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextLayout1_GetLineSpacing(This,method,spacing,baseline) (This)->lpVtbl->GetLineSpacing(This,method,spacing,baseline)
+/*** IDWriteTextLayout methods ***/
+#define IDWriteTextLayout1_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
+#define IDWriteTextLayout1_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
+#define IDWriteTextLayout1_SetFontCollection(This,collection,range) (This)->lpVtbl->SetFontCollection(This,collection,range)
+#define IDWriteTextLayout1_SetFontFamilyName(This,name,range) (This)->lpVtbl->SetFontFamilyName(This,name,range)
+#define IDWriteTextLayout1_SetFontWeight(This,weight,range) (This)->lpVtbl->SetFontWeight(This,weight,range)
+#define IDWriteTextLayout1_SetFontStyle(This,style,range) (This)->lpVtbl->SetFontStyle(This,style,range)
+#define IDWriteTextLayout1_SetFontStretch(This,stretch,range) (This)->lpVtbl->SetFontStretch(This,stretch,range)
+#define IDWriteTextLayout1_SetFontSize(This,size,range) (This)->lpVtbl->SetFontSize(This,size,range)
+#define IDWriteTextLayout1_SetUnderline(This,underline,range) (This)->lpVtbl->SetUnderline(This,underline,range)
+#define IDWriteTextLayout1_SetStrikethrough(This,strikethrough,range) (This)->lpVtbl->SetStrikethrough(This,strikethrough,range)
+#define IDWriteTextLayout1_SetDrawingEffect(This,effect,range) (This)->lpVtbl->SetDrawingEffect(This,effect,range)
+#define IDWriteTextLayout1_SetInlineObject(This,object,range) (This)->lpVtbl->SetInlineObject(This,object,range)
+#define IDWriteTextLayout1_SetTypography(This,typography,range) (This)->lpVtbl->SetTypography(This,typography,range)
+#define IDWriteTextLayout1_SetLocaleName(This,locale,range) (This)->lpVtbl->SetLocaleName(This,locale,range)
+#define IDWriteTextLayout1_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
+#define IDWriteTextLayout1_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
+#define IDWriteTextLayout1_GetFontCollection(This,pos,collection,range) (This)->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range)
+#define IDWriteTextLayout1_GetFontFamilyNameLength(This,pos,len,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range)
+#define IDWriteTextLayout1_GetFontFamilyName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range)
+#define IDWriteTextLayout1_GetFontWeight(This,position,weight,range) (This)->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range)
+#define IDWriteTextLayout1_GetFontStyle(This,currentPosition,style,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range)
+#define IDWriteTextLayout1_GetFontStretch(This,position,stretch,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range)
+#define IDWriteTextLayout1_GetFontSize(This,position,size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range)
+#define IDWriteTextLayout1_GetUnderline(This,position,has_underline,range) (This)->lpVtbl->GetUnderline(This,position,has_underline,range)
+#define IDWriteTextLayout1_GetStrikethrough(This,position,has_strikethrough,range) (This)->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range)
+#define IDWriteTextLayout1_GetDrawingEffect(This,position,effect,range) (This)->lpVtbl->GetDrawingEffect(This,position,effect,range)
+#define IDWriteTextLayout1_GetInlineObject(This,position,object,range) (This)->lpVtbl->GetInlineObject(This,position,object,range)
+#define IDWriteTextLayout1_GetTypography(This,position,typography,range) (This)->lpVtbl->GetTypography(This,position,typography,range)
+#define IDWriteTextLayout1_GetLocaleNameLength(This,position,length,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range)
+#define IDWriteTextLayout1_GetLocaleName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range)
+#define IDWriteTextLayout1_Draw(This,context,renderer,originX,originY) (This)->lpVtbl->Draw(This,context,renderer,originX,originY)
+#define IDWriteTextLayout1_GetLineMetrics(This,metrics,max_count,actual_count) (This)->lpVtbl->GetLineMetrics(This,metrics,max_count,actual_count)
+#define IDWriteTextLayout1_GetMetrics(This,metrics) (This)->lpVtbl->GetMetrics(This,metrics)
+#define IDWriteTextLayout1_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
+#define IDWriteTextLayout1_GetClusterMetrics(This,metrics,max_count,act_count) (This)->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count)
+#define IDWriteTextLayout1_DetermineMinWidth(This,min_width) (This)->lpVtbl->DetermineMinWidth(This,min_width)
+#define IDWriteTextLayout1_HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics)
+#define IDWriteTextLayout1_HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics)
+#define IDWriteTextLayout1_HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount)
+/*** IDWriteTextLayout1 methods ***/
+#define IDWriteTextLayout1_SetPairKerning(This,is_pairkerning_enabled,range) (This)->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range)
+#define IDWriteTextLayout1_GetPairKerning(This,position,is_pairkerning_enabled,range) (This)->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range)
+#define IDWriteTextLayout1_SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range)
+#define IDWriteTextLayout1_GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout1_QueryInterface(IDWriteTextLayout1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextLayout1_AddRef(IDWriteTextLayout1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextLayout1_Release(IDWriteTextLayout1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetTextAlignment(IDWriteTextLayout1* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetParagraphAlignment(IDWriteTextLayout1* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetWordWrapping(IDWriteTextLayout1* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetReadingDirection(IDWriteTextLayout1* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFlowDirection(IDWriteTextLayout1* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetIncrementalTabStop(IDWriteTextLayout1* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetTrimming(IDWriteTextLayout1* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetLineSpacing(IDWriteTextLayout1* This,DWRITE_LINE_SPACING_METHOD spacing,FLOAT line_spacing,FLOAT baseline) {
+    return This->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextLayout1_GetTextAlignment(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextLayout1_GetParagraphAlignment(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextLayout1_GetWordWrapping(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextLayout1_GetReadingDirection(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextLayout1_GetFlowDirection(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout1_GetIncrementalTabStop(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetTrimming(IDWriteTextLayout1* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetLineSpacing(IDWriteTextLayout1* This,DWRITE_LINE_SPACING_METHOD *method,FLOAT *spacing,FLOAT *baseline) {
+    return This->lpVtbl->GetLineSpacing(This,method,spacing,baseline);
+}
+/*** IDWriteTextLayout methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetMaxWidth(IDWriteTextLayout1* This,FLOAT maxWidth) {
+    return This->lpVtbl->SetMaxWidth(This,maxWidth);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetMaxHeight(IDWriteTextLayout1* This,FLOAT maxHeight) {
+    return This->lpVtbl->SetMaxHeight(This,maxHeight);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFontCollection(IDWriteTextLayout1* This,IDWriteFontCollection *collection,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontCollection(This,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFontFamilyName(IDWriteTextLayout1* This,const WCHAR *name,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontFamilyName(This,name,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFontWeight(IDWriteTextLayout1* This,DWRITE_FONT_WEIGHT weight,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontWeight(This,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFontStyle(IDWriteTextLayout1* This,DWRITE_FONT_STYLE style,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStyle(This,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFontStretch(IDWriteTextLayout1* This,DWRITE_FONT_STRETCH stretch,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStretch(This,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetFontSize(IDWriteTextLayout1* This,FLOAT size,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontSize(This,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetUnderline(IDWriteTextLayout1* This,WINBOOL underline,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetUnderline(This,underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetStrikethrough(IDWriteTextLayout1* This,WINBOOL strikethrough,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetStrikethrough(This,strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetDrawingEffect(IDWriteTextLayout1* This,IUnknown *effect,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetDrawingEffect(This,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetInlineObject(IDWriteTextLayout1* This,IDWriteInlineObject *object,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetInlineObject(This,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetTypography(IDWriteTextLayout1* This,IDWriteTypography *typography,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetTypography(This,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetLocaleName(IDWriteTextLayout1* This,const WCHAR *locale,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetLocaleName(This,locale,range);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout1_GetMaxWidth(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetMaxWidth(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout1_GetMaxHeight(IDWriteTextLayout1* This) {
+    return This->lpVtbl->GetMaxHeight(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontCollection(IDWriteTextLayout1* This,UINT32 pos,IDWriteFontCollection **collection,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontFamilyNameLength(IDWriteTextLayout1* This,UINT32 pos,UINT32 *len,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontFamilyName(IDWriteTextLayout1* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontWeight(IDWriteTextLayout1* This,UINT32 position,DWRITE_FONT_WEIGHT *weight,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontStyle(IDWriteTextLayout1* This,UINT32 currentPosition,DWRITE_FONT_STYLE *style,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontStretch(IDWriteTextLayout1* This,UINT32 position,DWRITE_FONT_STRETCH *stretch,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetFontSize(IDWriteTextLayout1* This,UINT32 position,FLOAT *size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetUnderline(IDWriteTextLayout1* This,UINT32 position,WINBOOL *has_underline,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetUnderline(This,position,has_underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetStrikethrough(IDWriteTextLayout1* This,UINT32 position,WINBOOL *has_strikethrough,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetDrawingEffect(IDWriteTextLayout1* This,UINT32 position,IUnknown **effect,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetDrawingEffect(This,position,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetInlineObject(IDWriteTextLayout1* This,UINT32 position,IDWriteInlineObject **object,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetInlineObject(This,position,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetTypography(IDWriteTextLayout1* This,UINT32 position,IDWriteTypography **typography,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetTypography(This,position,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetLocaleNameLength(IDWriteTextLayout1* This,UINT32 position,UINT32 *length,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetLocaleName(IDWriteTextLayout1* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_Draw(IDWriteTextLayout1* This,void *context,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY) {
+    return This->lpVtbl->Draw(This,context,renderer,originX,originY);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetLineMetrics(IDWriteTextLayout1* This,DWRITE_LINE_METRICS *metrics,UINT32 max_count,UINT32 *actual_count) {
+    return This->lpVtbl->GetLineMetrics(This,metrics,max_count,actual_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetMetrics(IDWriteTextLayout1* This,DWRITE_TEXT_METRICS *metrics) {
+    return This->lpVtbl->GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetOverhangMetrics(IDWriteTextLayout1* This,DWRITE_OVERHANG_METRICS *overhangs) {
+    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetClusterMetrics(IDWriteTextLayout1* This,DWRITE_CLUSTER_METRICS *metrics,UINT32 max_count,UINT32 *act_count) {
+    return This->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_DetermineMinWidth(IDWriteTextLayout1* This,FLOAT *min_width) {
+    return This->lpVtbl->DetermineMinWidth(This,min_width);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_HitTestPoint(IDWriteTextLayout1* This,FLOAT pointX,FLOAT pointY,WINBOOL *is_trailinghit,WINBOOL *is_inside,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_HitTestTextPosition(IDWriteTextLayout1* This,UINT32 textPosition,WINBOOL is_trailinghit,FLOAT *pointX,FLOAT *pointY,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_HitTestTextRange(IDWriteTextLayout1* This,UINT32 textPosition,UINT32 textLength,FLOAT originX,FLOAT originY,DWRITE_HIT_TEST_METRICS *metrics,UINT32 max_metricscount,UINT32 *actual_metricscount) {
+    return This->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount);
+}
+/*** IDWriteTextLayout1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetPairKerning(IDWriteTextLayout1* This,WINBOOL is_pairkerning_enabled,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetPairKerning(IDWriteTextLayout1* This,UINT32 position,WINBOOL *is_pairkerning_enabled,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_SetCharacterSpacing(IDWriteTextLayout1* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT minimum_advance_width,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout1_GetCharacterSpacing(IDWriteTextLayout1* This,UINT32 position,FLOAT *leading_spacing,FLOAT *trailing_spacing,FLOAT *minimum_advance_width,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextLayout1_INTERFACE_DEFINED__ */
+
+typedef enum DWRITE_TEXT_ANTIALIAS_MODE {
+    DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE = 0,
+    DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE = 1
+} DWRITE_TEXT_ANTIALIAS_MODE;
+/*****************************************************************************
+ * IDWriteBitmapRenderTarget1 interface
+ */
+#ifndef __IDWriteBitmapRenderTarget1_INTERFACE_DEFINED__
+#define __IDWriteBitmapRenderTarget1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteBitmapRenderTarget1, 0x791e8298, 0x3ef3, 0x4230, 0x98,0x80, 0xc9,0xbd,0xec,0xc4,0x20,0x64);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("791e8298-3ef3-4230-9880-c9bdecc42064")
+IDWriteBitmapRenderTarget1 : public IDWriteBitmapRenderTarget
+{
+    virtual DWRITE_TEXT_ANTIALIAS_MODE STDMETHODCALLTYPE GetTextAntialiasMode(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTextAntialiasMode(
+        DWRITE_TEXT_ANTIALIAS_MODE mode) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteBitmapRenderTarget1, 0x791e8298, 0x3ef3, 0x4230, 0x98,0x80, 0xc9,0xbd,0xec,0xc4,0x20,0x64)
+#endif
+#else
+typedef struct IDWriteBitmapRenderTarget1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteBitmapRenderTarget1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteBitmapRenderTarget1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteBitmapRenderTarget1 *This);
+
+    /*** IDWriteBitmapRenderTarget methods ***/
+    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
+        IDWriteBitmapRenderTarget1 *This,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        IDWriteRenderingParams *params,
+        COLORREF textColor,
+        RECT *blackbox_rect);
+
+    HDC (STDMETHODCALLTYPE *GetMemoryDC)(
+        IDWriteBitmapRenderTarget1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetPixelsPerDip)(
+        IDWriteBitmapRenderTarget1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelsPerDip)(
+        IDWriteBitmapRenderTarget1 *This,
+        FLOAT pixels_per_dip);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTransform)(
+        IDWriteBitmapRenderTarget1 *This,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *SetCurrentTransform)(
+        IDWriteBitmapRenderTarget1 *This,
+        const DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetSize)(
+        IDWriteBitmapRenderTarget1 *This,
+        SIZE *size);
+
+    HRESULT (STDMETHODCALLTYPE *Resize)(
+        IDWriteBitmapRenderTarget1 *This,
+        UINT32 width,
+        UINT32 height);
+
+    /*** IDWriteBitmapRenderTarget1 methods ***/
+    DWRITE_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
+        IDWriteBitmapRenderTarget1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetTextAntialiasMode)(
+        IDWriteBitmapRenderTarget1 *This,
+        DWRITE_TEXT_ANTIALIAS_MODE mode);
+
+    END_INTERFACE
+} IDWriteBitmapRenderTarget1Vtbl;
+
+interface IDWriteBitmapRenderTarget1 {
+    CONST_VTBL IDWriteBitmapRenderTarget1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteBitmapRenderTarget1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteBitmapRenderTarget1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteBitmapRenderTarget1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteBitmapRenderTarget methods ***/
+#define IDWriteBitmapRenderTarget1_DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuring_mode,glyph_run,params,textColor,blackbox_rect) (This)->lpVtbl->DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuring_mode,glyph_run,params,textColor,blackbox_rect)
+#define IDWriteBitmapRenderTarget1_GetMemoryDC(This) (This)->lpVtbl->GetMemoryDC(This)
+#define IDWriteBitmapRenderTarget1_GetPixelsPerDip(This) (This)->lpVtbl->GetPixelsPerDip(This)
+#define IDWriteBitmapRenderTarget1_SetPixelsPerDip(This,pixels_per_dip) (This)->lpVtbl->SetPixelsPerDip(This,pixels_per_dip)
+#define IDWriteBitmapRenderTarget1_GetCurrentTransform(This,transform) (This)->lpVtbl->GetCurrentTransform(This,transform)
+#define IDWriteBitmapRenderTarget1_SetCurrentTransform(This,transform) (This)->lpVtbl->SetCurrentTransform(This,transform)
+#define IDWriteBitmapRenderTarget1_GetSize(This,size) (This)->lpVtbl->GetSize(This,size)
+#define IDWriteBitmapRenderTarget1_Resize(This,width,height) (This)->lpVtbl->Resize(This,width,height)
+/*** IDWriteBitmapRenderTarget1 methods ***/
+#define IDWriteBitmapRenderTarget1_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
+#define IDWriteBitmapRenderTarget1_SetTextAntialiasMode(This,mode) (This)->lpVtbl->SetTextAntialiasMode(This,mode)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_QueryInterface(IDWriteBitmapRenderTarget1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteBitmapRenderTarget1_AddRef(IDWriteBitmapRenderTarget1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteBitmapRenderTarget1_Release(IDWriteBitmapRenderTarget1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteBitmapRenderTarget methods ***/
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_DrawGlyphRun(IDWriteBitmapRenderTarget1* This,FLOAT baselineOriginX,FLOAT baselineOriginY,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_GLYPH_RUN *glyph_run,IDWriteRenderingParams *params,COLORREF textColor,RECT *blackbox_rect) {
+    return This->lpVtbl->DrawGlyphRun(This,baselineOriginX,baselineOriginY,measuring_mode,glyph_run,params,textColor,blackbox_rect);
+}
+static FORCEINLINE HDC IDWriteBitmapRenderTarget1_GetMemoryDC(IDWriteBitmapRenderTarget1* This) {
+    return This->lpVtbl->GetMemoryDC(This);
+}
+static FORCEINLINE FLOAT IDWriteBitmapRenderTarget1_GetPixelsPerDip(IDWriteBitmapRenderTarget1* This) {
+    return This->lpVtbl->GetPixelsPerDip(This);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_SetPixelsPerDip(IDWriteBitmapRenderTarget1* This,FLOAT pixels_per_dip) {
+    return This->lpVtbl->SetPixelsPerDip(This,pixels_per_dip);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_GetCurrentTransform(IDWriteBitmapRenderTarget1* This,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->GetCurrentTransform(This,transform);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_SetCurrentTransform(IDWriteBitmapRenderTarget1* This,const DWRITE_MATRIX *transform) {
+    return This->lpVtbl->SetCurrentTransform(This,transform);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_GetSize(IDWriteBitmapRenderTarget1* This,SIZE *size) {
+    return This->lpVtbl->GetSize(This,size);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_Resize(IDWriteBitmapRenderTarget1* This,UINT32 width,UINT32 height) {
+    return This->lpVtbl->Resize(This,width,height);
+}
+/*** IDWriteBitmapRenderTarget1 methods ***/
+static FORCEINLINE DWRITE_TEXT_ANTIALIAS_MODE IDWriteBitmapRenderTarget1_GetTextAntialiasMode(IDWriteBitmapRenderTarget1* This) {
+    return This->lpVtbl->GetTextAntialiasMode(This);
+}
+static FORCEINLINE HRESULT IDWriteBitmapRenderTarget1_SetTextAntialiasMode(IDWriteBitmapRenderTarget1* This,DWRITE_TEXT_ANTIALIAS_MODE mode) {
+    return This->lpVtbl->SetTextAntialiasMode(This,mode);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteBitmapRenderTarget1_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dwrite_1_h__ */
diff --git a/mingw-w64-headers/include/dwrite_1.idl b/mingw-w64-headers/include/dwrite_1.idl
new file mode 100644
index 0000000..902af41
--- /dev/null
+++ b/mingw-w64-headers/include/dwrite_1.idl
@@ -0,0 +1,824 @@
+/*
+ * Copyright 2013 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "dwrite.idl";
+
+typedef enum DWRITE_PANOSE_FAMILY
+{
+    DWRITE_PANOSE_FAMILY_ANY,
+    DWRITE_PANOSE_FAMILY_NO_FIT,
+    DWRITE_PANOSE_FAMILY_TEXT_DISPLAY,
+    DWRITE_PANOSE_FAMILY_SCRIPT,
+    DWRITE_PANOSE_FAMILY_DECORATIVE,
+    DWRITE_PANOSE_FAMILY_SYMBOL,
+    DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY_SYMBOL
+} DWRITE_PANOSE_FAMILY;
+
+typedef enum DWRITE_PANOSE_SERIF_STYLE
+{
+    DWRITE_PANOSE_SERIF_STYLE_ANY,
+    DWRITE_PANOSE_SERIF_STYLE_NO_FIT,
+    DWRITE_PANOSE_SERIF_STYLE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_SQUARE,
+    DWRITE_PANOSE_SERIF_STYLE_THIN,
+    DWRITE_PANOSE_SERIF_STYLE_OVAL,
+    DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED,
+    DWRITE_PANOSE_SERIF_STYLE_TRIANGLE,
+    DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_FLARED,
+    DWRITE_PANOSE_SERIF_STYLE_ROUNDED,
+    DWRITE_PANOSE_SERIF_STYLE_SCRIPT,
+    DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE_OVAL
+} DWRITE_PANOSE_SERIF_STYLE;
+
+typedef enum DWRITE_PANOSE_WEIGHT
+{
+    DWRITE_PANOSE_WEIGHT_ANY,
+    DWRITE_PANOSE_WEIGHT_NO_FIT,
+    DWRITE_PANOSE_WEIGHT_VERY_LIGHT,
+    DWRITE_PANOSE_WEIGHT_LIGHT,
+    DWRITE_PANOSE_WEIGHT_THIN,
+    DWRITE_PANOSE_WEIGHT_BOOK,
+    DWRITE_PANOSE_WEIGHT_MEDIUM,
+    DWRITE_PANOSE_WEIGHT_DEMI,
+    DWRITE_PANOSE_WEIGHT_BOLD,
+    DWRITE_PANOSE_WEIGHT_HEAVY,
+    DWRITE_PANOSE_WEIGHT_BLACK,
+    DWRITE_PANOSE_WEIGHT_EXTRA_BLACK,
+    DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT_EXTRA_BLACK
+} DWRITE_PANOSE_WEIGHT;
+
+typedef enum DWRITE_PANOSE_PROPORTION
+{
+    DWRITE_PANOSE_PROPORTION_ANY,
+    DWRITE_PANOSE_PROPORTION_NO_FIT,
+    DWRITE_PANOSE_PROPORTION_OLD_STYLE,
+    DWRITE_PANOSE_PROPORTION_MODERN,
+    DWRITE_PANOSE_PROPORTION_EVEN_WIDTH,
+    DWRITE_PANOSE_PROPORTION_EXPANDED,
+    DWRITE_PANOSE_PROPORTION_CONDENSED,
+    DWRITE_PANOSE_PROPORTION_VERY_EXPANDED,
+    DWRITE_PANOSE_PROPORTION_VERY_CONDENSED,
+    DWRITE_PANOSE_PROPORTION_MONOSPACED
+} DWRITE_PANOSE_PROPORTION;
+
+typedef enum DWRITE_PANOSE_CONTRAST
+{
+    DWRITE_PANOSE_CONTRAST_ANY,
+    DWRITE_PANOSE_CONTRAST_NO_FIT,
+    DWRITE_PANOSE_CONTRAST_NONE,
+    DWRITE_PANOSE_CONTRAST_VERY_LOW,
+    DWRITE_PANOSE_CONTRAST_LOW,
+    DWRITE_PANOSE_CONTRAST_MEDIUM_LOW,
+    DWRITE_PANOSE_CONTRAST_MEDIUM,
+    DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH,
+    DWRITE_PANOSE_CONTRAST_HIGH,
+    DWRITE_PANOSE_CONTRAST_VERY_HIGH,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH,
+    DWRITE_PANOSE_CONTRAST_BROKEN
+} DWRITE_PANOSE_CONTRAST;
+
+typedef enum DWRITE_PANOSE_STROKE_VARIATION
+{
+    DWRITE_PANOSE_STROKE_VARIATION_ANY,
+    DWRITE_PANOSE_STROKE_VARIATION_NO_FIT,
+    DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL,
+    DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL,
+    DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL,
+    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL,
+    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL
+} DWRITE_PANOSE_STROKE_VARIATION;
+
+typedef enum DWRITE_PANOSE_ARM_STYLE
+{
+    DWRITE_PANOSE_ARM_STYLE_ANY,
+    DWRITE_PANOSE_ARM_STYLE_NO_FIT,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF
+} DWRITE_PANOSE_ARM_STYLE;
+
+typedef enum DWRITE_PANOSE_LETTERFORM
+{
+    DWRITE_PANOSE_LETTERFORM_ANY,
+    DWRITE_PANOSE_LETTERFORM_NO_FIT,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE
+} DWRITE_PANOSE_LETTERFORM;
+
+typedef enum DWRITE_PANOSE_MIDLINE
+{
+    DWRITE_PANOSE_MIDLINE_ANY,
+    DWRITE_PANOSE_MIDLINE_NO_FIT,
+    DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_STANDARD_POINTED,
+    DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED,
+    DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_HIGH_POINTED,
+    DWRITE_PANOSE_MIDLINE_HIGH_SERIFED,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED,
+    DWRITE_PANOSE_MIDLINE_LOW_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_LOW_POINTED,
+    DWRITE_PANOSE_MIDLINE_LOW_SERIFED
+} DWRITE_PANOSE_MIDLINE;
+
+typedef enum DWRITE_PANOSE_XHEIGHT
+{
+    DWRITE_PANOSE_XHEIGHT_ANY,
+    DWRITE_PANOSE_XHEIGHT_NO_FIT,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD
+} DWRITE_PANOSE_XHEIGHT;
+
+typedef enum DWRITE_PANOSE_TOOL_KIND
+{
+    DWRITE_PANOSE_TOOL_KIND_ANY,
+    DWRITE_PANOSE_TOOL_KIND_NO_FIT,
+    DWRITE_PANOSE_TOOL_KIND_FLAT_NIB,
+    DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT,
+    DWRITE_PANOSE_TOOL_KIND_ENGRAVED,
+    DWRITE_PANOSE_TOOL_KIND_BALL,
+    DWRITE_PANOSE_TOOL_KIND_BRUSH,
+    DWRITE_PANOSE_TOOL_KIND_ROUGH,
+    DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP,
+    DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH
+} DWRITE_PANOSE_TOOL_KIND;
+
+typedef enum DWRITE_PANOSE_SPACING
+{
+    DWRITE_PANOSE_SPACING_ANY,
+    DWRITE_PANOSE_SPACING_NO_FIT,
+    DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED,
+    DWRITE_PANOSE_SPACING_MONOSPACED
+} DWRITE_PANOSE_SPACING;
+
+typedef enum DWRITE_PANOSE_ASPECT_RATIO
+{
+    DWRITE_PANOSE_ASPECT_RATIO_ANY,
+    DWRITE_PANOSE_ASPECT_RATIO_NO_FIT,
+    DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED,
+    DWRITE_PANOSE_ASPECT_RATIO_CONDENSED,
+    DWRITE_PANOSE_ASPECT_RATIO_NORMAL,
+    DWRITE_PANOSE_ASPECT_RATIO_EXPANDED,
+    DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED
+} DWRITE_PANOSE_ASPECT_RATIO;
+
+typedef enum DWRITE_PANOSE_SCRIPT_TOPOLOGY
+{
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED
+} DWRITE_PANOSE_SCRIPT_TOPOLOGY;
+
+typedef enum DWRITE_PANOSE_SCRIPT_FORM
+{
+    DWRITE_PANOSE_SCRIPT_FORM_ANY,
+    DWRITE_PANOSE_SCRIPT_FORM_NO_FIT,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING
+} DWRITE_PANOSE_SCRIPT_FORM;
+
+typedef enum DWRITE_PANOSE_FINIALS
+{
+    DWRITE_PANOSE_FINIALS_ANY,
+    DWRITE_PANOSE_FINIALS_NO_FIT,
+    DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS,
+    DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS,
+    DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS,
+    DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS
+} DWRITE_PANOSE_FINIALS;
+
+typedef enum DWRITE_PANOSE_XASCENT
+{
+    DWRITE_PANOSE_XASCENT_ANY,
+    DWRITE_PANOSE_XASCENT_NO_FIT,
+    DWRITE_PANOSE_XASCENT_VERY_LOW,
+    DWRITE_PANOSE_XASCENT_LOW,
+    DWRITE_PANOSE_XASCENT_MEDIUM,
+    DWRITE_PANOSE_XASCENT_HIGH,
+    DWRITE_PANOSE_XASCENT_VERY_HIGH
+} DWRITE_PANOSE_XASCENT;
+
+typedef enum DWRITE_PANOSE_DECORATIVE_CLASS
+{
+    DWRITE_PANOSE_DECORATIVE_CLASS_ANY,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT,
+    DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT,
+    DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS,
+    DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON,
+    DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS,
+    DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED,
+    DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND,
+    DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE,
+    DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE
+} DWRITE_PANOSE_DECORATIVE_CLASS;
+
+typedef enum DWRITE_PANOSE_ASPECT
+{
+    DWRITE_PANOSE_ASPECT_ANY,
+    DWRITE_PANOSE_ASPECT_NO_FIT,
+    DWRITE_PANOSE_ASPECT_SUPER_CONDENSED,
+    DWRITE_PANOSE_ASPECT_VERY_CONDENSED,
+    DWRITE_PANOSE_ASPECT_CONDENSED,
+    DWRITE_PANOSE_ASPECT_NORMAL,
+    DWRITE_PANOSE_ASPECT_EXTENDED,
+    DWRITE_PANOSE_ASPECT_VERY_EXTENDED,
+    DWRITE_PANOSE_ASPECT_SUPER_EXTENDED,
+    DWRITE_PANOSE_ASPECT_MONOSPACED
+} DWRITE_PANOSE_ASPECT;
+
+typedef enum DWRITE_PANOSE_FILL
+{
+    DWRITE_PANOSE_FILL_ANY,
+    DWRITE_PANOSE_FILL_NO_FIT,
+    DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL,
+    DWRITE_PANOSE_FILL_NO_FILL,
+    DWRITE_PANOSE_FILL_PATTERNED_FILL,
+    DWRITE_PANOSE_FILL_COMPLEX_FILL,
+    DWRITE_PANOSE_FILL_SHAPED_FILL,
+    DWRITE_PANOSE_FILL_DRAWN_DISTRESSED
+} DWRITE_PANOSE_FILL;
+
+typedef enum DWRITE_PANOSE_LINING
+{
+    DWRITE_PANOSE_LINING_ANY,
+    DWRITE_PANOSE_LINING_NO_FIT,
+    DWRITE_PANOSE_LINING_NONE,
+    DWRITE_PANOSE_LINING_INLINE,
+    DWRITE_PANOSE_LINING_OUTLINE,
+    DWRITE_PANOSE_LINING_ENGRAVED,
+    DWRITE_PANOSE_LINING_SHADOW,
+    DWRITE_PANOSE_LINING_RELIEF,
+    DWRITE_PANOSE_LINING_BACKDROP
+} DWRITE_PANOSE_LINING;
+
+typedef enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY
+{
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE
+} DWRITE_PANOSE_DECORATIVE_TOPOLOGY;
+
+typedef enum DWRITE_PANOSE_CHARACTER_RANGES
+{
+    DWRITE_PANOSE_CHARACTER_RANGES_ANY,
+    DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT,
+    DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION,
+    DWRITE_PANOSE_CHARACTER_RANGES_LITERALS,
+    DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE,
+    DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS
+} DWRITE_PANOSE_CHARACTER_RANGES;
+
+typedef enum DWRITE_PANOSE_SYMBOL_KIND
+{
+    DWRITE_PANOSE_SYMBOL_KIND_ANY,
+    DWRITE_PANOSE_SYMBOL_KIND_NO_FIT,
+    DWRITE_PANOSE_SYMBOL_KIND_MONTAGES,
+    DWRITE_PANOSE_SYMBOL_KIND_PICTURES,
+    DWRITE_PANOSE_SYMBOL_KIND_SHAPES,
+    DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC,
+    DWRITE_PANOSE_SYMBOL_KIND_MUSIC,
+    DWRITE_PANOSE_SYMBOL_KIND_EXPERT,
+    DWRITE_PANOSE_SYMBOL_KIND_PATTERNS,
+    DWRITE_PANOSE_SYMBOL_KIND_BOARDERS,
+    DWRITE_PANOSE_SYMBOL_KIND_ICONS,
+    DWRITE_PANOSE_SYMBOL_KIND_LOGOS,
+    DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC
+} DWRITE_PANOSE_SYMBOL_KIND;
+
+typedef enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO
+{
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW
+} DWRITE_PANOSE_SYMBOL_ASPECT_RATIO;
+
+typedef enum DWRITE_OUTLINE_THRESHOLD
+{
+    DWRITE_OUTLINE_THRESHOLD_ANTIALIASED,
+    DWRITE_OUTLINE_THRESHOLD_ALIASED
+} DWRITE_OUTLINE_THRESHOLD;
+
+typedef enum DWRITE_BASELINE
+{
+    DWRITE_BASELINE_DEFAULT,
+    DWRITE_BASELINE_ROMAN,
+    DWRITE_BASELINE_CENTRAL,
+    DWRITE_BASELINE_MATH,
+    DWRITE_BASELINE_HANGING,
+    DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM,
+    DWRITE_BASELINE_IDEOGRAPHIC_TOP,
+    DWRITE_BASELINE_MINIMUM,
+    DWRITE_BASELINE_MAXIMUM
+} DWRITE_BASELINE;
+
+typedef enum DWRITE_VERTICAL_GLYPH_ORIENTATION
+{
+    DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT,
+    DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED
+} DWRITE_VERTICAL_GLYPH_ORIENTATION;
+
+typedef enum DWRITE_GLYPH_ORIENTATION_ANGLE
+{
+    DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES
+} DWRITE_GLYPH_ORIENTATION_ANGLE;
+
+typedef struct DWRITE_FONT_METRICS1
+{
+    UINT16 designUnitsPerEm;
+    UINT16 ascent;
+    UINT16 descent;
+    INT16 lineGap;
+    UINT16 capHeight;
+    UINT16 xHeight;
+    INT16 underlinePosition;
+    UINT16 underlineThickness;
+    INT16 strikethroughPosition;
+    UINT16 strikethroughThickness;
+    INT16 glyphBoxLeft;
+    INT16 glyphBoxTop;
+    INT16 glyphBoxRight;
+    INT16 glyphBoxBottom;
+    INT16 subscriptPositionX;
+    INT16 subscriptPositionY;
+    INT16 subscriptSizeX;
+    INT16 subscriptSizeY;
+    INT16 superscriptPositionX;
+    INT16 superscriptPositionY;
+    INT16 superscriptSizeX;
+    INT16 superscriptSizeY;
+    BOOL hasTypographicMetrics;
+} DWRITE_FONT_METRICS1;
+
+typedef struct DWRITE_CARET_METRICS
+{
+    INT16 slopeRise;
+    INT16 slopeRun;
+    INT16 offset;
+} DWRITE_CARET_METRICS;
+
+typedef union DWRITE_PANOSE
+{
+    UINT8 values[10];
+    UINT8 familyKind;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 serifStyle;
+        UINT8 weight;
+        UINT8 proportion;
+        UINT8 contrast;
+        UINT8 strokeVariation;
+        UINT8 armStyle;
+        UINT8 letterform;
+        UINT8 midline;
+        UINT8 xHeight;
+    } text;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 toolKind;
+        UINT8 weight;
+        UINT8 spacing;
+        UINT8 aspectRatio;
+        UINT8 contrast;
+        UINT8 scriptTopology;
+        UINT8 scriptForm;
+        UINT8 finials;
+        UINT8 xAscent;
+    } script;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 decorativeClass;
+        UINT8 weight;
+        UINT8 aspect;
+        UINT8 contrast;
+        UINT8 serifVariant;
+        UINT8 fill;
+        UINT8 lining;
+        UINT8 decorativeTopology;
+        UINT8 characterRange;
+    } decorative;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 symbolKind;
+        UINT8 weight;
+        UINT8 spacing;
+        UINT8 aspectRatioAndContrast;
+        UINT8 aspectRatio94;
+        UINT8 aspectRatio119;
+        UINT8 aspectRatio157;
+        UINT8 aspectRatio163;
+        UINT8 aspectRatio211;
+    } symbol;
+} DWRITE_PANOSE;
+
+typedef struct DWRITE_UNICODE_RANGE
+{
+    UINT32 first;
+    UINT32 last;
+} DWRITE_UNICODE_RANGE;
+
+typedef struct DWRITE_SCRIPT_PROPERTIES
+{
+    UINT32 isoScriptCode;
+    UINT32 isoScriptNumber;
+    UINT32 clusterLookahead;
+    UINT32 justificationCharacter;
+    UINT32 restrictCaretToClusters : 1;
+    UINT32 usesWordDividers : 1;
+    UINT32 isDiscreteWriting : 1;
+    UINT32 isBlockWriting : 1;
+    UINT32 isDistributedWithinCluster : 1;
+    UINT32 isConnectedWriting : 1;
+    UINT32 isCursiveWriting : 1;
+    UINT32 reserved : 25;
+} DWRITE_SCRIPT_PROPERTIES;
+
+typedef struct DWRITE_JUSTIFICATION_OPPORTUNITY
+{
+    FLOAT expansionMinimum;
+    FLOAT expansionMaximum;
+    FLOAT compressionMaximum;
+    UINT32 expansionPriority : 8;
+    UINT32 compressionPriority : 8;
+    UINT32 allowResidualExpansion : 1;
+    UINT32 allowResidualCompression : 1;
+    UINT32 applyToLeadingEdge : 1;
+    UINT32 applyToTrailingEdge : 1;
+    UINT32 reserved : 12;
+} DWRITE_JUSTIFICATION_OPPORTUNITY;
+
+interface IDWriteTextAnalysisSource1;
+interface IDWriteTextAnalysisSink1;
+interface IDWriteRenderingParams1;
+
+[
+local,
+object,
+uuid(30572f99-dac6-41db-a16e-0486307e606a)
+]
+interface IDWriteFactory1 : IDWriteFactory
+{
+    HRESULT GetEudcFontCollection(IDWriteFontCollection **collection,
+                                  [defaultvalue(FALSE)] BOOL check_for_updates);
+    HRESULT CreateCustomRenderingParams(FLOAT gamma,
+                                        FLOAT enhcontrast,
+                                        FLOAT enhcontrast_grayscale,
+                                        FLOAT cleartype_level,
+                                        DWRITE_PIXEL_GEOMETRY geometry,
+                                        DWRITE_RENDERING_MODE mode,
+                                        IDWriteRenderingParams1** params);
+}
+
+[
+local,
+object,
+uuid(a71efdb4-9fdb-4838-ad90-cfc3be8c3daf)
+]
+interface IDWriteFontFace1 : IDWriteFontFace
+{
+    void GetMetrics(DWRITE_FONT_METRICS1 *metrics);
+    HRESULT GetGdiCompatibleMetrics(FLOAT em_size,
+                                    FLOAT pixels_per_dip,
+                                    const DWRITE_MATRIX *transform,
+                                    DWRITE_FONT_METRICS1 *metrics);
+    void GetCaretMetrics(DWRITE_CARET_METRICS *metrics);
+    HRESULT GetUnicodeRanges(UINT32 max_count,
+                             DWRITE_UNICODE_RANGE *ranges,
+                             UINT32 *count);
+    BOOL IsMonospacedFont();
+    HRESULT GetDesignGlyphAdvances(UINT32 glyph_count,
+                                   UINT16 const *indices,
+                                   INT32 *advances,
+                                   [defaultvalue(FALSE)] BOOL is_sideways);
+    HRESULT GetGdiCompatibleGlyphAdvances(FLOAT em_size,
+                                          FLOAT pixels_per_dip,
+                                          const DWRITE_MATRIX *transform,
+                                          BOOL use_gdi_natural,
+                                          BOOL is_sideways,
+                                          UINT32 glyph_count,
+                                          const UINT16 *indices,
+                                          INT32 *advances);
+
+    HRESULT GetKerningPairAdjustments(UINT32 glyph_count,
+                                      const UINT16 *indices,
+                                      INT32 *adjustments);
+    BOOL HasKerningPairs();
+    HRESULT GetRecommendedRenderingMode(FLOAT font_emsize,
+                                        FLOAT dpiX,
+                                        FLOAT dpiY,
+                                        const DWRITE_MATRIX *transform,
+                                        BOOL is_sideways,
+                                        DWRITE_OUTLINE_THRESHOLD threshold,
+                                        DWRITE_MEASURING_MODE measuring_mode,
+                                        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT GetVerticalGlyphVariants(UINT32 glyph_count,
+                                     const UINT16 *nominal_indices,
+                                     UINT16 *vertical_indices);
+    BOOL HasVerticalGlyphVariants();
+}
+
+[
+local,
+object,
+uuid(acd16696-8c14-4f5d-877e-fe3fc1d32738)
+]
+interface IDWriteFont1 : IDWriteFont
+{
+    void GetMetrics(DWRITE_FONT_METRICS1 *metrics);
+    void GetPanose(DWRITE_PANOSE *panose);
+    HRESULT GetUnicodeRanges(UINT32 max_count,
+                             DWRITE_UNICODE_RANGE *ranges,
+                             UINT32 *count);
+    BOOL IsMonospacedFont();
+}
+
+[
+local,
+object,
+uuid(94413cf4-a6fc-4248-8b50-6674348fcad3)
+]
+interface IDWriteRenderingParams1 : IDWriteRenderingParams
+{
+    FLOAT GetGrayscaleEnhancedContrast();
+}
+
+[
+local,
+object,
+uuid(80dad800-e21f-4e83-96ce-bfcce500db7c)
+]
+interface IDWriteTextAnalyzer1 : IDWriteTextAnalyzer
+{
+    HRESULT ApplyCharacterSpacing(FLOAT leading_spacing,
+                                  FLOAT trailing_spacing,
+                                  FLOAT min_advance_width,
+                                  UINT32 len,
+                                  UINT32 glyph_count,
+                                  UINT16 const *clustermap,
+                                  FLOAT const *advances,
+                                  DWRITE_GLYPH_OFFSET const *offsets,
+                                  DWRITE_SHAPING_GLYPH_PROPERTIES const *props,
+                                  FLOAT *modified_advances,
+                                  DWRITE_GLYPH_OFFSET *modified_offsets);
+    HRESULT GetBaseline(IDWriteFontFace *face,
+                        DWRITE_BASELINE baseline,
+                        BOOL vertical,
+                        BOOL is_simulation_allowed,
+                        DWRITE_SCRIPT_ANALYSIS sa,
+                        const WCHAR *localeName,
+                        INT32 *baseline_coord,
+                        BOOL *exists);
+
+    HRESULT AnalyzeVerticalGlyphOrientation(
+        IDWriteTextAnalysisSource1* source,
+        UINT32 text_pos,
+        UINT32 len,
+        IDWriteTextAnalysisSink1 *sink);
+
+    HRESULT GetGlyphOrientationTransform(
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        BOOL is_sideways,
+        DWRITE_MATRIX *transform);
+
+    HRESULT GetScriptProperties(DWRITE_SCRIPT_ANALYSIS sa, DWRITE_SCRIPT_PROPERTIES *props);
+
+    HRESULT GetTextComplexity(const WCHAR *text,
+                              UINT32 len,
+                              IDWriteFontFace *face,
+                              BOOL *is_simple,
+                              UINT32 *len_read,
+                              UINT16 *indices);
+    HRESULT GetJustificationOpportunities(
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        DWRITE_JUSTIFICATION_OPPORTUNITY *jo);
+
+    HRESULT JustifyGlyphAdvances(
+        FLOAT width,
+        UINT32 glyph_count,
+        const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        FLOAT *justifiedadvances,
+        DWRITE_GLYPH_OFFSET *justifiedoffsets);
+
+    HRESULT GetJustifiedGlyphs(
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        UINT32 max_glyphcount,
+        const UINT16 *clustermap,
+        const UINT16 *indices,
+        const FLOAT *advances,
+        const FLOAT *justifiedadvances,
+        const DWRITE_GLYPH_OFFSET *justifiedoffsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        UINT32 *actual_count,
+        UINT16 *modified_clustermap,
+        UINT16 *modified_indices,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets);
+}
+
+[
+local,
+object,
+uuid(639cfad8-0fb4-4b21-a58a-067920120009)
+]
+interface IDWriteTextAnalysisSource1 : IDWriteTextAnalysisSource
+{
+    HRESULT GetVerticalGlyphOrientation(
+        UINT32 pos,
+        UINT32 *length,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
+        UINT8 *bidi_level);
+}
+
+[
+local,
+object,
+uuid(b0d941a0-85e7-4d8b-9fd3-5ced9934482a)
+]
+interface IDWriteTextAnalysisSink1 : IDWriteTextAnalysisSink
+{
+    HRESULT SetGlyphOrientation(
+        UINT32 pos,
+        UINT32 length,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        UINT8 adjusted_bidilevel,
+        BOOL is_sideways,
+        BOOL is_rtl);
+}
+
+[
+local,
+object,
+uuid(9064d822-80a7-465c-a986-df65f78b8feb)
+]
+interface IDWriteTextLayout1 : IDWriteTextLayout
+{
+    HRESULT SetPairKerning(
+        BOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT GetPairKerning(
+        UINT32 position,
+        BOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT SetCharacterSpacing(
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT GetCharacterSpacing(
+        UINT32 position,
+        FLOAT* leading_spacing,
+        FLOAT* trailing_spacing,
+        FLOAT* minimum_advance_width,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+}
+
+typedef enum DWRITE_TEXT_ANTIALIAS_MODE
+{
+    DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
+    DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE
+} DWRITE_TEXT_ANTIALIAS_MODE;
+
+[
+local,
+object,
+uuid(791e8298-3ef3-4230-9880-c9bdecc42064)
+]
+interface IDWriteBitmapRenderTarget1 : IDWriteBitmapRenderTarget
+{
+    DWRITE_TEXT_ANTIALIAS_MODE GetTextAntialiasMode();
+    HRESULT SetTextAntialiasMode(DWRITE_TEXT_ANTIALIAS_MODE mode);
+}
diff --git a/mingw-w64-headers/include/dwrite_2.h b/mingw-w64-headers/include/dwrite_2.h
index c939297..5157089 100644
--- a/mingw-w64-headers/include/dwrite_2.h
+++ b/mingw-w64-headers/include/dwrite_2.h
@@ -1,47 +1,163 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
+/*** Autogenerated by WIDL 5.13 from include/dwrite_2.idl - Do not edit ***/
 
-#ifndef DWRITE_2_H_INCLUDED
-#define DWRITE_2_H_INCLUDED
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __dwrite_2_h__
+#define __dwrite_2_h__
+
+/* Forward declarations */
+
+#ifndef __IDWriteTextRenderer1_FWD_DEFINED__
+#define __IDWriteTextRenderer1_FWD_DEFINED__
+typedef interface IDWriteTextRenderer1 IDWriteTextRenderer1;
+#ifdef __cplusplus
+interface IDWriteTextRenderer1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFallback_FWD_DEFINED__
+#define __IDWriteFontFallback_FWD_DEFINED__
+typedef interface IDWriteFontFallback IDWriteFontFallback;
+#ifdef __cplusplus
+interface IDWriteFontFallback;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextFormat1_FWD_DEFINED__
+#define __IDWriteTextFormat1_FWD_DEFINED__
+typedef interface IDWriteTextFormat1 IDWriteTextFormat1;
+#ifdef __cplusplus
+interface IDWriteTextFormat1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextLayout2_FWD_DEFINED__
+#define __IDWriteTextLayout2_FWD_DEFINED__
+typedef interface IDWriteTextLayout2 IDWriteTextLayout2;
+#ifdef __cplusplus
+interface IDWriteTextLayout2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextAnalyzer2_FWD_DEFINED__
+#define __IDWriteTextAnalyzer2_FWD_DEFINED__
+typedef interface IDWriteTextAnalyzer2 IDWriteTextAnalyzer2;
+#ifdef __cplusplus
+interface IDWriteTextAnalyzer2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFallbackBuilder_FWD_DEFINED__
+#define __IDWriteFontFallbackBuilder_FWD_DEFINED__
+typedef interface IDWriteFontFallbackBuilder IDWriteFontFallbackBuilder;
+#ifdef __cplusplus
+interface IDWriteFontFallbackBuilder;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFont2_FWD_DEFINED__
+#define __IDWriteFont2_FWD_DEFINED__
+typedef interface IDWriteFont2 IDWriteFont2;
+#ifdef __cplusplus
+interface IDWriteFont2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace2_FWD_DEFINED__
+#define __IDWriteFontFace2_FWD_DEFINED__
+typedef interface IDWriteFontFace2 IDWriteFontFace2;
+#ifdef __cplusplus
+interface IDWriteFontFace2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteColorGlyphRunEnumerator_FWD_DEFINED__
+#define __IDWriteColorGlyphRunEnumerator_FWD_DEFINED__
+typedef interface IDWriteColorGlyphRunEnumerator IDWriteColorGlyphRunEnumerator;
+#ifdef __cplusplus
+interface IDWriteColorGlyphRunEnumerator;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteRenderingParams2_FWD_DEFINED__
+#define __IDWriteRenderingParams2_FWD_DEFINED__
+typedef interface IDWriteRenderingParams2 IDWriteRenderingParams2;
+#ifdef __cplusplus
+interface IDWriteRenderingParams2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFactory2_FWD_DEFINED__
+#define __IDWriteFactory2_FWD_DEFINED__
+typedef interface IDWriteFactory2 IDWriteFactory2;
+#ifdef __cplusplus
+interface IDWriteFactory2;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
 
 #include <dwrite_1.h>
 
-typedef enum DWRITE_GRID_FIT_MODE
-{
-    DWRITE_GRID_FIT_MODE_DEFAULT,
-    DWRITE_GRID_FIT_MODE_DISABLED,
-    DWRITE_GRID_FIT_MODE_ENABLED
-} DWRITE_GRID_FIT_MODE;
+#ifdef __cplusplus
+extern "C" {
+#endif
 
+typedef enum DWRITE_OPTICAL_ALIGNMENT {
+    DWRITE_OPTICAL_ALIGNMENT_NONE = 0,
+    DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS = 1
+} DWRITE_OPTICAL_ALIGNMENT;
+typedef enum DWRITE_GRID_FIT_MODE {
+    DWRITE_GRID_FIT_MODE_DEFAULT = 0,
+    DWRITE_GRID_FIT_MODE_DISABLED = 1,
+    DWRITE_GRID_FIT_MODE_ENABLED = 2
+} DWRITE_GRID_FIT_MODE;
+typedef struct DWRITE_TEXT_METRICS1 {
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT widthIncludingTrailingWhitespace;
+    FLOAT height;
+    FLOAT layoutWidth;
+    FLOAT layoutHeight;
+    UINT32 maxBidiReorderingDepth;
+    UINT32 lineCount;
+    FLOAT heightIncludingTrailingWhitespace;
+} DWRITE_TEXT_METRICS1;
 #ifndef D3DCOLORVALUE_DEFINED
-#define D3DCOLORVALUE_DEFINED
 typedef struct _D3DCOLORVALUE {
-    union {
+    __C89_NAMELESS union {
         FLOAT r;
         FLOAT dvR;
-    } DUMMYUNIONNAME1;
-    union {
+    } __C89_NAMELESSUNIONNAME1;
+    __C89_NAMELESS union {
         FLOAT g;
         FLOAT dvG;
-    } DUMMYUNIONNAME2;
-    union {
+    } __C89_NAMELESSUNIONNAME2;
+    __C89_NAMELESS union {
         FLOAT b;
         FLOAT dvB;
-    } DUMMYUNIONNAME3;
-    union {
+    } __C89_NAMELESSUNIONNAME3;
+    __C89_NAMELESS union {
         FLOAT a;
         FLOAT dvA;
-    } DUMMYUNIONNAME4;
-} D3DCOLORVALUE,*LPD3DCOLORVALUE;
-#endif /* D3DCOLORVALUE_DEFINED */
-
+    } __C89_NAMELESSUNIONNAME4;
+} D3DCOLORVALUE;
+#define D3DCOLORVALUE_DEFINED
+#endif
 typedef D3DCOLORVALUE DWRITE_COLOR_F;
-
-typedef struct DWRITE_COLOR_GLYPH_RUN
-{
+typedef struct DWRITE_COLOR_GLYPH_RUN {
     DWRITE_GLYPH_RUN glyphRun;
     DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;
     FLOAT baselineOriginX;
@@ -49,447 +165,3131 @@
     DWRITE_COLOR_F runColor;
     UINT16 paletteIndex;
 } DWRITE_COLOR_GLYPH_RUN;
+/*****************************************************************************
+ * IDWriteTextRenderer1 interface
+ */
+#ifndef __IDWriteTextRenderer1_INTERFACE_DEFINED__
+#define __IDWriteTextRenderer1_INTERFACE_DEFINED__
 
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFallback
-DECLARE_INTERFACE_(IDWriteFontFallback,IUnknown)
+DEFINE_GUID(IID_IDWriteTextRenderer1, 0xd3e0e934, 0x22a0, 0x427e, 0xaa,0xe4, 0x7d,0x95,0x74,0xb5,0x9d,0xb1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d3e0e934-22a0-427e-aae4-7d9574b59db1")
+IDWriteTextRenderer1 : public IDWriteTextRenderer
 {
+    virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        IUnknown *effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawUnderline(
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        const DWRITE_UNDERLINE *underline,
+        IUnknown *effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawStrikethrough(
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        const DWRITE_STRIKETHROUGH *strikethrough,
+        IUnknown *effect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawInlineObject(
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        IDWriteInlineObject *inlineObject,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *effect) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextRenderer1, 0xd3e0e934, 0x22a0, 0x427e, 0xaa,0xe4, 0x7d,0x95,0x74,0xb5,0x9d,0xb1)
+#endif
+#else
+typedef struct IDWriteTextRenderer1Vtbl {
     BEGIN_INTERFACE
 
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextRenderer1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextRenderer1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextRenderer1 *This);
+
+    /*** IDWritePixelSnapping methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsPixelSnappingDisabled)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        WINBOOL *disabled);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTransform)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelsPerDip)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        FLOAT *pixels_per_dip);
+
+    /*** IDWriteTextRenderer methods ***/
+    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_descr,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *DrawUnderline)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        const DWRITE_UNDERLINE *underline,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *DrawStrikethrough)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        const DWRITE_STRIKETHROUGH *strikethrough,
+        IUnknown *drawing_effect);
+
+    HRESULT (STDMETHODCALLTYPE *DrawInlineObject)(
+        IDWriteTextRenderer1 *This,
+        void *client_drawingcontext,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteInlineObject *object,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *drawing_effect);
+
+    /*** IDWriteTextRenderer1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextRenderer1_DrawGlyphRun)(
+        IDWriteTextRenderer1 *This,
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        IUnknown *effect);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextRenderer1_DrawUnderline)(
+        IDWriteTextRenderer1 *This,
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        const DWRITE_UNDERLINE *underline,
+        IUnknown *effect);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextRenderer1_DrawStrikethrough)(
+        IDWriteTextRenderer1 *This,
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        const DWRITE_STRIKETHROUGH *strikethrough,
+        IUnknown *effect);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextRenderer1_DrawInlineObject)(
+        IDWriteTextRenderer1 *This,
+        void *context,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        IDWriteInlineObject *inlineObject,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IUnknown *effect);
+
+    END_INTERFACE
+} IDWriteTextRenderer1Vtbl;
+
+interface IDWriteTextRenderer1 {
+    CONST_VTBL IDWriteTextRenderer1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextRenderer1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextRenderer1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextRenderer1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWritePixelSnapping methods ***/
+#define IDWriteTextRenderer1_IsPixelSnappingDisabled(This,client_drawingcontext,disabled) (This)->lpVtbl->IsPixelSnappingDisabled(This,client_drawingcontext,disabled)
+#define IDWriteTextRenderer1_GetCurrentTransform(This,client_drawingcontext,transform) (This)->lpVtbl->GetCurrentTransform(This,client_drawingcontext,transform)
+#define IDWriteTextRenderer1_GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip) (This)->lpVtbl->GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip)
+/*** IDWriteTextRenderer methods ***/
+/*** IDWriteTextRenderer1 methods ***/
+#define IDWriteTextRenderer1_DrawGlyphRun(This,context,originX,originY,angle,mode,run,rundescr,effect) (This)->lpVtbl->IDWriteTextRenderer1_DrawGlyphRun(This,context,originX,originY,angle,mode,run,rundescr,effect)
+#define IDWriteTextRenderer1_DrawUnderline(This,context,originX,originY,angle,underline,effect) (This)->lpVtbl->IDWriteTextRenderer1_DrawUnderline(This,context,originX,originY,angle,underline,effect)
+#define IDWriteTextRenderer1_DrawStrikethrough(This,context,originX,originY,angle,strikethrough,effect) (This)->lpVtbl->IDWriteTextRenderer1_DrawStrikethrough(This,context,originX,originY,angle,strikethrough,effect)
+#define IDWriteTextRenderer1_DrawInlineObject(This,context,originX,originY,angle,inlineObject,is_sideways,is_rtl,effect) (This)->lpVtbl->IDWriteTextRenderer1_DrawInlineObject(This,context,originX,originY,angle,inlineObject,is_sideways,is_rtl,effect)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextRenderer1_QueryInterface(IDWriteTextRenderer1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextRenderer1_AddRef(IDWriteTextRenderer1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextRenderer1_Release(IDWriteTextRenderer1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWritePixelSnapping methods ***/
+static FORCEINLINE HRESULT IDWriteTextRenderer1_IsPixelSnappingDisabled(IDWriteTextRenderer1* This,void *client_drawingcontext,WINBOOL *disabled) {
+    return This->lpVtbl->IsPixelSnappingDisabled(This,client_drawingcontext,disabled);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer1_GetCurrentTransform(IDWriteTextRenderer1* This,void *client_drawingcontext,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->GetCurrentTransform(This,client_drawingcontext,transform);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer1_GetPixelsPerDip(IDWriteTextRenderer1* This,void *client_drawingcontext,FLOAT *pixels_per_dip) {
+    return This->lpVtbl->GetPixelsPerDip(This,client_drawingcontext,pixels_per_dip);
+}
+/*** IDWriteTextRenderer methods ***/
+/*** IDWriteTextRenderer1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextRenderer1_DrawGlyphRun(IDWriteTextRenderer1* This,void *context,FLOAT originX,FLOAT originY,DWRITE_GLYPH_ORIENTATION_ANGLE angle,DWRITE_MEASURING_MODE mode,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,IUnknown *effect) {
+    return This->lpVtbl->IDWriteTextRenderer1_DrawGlyphRun(This,context,originX,originY,angle,mode,run,rundescr,effect);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer1_DrawUnderline(IDWriteTextRenderer1* This,void *context,FLOAT originX,FLOAT originY,DWRITE_GLYPH_ORIENTATION_ANGLE angle,const DWRITE_UNDERLINE *underline,IUnknown *effect) {
+    return This->lpVtbl->IDWriteTextRenderer1_DrawUnderline(This,context,originX,originY,angle,underline,effect);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer1_DrawStrikethrough(IDWriteTextRenderer1* This,void *context,FLOAT originX,FLOAT originY,DWRITE_GLYPH_ORIENTATION_ANGLE angle,const DWRITE_STRIKETHROUGH *strikethrough,IUnknown *effect) {
+    return This->lpVtbl->IDWriteTextRenderer1_DrawStrikethrough(This,context,originX,originY,angle,strikethrough,effect);
+}
+static FORCEINLINE HRESULT IDWriteTextRenderer1_DrawInlineObject(IDWriteTextRenderer1* This,void *context,FLOAT originX,FLOAT originY,DWRITE_GLYPH_ORIENTATION_ANGLE angle,IDWriteInlineObject *inlineObject,WINBOOL is_sideways,WINBOOL is_rtl,IUnknown *effect) {
+    return This->lpVtbl->IDWriteTextRenderer1_DrawInlineObject(This,context,originX,originY,angle,inlineObject,is_sideways,is_rtl,effect);
+}
+#endif
 #endif
 
-    STDMETHOD(MapCharacters)(THIS_
-        IDWriteTextAnalysisSource *analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteFontCollection *baseFontCollection,
-        wchar_t const *baseFamilyName,
+#endif
+
+
+#endif  /* __IDWriteTextRenderer1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFallback interface
+ */
+#ifndef __IDWriteFontFallback_INTERFACE_DEFINED__
+#define __IDWriteFontFallback_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFallback, 0xefa008f9, 0xf7a1, 0x48bf, 0xb0,0x5c, 0xf2,0x24,0x71,0x3c,0xc0,0xff);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("efa008f9-f7a1-48bf-b05c-f224713cc0ff")
+IDWriteFontFallback : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE MapCharacters(
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteFontCollection *basecollection,
+        const WCHAR *baseFamilyName,
         DWRITE_FONT_WEIGHT baseWeight,
         DWRITE_FONT_STYLE baseStyle,
         DWRITE_FONT_STRETCH baseStretch,
         UINT32 *mappedLength,
         IDWriteFont **mappedFont,
-        FLOAT *scale) PURE;
+        FLOAT *scale) = 0;
 
-    END_INTERFACE
 };
-
-__CRT_UUID_DECL(IDWriteFontFallback, 0xefa008f9,0xf7a1,0x48bf,0xb0,0x5c,0xf2,0x24,0x71,0x3c,0xc0,0xff)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFallbackBuilder
-DECLARE_INTERFACE_(IDWriteFontFallbackBuilder,IUnknown)
-{
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFallback, 0xefa008f9, 0xf7a1, 0x48bf, 0xb0,0x5c, 0xf2,0x24,0x71,0x3c,0xc0,0xff)
+#endif
+#else
+typedef struct IDWriteFontFallbackVtbl {
     BEGIN_INTERFACE
 
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFallback *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFallback *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFallback *This);
+
+    /*** IDWriteFontFallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *MapCharacters)(
+        IDWriteFontFallback *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteFontCollection *basecollection,
+        const WCHAR *baseFamilyName,
+        DWRITE_FONT_WEIGHT baseWeight,
+        DWRITE_FONT_STYLE baseStyle,
+        DWRITE_FONT_STRETCH baseStretch,
+        UINT32 *mappedLength,
+        IDWriteFont **mappedFont,
+        FLOAT *scale);
+
+    END_INTERFACE
+} IDWriteFontFallbackVtbl;
+
+interface IDWriteFontFallback {
+    CONST_VTBL IDWriteFontFallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFallback_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFallback_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFallback methods ***/
+#define IDWriteFontFallback_MapCharacters(This,source,position,length,basecollection,baseFamilyName,baseWeight,baseStyle,baseStretch,mappedLength,mappedFont,scale) (This)->lpVtbl->MapCharacters(This,source,position,length,basecollection,baseFamilyName,baseWeight,baseStyle,baseStretch,mappedLength,mappedFont,scale)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFallback_QueryInterface(IDWriteFontFallback* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFallback_AddRef(IDWriteFontFallback* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFallback_Release(IDWriteFontFallback* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFallback methods ***/
+static FORCEINLINE HRESULT IDWriteFontFallback_MapCharacters(IDWriteFontFallback* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteFontCollection *basecollection,const WCHAR *baseFamilyName,DWRITE_FONT_WEIGHT baseWeight,DWRITE_FONT_STYLE baseStyle,DWRITE_FONT_STRETCH baseStretch,UINT32 *mappedLength,IDWriteFont **mappedFont,FLOAT *scale) {
+    return This->lpVtbl->MapCharacters(This,source,position,length,basecollection,baseFamilyName,baseWeight,baseStyle,baseStretch,mappedLength,mappedFont,scale);
+}
+#endif
 #endif
 
-    STDMETHOD(AddMapping)(THIS_
-        DWRITE_UNICODE_RANGE const *ranges,
+#endif
+
+
+#endif  /* __IDWriteFontFallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextFormat1 interface
+ */
+#ifndef __IDWriteTextFormat1_INTERFACE_DEFINED__
+#define __IDWriteTextFormat1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextFormat1, 0x5f174b49, 0x0d8b, 0x4cfb, 0x8b,0xca, 0xf1,0xcc,0xe9,0xd0,0x6c,0x67);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5f174b49-0d8b-4cfb-8bca-f1cce9d06c67")
+IDWriteTextFormat1 : public IDWriteTextFormat
+{
+    virtual HRESULT STDMETHODCALLTYPE SetVerticalGlyphOrientation(
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) = 0;
+
+    virtual DWRITE_VERTICAL_GLYPH_ORIENTATION STDMETHODCALLTYPE GetVerticalGlyphOrientation(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLastLineWrapping(
+        WINBOOL lastline_wrapping_enabled) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE GetLastLineWrapping(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOpticalAlignment(
+        DWRITE_OPTICAL_ALIGNMENT alignment) = 0;
+
+    virtual DWRITE_OPTICAL_ALIGNMENT STDMETHODCALLTYPE GetOpticalAlignment(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontFallback(
+        IDWriteFontFallback *fallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFallback(
+        IDWriteFontFallback **fallback) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextFormat1, 0x5f174b49, 0x0d8b, 0x4cfb, 0x8b,0xca, 0xf1,0xcc,0xe9,0xd0,0x6c,0x67)
+#endif
+#else
+typedef struct IDWriteTextFormat1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextFormat1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextFormat1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextFormat1 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextFormat1 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextFormat1 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextFormat1 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextFormat1 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextFormat1 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextFormat1 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextFormat1 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextFormat1 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextFormat1 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextFormat1 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextFormat1 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextFormat1 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextFormat1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextFormat1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextFormat1 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextFormat1 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextFormat1 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextFormat1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextFormat1 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextFormat1 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextFormat1 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextFormat1 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextFormat1 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextFormat1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextFormat1 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextFormat1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
+        IDWriteTextFormat1 *This,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+
+    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextFormat1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
+        IDWriteTextFormat1 *This,
+        WINBOOL lastline_wrapping_enabled);
+
+    WINBOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
+        IDWriteTextFormat1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
+        IDWriteTextFormat1 *This,
+        DWRITE_OPTICAL_ALIGNMENT alignment);
+
+    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
+        IDWriteTextFormat1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
+        IDWriteTextFormat1 *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
+        IDWriteTextFormat1 *This,
+        IDWriteFontFallback **fallback);
+
+    END_INTERFACE
+} IDWriteTextFormat1Vtbl;
+
+interface IDWriteTextFormat1 {
+    CONST_VTBL IDWriteTextFormat1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextFormat1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextFormat1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextFormat1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextFormat1_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextFormat1_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextFormat1_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextFormat1_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextFormat1_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextFormat1_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextFormat1_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextFormat1_SetLineSpacing(This,spacing,line_spacing,baseline) (This)->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline)
+#define IDWriteTextFormat1_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextFormat1_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextFormat1_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextFormat1_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextFormat1_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextFormat1_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextFormat1_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextFormat1_GetLineSpacing(This,method,spacing,baseline) (This)->lpVtbl->GetLineSpacing(This,method,spacing,baseline)
+#define IDWriteTextFormat1_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteTextFormat1_GetFontFamilyNameLength(This) (This)->lpVtbl->GetFontFamilyNameLength(This)
+#define IDWriteTextFormat1_GetFontFamilyName(This,name,size) (This)->lpVtbl->GetFontFamilyName(This,name,size)
+#define IDWriteTextFormat1_GetFontWeight(This) (This)->lpVtbl->GetFontWeight(This)
+#define IDWriteTextFormat1_GetFontStyle(This) (This)->lpVtbl->GetFontStyle(This)
+#define IDWriteTextFormat1_GetFontStretch(This) (This)->lpVtbl->GetFontStretch(This)
+#define IDWriteTextFormat1_GetFontSize(This) (This)->lpVtbl->GetFontSize(This)
+#define IDWriteTextFormat1_GetLocaleNameLength(This) (This)->lpVtbl->GetLocaleNameLength(This)
+#define IDWriteTextFormat1_GetLocaleName(This,name,size) (This)->lpVtbl->GetLocaleName(This,name,size)
+/*** IDWriteTextFormat1 methods ***/
+#define IDWriteTextFormat1_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
+#define IDWriteTextFormat1_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
+#define IDWriteTextFormat1_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
+#define IDWriteTextFormat1_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
+#define IDWriteTextFormat1_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
+#define IDWriteTextFormat1_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
+#define IDWriteTextFormat1_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
+#define IDWriteTextFormat1_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat1_QueryInterface(IDWriteTextFormat1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextFormat1_AddRef(IDWriteTextFormat1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextFormat1_Release(IDWriteTextFormat1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetTextAlignment(IDWriteTextFormat1* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetParagraphAlignment(IDWriteTextFormat1* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetWordWrapping(IDWriteTextFormat1* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetReadingDirection(IDWriteTextFormat1* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetFlowDirection(IDWriteTextFormat1* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetIncrementalTabStop(IDWriteTextFormat1* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetTrimming(IDWriteTextFormat1* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetLineSpacing(IDWriteTextFormat1* This,DWRITE_LINE_SPACING_METHOD spacing,FLOAT line_spacing,FLOAT baseline) {
+    return This->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextFormat1_GetTextAlignment(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat1_GetParagraphAlignment(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextFormat1_GetWordWrapping(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextFormat1_GetReadingDirection(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextFormat1_GetFlowDirection(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat1_GetIncrementalTabStop(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_GetTrimming(IDWriteTextFormat1* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_GetLineSpacing(IDWriteTextFormat1* This,DWRITE_LINE_SPACING_METHOD *method,FLOAT *spacing,FLOAT *baseline) {
+    return This->lpVtbl->GetLineSpacing(This,method,spacing,baseline);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_GetFontCollection(IDWriteTextFormat1* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat1_GetFontFamilyNameLength(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetFontFamilyNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_GetFontFamilyName(IDWriteTextFormat1* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetFontFamilyName(This,name,size);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteTextFormat1_GetFontWeight(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetFontWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteTextFormat1_GetFontStyle(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetFontStyle(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteTextFormat1_GetFontStretch(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetFontStretch(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat1_GetFontSize(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetFontSize(This);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat1_GetLocaleNameLength(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetLocaleNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_GetLocaleName(IDWriteTextFormat1* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetLocaleName(This,name,size);
+}
+/*** IDWriteTextFormat1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetVerticalGlyphOrientation(IDWriteTextFormat1* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
+    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
+}
+static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextFormat1_GetVerticalGlyphOrientation(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetLastLineWrapping(IDWriteTextFormat1* This,WINBOOL lastline_wrapping_enabled) {
+    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
+}
+static FORCEINLINE WINBOOL IDWriteTextFormat1_GetLastLineWrapping(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetLastLineWrapping(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetOpticalAlignment(IDWriteTextFormat1* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
+    return This->lpVtbl->SetOpticalAlignment(This,alignment);
+}
+static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextFormat1_GetOpticalAlignment(IDWriteTextFormat1* This) {
+    return This->lpVtbl->GetOpticalAlignment(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_SetFontFallback(IDWriteTextFormat1* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->SetFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat1_GetFontFallback(IDWriteTextFormat1* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetFontFallback(This,fallback);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextFormat1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextLayout2 interface
+ */
+#ifndef __IDWriteTextLayout2_INTERFACE_DEFINED__
+#define __IDWriteTextLayout2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextLayout2, 0x1093c18f, 0x8d5e, 0x43f0, 0xb0,0x64, 0x09,0x17,0x31,0x1b,0x52,0x5e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1093c18f-8d5e-43f0-b064-0917311b525e")
+IDWriteTextLayout2 : public IDWriteTextLayout1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMetrics(
+        DWRITE_TEXT_METRICS1 *metrics) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVerticalGlyphOrientation(
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) = 0;
+
+    virtual DWRITE_VERTICAL_GLYPH_ORIENTATION STDMETHODCALLTYPE GetVerticalGlyphOrientation(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLastLineWrapping(
+        WINBOOL lastline_wrapping_enabled) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE GetLastLineWrapping(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOpticalAlignment(
+        DWRITE_OPTICAL_ALIGNMENT alignment) = 0;
+
+    virtual DWRITE_OPTICAL_ALIGNMENT STDMETHODCALLTYPE GetOpticalAlignment(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFontFallback(
+        IDWriteFontFallback *fallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFallback(
+        IDWriteFontFallback **fallback) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextLayout2, 0x1093c18f, 0x8d5e, 0x43f0, 0xb0,0x64, 0x09,0x17,0x31,0x1b,0x52,0x5e)
+#endif
+#else
+typedef struct IDWriteTextLayout2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextLayout2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextLayout2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextLayout2 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextLayout2 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextLayout2 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextLayout2 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextLayout2 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextLayout2 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextLayout2 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextLayout2 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextLayout2 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextLayout2 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextLayout2 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextLayout2 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextLayout2 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextLayout2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextLayout2 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextLayout2 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextLayout2 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextLayout2 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextLayout2 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextLayout2 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextLayout2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextLayout2 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextLayout2 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextLayout methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetMaxWidth)(
+        IDWriteTextLayout2 *This,
+        FLOAT maxWidth);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaxHeight)(
+        IDWriteTextLayout2 *This,
+        FLOAT maxHeight);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontCollection)(
+        IDWriteTextLayout2 *This,
+        IDWriteFontCollection *collection,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFamilyName)(
+        IDWriteTextLayout2 *This,
+        const WCHAR *name,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontWeight)(
+        IDWriteTextLayout2 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStyle)(
+        IDWriteTextLayout2 *This,
+        DWRITE_FONT_STYLE style,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStretch)(
+        IDWriteTextLayout2 *This,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontSize)(
+        IDWriteTextLayout2 *This,
+        FLOAT size,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnderline)(
+        IDWriteTextLayout2 *This,
+        WINBOOL underline,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetStrikethrough)(
+        IDWriteTextLayout2 *This,
+        WINBOOL strikethrough,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetDrawingEffect)(
+        IDWriteTextLayout2 *This,
+        IUnknown *effect,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(
+        IDWriteTextLayout2 *This,
+        IDWriteInlineObject *object,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypography)(
+        IDWriteTextLayout2 *This,
+        IDWriteTypography *typography,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetLocaleName)(
+        IDWriteTextLayout2 *This,
+        const WCHAR *locale,
+        DWRITE_TEXT_RANGE range);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxWidth)(
+        IDWriteTextLayout2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxHeight)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontCollection)(
+        IDWriteTextLayout2 *This,
+        UINT32 pos,
+        IDWriteFontCollection **collection,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyNameLength)(
+        IDWriteTextLayout2 *This,
+        UINT32 pos,
+        UINT32 *len,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyName)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontWeight)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStyle)(
+        IDWriteTextLayout2 *This,
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStretch)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontSize)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        FLOAT *size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnderline)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        WINBOOL *has_underline,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrikethrough)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        WINBOOL *has_strikethrough,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetDrawingEffect)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        IUnknown **effect,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        IDWriteInlineObject **object,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypography)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        IDWriteTypography **typography,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleNameLength)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        UINT32 *length,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleName)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IDWriteTextLayout2 *This,
+        void *context,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineMetrics)(
+        IDWriteTextLayout2 *This,
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteTextLayout2 *This,
+        DWRITE_TEXT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
+        IDWriteTextLayout2 *This,
+        DWRITE_OVERHANG_METRICS *overhangs);
+
+    HRESULT (STDMETHODCALLTYPE *GetClusterMetrics)(
+        IDWriteTextLayout2 *This,
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *act_count);
+
+    HRESULT (STDMETHODCALLTYPE *DetermineMinWidth)(
+        IDWriteTextLayout2 *This,
+        FLOAT *min_width);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestPoint)(
+        IDWriteTextLayout2 *This,
+        FLOAT pointX,
+        FLOAT pointY,
+        WINBOOL *is_trailinghit,
+        WINBOOL *is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextPosition)(
+        IDWriteTextLayout2 *This,
+        UINT32 textPosition,
+        WINBOOL is_trailinghit,
+        FLOAT *pointX,
+        FLOAT *pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextRange)(
+        IDWriteTextLayout2 *This,
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32 *actual_metricscount);
+
+    /*** IDWriteTextLayout1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPairKerning)(
+        IDWriteTextLayout2 *This,
+        WINBOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetPairKerning)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        WINBOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *SetCharacterSpacing)(
+        IDWriteTextLayout2 *This,
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetCharacterSpacing)(
+        IDWriteTextLayout2 *This,
+        UINT32 position,
+        FLOAT *leading_spacing,
+        FLOAT *trailing_spacing,
+        FLOAT *minimum_advance_width,
+        DWRITE_TEXT_RANGE *range);
+
+    /*** IDWriteTextLayout2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout2_GetMetrics)(
+        IDWriteTextLayout2 *This,
+        DWRITE_TEXT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
+        IDWriteTextLayout2 *This,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+
+    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
+        IDWriteTextLayout2 *This,
+        WINBOOL lastline_wrapping_enabled);
+
+    WINBOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
+        IDWriteTextLayout2 *This,
+        DWRITE_OPTICAL_ALIGNMENT alignment);
+
+    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
+        IDWriteTextLayout2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
+        IDWriteTextLayout2 *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
+        IDWriteTextLayout2 *This,
+        IDWriteFontFallback **fallback);
+
+    END_INTERFACE
+} IDWriteTextLayout2Vtbl;
+
+interface IDWriteTextLayout2 {
+    CONST_VTBL IDWriteTextLayout2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextLayout2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextLayout2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextLayout2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextLayout2_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextLayout2_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextLayout2_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextLayout2_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextLayout2_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextLayout2_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextLayout2_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextLayout2_SetLineSpacing(This,spacing,line_spacing,baseline) (This)->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline)
+#define IDWriteTextLayout2_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextLayout2_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextLayout2_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextLayout2_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextLayout2_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextLayout2_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextLayout2_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextLayout2_GetLineSpacing(This,method,spacing,baseline) (This)->lpVtbl->GetLineSpacing(This,method,spacing,baseline)
+/*** IDWriteTextLayout methods ***/
+#define IDWriteTextLayout2_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
+#define IDWriteTextLayout2_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
+#define IDWriteTextLayout2_SetFontCollection(This,collection,range) (This)->lpVtbl->SetFontCollection(This,collection,range)
+#define IDWriteTextLayout2_SetFontFamilyName(This,name,range) (This)->lpVtbl->SetFontFamilyName(This,name,range)
+#define IDWriteTextLayout2_SetFontWeight(This,weight,range) (This)->lpVtbl->SetFontWeight(This,weight,range)
+#define IDWriteTextLayout2_SetFontStyle(This,style,range) (This)->lpVtbl->SetFontStyle(This,style,range)
+#define IDWriteTextLayout2_SetFontStretch(This,stretch,range) (This)->lpVtbl->SetFontStretch(This,stretch,range)
+#define IDWriteTextLayout2_SetFontSize(This,size,range) (This)->lpVtbl->SetFontSize(This,size,range)
+#define IDWriteTextLayout2_SetUnderline(This,underline,range) (This)->lpVtbl->SetUnderline(This,underline,range)
+#define IDWriteTextLayout2_SetStrikethrough(This,strikethrough,range) (This)->lpVtbl->SetStrikethrough(This,strikethrough,range)
+#define IDWriteTextLayout2_SetDrawingEffect(This,effect,range) (This)->lpVtbl->SetDrawingEffect(This,effect,range)
+#define IDWriteTextLayout2_SetInlineObject(This,object,range) (This)->lpVtbl->SetInlineObject(This,object,range)
+#define IDWriteTextLayout2_SetTypography(This,typography,range) (This)->lpVtbl->SetTypography(This,typography,range)
+#define IDWriteTextLayout2_SetLocaleName(This,locale,range) (This)->lpVtbl->SetLocaleName(This,locale,range)
+#define IDWriteTextLayout2_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
+#define IDWriteTextLayout2_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
+#define IDWriteTextLayout2_GetFontCollection(This,pos,collection,range) (This)->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range)
+#define IDWriteTextLayout2_GetFontFamilyNameLength(This,pos,len,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range)
+#define IDWriteTextLayout2_GetFontFamilyName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range)
+#define IDWriteTextLayout2_GetFontWeight(This,position,weight,range) (This)->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range)
+#define IDWriteTextLayout2_GetFontStyle(This,currentPosition,style,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range)
+#define IDWriteTextLayout2_GetFontStretch(This,position,stretch,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range)
+#define IDWriteTextLayout2_GetFontSize(This,position,size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range)
+#define IDWriteTextLayout2_GetUnderline(This,position,has_underline,range) (This)->lpVtbl->GetUnderline(This,position,has_underline,range)
+#define IDWriteTextLayout2_GetStrikethrough(This,position,has_strikethrough,range) (This)->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range)
+#define IDWriteTextLayout2_GetDrawingEffect(This,position,effect,range) (This)->lpVtbl->GetDrawingEffect(This,position,effect,range)
+#define IDWriteTextLayout2_GetInlineObject(This,position,object,range) (This)->lpVtbl->GetInlineObject(This,position,object,range)
+#define IDWriteTextLayout2_GetTypography(This,position,typography,range) (This)->lpVtbl->GetTypography(This,position,typography,range)
+#define IDWriteTextLayout2_GetLocaleNameLength(This,position,length,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range)
+#define IDWriteTextLayout2_GetLocaleName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range)
+#define IDWriteTextLayout2_Draw(This,context,renderer,originX,originY) (This)->lpVtbl->Draw(This,context,renderer,originX,originY)
+#define IDWriteTextLayout2_GetLineMetrics(This,metrics,max_count,actual_count) (This)->lpVtbl->GetLineMetrics(This,metrics,max_count,actual_count)
+#define IDWriteTextLayout2_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
+#define IDWriteTextLayout2_GetClusterMetrics(This,metrics,max_count,act_count) (This)->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count)
+#define IDWriteTextLayout2_DetermineMinWidth(This,min_width) (This)->lpVtbl->DetermineMinWidth(This,min_width)
+#define IDWriteTextLayout2_HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics)
+#define IDWriteTextLayout2_HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics)
+#define IDWriteTextLayout2_HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount)
+/*** IDWriteTextLayout1 methods ***/
+#define IDWriteTextLayout2_SetPairKerning(This,is_pairkerning_enabled,range) (This)->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range)
+#define IDWriteTextLayout2_GetPairKerning(This,position,is_pairkerning_enabled,range) (This)->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range)
+#define IDWriteTextLayout2_SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range)
+#define IDWriteTextLayout2_GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range)
+/*** IDWriteTextLayout2 methods ***/
+#define IDWriteTextLayout2_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics)
+#define IDWriteTextLayout2_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
+#define IDWriteTextLayout2_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
+#define IDWriteTextLayout2_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
+#define IDWriteTextLayout2_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
+#define IDWriteTextLayout2_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
+#define IDWriteTextLayout2_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
+#define IDWriteTextLayout2_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
+#define IDWriteTextLayout2_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout2_QueryInterface(IDWriteTextLayout2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextLayout2_AddRef(IDWriteTextLayout2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextLayout2_Release(IDWriteTextLayout2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetTextAlignment(IDWriteTextLayout2* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetParagraphAlignment(IDWriteTextLayout2* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetWordWrapping(IDWriteTextLayout2* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetReadingDirection(IDWriteTextLayout2* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFlowDirection(IDWriteTextLayout2* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetIncrementalTabStop(IDWriteTextLayout2* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetTrimming(IDWriteTextLayout2* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetLineSpacing(IDWriteTextLayout2* This,DWRITE_LINE_SPACING_METHOD spacing,FLOAT line_spacing,FLOAT baseline) {
+    return This->lpVtbl->SetLineSpacing(This,spacing,line_spacing,baseline);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextLayout2_GetTextAlignment(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextLayout2_GetParagraphAlignment(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextLayout2_GetWordWrapping(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextLayout2_GetReadingDirection(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextLayout2_GetFlowDirection(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout2_GetIncrementalTabStop(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetTrimming(IDWriteTextLayout2* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetLineSpacing(IDWriteTextLayout2* This,DWRITE_LINE_SPACING_METHOD *method,FLOAT *spacing,FLOAT *baseline) {
+    return This->lpVtbl->GetLineSpacing(This,method,spacing,baseline);
+}
+/*** IDWriteTextLayout methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetMaxWidth(IDWriteTextLayout2* This,FLOAT maxWidth) {
+    return This->lpVtbl->SetMaxWidth(This,maxWidth);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetMaxHeight(IDWriteTextLayout2* This,FLOAT maxHeight) {
+    return This->lpVtbl->SetMaxHeight(This,maxHeight);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontCollection(IDWriteTextLayout2* This,IDWriteFontCollection *collection,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontCollection(This,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontFamilyName(IDWriteTextLayout2* This,const WCHAR *name,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontFamilyName(This,name,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontWeight(IDWriteTextLayout2* This,DWRITE_FONT_WEIGHT weight,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontWeight(This,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontStyle(IDWriteTextLayout2* This,DWRITE_FONT_STYLE style,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStyle(This,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontStretch(IDWriteTextLayout2* This,DWRITE_FONT_STRETCH stretch,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStretch(This,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontSize(IDWriteTextLayout2* This,FLOAT size,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontSize(This,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetUnderline(IDWriteTextLayout2* This,WINBOOL underline,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetUnderline(This,underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetStrikethrough(IDWriteTextLayout2* This,WINBOOL strikethrough,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetStrikethrough(This,strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetDrawingEffect(IDWriteTextLayout2* This,IUnknown *effect,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetDrawingEffect(This,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetInlineObject(IDWriteTextLayout2* This,IDWriteInlineObject *object,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetInlineObject(This,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetTypography(IDWriteTextLayout2* This,IDWriteTypography *typography,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetTypography(This,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetLocaleName(IDWriteTextLayout2* This,const WCHAR *locale,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetLocaleName(This,locale,range);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout2_GetMaxWidth(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetMaxWidth(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout2_GetMaxHeight(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetMaxHeight(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontCollection(IDWriteTextLayout2* This,UINT32 pos,IDWriteFontCollection **collection,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontFamilyNameLength(IDWriteTextLayout2* This,UINT32 pos,UINT32 *len,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontFamilyName(IDWriteTextLayout2* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontWeight(IDWriteTextLayout2* This,UINT32 position,DWRITE_FONT_WEIGHT *weight,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontStyle(IDWriteTextLayout2* This,UINT32 currentPosition,DWRITE_FONT_STYLE *style,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontStretch(IDWriteTextLayout2* This,UINT32 position,DWRITE_FONT_STRETCH *stretch,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontSize(IDWriteTextLayout2* This,UINT32 position,FLOAT *size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetUnderline(IDWriteTextLayout2* This,UINT32 position,WINBOOL *has_underline,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetUnderline(This,position,has_underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetStrikethrough(IDWriteTextLayout2* This,UINT32 position,WINBOOL *has_strikethrough,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetDrawingEffect(IDWriteTextLayout2* This,UINT32 position,IUnknown **effect,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetDrawingEffect(This,position,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetInlineObject(IDWriteTextLayout2* This,UINT32 position,IDWriteInlineObject **object,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetInlineObject(This,position,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetTypography(IDWriteTextLayout2* This,UINT32 position,IDWriteTypography **typography,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetTypography(This,position,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetLocaleNameLength(IDWriteTextLayout2* This,UINT32 position,UINT32 *length,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetLocaleName(IDWriteTextLayout2* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_Draw(IDWriteTextLayout2* This,void *context,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY) {
+    return This->lpVtbl->Draw(This,context,renderer,originX,originY);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetLineMetrics(IDWriteTextLayout2* This,DWRITE_LINE_METRICS *metrics,UINT32 max_count,UINT32 *actual_count) {
+    return This->lpVtbl->GetLineMetrics(This,metrics,max_count,actual_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetOverhangMetrics(IDWriteTextLayout2* This,DWRITE_OVERHANG_METRICS *overhangs) {
+    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetClusterMetrics(IDWriteTextLayout2* This,DWRITE_CLUSTER_METRICS *metrics,UINT32 max_count,UINT32 *act_count) {
+    return This->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_DetermineMinWidth(IDWriteTextLayout2* This,FLOAT *min_width) {
+    return This->lpVtbl->DetermineMinWidth(This,min_width);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_HitTestPoint(IDWriteTextLayout2* This,FLOAT pointX,FLOAT pointY,WINBOOL *is_trailinghit,WINBOOL *is_inside,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_HitTestTextPosition(IDWriteTextLayout2* This,UINT32 textPosition,WINBOOL is_trailinghit,FLOAT *pointX,FLOAT *pointY,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_HitTestTextRange(IDWriteTextLayout2* This,UINT32 textPosition,UINT32 textLength,FLOAT originX,FLOAT originY,DWRITE_HIT_TEST_METRICS *metrics,UINT32 max_metricscount,UINT32 *actual_metricscount) {
+    return This->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount);
+}
+/*** IDWriteTextLayout1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetPairKerning(IDWriteTextLayout2* This,WINBOOL is_pairkerning_enabled,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetPairKerning(IDWriteTextLayout2* This,UINT32 position,WINBOOL *is_pairkerning_enabled,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetCharacterSpacing(IDWriteTextLayout2* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT minimum_advance_width,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetCharacterSpacing(IDWriteTextLayout2* This,UINT32 position,FLOAT *leading_spacing,FLOAT *trailing_spacing,FLOAT *minimum_advance_width,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+/*** IDWriteTextLayout2 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetMetrics(IDWriteTextLayout2* This,DWRITE_TEXT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetVerticalGlyphOrientation(IDWriteTextLayout2* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
+    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
+}
+static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextLayout2_GetVerticalGlyphOrientation(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetLastLineWrapping(IDWriteTextLayout2* This,WINBOOL lastline_wrapping_enabled) {
+    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
+}
+static FORCEINLINE WINBOOL IDWriteTextLayout2_GetLastLineWrapping(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetLastLineWrapping(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetOpticalAlignment(IDWriteTextLayout2* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
+    return This->lpVtbl->SetOpticalAlignment(This,alignment);
+}
+static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextLayout2_GetOpticalAlignment(IDWriteTextLayout2* This) {
+    return This->lpVtbl->GetOpticalAlignment(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_SetFontFallback(IDWriteTextLayout2* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->SetFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout2_GetFontFallback(IDWriteTextLayout2* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetFontFallback(This,fallback);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextLayout2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextAnalyzer2 interface
+ */
+#ifndef __IDWriteTextAnalyzer2_INTERFACE_DEFINED__
+#define __IDWriteTextAnalyzer2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextAnalyzer2, 0x553a9ff3, 0x5693, 0x4df7, 0xb5,0x2b, 0x74,0x80,0x6f,0x7f,0x2e,0xb9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("553a9ff3-5693-4df7-b52b-74806f7f2eb9")
+IDWriteTextAnalyzer2 : public IDWriteTextAnalyzer1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphOrientationTransform(
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        WINBOOL is_sideways,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_MATRIX *transform) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypographicFeatures(
+        IDWriteFontFace *fontface,
+        DWRITE_SCRIPT_ANALYSIS analysis,
+        const WCHAR *localeName,
+        UINT32 max_tagcount,
+        UINT32 *actual_tagcount,
+        DWRITE_FONT_FEATURE_TAG *tags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckTypographicFeature(
+        IDWriteFontFace *fontface,
+        DWRITE_SCRIPT_ANALYSIS analysis,
+        const WCHAR *localeName,
+        DWRITE_FONT_FEATURE_TAG feature,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        UINT8 *feature_applies) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextAnalyzer2, 0x553a9ff3, 0x5693, 0x4df7, 0xb5,0x2b, 0x74,0x80,0x6f,0x7f,0x2e,0xb9)
+#endif
+#else
+typedef struct IDWriteTextAnalyzer2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextAnalyzer2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextAnalyzer2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextAnalyzer2 *This);
+
+    /*** IDWriteTextAnalyzer methods ***/
+    HRESULT (STDMETHODCALLTYPE *AnalyzeScript)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeBidi)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeNumberSubstitution)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeLineBreakpoints)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink *sink);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphs)(
+        IDWriteTextAnalyzer2 *This,
+        const WCHAR *text,
+        UINT32 length,
+        IDWriteFontFace *font_face,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        IDWriteNumberSubstitution *substitution,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        UINT32 max_glyph_count,
+        UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *text_props,
+        UINT16 *glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 *actual_glyph_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphPlacements)(
+        IDWriteTextAnalyzer2 *This,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_len,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphPlacements)(
+        IDWriteTextAnalyzer2 *This,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES *props,
+        UINT32 text_len,
+        const UINT16 *glyph_indices,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace *font_face,
+        FLOAT fontEmSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        const DWRITE_SCRIPT_ANALYSIS *analysis,
+        const WCHAR *locale,
+        const DWRITE_TYPOGRAPHIC_FEATURES **features,
+        const UINT32 *feature_range_lengths,
+        UINT32 feature_ranges,
+        FLOAT *glyph_advances,
+        DWRITE_GLYPH_OFFSET *glyph_offsets);
+
+    /*** IDWriteTextAnalyzer1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *ApplyCharacterSpacing)(
+        IDWriteTextAnalyzer2 *This,
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT min_advance_width,
+        UINT32 len,
+        UINT32 glyph_count,
+        const UINT16 *clustermap,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *props,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetBaseline)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteFontFace *face,
+        DWRITE_BASELINE baseline,
+        WINBOOL vertical,
+        WINBOOL is_simulation_allowed,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        const WCHAR *localeName,
+        INT32 *baseline_coord,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *AnalyzeVerticalGlyphOrientation)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteTextAnalysisSource1 *source,
+        UINT32 text_pos,
+        UINT32 len,
+        IDWriteTextAnalysisSink1 *sink);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphOrientationTransform)(
+        IDWriteTextAnalyzer2 *This,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        WINBOOL is_sideways,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetScriptProperties)(
+        IDWriteTextAnalyzer2 *This,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        DWRITE_SCRIPT_PROPERTIES *props);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextComplexity)(
+        IDWriteTextAnalyzer2 *This,
+        const WCHAR *text,
+        UINT32 len,
+        IDWriteFontFace *face,
+        WINBOOL *is_simple,
+        UINT32 *len_read,
+        UINT16 *indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetJustificationOpportunities)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        DWRITE_JUSTIFICATION_OPPORTUNITY *jo);
+
+    HRESULT (STDMETHODCALLTYPE *JustifyGlyphAdvances)(
+        IDWriteTextAnalyzer2 *This,
+        FLOAT width,
+        UINT32 glyph_count,
+        const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        FLOAT *justifiedadvances,
+        DWRITE_GLYPH_OFFSET *justifiedoffsets);
+
+    HRESULT (STDMETHODCALLTYPE *GetJustifiedGlyphs)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        UINT32 max_glyphcount,
+        const UINT16 *clustermap,
+        const UINT16 *indices,
+        const FLOAT *advances,
+        const FLOAT *justifiedadvances,
+        const DWRITE_GLYPH_OFFSET *justifiedoffsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        UINT32 *actual_count,
+        UINT16 *modified_clustermap,
+        UINT16 *modified_indices,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets);
+
+    /*** IDWriteTextAnalyzer2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextAnalyzer2_GetGlyphOrientationTransform)(
+        IDWriteTextAnalyzer2 *This,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        WINBOOL is_sideways,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_MATRIX *transform);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypographicFeatures)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteFontFace *fontface,
+        DWRITE_SCRIPT_ANALYSIS analysis,
+        const WCHAR *localeName,
+        UINT32 max_tagcount,
+        UINT32 *actual_tagcount,
+        DWRITE_FONT_FEATURE_TAG *tags);
+
+    HRESULT (STDMETHODCALLTYPE *CheckTypographicFeature)(
+        IDWriteTextAnalyzer2 *This,
+        IDWriteFontFace *fontface,
+        DWRITE_SCRIPT_ANALYSIS analysis,
+        const WCHAR *localeName,
+        DWRITE_FONT_FEATURE_TAG feature,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        UINT8 *feature_applies);
+
+    END_INTERFACE
+} IDWriteTextAnalyzer2Vtbl;
+
+interface IDWriteTextAnalyzer2 {
+    CONST_VTBL IDWriteTextAnalyzer2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextAnalyzer2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextAnalyzer2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextAnalyzer2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextAnalyzer methods ***/
+#define IDWriteTextAnalyzer2_AnalyzeScript(This,source,position,length,sink) (This)->lpVtbl->AnalyzeScript(This,source,position,length,sink)
+#define IDWriteTextAnalyzer2_AnalyzeBidi(This,source,position,length,sink) (This)->lpVtbl->AnalyzeBidi(This,source,position,length,sink)
+#define IDWriteTextAnalyzer2_AnalyzeNumberSubstitution(This,source,position,length,sink) (This)->lpVtbl->AnalyzeNumberSubstitution(This,source,position,length,sink)
+#define IDWriteTextAnalyzer2_AnalyzeLineBreakpoints(This,source,position,length,sink) (This)->lpVtbl->AnalyzeLineBreakpoints(This,source,position,length,sink)
+#define IDWriteTextAnalyzer2_GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count) (This)->lpVtbl->GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count)
+#define IDWriteTextAnalyzer2_GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets) (This)->lpVtbl->GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets)
+#define IDWriteTextAnalyzer2_GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets) (This)->lpVtbl->GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets)
+/*** IDWriteTextAnalyzer1 methods ***/
+#define IDWriteTextAnalyzer2_ApplyCharacterSpacing(This,leading_spacing,trailing_spacing,min_advance_width,len,glyph_count,clustermap,advances,offsets,props,modified_advances,modified_offsets) (This)->lpVtbl->ApplyCharacterSpacing(This,leading_spacing,trailing_spacing,min_advance_width,len,glyph_count,clustermap,advances,offsets,props,modified_advances,modified_offsets)
+#define IDWriteTextAnalyzer2_GetBaseline(This,face,baseline,vertical,is_simulation_allowed,sa,localeName,baseline_coord,exists) (This)->lpVtbl->GetBaseline(This,face,baseline,vertical,is_simulation_allowed,sa,localeName,baseline_coord,exists)
+#define IDWriteTextAnalyzer2_AnalyzeVerticalGlyphOrientation(This,source,text_pos,len,sink) (This)->lpVtbl->AnalyzeVerticalGlyphOrientation(This,source,text_pos,len,sink)
+#define IDWriteTextAnalyzer2_GetScriptProperties(This,sa,props) (This)->lpVtbl->GetScriptProperties(This,sa,props)
+#define IDWriteTextAnalyzer2_GetTextComplexity(This,text,len,face,is_simple,len_read,indices) (This)->lpVtbl->GetTextComplexity(This,text,len,face,is_simple,len_read,indices)
+#define IDWriteTextAnalyzer2_GetJustificationOpportunities(This,face,font_em_size,sa,length,glyph_count,text,clustermap,prop,jo) (This)->lpVtbl->GetJustificationOpportunities(This,face,font_em_size,sa,length,glyph_count,text,clustermap,prop,jo)
+#define IDWriteTextAnalyzer2_JustifyGlyphAdvances(This,width,glyph_count,jo,advances,offsets,justifiedadvances,justifiedoffsets) (This)->lpVtbl->JustifyGlyphAdvances(This,width,glyph_count,jo,advances,offsets,justifiedadvances,justifiedoffsets)
+#define IDWriteTextAnalyzer2_GetJustifiedGlyphs(This,face,font_em_size,sa,length,glyph_count,max_glyphcount,clustermap,indices,advances,justifiedadvances,justifiedoffsets,prop,actual_count,modified_clustermap,modified_indices,modified_advances,modified_offsets) (This)->lpVtbl->GetJustifiedGlyphs(This,face,font_em_size,sa,length,glyph_count,max_glyphcount,clustermap,indices,advances,justifiedadvances,justifiedoffsets,prop,actual_count,modified_clustermap,modified_indices,modified_advances,modified_offsets)
+/*** IDWriteTextAnalyzer2 methods ***/
+#define IDWriteTextAnalyzer2_GetGlyphOrientationTransform(This,angle,is_sideways,originX,originY,transform) (This)->lpVtbl->IDWriteTextAnalyzer2_GetGlyphOrientationTransform(This,angle,is_sideways,originX,originY,transform)
+#define IDWriteTextAnalyzer2_GetTypographicFeatures(This,fontface,analysis,localeName,max_tagcount,actual_tagcount,tags) (This)->lpVtbl->GetTypographicFeatures(This,fontface,analysis,localeName,max_tagcount,actual_tagcount,tags)
+#define IDWriteTextAnalyzer2_CheckTypographicFeature(This,fontface,analysis,localeName,feature,glyph_count,indices,feature_applies) (This)->lpVtbl->CheckTypographicFeature(This,fontface,analysis,localeName,feature,glyph_count,indices,feature_applies)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_QueryInterface(IDWriteTextAnalyzer2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextAnalyzer2_AddRef(IDWriteTextAnalyzer2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextAnalyzer2_Release(IDWriteTextAnalyzer2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextAnalyzer methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_AnalyzeScript(IDWriteTextAnalyzer2* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeScript(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_AnalyzeBidi(IDWriteTextAnalyzer2* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeBidi(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_AnalyzeNumberSubstitution(IDWriteTextAnalyzer2* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeNumberSubstitution(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_AnalyzeLineBreakpoints(IDWriteTextAnalyzer2* This,IDWriteTextAnalysisSource *source,UINT32 position,UINT32 length,IDWriteTextAnalysisSink *sink) {
+    return This->lpVtbl->AnalyzeLineBreakpoints(This,source,position,length,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetGlyphs(IDWriteTextAnalyzer2* This,const WCHAR *text,UINT32 length,IDWriteFontFace *font_face,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,IDWriteNumberSubstitution *substitution,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_len,UINT32 feature_ranges,UINT32 max_glyph_count,UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *text_props,UINT16 *glyph_indices,DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 *actual_glyph_count) {
+    return This->lpVtbl->GetGlyphs(This,text,length,font_face,is_sideways,is_rtl,analysis,locale,substitution,features,feature_range_len,feature_ranges,max_glyph_count,clustermap,text_props,glyph_indices,glyph_props,actual_glyph_count);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetGlyphPlacements(IDWriteTextAnalyzer2* This,const WCHAR *text,const UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *props,UINT32 text_len,const UINT16 *glyph_indices,const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 glyph_count,IDWriteFontFace *font_face,FLOAT fontEmSize,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_len,UINT32 feature_ranges,FLOAT *glyph_advances,DWRITE_GLYPH_OFFSET *glyph_offsets) {
+    return This->lpVtbl->GetGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,is_sideways,is_rtl,analysis,locale,features,feature_range_len,feature_ranges,glyph_advances,glyph_offsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetGdiCompatibleGlyphPlacements(IDWriteTextAnalyzer2* This,const WCHAR *text,const UINT16 *clustermap,DWRITE_SHAPING_TEXT_PROPERTIES *props,UINT32 text_len,const UINT16 *glyph_indices,const DWRITE_SHAPING_GLYPH_PROPERTIES *glyph_props,UINT32 glyph_count,IDWriteFontFace *font_face,FLOAT fontEmSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,WINBOOL is_rtl,const DWRITE_SCRIPT_ANALYSIS *analysis,const WCHAR *locale,const DWRITE_TYPOGRAPHIC_FEATURES **features,const UINT32 *feature_range_lengths,UINT32 feature_ranges,FLOAT *glyph_advances,DWRITE_GLYPH_OFFSET *glyph_offsets) {
+    return This->lpVtbl->GetGdiCompatibleGlyphPlacements(This,text,clustermap,props,text_len,glyph_indices,glyph_props,glyph_count,font_face,fontEmSize,pixels_per_dip,transform,use_gdi_natural,is_sideways,is_rtl,analysis,locale,features,feature_range_lengths,feature_ranges,glyph_advances,glyph_offsets);
+}
+/*** IDWriteTextAnalyzer1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_ApplyCharacterSpacing(IDWriteTextAnalyzer2* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT min_advance_width,UINT32 len,UINT32 glyph_count,const UINT16 *clustermap,const FLOAT *advances,const DWRITE_GLYPH_OFFSET *offsets,const DWRITE_SHAPING_GLYPH_PROPERTIES *props,FLOAT *modified_advances,DWRITE_GLYPH_OFFSET *modified_offsets) {
+    return This->lpVtbl->ApplyCharacterSpacing(This,leading_spacing,trailing_spacing,min_advance_width,len,glyph_count,clustermap,advances,offsets,props,modified_advances,modified_offsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetBaseline(IDWriteTextAnalyzer2* This,IDWriteFontFace *face,DWRITE_BASELINE baseline,WINBOOL vertical,WINBOOL is_simulation_allowed,DWRITE_SCRIPT_ANALYSIS sa,const WCHAR *localeName,INT32 *baseline_coord,WINBOOL *exists) {
+    return This->lpVtbl->GetBaseline(This,face,baseline,vertical,is_simulation_allowed,sa,localeName,baseline_coord,exists);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_AnalyzeVerticalGlyphOrientation(IDWriteTextAnalyzer2* This,IDWriteTextAnalysisSource1 *source,UINT32 text_pos,UINT32 len,IDWriteTextAnalysisSink1 *sink) {
+    return This->lpVtbl->AnalyzeVerticalGlyphOrientation(This,source,text_pos,len,sink);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetScriptProperties(IDWriteTextAnalyzer2* This,DWRITE_SCRIPT_ANALYSIS sa,DWRITE_SCRIPT_PROPERTIES *props) {
+    return This->lpVtbl->GetScriptProperties(This,sa,props);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetTextComplexity(IDWriteTextAnalyzer2* This,const WCHAR *text,UINT32 len,IDWriteFontFace *face,WINBOOL *is_simple,UINT32 *len_read,UINT16 *indices) {
+    return This->lpVtbl->GetTextComplexity(This,text,len,face,is_simple,len_read,indices);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetJustificationOpportunities(IDWriteTextAnalyzer2* This,IDWriteFontFace *face,FLOAT font_em_size,DWRITE_SCRIPT_ANALYSIS sa,UINT32 length,UINT32 glyph_count,const WCHAR *text,const UINT16 *clustermap,const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,DWRITE_JUSTIFICATION_OPPORTUNITY *jo) {
+    return This->lpVtbl->GetJustificationOpportunities(This,face,font_em_size,sa,length,glyph_count,text,clustermap,prop,jo);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_JustifyGlyphAdvances(IDWriteTextAnalyzer2* This,FLOAT width,UINT32 glyph_count,const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,const FLOAT *advances,const DWRITE_GLYPH_OFFSET *offsets,FLOAT *justifiedadvances,DWRITE_GLYPH_OFFSET *justifiedoffsets) {
+    return This->lpVtbl->JustifyGlyphAdvances(This,width,glyph_count,jo,advances,offsets,justifiedadvances,justifiedoffsets);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetJustifiedGlyphs(IDWriteTextAnalyzer2* This,IDWriteFontFace *face,FLOAT font_em_size,DWRITE_SCRIPT_ANALYSIS sa,UINT32 length,UINT32 glyph_count,UINT32 max_glyphcount,const UINT16 *clustermap,const UINT16 *indices,const FLOAT *advances,const FLOAT *justifiedadvances,const DWRITE_GLYPH_OFFSET *justifiedoffsets,const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,UINT32 *actual_count,UINT16 *modified_clustermap,UINT16 *modified_indices,FLOAT *modified_advances,DWRITE_GLYPH_OFFSET *modified_offsets) {
+    return This->lpVtbl->GetJustifiedGlyphs(This,face,font_em_size,sa,length,glyph_count,max_glyphcount,clustermap,indices,advances,justifiedadvances,justifiedoffsets,prop,actual_count,modified_clustermap,modified_indices,modified_advances,modified_offsets);
+}
+/*** IDWriteTextAnalyzer2 methods ***/
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetGlyphOrientationTransform(IDWriteTextAnalyzer2* This,DWRITE_GLYPH_ORIENTATION_ANGLE angle,WINBOOL is_sideways,FLOAT originX,FLOAT originY,DWRITE_MATRIX *transform) {
+    return This->lpVtbl->IDWriteTextAnalyzer2_GetGlyphOrientationTransform(This,angle,is_sideways,originX,originY,transform);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_GetTypographicFeatures(IDWriteTextAnalyzer2* This,IDWriteFontFace *fontface,DWRITE_SCRIPT_ANALYSIS analysis,const WCHAR *localeName,UINT32 max_tagcount,UINT32 *actual_tagcount,DWRITE_FONT_FEATURE_TAG *tags) {
+    return This->lpVtbl->GetTypographicFeatures(This,fontface,analysis,localeName,max_tagcount,actual_tagcount,tags);
+}
+static FORCEINLINE HRESULT IDWriteTextAnalyzer2_CheckTypographicFeature(IDWriteTextAnalyzer2* This,IDWriteFontFace *fontface,DWRITE_SCRIPT_ANALYSIS analysis,const WCHAR *localeName,DWRITE_FONT_FEATURE_TAG feature,UINT32 glyph_count,const UINT16 *indices,UINT8 *feature_applies) {
+    return This->lpVtbl->CheckTypographicFeature(This,fontface,analysis,localeName,feature,glyph_count,indices,feature_applies);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextAnalyzer2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFallbackBuilder interface
+ */
+#ifndef __IDWriteFontFallbackBuilder_INTERFACE_DEFINED__
+#define __IDWriteFontFallbackBuilder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFallbackBuilder, 0xfd882d06, 0x8aba, 0x4fb8, 0xb8,0x49, 0x8b,0xe8,0xb7,0x3e,0x14,0xde);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fd882d06-8aba-4fb8-b849-8be8b73e14de")
+IDWriteFontFallbackBuilder : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddMapping(
+        const DWRITE_UNICODE_RANGE *ranges,
         UINT32 rangesCount,
-        WCHAR const **targetFamilyNames,
+        const WCHAR **targetFamilyNames,
         UINT32 targetFamilyNamesCount,
-        IDWriteFontCollection *fontCollection __MINGW_DEF_ARG_VAL(NULL),
-        WCHAR const *localeName __MINGW_DEF_ARG_VAL(NULL),
-        WCHAR const *baseFamilyName __MINGW_DEF_ARG_VAL(NULL),
-        FLOAT scale __MINGW_DEF_ARG_VAL(1.0f)) PURE;
+        IDWriteFontCollection *collection = 0,
+        const WCHAR *localeName = 0,
+        const WCHAR *baseFamilyName = 0,
+        FLOAT scale = 1) = 0;
 
-    STDMETHOD(AddMappings)(THIS_
-        IDWriteFontFallback *fontFallback) PURE;
+    virtual HRESULT STDMETHODCALLTYPE AddMappings(
+        IDWriteFontFallback *fallback) = 0;
 
-    STDMETHOD(CreateFontFallback)(THIS_
-        IDWriteFontFallback **fontFallback) PURE;
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFallback(
+        IDWriteFontFallback **fallback) = 0;
 
-    END_INTERFACE
 };
-
-__CRT_UUID_DECL(IDWriteFontFallbackBuilder, 0xfd882d06,0x8aba,0x4fb8,0xb8,0x49,0x8b,0xe8,0xb7,0x3e,0x14,0xde)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteColorGlyphRunEnumerator
-DECLARE_INTERFACE_(IDWriteColorGlyphRunEnumerator,IUnknown)
-{
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFallbackBuilder, 0xfd882d06, 0x8aba, 0x4fb8, 0xb8,0x49, 0x8b,0xe8,0xb7,0x3e,0x14,0xde)
+#endif
+#else
+typedef struct IDWriteFontFallbackBuilderVtbl {
     BEGIN_INTERFACE
 
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFallbackBuilder *This,
+        REFIID riid,
+        void **ppvObject);
 
-    STDMETHOD(MoveNext)(THIS_
-        BOOL *hasRun) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFallbackBuilder *This);
 
-    STDMETHOD(GetCurrentRun)(THIS_
-        DWRITE_COLOR_GLYPH_RUN const **colorGlyphRun) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFallbackBuilder *This);
+
+    /*** IDWriteFontFallbackBuilder methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddMapping)(
+        IDWriteFontFallbackBuilder *This,
+        const DWRITE_UNICODE_RANGE *ranges,
+        UINT32 rangesCount,
+        const WCHAR **targetFamilyNames,
+        UINT32 targetFamilyNamesCount,
+        IDWriteFontCollection *collection,
+        const WCHAR *localeName,
+        const WCHAR *baseFamilyName,
+        FLOAT scale);
+
+    HRESULT (STDMETHODCALLTYPE *AddMappings)(
+        IDWriteFontFallbackBuilder *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallback)(
+        IDWriteFontFallbackBuilder *This,
+        IDWriteFontFallback **fallback);
 
     END_INTERFACE
+} IDWriteFontFallbackBuilderVtbl;
+
+interface IDWriteFontFallbackBuilder {
+    CONST_VTBL IDWriteFontFallbackBuilderVtbl* lpVtbl;
 };
 
-__CRT_UUID_DECL(IDWriteColorGlyphRunEnumerator, 0xd31fbe17,0xf157,0x41a2,0x8d,0x24,0xcb,0x77,0x9e,0x05,0x60,0xe8)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteRenderingParams2
-DECLARE_INTERFACE_(IDWriteRenderingParams2,IDWriteRenderingParams1)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWriteRenderingParams methods */
-    STDMETHOD_(FLOAT, GetGamma)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetEnhancedContrast)(THIS) PURE;
-    STDMETHOD_(FLOAT, GetClearTypeLevel)(THIS) PURE;
-    STDMETHOD_(DWRITE_PIXEL_GEOMETRY, GetPixelGeometry)(THIS) PURE;
-    STDMETHOD_(DWRITE_RENDERING_MODE, GetRenderingMode)(THIS) PURE;
-
-    /* IDWriteRenderingParams1 methods */
-    STDMETHOD_(FLOAT, GetGrayscaleEnhancedContrast)(THIS) PURE;
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFallbackBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFallbackBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFallbackBuilder_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFallbackBuilder methods ***/
+#define IDWriteFontFallbackBuilder_AddMapping(This,ranges,rangesCount,targetFamilyNames,targetFamilyNamesCount,collection,localeName,baseFamilyName,scale) (This)->lpVtbl->AddMapping(This,ranges,rangesCount,targetFamilyNames,targetFamilyNamesCount,collection,localeName,baseFamilyName,scale)
+#define IDWriteFontFallbackBuilder_AddMappings(This,fallback) (This)->lpVtbl->AddMappings(This,fallback)
+#define IDWriteFontFallbackBuilder_CreateFontFallback(This,fallback) (This)->lpVtbl->CreateFontFallback(This,fallback)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFallbackBuilder_QueryInterface(IDWriteFontFallbackBuilder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFallbackBuilder_AddRef(IDWriteFontFallbackBuilder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFallbackBuilder_Release(IDWriteFontFallbackBuilder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFallbackBuilder methods ***/
+static FORCEINLINE HRESULT IDWriteFontFallbackBuilder_AddMapping(IDWriteFontFallbackBuilder* This,const DWRITE_UNICODE_RANGE *ranges,UINT32 rangesCount,const WCHAR **targetFamilyNames,UINT32 targetFamilyNamesCount,IDWriteFontCollection *collection,const WCHAR *localeName,const WCHAR *baseFamilyName,FLOAT scale) {
+    return This->lpVtbl->AddMapping(This,ranges,rangesCount,targetFamilyNames,targetFamilyNamesCount,collection,localeName,baseFamilyName,scale);
+}
+static FORCEINLINE HRESULT IDWriteFontFallbackBuilder_AddMappings(IDWriteFontFallbackBuilder* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->AddMappings(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFontFallbackBuilder_CreateFontFallback(IDWriteFontFallbackBuilder* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->CreateFontFallback(This,fallback);
+}
+#endif
 #endif
 
-    /* IDWriteRenderingParams2 methods */
-    STDMETHOD_(DWRITE_GRID_FIT_MODE, GetGridFitMode)(THIS) PURE;
+#endif
+
+
+#endif  /* __IDWriteFontFallbackBuilder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFont2 interface
+ */
+#ifndef __IDWriteFont2_INTERFACE_DEFINED__
+#define __IDWriteFont2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFont2, 0x29748ed6, 0x8c9c, 0x4a6a, 0xbe,0x0b, 0xd9,0x12,0xe8,0x53,0x89,0x44);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("29748ed6-8c9c-4a6a-be0b-d912e8538944")
+IDWriteFont2 : public IDWriteFont1
+{
+    virtual WINBOOL STDMETHODCALLTYPE IsColorFont(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFont2, 0x29748ed6, 0x8c9c, 0x4a6a, 0xbe,0x0b, 0xd9,0x12,0xe8,0x53,0x89,0x44)
+#endif
+#else
+typedef struct IDWriteFont2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFont2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFont2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFont2 *This);
+
+    /*** IDWriteFont methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFont2 *This,
+        IDWriteFontFamily **family);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFont2 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFont2 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFont2 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFont2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFont2 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFont2 *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFont2 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFont2 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFont2 *This,
+        UINT32 value,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFont2 *This,
+        IDWriteFontFace **face);
+
+    /*** IDWriteFont1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFont1_GetMetrics)(
+        IDWriteFont2 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetPanose)(
+        IDWriteFont2 *This,
+        DWRITE_PANOSE *panose);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFont2 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFont2 *This);
+
+    /*** IDWriteFont2 methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsColorFont)(
+        IDWriteFont2 *This);
 
     END_INTERFACE
+} IDWriteFont2Vtbl;
+
+interface IDWriteFont2 {
+    CONST_VTBL IDWriteFont2Vtbl* lpVtbl;
 };
 
-__CRT_UUID_DECL(IDWriteRenderingParams2, 0xf9d711c3,0x9777,0x40ae,0x87,0xe8,0x3e,0x5a,0xf9,0xbf,0x09,0x48)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFactory2
-DECLARE_INTERFACE_(IDWriteFactory2,IDWriteFactory1)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWriteFactory methods */
-    STDMETHOD(GetSystemFontCollection)(THIS_
-        IDWriteFontCollection **fontCollection,
-        WINBOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(CreateCustomFontCollection)(THIS_
-        IDWriteFontCollectionLoader *collectionLoader,
-        void const *collectionKey,
-        UINT32 collectionKeySize,
-        IDWriteFontCollection **fontCollection) PURE;
-
-    STDMETHOD(RegisterFontCollectionLoader)(THIS_
-        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
-
-    STDMETHOD(UnregisterFontCollectionLoader)(THIS_
-        IDWriteFontCollectionLoader *fontCollectionLoader) PURE;
-
-    STDMETHOD(CreateFontFileReference)(THIS_
-        WCHAR const *filePath,
-        FILETIME const *lastWriteTime,
-        IDWriteFontFile **fontFile) PURE;
-
-    STDMETHOD(CreateCustomFontFileReference)(THIS_
-        void const *fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        IDWriteFontFileLoader *fontFileLoader,
-        IDWriteFontFile **fontFile) PURE;
-
-    STDMETHOD(CreateFontFace)(THIS_
-        DWRITE_FONT_FACE_TYPE fontFaceType,
-        UINT32 numberOfFiles,
-        IDWriteFontFile *const *fontFiles,
-        UINT32 faceIndex,
-        DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,
-        IDWriteFontFace **fontFace) PURE;
-
-    STDMETHOD(CreateRenderingParams)(THIS_
-        IDWriteRenderingParams **renderingParams) PURE;
-
-    STDMETHOD(CreateMonitorRenderingParams)(THIS_
-        HMONITOR monitor,
-        IDWriteRenderingParams **renderingParams) PURE;
-
-    STDMETHOD(CreateCustomRenderingParams)(THIS_
-        FLOAT gamma,
-        FLOAT enhancedContrast,
-        FLOAT clearTypeLevel,
-        DWRITE_PIXEL_GEOMETRY pixelGeometry,
-        DWRITE_RENDERING_MODE renderingMode,
-        IDWriteRenderingParams **renderingParams) PURE;
-
-    STDMETHOD(RegisterFontFileLoader)(THIS_
-        IDWriteFontFileLoader *fontFileLoader) PURE;
-
-    STDMETHOD(UnregisterFontFileLoader)(THIS_
-        IDWriteFontFileLoader *fontFileLoader) PURE;
-
-    STDMETHOD(CreateTextFormat)(THIS_
-        WCHAR const *fontFamilyName,
-        IDWriteFontCollection *fontCollection,
-        DWRITE_FONT_WEIGHT fontWeight,
-        DWRITE_FONT_STYLE fontStyle,
-        DWRITE_FONT_STRETCH fontStretch,
-        FLOAT fontSize,
-        WCHAR const *localeName,
-        IDWriteTextFormat **textFormat) PURE;
-
-    STDMETHOD(CreateTypography)(THIS_
-        IDWriteTypography **typography) PURE;
-
-    STDMETHOD(GetGdiInterop)(THIS_
-        IDWriteGdiInterop **gdiInterop) PURE;
-
-    STDMETHOD(CreateTextLayout)(THIS_
-        WCHAR const *string,
-        UINT32 stringLength,
-        IDWriteTextFormat *textFormat,
-        FLOAT maxWidth,
-        FLOAT maxHeight,
-        IDWriteTextLayout **textLayout) PURE;
-
-    STDMETHOD(CreateGdiCompatibleTextLayout)(THIS_
-        WCHAR const *string,
-        UINT32 stringLength,
-        IDWriteTextFormat *textFormat,
-        FLOAT layoutWidth,
-        FLOAT layoutHeight,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        IDWriteTextLayout **textLayout) PURE;
-
-    STDMETHOD(CreateEllipsisTrimmingSign)(THIS_
-        IDWriteTextFormat *textFormat,
-        IDWriteInlineObject **trimmingSign) PURE;
-
-    STDMETHOD(CreateTextAnalyzer)(THIS_
-        IDWriteTextAnalyzer **textAnalyzer) PURE;
-
-    STDMETHOD(CreateNumberSubstitution)(THIS_
-        DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,
-        WCHAR const *localeName,
-        WINBOOL ignoreUserOverride,
-        IDWriteNumberSubstitution **numberSubstitution) PURE;
-
-    STDMETHOD(CreateGlyphRunAnalysis)(THIS_
-        DWRITE_GLYPH_RUN const *glyphRun,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_RENDERING_MODE renderingMode,
-        DWRITE_MEASURING_MODE measuringMode,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        IDWriteGlyphRunAnalysis **glyphRunAnalysis) PURE;
-
-    /* IDWriteFactory1 methods */
-    STDMETHOD(GetEudcFontCollection)(THIS_
-        IDWriteFontCollection **fontCollection,
-        BOOL checkForUpdates __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(CreateCustomRenderingParams)(THIS_
-        FLOAT gamma,
-        FLOAT enhancedContrast,
-        FLOAT enhancedContrastGrayscale,
-        FLOAT clearTypeLevel,
-        DWRITE_PIXEL_GEOMETRY pixelGeometry,
-        DWRITE_RENDERING_MODE renderingMode,
-        IDWriteRenderingParams1 **renderingParams) PURE;
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFont2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFont2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFont2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFont methods ***/
+#define IDWriteFont2_GetFontFamily(This,family) (This)->lpVtbl->GetFontFamily(This,family)
+#define IDWriteFont2_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFont2_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFont2_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFont2_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFont2_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFont2_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFont2_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFont2_HasCharacter(This,value,exists) (This)->lpVtbl->HasCharacter(This,value,exists)
+#define IDWriteFont2_CreateFontFace(This,face) (This)->lpVtbl->CreateFontFace(This,face)
+/*** IDWriteFont1 methods ***/
+#define IDWriteFont2_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFont1_GetMetrics(This,metrics)
+#define IDWriteFont2_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
+#define IDWriteFont2_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFont2_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+/*** IDWriteFont2 methods ***/
+#define IDWriteFont2_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFont2_QueryInterface(IDWriteFont2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFont2_AddRef(IDWriteFont2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFont2_Release(IDWriteFont2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFont methods ***/
+static FORCEINLINE HRESULT IDWriteFont2_GetFontFamily(IDWriteFont2* This,IDWriteFontFamily **family) {
+    return This->lpVtbl->GetFontFamily(This,family);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFont2_GetWeight(IDWriteFont2* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFont2_GetStretch(IDWriteFont2* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFont2_GetStyle(IDWriteFont2* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE WINBOOL IDWriteFont2_IsSymbolFont(IDWriteFont2* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFont2_GetFaceNames(IDWriteFont2* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFont2_GetInformationalStrings(IDWriteFont2* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFont2_GetSimulations(IDWriteFont2* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE HRESULT IDWriteFont2_HasCharacter(IDWriteFont2* This,UINT32 value,WINBOOL *exists) {
+    return This->lpVtbl->HasCharacter(This,value,exists);
+}
+static FORCEINLINE HRESULT IDWriteFont2_CreateFontFace(IDWriteFont2* This,IDWriteFontFace **face) {
+    return This->lpVtbl->CreateFontFace(This,face);
+}
+/*** IDWriteFont1 methods ***/
+static FORCEINLINE void IDWriteFont2_GetMetrics(IDWriteFont2* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFont1_GetMetrics(This,metrics);
+}
+static FORCEINLINE void IDWriteFont2_GetPanose(IDWriteFont2* This,DWRITE_PANOSE *panose) {
+    This->lpVtbl->GetPanose(This,panose);
+}
+static FORCEINLINE HRESULT IDWriteFont2_GetUnicodeRanges(IDWriteFont2* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFont2_IsMonospacedFont(IDWriteFont2* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+/*** IDWriteFont2 methods ***/
+static FORCEINLINE WINBOOL IDWriteFont2_IsColorFont(IDWriteFont2* This) {
+    return This->lpVtbl->IsColorFont(This);
+}
+#endif
 #endif
 
-    /* IDWriteFactory2 methods */
-    STDMETHOD(GetSystemFontFallback)(THIS_
-        IDWriteFontFallback **fontFallback) PURE;
+#endif
 
-    STDMETHOD(CreateFontFallbackBuilder)(THIS_
-        IDWriteFontFallbackBuilder **fontFallbackBuilder) PURE;
 
-    STDMETHOD(TranslateColorGlyphRun)(THIS_
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        DWRITE_GLYPH_RUN const *glyphRun,
-        DWRITE_GLYPH_RUN_DESCRIPTION const *glyphRunDescription,
-        DWRITE_MEASURING_MODE measuringMode,
-        DWRITE_MATRIX const *worldToDeviceTransform,
-        UINT32 colorPaletteIndex,
-        IDWriteColorGlyphRunEnumerator **colorLayers) PURE;
+#endif  /* __IDWriteFont2_INTERFACE_DEFINED__ */
 
-    STDMETHOD(CreateCustomRenderingParams)(THIS_
+/*****************************************************************************
+ * IDWriteFontFace2 interface
+ */
+#ifndef __IDWriteFontFace2_INTERFACE_DEFINED__
+#define __IDWriteFontFace2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFace2, 0xd8b768ff, 0x64bc, 0x4e66, 0x98,0x2b, 0xec,0x8e,0x87,0xf6,0x93,0xf7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d8b768ff-64bc-4e66-982b-ec8e87f693f7")
+IDWriteFontFace2 : public IDWriteFontFace1
+{
+    virtual WINBOOL STDMETHODCALLTYPE IsColorFont(
+        ) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetColorPaletteCount(
+        ) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetPaletteEntryCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPaletteEntries(
+        UINT32 palette_index,
+        UINT32 first_entry_index,
+        UINT32 entry_count,
+        DWRITE_COLOR_F *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRecommendedRenderingMode(
+        FLOAT fontEmSize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuringmode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *renderingmode,
+        DWRITE_GRID_FIT_MODE *gridfitmode) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFace2, 0xd8b768ff, 0x64bc, 0x4e66, 0x98,0x2b, 0xec,0x8e,0x87,0xf6,0x93,0xf7)
+#endif
+#else
+typedef struct IDWriteFontFace2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFace2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFace2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFace2 *This);
+
+    /*** IDWriteFontFace methods ***/
+    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
+        IDWriteFontFace2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFiles)(
+        IDWriteFontFace2 *This,
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles);
+
+    UINT32 (STDMETHODCALLTYPE *GetIndex)(
+        IDWriteFontFace2 *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFace2 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFontFace2 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFontFace2 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
+        IDWriteFontFace2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
+        IDWriteFontFace2 *This,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
+        IDWriteFontFace2 *This,
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
+        IDWriteFontFace2 *This,
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists);
+
+    void (STDMETHODCALLTYPE *ReleaseFontTable)(
+        IDWriteFontFace2 *This,
+        void *table_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
+        IDWriteFontFace2 *This,
+        FLOAT emSize,
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
+        IDWriteFontFace2 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
+        IDWriteFontFace2 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
+        IDWriteFontFace2 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    /*** IDWriteFontFace1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
+        IDWriteFontFace2 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
+        IDWriteFontFace2 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetCaretMetrics)(
+        IDWriteFontFace2 *This,
+        DWRITE_CARET_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFontFace2 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFontFace2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
+        IDWriteFontFace2 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
+        IDWriteFontFace2 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances);
+
+    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
+        IDWriteFontFace2 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *adjustments);
+
+    WINBOOL (STDMETHODCALLTYPE *HasKerningPairs)(
+        IDWriteFontFace2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
+        IDWriteFontFace2 *This,
+        FLOAT font_emsize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
+        IDWriteFontFace2 *This,
+        UINT32 glyph_count,
+        const UINT16 *nominal_indices,
+        UINT16 *vertical_indices);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
+        IDWriteFontFace2 *This);
+
+    /*** IDWriteFontFace2 methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsColorFont)(
+        IDWriteFontFace2 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetColorPaletteCount)(
+        IDWriteFontFace2 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetPaletteEntryCount)(
+        IDWriteFontFace2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IDWriteFontFace2 *This,
+        UINT32 palette_index,
+        UINT32 first_entry_index,
+        UINT32 entry_count,
+        DWRITE_COLOR_F *entries);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace2_GetRecommendedRenderingMode)(
+        IDWriteFontFace2 *This,
+        FLOAT fontEmSize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuringmode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *renderingmode,
+        DWRITE_GRID_FIT_MODE *gridfitmode);
+
+    END_INTERFACE
+} IDWriteFontFace2Vtbl;
+
+interface IDWriteFontFace2 {
+    CONST_VTBL IDWriteFontFace2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFace2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFace2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFace2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFace methods ***/
+#define IDWriteFontFace2_GetType(This) (This)->lpVtbl->GetType(This)
+#define IDWriteFontFace2_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
+#define IDWriteFontFace2_GetIndex(This) (This)->lpVtbl->GetIndex(This)
+#define IDWriteFontFace2_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFace2_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFontFace2_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
+#define IDWriteFontFace2_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
+#define IDWriteFontFace2_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
+#define IDWriteFontFace2_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
+#define IDWriteFontFace2_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
+#define IDWriteFontFace2_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
+#define IDWriteFontFace2_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
+/*** IDWriteFontFace1 methods ***/
+#define IDWriteFontFace2_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
+#define IDWriteFontFace2_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
+#define IDWriteFontFace2_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
+#define IDWriteFontFace2_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFontFace2_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+#define IDWriteFontFace2_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
+#define IDWriteFontFace2_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
+#define IDWriteFontFace2_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
+#define IDWriteFontFace2_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
+#define IDWriteFontFace2_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
+#define IDWriteFontFace2_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
+/*** IDWriteFontFace2 methods ***/
+#define IDWriteFontFace2_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
+#define IDWriteFontFace2_GetColorPaletteCount(This) (This)->lpVtbl->GetColorPaletteCount(This)
+#define IDWriteFontFace2_GetPaletteEntryCount(This) (This)->lpVtbl->GetPaletteEntryCount(This)
+#define IDWriteFontFace2_GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries)
+#define IDWriteFontFace2_GetRecommendedRenderingMode(This,fontEmSize,dpiX,dpiY,transform,is_sideways,threshold,measuringmode,params,renderingmode,gridfitmode) (This)->lpVtbl->IDWriteFontFace2_GetRecommendedRenderingMode(This,fontEmSize,dpiX,dpiY,transform,is_sideways,threshold,measuringmode,params,renderingmode,gridfitmode)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace2_QueryInterface(IDWriteFontFace2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFace2_AddRef(IDWriteFontFace2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFace2_Release(IDWriteFontFace2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFace methods ***/
+static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace2_GetType(IDWriteFontFace2* This) {
+    return This->lpVtbl->GetType(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetFiles(IDWriteFontFace2* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
+    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
+}
+static FORCEINLINE UINT32 IDWriteFontFace2_GetIndex(IDWriteFontFace2* This) {
+    return This->lpVtbl->GetIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace2_GetSimulations(IDWriteFontFace2* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace2_IsSymbolFont(IDWriteFontFace2* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE UINT16 IDWriteFontFace2_GetGlyphCount(IDWriteFontFace2* This) {
+    return This->lpVtbl->GetGlyphCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetDesignGlyphMetrics(IDWriteFontFace2* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetGlyphIndices(IDWriteFontFace2* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
+    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_TryGetFontTable(IDWriteFontFace2* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,WINBOOL *exists) {
+    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
+}
+static FORCEINLINE void IDWriteFontFace2_ReleaseFontTable(IDWriteFontFace2* This,void *table_context) {
+    This->lpVtbl->ReleaseFontTable(This,table_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetGlyphRunOutline(IDWriteFontFace2* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,WINBOOL is_sideways,WINBOOL is_rtl,IDWriteGeometrySink *geometrysink) {
+    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetGdiCompatibleGlyphMetrics(IDWriteFontFace2* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
+}
+/*** IDWriteFontFace1 methods ***/
+static FORCEINLINE void IDWriteFontFace2_GetMetrics(IDWriteFontFace2* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetGdiCompatibleMetrics(IDWriteFontFace2* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
+}
+static FORCEINLINE void IDWriteFontFace2_GetCaretMetrics(IDWriteFontFace2* This,DWRITE_CARET_METRICS *metrics) {
+    This->lpVtbl->GetCaretMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetUnicodeRanges(IDWriteFontFace2* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace2_IsMonospacedFont(IDWriteFontFace2* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetDesignGlyphAdvances(IDWriteFontFace2* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetGdiCompatibleGlyphAdvances(IDWriteFontFace2* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
+    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetKerningPairAdjustments(IDWriteFontFace2* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
+    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace2_HasKerningPairs(IDWriteFontFace2* This) {
+    return This->lpVtbl->HasKerningPairs(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetVerticalGlyphVariants(IDWriteFontFace2* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
+    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace2_HasVerticalGlyphVariants(IDWriteFontFace2* This) {
+    return This->lpVtbl->HasVerticalGlyphVariants(This);
+}
+/*** IDWriteFontFace2 methods ***/
+static FORCEINLINE WINBOOL IDWriteFontFace2_IsColorFont(IDWriteFontFace2* This) {
+    return This->lpVtbl->IsColorFont(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace2_GetColorPaletteCount(IDWriteFontFace2* This) {
+    return This->lpVtbl->GetColorPaletteCount(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace2_GetPaletteEntryCount(IDWriteFontFace2* This) {
+    return This->lpVtbl->GetPaletteEntryCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetPaletteEntries(IDWriteFontFace2* This,UINT32 palette_index,UINT32 first_entry_index,UINT32 entry_count,DWRITE_COLOR_F *entries) {
+    return This->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries);
+}
+static FORCEINLINE HRESULT IDWriteFontFace2_GetRecommendedRenderingMode(IDWriteFontFace2* This,FLOAT fontEmSize,FLOAT dpiX,FLOAT dpiY,const DWRITE_MATRIX *transform,WINBOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuringmode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE *renderingmode,DWRITE_GRID_FIT_MODE *gridfitmode) {
+    return This->lpVtbl->IDWriteFontFace2_GetRecommendedRenderingMode(This,fontEmSize,dpiX,dpiY,transform,is_sideways,threshold,measuringmode,params,renderingmode,gridfitmode);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFace2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteColorGlyphRunEnumerator interface
+ */
+#ifndef __IDWriteColorGlyphRunEnumerator_INTERFACE_DEFINED__
+#define __IDWriteColorGlyphRunEnumerator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteColorGlyphRunEnumerator, 0xd31fbe17, 0xf157, 0x41a2, 0x8d,0x24, 0xcb,0x77,0x9e,0x05,0x60,0xe8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d31fbe17-f157-41a2-8d24-cb779e0560e8")
+IDWriteColorGlyphRunEnumerator : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE MoveNext(
+        WINBOOL *hasRun) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentRun(
+        const DWRITE_COLOR_GLYPH_RUN **run) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteColorGlyphRunEnumerator, 0xd31fbe17, 0xf157, 0x41a2, 0x8d,0x24, 0xcb,0x77,0x9e,0x05,0x60,0xe8)
+#endif
+#else
+typedef struct IDWriteColorGlyphRunEnumeratorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteColorGlyphRunEnumerator *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteColorGlyphRunEnumerator *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteColorGlyphRunEnumerator *This);
+
+    /*** IDWriteColorGlyphRunEnumerator methods ***/
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        IDWriteColorGlyphRunEnumerator *This,
+        WINBOOL *hasRun);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentRun)(
+        IDWriteColorGlyphRunEnumerator *This,
+        const DWRITE_COLOR_GLYPH_RUN **run);
+
+    END_INTERFACE
+} IDWriteColorGlyphRunEnumeratorVtbl;
+
+interface IDWriteColorGlyphRunEnumerator {
+    CONST_VTBL IDWriteColorGlyphRunEnumeratorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteColorGlyphRunEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteColorGlyphRunEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteColorGlyphRunEnumerator_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteColorGlyphRunEnumerator methods ***/
+#define IDWriteColorGlyphRunEnumerator_MoveNext(This,hasRun) (This)->lpVtbl->MoveNext(This,hasRun)
+#define IDWriteColorGlyphRunEnumerator_GetCurrentRun(This,run) (This)->lpVtbl->GetCurrentRun(This,run)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator_QueryInterface(IDWriteColorGlyphRunEnumerator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteColorGlyphRunEnumerator_AddRef(IDWriteColorGlyphRunEnumerator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteColorGlyphRunEnumerator_Release(IDWriteColorGlyphRunEnumerator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteColorGlyphRunEnumerator methods ***/
+static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator_MoveNext(IDWriteColorGlyphRunEnumerator* This,WINBOOL *hasRun) {
+    return This->lpVtbl->MoveNext(This,hasRun);
+}
+static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator_GetCurrentRun(IDWriteColorGlyphRunEnumerator* This,const DWRITE_COLOR_GLYPH_RUN **run) {
+    return This->lpVtbl->GetCurrentRun(This,run);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteColorGlyphRunEnumerator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteRenderingParams2 interface
+ */
+#ifndef __IDWriteRenderingParams2_INTERFACE_DEFINED__
+#define __IDWriteRenderingParams2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteRenderingParams2, 0xf9d711c3, 0x9777, 0x40ae, 0x87,0xe8, 0x3e,0x5a,0xf9,0xbf,0x09,0x48);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f9d711c3-9777-40ae-87e8-3e5af9bf0948")
+IDWriteRenderingParams2 : public IDWriteRenderingParams1
+{
+    virtual DWRITE_GRID_FIT_MODE STDMETHODCALLTYPE GetGridFitMode(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteRenderingParams2, 0xf9d711c3, 0x9777, 0x40ae, 0x87,0xe8, 0x3e,0x5a,0xf9,0xbf,0x09,0x48)
+#endif
+#else
+typedef struct IDWriteRenderingParams2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteRenderingParams2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteRenderingParams2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteRenderingParams2 *This);
+
+    /*** IDWriteRenderingParams methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGamma)(
+        IDWriteRenderingParams2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetEnhancedContrast)(
+        IDWriteRenderingParams2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetClearTypeLevel)(
+        IDWriteRenderingParams2 *This);
+
+    DWRITE_PIXEL_GEOMETRY (STDMETHODCALLTYPE *GetPixelGeometry)(
+        IDWriteRenderingParams2 *This);
+
+    DWRITE_RENDERING_MODE (STDMETHODCALLTYPE *GetRenderingMode)(
+        IDWriteRenderingParams2 *This);
+
+    /*** IDWriteRenderingParams1 methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGrayscaleEnhancedContrast)(
+        IDWriteRenderingParams2 *This);
+
+    /*** IDWriteRenderingParams2 methods ***/
+    DWRITE_GRID_FIT_MODE (STDMETHODCALLTYPE *GetGridFitMode)(
+        IDWriteRenderingParams2 *This);
+
+    END_INTERFACE
+} IDWriteRenderingParams2Vtbl;
+
+interface IDWriteRenderingParams2 {
+    CONST_VTBL IDWriteRenderingParams2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteRenderingParams2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteRenderingParams2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteRenderingParams2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteRenderingParams methods ***/
+#define IDWriteRenderingParams2_GetGamma(This) (This)->lpVtbl->GetGamma(This)
+#define IDWriteRenderingParams2_GetEnhancedContrast(This) (This)->lpVtbl->GetEnhancedContrast(This)
+#define IDWriteRenderingParams2_GetClearTypeLevel(This) (This)->lpVtbl->GetClearTypeLevel(This)
+#define IDWriteRenderingParams2_GetPixelGeometry(This) (This)->lpVtbl->GetPixelGeometry(This)
+#define IDWriteRenderingParams2_GetRenderingMode(This) (This)->lpVtbl->GetRenderingMode(This)
+/*** IDWriteRenderingParams1 methods ***/
+#define IDWriteRenderingParams2_GetGrayscaleEnhancedContrast(This) (This)->lpVtbl->GetGrayscaleEnhancedContrast(This)
+/*** IDWriteRenderingParams2 methods ***/
+#define IDWriteRenderingParams2_GetGridFitMode(This) (This)->lpVtbl->GetGridFitMode(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteRenderingParams2_QueryInterface(IDWriteRenderingParams2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams2_AddRef(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams2_Release(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteRenderingParams methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams2_GetGamma(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetGamma(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams2_GetEnhancedContrast(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetEnhancedContrast(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams2_GetClearTypeLevel(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetClearTypeLevel(This);
+}
+static FORCEINLINE DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams2_GetPixelGeometry(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetPixelGeometry(This);
+}
+static FORCEINLINE DWRITE_RENDERING_MODE IDWriteRenderingParams2_GetRenderingMode(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetRenderingMode(This);
+}
+/*** IDWriteRenderingParams1 methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams2_GetGrayscaleEnhancedContrast(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetGrayscaleEnhancedContrast(This);
+}
+/*** IDWriteRenderingParams2 methods ***/
+static FORCEINLINE DWRITE_GRID_FIT_MODE IDWriteRenderingParams2_GetGridFitMode(IDWriteRenderingParams2* This) {
+    return This->lpVtbl->GetGridFitMode(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteRenderingParams2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory2 interface
+ */
+#ifndef __IDWriteFactory2_INTERFACE_DEFINED__
+#define __IDWriteFactory2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory2, 0x0439fc60, 0xca44, 0x4994, 0x8d,0xee, 0x3a,0x9a,0xf7,0xb7,0x32,0xec);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0439fc60-ca44-4994-8dee-3a9af7b732ec")
+IDWriteFactory2 : public IDWriteFactory1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontFallback(
+        IDWriteFontFallback **fallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFallbackBuilder(
+        IDWriteFontFallbackBuilder **fallbackbuilder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TranslateColorGlyphRun(
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCustomRenderingParams(
         FLOAT gamma,
-        FLOAT enhancedContrast,
-        FLOAT grayscaleEnhancedContrast,
-        FLOAT clearTypeLevel,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
         DWRITE_PIXEL_GEOMETRY pixelGeometry,
         DWRITE_RENDERING_MODE renderingMode,
         DWRITE_GRID_FIT_MODE gridFitMode,
-        IDWriteRenderingParams2 **renderingParams) PURE;
+        IDWriteRenderingParams2 **params) = 0;
 
-#ifdef __cplusplus
-    using IDWriteFactory::CreateCustomRenderingParams;
-    using IDWriteFactory1::CreateCustomRenderingParams;
-#endif
-
-    STDMETHOD(CreateGlyphRunAnalysis)(THIS_
-        DWRITE_GLYPH_RUN const *glyphRun,
-        DWRITE_MATRIX const *transform,
+    virtual HRESULT STDMETHODCALLTYPE CreateGlyphRunAnalysis(
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
         DWRITE_RENDERING_MODE renderingMode,
         DWRITE_MEASURING_MODE measuringMode,
         DWRITE_GRID_FIT_MODE gridFitMode,
         DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        IDWriteGlyphRunAnalysis **glyphRunAnalysis) PURE;
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis) = 0;
 
-#ifdef __cplusplus
-    using IDWriteFactory::CreateGlyphRunAnalysis;
-#endif
-
-    END_INTERFACE
 };
-
-__CRT_UUID_DECL(IDWriteFactory2, 0x0439fc60,0xca44,0x4994,0x8d,0xee,0x3a,0x9a,0xf7,0xb7,0x32,0xec)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFace2
-DECLARE_INTERFACE_(IDWriteFontFace2,IDWriteFontFace1)
-{
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory2, 0x0439fc60, 0xca44, 0x4994, 0x8d,0xee, 0x3a,0x9a,0xf7,0xb7,0x32,0xec)
+#endif
+#else
+typedef struct IDWriteFactory2Vtbl {
     BEGIN_INTERFACE
 
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory2 *This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDWriteFontFace methods */
-    STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory2 *This);
 
-    STDMETHOD(GetFiles)(THIS_
-        UINT32 *numberOfFiles,
-        IDWriteFontFile **fontFiles) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory2 *This);
 
-    STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory2 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
 
-    STDMETHOD_(void, GetMetrics)(THIS_
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory2 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
 
-    STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory2 *This,
+        IDWriteFontCollectionLoader *loader);
 
-    STDMETHOD(GetDesignGlyphMetrics)(THIS_
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory2 *This,
+        IDWriteFontCollectionLoader *loader);
 
-    STDMETHOD(GetGlyphIndices)(THIS_
-        UINT32 const *codePoints,
-        UINT32 codePointCount,
-        UINT16 *glyphIndices) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory2 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
 
-    STDMETHOD(TryGetFontTable)(THIS_
-        UINT32 openTypeTableTag,
-        const void **tableData,
-        UINT32 *tableSize,
-        void **tableContext,
-        WINBOOL *exists) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory2 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
 
-    STDMETHOD_(void, ReleaseFontTable)(THIS_
-        void *tableContext) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory2 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
 
-    STDMETHOD(GetGlyphRunOutline)(THIS_
-        FLOAT emSize,
-        UINT16 const *glyphIndices,
-        FLOAT const *glyphAdvances,
-        DWRITE_GLYPH_OFFSET const *glyphOffsets,
-        UINT32 glyphCount,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        IDWriteGeometrySink *geometrySink) PURE;
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory2 *This,
+        IDWriteRenderingParams **params);
 
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory2 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory2 *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory2 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory2 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory2 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory2 *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory2 *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory2 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory2 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory2 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory2 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory2 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory2 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory2 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory2 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
+
+    /*** IDWriteFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
+        IDWriteFactory2 *This,
+        IDWriteFontFallback **fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
+        IDWriteFactory2 *This,
+        IDWriteFontFallbackBuilder **fallbackbuilder);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
+        IDWriteFactory2 *This,
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
+        IDWriteFactory2 *This,
+        FLOAT gamma,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **params);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
+        IDWriteFactory2 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE renderingMode,
         DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE *renderingMode) PURE;
-
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-    STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    /* IDWriteFontFace1 methods */
-    STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
-    STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
-    STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
-    STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-    STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
-            UINT16 const*,INT32*) PURE;
-    STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
-    STDMETHOD_(BOOL, HasKerningPairs)(THIS);
-    STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
-            DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
-    STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
-    STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
-#endif
-
-    /* IDWriteFontFace2 methods */
-    STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
-    STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
-    STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
-        STDMETHOD(GetPaletteEntries)(THIS_
-        UINT32 colorPaletteIndex,
-        UINT32 firstEntryIndex,
-        UINT32 entryCount,
-        DWRITE_COLOR_F* paletteEntries
-        ) PURE;
-
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT fontEmSize,
-        FLOAT dpiX,
-        FLOAT dpiY,
-        DWRITE_MATRIX const* transform,
-        BOOL isSideways,
-        DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams* renderingParams,
-        DWRITE_RENDERING_MODE* renderingMode,
-        DWRITE_GRID_FIT_MODE* gridFitMode
-        ) PURE;
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis);
 
     END_INTERFACE
+} IDWriteFactory2Vtbl;
+
+interface IDWriteFactory2 {
+    CONST_VTBL IDWriteFactory2Vtbl* lpVtbl;
 };
 
-__CRT_UUID_DECL(IDWriteFontFace2, 0xd8b768ff,0x64bc,0x4e66,0x98,0x2b,0xec,0x8e,0x87,0xf6,0x93,0xf7)
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory2_GetSystemFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetSystemFontCollection(This,collection,check_for_updates)
+#define IDWriteFactory2_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory2_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory2_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory2_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory2_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory2_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory2_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory2_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory2_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory2_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory2_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
+#define IDWriteFactory2_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory2_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory2_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory2_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory2_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory2_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory2_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory2_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+/*** IDWriteFactory2 methods ***/
+#define IDWriteFactory2_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
+#define IDWriteFactory2_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
+#define IDWriteFactory2_TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers) (This)->lpVtbl->TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers)
+#define IDWriteFactory2_CreateCustomRenderingParams(This,gamma,contrast,grayscalecontrast,cleartypeLevel,pixelGeometry,renderingMode,gridFitMode,params) (This)->lpVtbl->IDWriteFactory2_CreateCustomRenderingParams(This,gamma,contrast,grayscalecontrast,cleartypeLevel,pixelGeometry,renderingMode,gridFitMode,params)
+#define IDWriteFactory2_CreateGlyphRunAnalysis(This,run,transform,renderingMode,measuringMode,gridFitMode,antialiasMode,originX,originY,analysis) (This)->lpVtbl->IDWriteFactory2_CreateGlyphRunAnalysis(This,run,transform,renderingMode,measuringMode,gridFitMode,antialiasMode,originX,originY,analysis)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory2_QueryInterface(IDWriteFactory2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory2_AddRef(IDWriteFactory2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory2_Release(IDWriteFactory2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory2_GetSystemFontCollection(IDWriteFactory2* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetSystemFontCollection(This,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateCustomFontCollection(IDWriteFactory2* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_RegisterFontCollectionLoader(IDWriteFactory2* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_UnregisterFontCollectionLoader(IDWriteFactory2* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateFontFileReference(IDWriteFactory2* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateCustomFontFileReference(IDWriteFactory2* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateFontFace(IDWriteFactory2* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateRenderingParams(IDWriteFactory2* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateMonitorRenderingParams(IDWriteFactory2* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_RegisterFontFileLoader(IDWriteFactory2* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_UnregisterFontFileLoader(IDWriteFactory2* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateTextFormat(IDWriteFactory2* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
+    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateTypography(IDWriteFactory2* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_GetGdiInterop(IDWriteFactory2* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateTextLayout(IDWriteFactory2* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateGdiCompatibleTextLayout(IDWriteFactory2* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateEllipsisTrimmingSign(IDWriteFactory2* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateTextAnalyzer(IDWriteFactory2* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateNumberSubstitution(IDWriteFactory2* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory2_GetEudcFontCollection(IDWriteFactory2* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+/*** IDWriteFactory2 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory2_GetSystemFontFallback(IDWriteFactory2* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetSystemFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateFontFallbackBuilder(IDWriteFactory2* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
+    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_TranslateColorGlyphRun(IDWriteFactory2* This,FLOAT originX,FLOAT originY,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,DWRITE_MEASURING_MODE mode,const DWRITE_MATRIX *transform,UINT32 palette_index,IDWriteColorGlyphRunEnumerator **colorlayers) {
+    return This->lpVtbl->TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateCustomRenderingParams(IDWriteFactory2* This,FLOAT gamma,FLOAT contrast,FLOAT grayscalecontrast,FLOAT cleartypeLevel,DWRITE_PIXEL_GEOMETRY pixelGeometry,DWRITE_RENDERING_MODE renderingMode,DWRITE_GRID_FIT_MODE gridFitMode,IDWriteRenderingParams2 **params) {
+    return This->lpVtbl->IDWriteFactory2_CreateCustomRenderingParams(This,gamma,contrast,grayscalecontrast,cleartypeLevel,pixelGeometry,renderingMode,gridFitMode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory2_CreateGlyphRunAnalysis(IDWriteFactory2* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE renderingMode,DWRITE_MEASURING_MODE measuringMode,DWRITE_GRID_FIT_MODE gridFitMode,DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,FLOAT originX,FLOAT originY,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->IDWriteFactory2_CreateGlyphRunAnalysis(This,run,transform,renderingMode,measuringMode,gridFitMode,antialiasMode,originX,originY,analysis);
+}
+#endif
+#endif
 
-#endif /* DWRITE_2_H_INCLUDED */
+#endif
+
+
+#endif  /* __IDWriteFactory2_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dwrite_2_h__ */
diff --git a/mingw-w64-headers/include/dwrite_2.idl b/mingw-w64-headers/include/dwrite_2.idl
new file mode 100644
index 0000000..5401cf3
--- /dev/null
+++ b/mingw-w64-headers/include/dwrite_2.idl
@@ -0,0 +1,332 @@
+/*
+ * Copyright 2014 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "dwrite_1.idl";
+
+typedef enum DWRITE_OPTICAL_ALIGNMENT
+{
+    DWRITE_OPTICAL_ALIGNMENT_NONE,
+    DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS
+} DWRITE_OPTICAL_ALIGNMENT;
+
+typedef enum DWRITE_GRID_FIT_MODE
+{
+    DWRITE_GRID_FIT_MODE_DEFAULT,
+    DWRITE_GRID_FIT_MODE_DISABLED,
+    DWRITE_GRID_FIT_MODE_ENABLED
+} DWRITE_GRID_FIT_MODE;
+
+typedef struct DWRITE_TEXT_METRICS1
+{
+    /* DWRITE_TEXT_METRICS fields */
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT widthIncludingTrailingWhitespace;
+    FLOAT height;
+    FLOAT layoutWidth;
+    FLOAT layoutHeight;
+    UINT32 maxBidiReorderingDepth;
+    UINT32 lineCount;
+    /* DWRITE_TEXT_METRICS1 fields */
+    FLOAT heightIncludingTrailingWhitespace;
+} DWRITE_TEXT_METRICS1;
+
+cpp_quote("#ifndef D3DCOLORVALUE_DEFINED")
+typedef struct _D3DCOLORVALUE
+{
+    union {
+        FLOAT r;
+        FLOAT dvR;
+    };
+    union {
+        FLOAT g;
+        FLOAT dvG;
+    };
+    union {
+        FLOAT b;
+        FLOAT dvB;
+    };
+    union {
+        FLOAT a;
+        FLOAT dvA;
+    };
+} D3DCOLORVALUE;
+cpp_quote("#define D3DCOLORVALUE_DEFINED")
+cpp_quote("#endif")
+
+typedef D3DCOLORVALUE DWRITE_COLOR_F;
+
+typedef struct DWRITE_COLOR_GLYPH_RUN
+{
+    DWRITE_GLYPH_RUN glyphRun;
+    DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription;
+    FLOAT baselineOriginX;
+    FLOAT baselineOriginY;
+    DWRITE_COLOR_F runColor;
+    UINT16 paletteIndex;
+} DWRITE_COLOR_GLYPH_RUN;
+
+[
+    local,
+    object,
+    uuid(d3e0e934-22a0-427e-aae4-7d9574b59db1)
+]
+interface IDWriteTextRenderer1 : IDWriteTextRenderer
+{
+    HRESULT DrawGlyphRun(void *context,
+                         FLOAT originX,
+                         FLOAT originY,
+                         DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+                         DWRITE_MEASURING_MODE mode,
+                         DWRITE_GLYPH_RUN const *run,
+                         DWRITE_GLYPH_RUN_DESCRIPTION const *rundescr,
+                         IUnknown *effect);
+
+    HRESULT DrawUnderline(void *context,
+                          FLOAT originX,
+                          FLOAT originY,
+                          DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+                          DWRITE_UNDERLINE const *underline,
+                          IUnknown *effect);
+
+    HRESULT DrawStrikethrough(void *context,
+                              FLOAT originX,
+                              FLOAT originY,
+                              DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+                              DWRITE_STRIKETHROUGH const *strikethrough,
+                              IUnknown *effect
+                             );
+
+    HRESULT DrawInlineObject(void *context,
+                             FLOAT originX,
+                             FLOAT originY,
+                             DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+                             IDWriteInlineObject *inlineObject,
+                             BOOL is_sideways,
+                             BOOL is_rtl,
+                             IUnknown *effect
+                            );
+}
+
+[
+    local,
+    object,
+    uuid(efa008f9-f7a1-48bf-b05c-f224713cc0ff)
+]
+interface IDWriteFontFallback : IUnknown
+{
+    HRESULT MapCharacters(IDWriteTextAnalysisSource *source,
+                          UINT32 position,
+                          UINT32 length,
+                          IDWriteFontCollection *basecollection,
+                          const WCHAR *baseFamilyName,
+                          DWRITE_FONT_WEIGHT baseWeight,
+                          DWRITE_FONT_STYLE baseStyle,
+                          DWRITE_FONT_STRETCH baseStretch,
+                          UINT32 *mappedLength,
+                          IDWriteFont **mappedFont,
+                          FLOAT *scale
+                         );
+}
+
+[
+    local,
+    object,
+    uuid(5f174b49-0d8b-4cfb-8bca-f1cce9d06c67)
+]
+interface IDWriteTextFormat1 : IDWriteTextFormat
+{
+    HRESULT SetVerticalGlyphOrientation(DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+    DWRITE_VERTICAL_GLYPH_ORIENTATION GetVerticalGlyphOrientation();
+    HRESULT SetLastLineWrapping(BOOL lastline_wrapping_enabled);
+    BOOL GetLastLineWrapping();
+    HRESULT SetOpticalAlignment(DWRITE_OPTICAL_ALIGNMENT alignment);
+    DWRITE_OPTICAL_ALIGNMENT GetOpticalAlignment();
+    HRESULT SetFontFallback(IDWriteFontFallback *fallback);
+    HRESULT GetFontFallback(IDWriteFontFallback **fallback);
+}
+
+[
+    local,
+    object,
+    uuid(1093c18f-8d5e-43f0-b064-0917311b525e)
+]
+interface IDWriteTextLayout2 : IDWriteTextLayout1
+{
+    HRESULT GetMetrics(DWRITE_TEXT_METRICS1 *metrics);
+    HRESULT SetVerticalGlyphOrientation(DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+    DWRITE_VERTICAL_GLYPH_ORIENTATION GetVerticalGlyphOrientation();
+    HRESULT SetLastLineWrapping(BOOL lastline_wrapping_enabled);
+    BOOL GetLastLineWrapping();
+    HRESULT SetOpticalAlignment(DWRITE_OPTICAL_ALIGNMENT alignment);
+    DWRITE_OPTICAL_ALIGNMENT GetOpticalAlignment();
+    HRESULT SetFontFallback(IDWriteFontFallback *fallback);
+    HRESULT GetFontFallback(IDWriteFontFallback **fallback);
+}
+
+[
+    local,
+    object,
+    uuid(553a9ff3-5693-4df7-b52b-74806f7f2eb9)
+]
+interface IDWriteTextAnalyzer2 : IDWriteTextAnalyzer1
+{
+    HRESULT GetGlyphOrientationTransform(DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+                                         BOOL is_sideways,
+                                         FLOAT originX,
+                                         FLOAT originY,
+                                         DWRITE_MATRIX *transform
+                                        );
+    HRESULT GetTypographicFeatures(IDWriteFontFace *fontface,
+                                   DWRITE_SCRIPT_ANALYSIS analysis,
+                                   const WCHAR *localeName,
+                                   UINT32 max_tagcount,
+                                   UINT32 *actual_tagcount,
+                                   DWRITE_FONT_FEATURE_TAG *tags
+                                  );
+
+    HRESULT CheckTypographicFeature(IDWriteFontFace *fontface,
+                                    DWRITE_SCRIPT_ANALYSIS analysis,
+                                    const WCHAR *localeName,
+                                    DWRITE_FONT_FEATURE_TAG feature,
+                                    UINT32 glyph_count,
+                                    const UINT16 *indices,
+                                    UINT8 *feature_applies
+                                   );
+}
+
+[
+    local,
+    object,
+    uuid(fd882d06-8aba-4fb8-b849-8be8b73e14de)
+]
+interface IDWriteFontFallbackBuilder : IUnknown
+{
+    HRESULT AddMapping(const DWRITE_UNICODE_RANGE *ranges,
+                       UINT32 rangesCount,
+                       WCHAR const **targetFamilyNames,
+                       UINT32 targetFamilyNamesCount,
+                       [defaultvalue(NULL)] IDWriteFontCollection *collection,
+                       [defaultvalue(NULL)] WCHAR const *localeName,
+                       [defaultvalue(NULL)] WCHAR const *baseFamilyName,
+                       [defaultvalue(1)] FLOAT scale
+                      );
+    HRESULT AddMappings(IDWriteFontFallback *fallback);
+    HRESULT CreateFontFallback(IDWriteFontFallback **fallback);
+}
+
+[
+    local,
+    object,
+    uuid(29748ed6-8c9c-4a6a-be0b-d912e8538944)
+]
+interface IDWriteFont2 : IDWriteFont1
+{
+    BOOL IsColorFont();
+}
+
+[
+    local,
+    object,
+    uuid(d8b768ff-64bc-4e66-982b-ec8e87f693f7)
+]
+interface IDWriteFontFace2 : IDWriteFontFace1
+{
+    BOOL IsColorFont();
+    UINT32 GetColorPaletteCount();
+    UINT32 GetPaletteEntryCount();
+    HRESULT GetPaletteEntries(UINT32 palette_index,
+                              UINT32 first_entry_index,
+                              UINT32 entry_count,
+                              DWRITE_COLOR_F *entries
+                             );
+    HRESULT GetRecommendedRenderingMode(FLOAT fontEmSize,
+                                        FLOAT dpiX,
+                                        FLOAT dpiY,
+                                        DWRITE_MATRIX const *transform,
+                                        BOOL is_sideways,
+                                        DWRITE_OUTLINE_THRESHOLD threshold,
+                                        DWRITE_MEASURING_MODE measuringmode,
+                                        IDWriteRenderingParams *params,
+                                        DWRITE_RENDERING_MODE *renderingmode,
+                                        DWRITE_GRID_FIT_MODE *gridfitmode
+                                       );
+}
+
+[
+    local,
+    object,
+    uuid(d31fbe17-f157-41a2-8d24-cb779e0560e8)
+]
+interface IDWriteColorGlyphRunEnumerator : IUnknown
+{
+    HRESULT MoveNext(BOOL *hasRun);
+    HRESULT GetCurrentRun(DWRITE_COLOR_GLYPH_RUN const **run);
+}
+
+[
+    local,
+    object,
+    uuid(f9d711c3-9777-40ae-87e8-3e5aF9bf0948)
+]
+interface IDWriteRenderingParams2 : IDWriteRenderingParams1
+{
+    DWRITE_GRID_FIT_MODE GetGridFitMode();
+}
+
+[
+    local,
+    object,
+    uuid(0439fc60-ca44-4994-8dee-3a9af7b732ec)
+]
+interface IDWriteFactory2 : IDWriteFactory1
+{
+    HRESULT GetSystemFontFallback(IDWriteFontFallback **fallback);
+    HRESULT CreateFontFallbackBuilder(IDWriteFontFallbackBuilder **fallbackbuilder);
+    HRESULT TranslateColorGlyphRun(FLOAT originX,
+                                   FLOAT originY,
+                                   const DWRITE_GLYPH_RUN *run,
+                                   const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+                                   DWRITE_MEASURING_MODE mode,
+                                   const DWRITE_MATRIX *transform,
+                                   UINT32 palette_index,
+                                   IDWriteColorGlyphRunEnumerator **colorlayers
+                                  );
+
+    HRESULT CreateCustomRenderingParams(FLOAT gamma,
+                                        FLOAT contrast,
+                                        FLOAT grayscalecontrast,
+                                        FLOAT cleartypeLevel,
+                                        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+                                        DWRITE_RENDERING_MODE renderingMode,
+                                        DWRITE_GRID_FIT_MODE gridFitMode,
+                                        IDWriteRenderingParams2 **params
+                                       );
+
+    HRESULT CreateGlyphRunAnalysis(const DWRITE_GLYPH_RUN *run,
+                                   const DWRITE_MATRIX *transform,
+                                   DWRITE_RENDERING_MODE renderingMode,
+                                   DWRITE_MEASURING_MODE measuringMode,
+                                   DWRITE_GRID_FIT_MODE gridFitMode,
+                                   DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+                                   FLOAT originX,
+                                   FLOAT originY,
+                                   IDWriteGlyphRunAnalysis **analysis
+                                  );
+}
diff --git a/mingw-w64-headers/include/dwrite_3.h b/mingw-w64-headers/include/dwrite_3.h
index 9c17173..f058ec8 100644
--- a/mingw-w64-headers/include/dwrite_3.h
+++ b/mingw-w64-headers/include/dwrite_3.h
@@ -1,44 +1,8153 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
+/*** Autogenerated by WIDL 5.13 from include/dwrite_3.idl - Do not edit ***/
 
-#ifndef DWRITE_3_H_INCLUDED
-#define DWRITE_3_H_INCLUDED
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __dwrite_3_h__
+#define __dwrite_3_h__
+
+/* Forward declarations */
+
+#ifndef __IDWriteFontDownloadListener_FWD_DEFINED__
+#define __IDWriteFontDownloadListener_FWD_DEFINED__
+typedef interface IDWriteFontDownloadListener IDWriteFontDownloadListener;
+#ifdef __cplusplus
+interface IDWriteFontDownloadListener;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontDownloadQueue_FWD_DEFINED__
+#define __IDWriteFontDownloadQueue_FWD_DEFINED__
+typedef interface IDWriteFontDownloadQueue IDWriteFontDownloadQueue;
+#ifdef __cplusplus
+interface IDWriteFontDownloadQueue;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteRenderingParams3_FWD_DEFINED__
+#define __IDWriteRenderingParams3_FWD_DEFINED__
+typedef interface IDWriteRenderingParams3 IDWriteRenderingParams3;
+#ifdef __cplusplus
+interface IDWriteRenderingParams3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteStringList_FWD_DEFINED__
+#define __IDWriteStringList_FWD_DEFINED__
+typedef interface IDWriteStringList IDWriteStringList;
+#ifdef __cplusplus
+interface IDWriteStringList;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSet_FWD_DEFINED__
+#define __IDWriteFontSet_FWD_DEFINED__
+typedef interface IDWriteFontSet IDWriteFontSet;
+#ifdef __cplusplus
+interface IDWriteFontSet;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontResource_FWD_DEFINED__
+#define __IDWriteFontResource_FWD_DEFINED__
+typedef interface IDWriteFontResource IDWriteFontResource;
+#ifdef __cplusplus
+interface IDWriteFontResource;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSet1_FWD_DEFINED__
+#define __IDWriteFontSet1_FWD_DEFINED__
+typedef interface IDWriteFontSet1 IDWriteFontSet1;
+#ifdef __cplusplus
+interface IDWriteFontSet1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFont3_FWD_DEFINED__
+#define __IDWriteFont3_FWD_DEFINED__
+typedef interface IDWriteFont3 IDWriteFont3;
+#ifdef __cplusplus
+interface IDWriteFont3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFamily1_FWD_DEFINED__
+#define __IDWriteFontFamily1_FWD_DEFINED__
+typedef interface IDWriteFontFamily1 IDWriteFontFamily1;
+#ifdef __cplusplus
+interface IDWriteFontFamily1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFamily2_FWD_DEFINED__
+#define __IDWriteFontFamily2_FWD_DEFINED__
+typedef interface IDWriteFontFamily2 IDWriteFontFamily2;
+#ifdef __cplusplus
+interface IDWriteFontFamily2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontCollection1_FWD_DEFINED__
+#define __IDWriteFontCollection1_FWD_DEFINED__
+typedef interface IDWriteFontCollection1 IDWriteFontCollection1;
+#ifdef __cplusplus
+interface IDWriteFontCollection1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontCollection2_FWD_DEFINED__
+#define __IDWriteFontCollection2_FWD_DEFINED__
+typedef interface IDWriteFontCollection2 IDWriteFontCollection2;
+#ifdef __cplusplus
+interface IDWriteFontCollection2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontCollection3_FWD_DEFINED__
+#define __IDWriteFontCollection3_FWD_DEFINED__
+typedef interface IDWriteFontCollection3 IDWriteFontCollection3;
+#ifdef __cplusplus
+interface IDWriteFontCollection3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFaceReference_FWD_DEFINED__
+#define __IDWriteFontFaceReference_FWD_DEFINED__
+typedef interface IDWriteFontFaceReference IDWriteFontFaceReference;
+#ifdef __cplusplus
+interface IDWriteFontFaceReference;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFaceReference1_FWD_DEFINED__
+#define __IDWriteFontFaceReference1_FWD_DEFINED__
+typedef interface IDWriteFontFaceReference1 IDWriteFontFaceReference1;
+#ifdef __cplusplus
+interface IDWriteFontFaceReference1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontList1_FWD_DEFINED__
+#define __IDWriteFontList1_FWD_DEFINED__
+typedef interface IDWriteFontList1 IDWriteFontList1;
+#ifdef __cplusplus
+interface IDWriteFontList1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontList2_FWD_DEFINED__
+#define __IDWriteFontList2_FWD_DEFINED__
+typedef interface IDWriteFontList2 IDWriteFontList2;
+#ifdef __cplusplus
+interface IDWriteFontList2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSet2_FWD_DEFINED__
+#define __IDWriteFontSet2_FWD_DEFINED__
+typedef interface IDWriteFontSet2 IDWriteFontSet2;
+#ifdef __cplusplus
+interface IDWriteFontSet2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSet3_FWD_DEFINED__
+#define __IDWriteFontSet3_FWD_DEFINED__
+typedef interface IDWriteFontSet3 IDWriteFontSet3;
+#ifdef __cplusplus
+interface IDWriteFontSet3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace3_FWD_DEFINED__
+#define __IDWriteFontFace3_FWD_DEFINED__
+typedef interface IDWriteFontFace3 IDWriteFontFace3;
+#ifdef __cplusplus
+interface IDWriteFontFace3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextFormat2_FWD_DEFINED__
+#define __IDWriteTextFormat2_FWD_DEFINED__
+typedef interface IDWriteTextFormat2 IDWriteTextFormat2;
+#ifdef __cplusplus
+interface IDWriteTextFormat2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextFormat3_FWD_DEFINED__
+#define __IDWriteTextFormat3_FWD_DEFINED__
+typedef interface IDWriteTextFormat3 IDWriteTextFormat3;
+#ifdef __cplusplus
+interface IDWriteTextFormat3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextLayout3_FWD_DEFINED__
+#define __IDWriteTextLayout3_FWD_DEFINED__
+typedef interface IDWriteTextLayout3 IDWriteTextLayout3;
+#ifdef __cplusplus
+interface IDWriteTextLayout3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteTextLayout4_FWD_DEFINED__
+#define __IDWriteTextLayout4_FWD_DEFINED__
+typedef interface IDWriteTextLayout4 IDWriteTextLayout4;
+#ifdef __cplusplus
+interface IDWriteTextLayout4;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFallback1_FWD_DEFINED__
+#define __IDWriteFontFallback1_FWD_DEFINED__
+typedef interface IDWriteFontFallback1 IDWriteFontFallback1;
+#ifdef __cplusplus
+interface IDWriteFontFallback1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteGdiInterop1_FWD_DEFINED__
+#define __IDWriteGdiInterop1_FWD_DEFINED__
+typedef interface IDWriteGdiInterop1 IDWriteGdiInterop1;
+#ifdef __cplusplus
+interface IDWriteGdiInterop1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSetBuilder_FWD_DEFINED__
+#define __IDWriteFontSetBuilder_FWD_DEFINED__
+typedef interface IDWriteFontSetBuilder IDWriteFontSetBuilder;
+#ifdef __cplusplus
+interface IDWriteFontSetBuilder;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSetBuilder1_FWD_DEFINED__
+#define __IDWriteFontSetBuilder1_FWD_DEFINED__
+typedef interface IDWriteFontSetBuilder1 IDWriteFontSetBuilder1;
+#ifdef __cplusplus
+interface IDWriteFontSetBuilder1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSetBuilder2_FWD_DEFINED__
+#define __IDWriteFontSetBuilder2_FWD_DEFINED__
+typedef interface IDWriteFontSetBuilder2 IDWriteFontSetBuilder2;
+#ifdef __cplusplus
+interface IDWriteFontSetBuilder2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFactory3_FWD_DEFINED__
+#define __IDWriteFactory3_FWD_DEFINED__
+typedef interface IDWriteFactory3 IDWriteFactory3;
+#ifdef __cplusplus
+interface IDWriteFactory3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace4_FWD_DEFINED__
+#define __IDWriteFontFace4_FWD_DEFINED__
+typedef interface IDWriteFontFace4 IDWriteFontFace4;
+#ifdef __cplusplus
+interface IDWriteFontFace4;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace5_FWD_DEFINED__
+#define __IDWriteFontFace5_FWD_DEFINED__
+typedef interface IDWriteFontFace5 IDWriteFontFace5;
+#ifdef __cplusplus
+interface IDWriteFontFace5;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteColorGlyphRunEnumerator1_FWD_DEFINED__
+#define __IDWriteColorGlyphRunEnumerator1_FWD_DEFINED__
+typedef interface IDWriteColorGlyphRunEnumerator1 IDWriteColorGlyphRunEnumerator1;
+#ifdef __cplusplus
+interface IDWriteColorGlyphRunEnumerator1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFactory4_FWD_DEFINED__
+#define __IDWriteFactory4_FWD_DEFINED__
+typedef interface IDWriteFactory4 IDWriteFactory4;
+#ifdef __cplusplus
+interface IDWriteFactory4;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteAsyncResult_FWD_DEFINED__
+#define __IDWriteAsyncResult_FWD_DEFINED__
+typedef interface IDWriteAsyncResult IDWriteAsyncResult;
+#ifdef __cplusplus
+interface IDWriteAsyncResult;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteRemoteFontFileStream_FWD_DEFINED__
+#define __IDWriteRemoteFontFileStream_FWD_DEFINED__
+typedef interface IDWriteRemoteFontFileStream IDWriteRemoteFontFileStream;
+#ifdef __cplusplus
+interface IDWriteRemoteFontFileStream;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteRemoteFontFileLoader_FWD_DEFINED__
+#define __IDWriteRemoteFontFileLoader_FWD_DEFINED__
+typedef interface IDWriteRemoteFontFileLoader IDWriteRemoteFontFileLoader;
+#ifdef __cplusplus
+interface IDWriteRemoteFontFileLoader;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteInMemoryFontFileLoader_FWD_DEFINED__
+#define __IDWriteInMemoryFontFileLoader_FWD_DEFINED__
+typedef interface IDWriteInMemoryFontFileLoader IDWriteInMemoryFontFileLoader;
+#ifdef __cplusplus
+interface IDWriteInMemoryFontFileLoader;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFactory5_FWD_DEFINED__
+#define __IDWriteFactory5_FWD_DEFINED__
+typedef interface IDWriteFactory5 IDWriteFactory5;
+#ifdef __cplusplus
+interface IDWriteFactory5;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFactory6_FWD_DEFINED__
+#define __IDWriteFactory6_FWD_DEFINED__
+typedef interface IDWriteFactory6 IDWriteFactory6;
+#ifdef __cplusplus
+interface IDWriteFactory6;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFactory7_FWD_DEFINED__
+#define __IDWriteFactory7_FWD_DEFINED__
+typedef interface IDWriteFactory7 IDWriteFactory7;
+#ifdef __cplusplus
+interface IDWriteFactory7;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
 
 #include <dwrite_2.h>
 
-#define DWRITE_MAKE_FONT_AXIS_TAG(a,b,c,d) \
-    (static_cast<DWRITE_FONT_AXIS_TAG>(DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d)))
+#ifdef __cplusplus
+extern "C" {
+#endif
 
-enum DWRITE_RENDERING_MODE1 {
-    DWRITE_RENDERING_MODE1_DEFAULT = DWRITE_RENDERING_MODE_DEFAULT,
-    DWRITE_RENDERING_MODE1_ALIASED = DWRITE_RENDERING_MODE_ALIASED,
-    DWRITE_RENDERING_MODE1_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,
-    DWRITE_RENDERING_MODE1_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
-    DWRITE_RENDERING_MODE1_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
-    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
-    DWRITE_RENDERING_MODE1_OUTLINE = DWRITE_RENDERING_MODE_OUTLINE,
-    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED
+#ifndef __IDWriteFontFaceReference_FWD_DEFINED__
+#define __IDWriteFontFaceReference_FWD_DEFINED__
+typedef interface IDWriteFontFaceReference IDWriteFontFaceReference;
+#ifdef __cplusplus
+interface IDWriteFontFaceReference;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFaceReference1_FWD_DEFINED__
+#define __IDWriteFontFaceReference1_FWD_DEFINED__
+typedef interface IDWriteFontFaceReference1 IDWriteFontFaceReference1;
+#ifdef __cplusplus
+interface IDWriteFontFaceReference1;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace3_FWD_DEFINED__
+#define __IDWriteFontFace3_FWD_DEFINED__
+typedef interface IDWriteFontFace3 IDWriteFontFace3;
+#ifdef __cplusplus
+interface IDWriteFontFace3;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontSet_FWD_DEFINED__
+#define __IDWriteFontSet_FWD_DEFINED__
+typedef interface IDWriteFontSet IDWriteFontSet;
+#ifdef __cplusplus
+interface IDWriteFontSet;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontDownloadQueue_FWD_DEFINED__
+#define __IDWriteFontDownloadQueue_FWD_DEFINED__
+typedef interface IDWriteFontDownloadQueue IDWriteFontDownloadQueue;
+#ifdef __cplusplus
+interface IDWriteFontDownloadQueue;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontFace5_FWD_DEFINED__
+#define __IDWriteFontFace5_FWD_DEFINED__
+typedef interface IDWriteFontFace5 IDWriteFontFace5;
+#ifdef __cplusplus
+interface IDWriteFontFace5;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDWriteFontList2_FWD_DEFINED__
+#define __IDWriteFontList2_FWD_DEFINED__
+typedef interface IDWriteFontList2 IDWriteFontList2;
+#ifdef __cplusplus
+interface IDWriteFontList2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef _WINGDI_
+typedef struct FONTSIGNATURE FONTSIGNATURE;
+#endif /* _WINGDI_ */
+typedef enum DWRITE_LOCALITY {
+    DWRITE_LOCALITY_REMOTE = 0,
+    DWRITE_LOCALITY_PARTIAL = 1,
+    DWRITE_LOCALITY_LOCAL = 2
+} DWRITE_LOCALITY;
+typedef enum DWRITE_RENDERING_MODE1 {
+    DWRITE_RENDERING_MODE1_DEFAULT = 0,
+    DWRITE_RENDERING_MODE1_ALIASED = 1,
+    DWRITE_RENDERING_MODE1_GDI_CLASSIC = 2,
+    DWRITE_RENDERING_MODE1_GDI_NATURAL = 3,
+    DWRITE_RENDERING_MODE1_NATURAL = 4,
+    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = 5,
+    DWRITE_RENDERING_MODE1_OUTLINE = 6,
+    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED = 7
+} DWRITE_RENDERING_MODE1;
+typedef enum DWRITE_FONT_PROPERTY_ID {
+    DWRITE_FONT_PROPERTY_ID_NONE = 0,
+    DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME = 1,
+    DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FAMILY_NAME = 2,
+    DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FACE_NAME = 3,
+    DWRITE_FONT_PROPERTY_ID_FULL_NAME = 4,
+    DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME = 5,
+    DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME = 6,
+    DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG = 7,
+    DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG = 8,
+    DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG = 9,
+    DWRITE_FONT_PROPERTY_ID_WEIGHT = 10,
+    DWRITE_FONT_PROPERTY_ID_STRETCH = 11,
+    DWRITE_FONT_PROPERTY_ID_STYLE = 12,
+    DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FACE_NAME = 13,
+    DWRITE_FONT_PROPERTY_ID_TOTAL = DWRITE_FONT_PROPERTY_ID_STYLE + 1,
+    DWRITE_FONT_PROPERTY_ID_TOTAL_RS3 = DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FACE_NAME + 1,
+    DWRITE_FONT_PROPERTY_ID_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_FACE_NAME = DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FACE_NAME
+} DWRITE_FONT_PROPERTY_ID;
+typedef struct DWRITE_FONT_PROPERTY {
+    DWRITE_FONT_PROPERTY_ID propertyId;
+    const WCHAR *propertyValue;
+    const WCHAR *localeName;
+} DWRITE_FONT_PROPERTY;
+typedef enum DWRITE_FONT_AXIS_TAG {
+    DWRITE_FONT_AXIS_TAG_WEIGHT = 0x74686777,
+    DWRITE_FONT_AXIS_TAG_WIDTH = 0x68746477,
+    DWRITE_FONT_AXIS_TAG_SLANT = 0x746e6c73,
+    DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = 0x7a73706f,
+    DWRITE_FONT_AXIS_TAG_ITALIC = 0x6c617469
+} DWRITE_FONT_AXIS_TAG;
+typedef enum DWRITE_FONT_SOURCE_TYPE {
+    DWRITE_FONT_SOURCE_TYPE_UNKNOWN = 0,
+    DWRITE_FONT_SOURCE_TYPE_PER_MACHINE = 1,
+    DWRITE_FONT_SOURCE_TYPE_PER_USER = 2,
+    DWRITE_FONT_SOURCE_TYPE_APPX_PACKAGE = 3,
+    DWRITE_FONT_SOURCE_TYPE_REMOTE_FONT_PROVIDER = 4
+} DWRITE_FONT_SOURCE_TYPE;
+typedef struct DWRITE_FONT_AXIS_VALUE {
+    DWRITE_FONT_AXIS_TAG axisTag;
+    FLOAT value;
+} DWRITE_FONT_AXIS_VALUE;
+typedef struct DWRITE_FONT_AXIS_RANGE {
+    DWRITE_FONT_AXIS_TAG axisTag;
+    FLOAT minValue;
+    FLOAT maxValue;
+} DWRITE_FONT_AXIS_RANGE;
+typedef enum DWRITE_AUTOMATIC_FONT_AXES {
+    DWRITE_AUTOMATIC_FONT_AXES_NONE = 0,
+    DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE = 1
+} DWRITE_AUTOMATIC_FONT_AXES;
+typedef enum DWRITE_FONT_AXIS_ATTRIBUTES {
+    DWRITE_FONT_AXIS_ATTRIBUTES_NONE = 0,
+    DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE = 1,
+    DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN = 2
+} DWRITE_FONT_AXIS_ATTRIBUTES;
+typedef enum DWRITE_FONT_FAMILY_MODEL {
+    DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC = 0,
+    DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE = 1
+} DWRITE_FONT_FAMILY_MODEL;
+/*****************************************************************************
+ * IDWriteFontDownloadListener interface
+ */
+#ifndef __IDWriteFontDownloadListener_INTERFACE_DEFINED__
+#define __IDWriteFontDownloadListener_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontDownloadListener, 0xb06fe5b9, 0x43ec, 0x4393, 0x88,0x1b, 0xdb,0xe4,0xdc,0x72,0xfd,0xa7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b06fe5b9-43ec-4393-881b-dbe4dc72fda7")
+IDWriteFontDownloadListener : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE DownloadCompleted(
+        IDWriteFontDownloadQueue *queue,
+        IUnknown *context,
+        HRESULT result) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontDownloadListener, 0xb06fe5b9, 0x43ec, 0x4393, 0x88,0x1b, 0xdb,0xe4,0xdc,0x72,0xfd,0xa7)
+#endif
+#else
+typedef struct IDWriteFontDownloadListenerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontDownloadListener *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontDownloadListener *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontDownloadListener *This);
+
+    /*** IDWriteFontDownloadListener methods ***/
+    void (STDMETHODCALLTYPE *DownloadCompleted)(
+        IDWriteFontDownloadListener *This,
+        IDWriteFontDownloadQueue *queue,
+        IUnknown *context,
+        HRESULT result);
+
+    END_INTERFACE
+} IDWriteFontDownloadListenerVtbl;
+
+interface IDWriteFontDownloadListener {
+    CONST_VTBL IDWriteFontDownloadListenerVtbl* lpVtbl;
 };
 
-enum DWRITE_FONT_AXIS_TAG : UINT32 {
-    DWRITE_FONT_AXIS_TAG_WEIGHT       = DWRITE_MAKE_FONT_AXIS_TAG('w','g','h','t'),
-    DWRITE_FONT_AXIS_TAG_WIDTH        = DWRITE_MAKE_FONT_AXIS_TAG('w','d','t','h'),
-    DWRITE_FONT_AXIS_TAG_SLANT        = DWRITE_MAKE_FONT_AXIS_TAG('s','l','n','t'),
-    DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = DWRITE_MAKE_FONT_AXIS_TAG('o','p','s','z'),
-    DWRITE_FONT_AXIS_TAG_ITALIC       = DWRITE_MAKE_FONT_AXIS_TAG('i','t','a','l')
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontDownloadListener_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontDownloadListener_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontDownloadListener_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontDownloadListener methods ***/
+#define IDWriteFontDownloadListener_DownloadCompleted(This,queue,context,result) (This)->lpVtbl->DownloadCompleted(This,queue,context,result)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontDownloadListener_QueryInterface(IDWriteFontDownloadListener* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontDownloadListener_AddRef(IDWriteFontDownloadListener* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontDownloadListener_Release(IDWriteFontDownloadListener* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontDownloadListener methods ***/
+static FORCEINLINE void IDWriteFontDownloadListener_DownloadCompleted(IDWriteFontDownloadListener* This,IDWriteFontDownloadQueue *queue,IUnknown *context,HRESULT result) {
+    This->lpVtbl->DownloadCompleted(This,queue,context,result);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontDownloadListener_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontDownloadQueue interface
+ */
+#ifndef __IDWriteFontDownloadQueue_INTERFACE_DEFINED__
+#define __IDWriteFontDownloadQueue_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontDownloadQueue, 0xb71e6052, 0x5aea, 0x4fa3, 0x83,0x2e, 0xf6,0x0d,0x43,0x1f,0x7e,0x91);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b71e6052-5aea-4fa3-832e-f60d431f7e91")
+IDWriteFontDownloadQueue : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddListener(
+        IDWriteFontDownloadListener *listener,
+        UINT32 *token) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveListener(
+        UINT32 token) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsEmpty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginDownload(
+        IUnknown *context) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CancelDownload(
+        ) = 0;
+
+    virtual UINT64 STDMETHODCALLTYPE GetGenerationCount(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontDownloadQueue, 0xb71e6052, 0x5aea, 0x4fa3, 0x83,0x2e, 0xf6,0x0d,0x43,0x1f,0x7e,0x91)
+#endif
+#else
+typedef struct IDWriteFontDownloadQueueVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontDownloadQueue *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontDownloadQueue *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontDownloadQueue *This);
+
+    /*** IDWriteFontDownloadQueue methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddListener)(
+        IDWriteFontDownloadQueue *This,
+        IDWriteFontDownloadListener *listener,
+        UINT32 *token);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveListener)(
+        IDWriteFontDownloadQueue *This,
+        UINT32 token);
+
+    WINBOOL (STDMETHODCALLTYPE *IsEmpty)(
+        IDWriteFontDownloadQueue *This);
+
+    HRESULT (STDMETHODCALLTYPE *BeginDownload)(
+        IDWriteFontDownloadQueue *This,
+        IUnknown *context);
+
+    HRESULT (STDMETHODCALLTYPE *CancelDownload)(
+        IDWriteFontDownloadQueue *This);
+
+    UINT64 (STDMETHODCALLTYPE *GetGenerationCount)(
+        IDWriteFontDownloadQueue *This);
+
+    END_INTERFACE
+} IDWriteFontDownloadQueueVtbl;
+
+interface IDWriteFontDownloadQueue {
+    CONST_VTBL IDWriteFontDownloadQueueVtbl* lpVtbl;
 };
 
-enum DWRITE_FONT_AXIS_ATTRIBUTES {
-    DWRITE_FONT_AXIS_ATTRIBUTES_NONE     = 0x0000,
-    DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE = 0x0001,
-    DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN   = 0x0002
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontDownloadQueue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontDownloadQueue_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontDownloadQueue_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontDownloadQueue methods ***/
+#define IDWriteFontDownloadQueue_AddListener(This,listener,token) (This)->lpVtbl->AddListener(This,listener,token)
+#define IDWriteFontDownloadQueue_RemoveListener(This,token) (This)->lpVtbl->RemoveListener(This,token)
+#define IDWriteFontDownloadQueue_IsEmpty(This) (This)->lpVtbl->IsEmpty(This)
+#define IDWriteFontDownloadQueue_BeginDownload(This,context) (This)->lpVtbl->BeginDownload(This,context)
+#define IDWriteFontDownloadQueue_CancelDownload(This) (This)->lpVtbl->CancelDownload(This)
+#define IDWriteFontDownloadQueue_GetGenerationCount(This) (This)->lpVtbl->GetGenerationCount(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontDownloadQueue_QueryInterface(IDWriteFontDownloadQueue* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontDownloadQueue_AddRef(IDWriteFontDownloadQueue* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontDownloadQueue_Release(IDWriteFontDownloadQueue* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontDownloadQueue methods ***/
+static FORCEINLINE HRESULT IDWriteFontDownloadQueue_AddListener(IDWriteFontDownloadQueue* This,IDWriteFontDownloadListener *listener,UINT32 *token) {
+    return This->lpVtbl->AddListener(This,listener,token);
+}
+static FORCEINLINE HRESULT IDWriteFontDownloadQueue_RemoveListener(IDWriteFontDownloadQueue* This,UINT32 token) {
+    return This->lpVtbl->RemoveListener(This,token);
+}
+static FORCEINLINE WINBOOL IDWriteFontDownloadQueue_IsEmpty(IDWriteFontDownloadQueue* This) {
+    return This->lpVtbl->IsEmpty(This);
+}
+static FORCEINLINE HRESULT IDWriteFontDownloadQueue_BeginDownload(IDWriteFontDownloadQueue* This,IUnknown *context) {
+    return This->lpVtbl->BeginDownload(This,context);
+}
+static FORCEINLINE HRESULT IDWriteFontDownloadQueue_CancelDownload(IDWriteFontDownloadQueue* This) {
+    return This->lpVtbl->CancelDownload(This);
+}
+static FORCEINLINE UINT64 IDWriteFontDownloadQueue_GetGenerationCount(IDWriteFontDownloadQueue* This) {
+    return This->lpVtbl->GetGenerationCount(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontDownloadQueue_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteRenderingParams3 interface
+ */
+#ifndef __IDWriteRenderingParams3_INTERFACE_DEFINED__
+#define __IDWriteRenderingParams3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteRenderingParams3, 0xb7924baa, 0x391b, 0x412a, 0x8c,0x5c, 0xe4,0x4c,0xc2,0xd8,0x67,0xdc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b7924baa-391b-412a-8c5c-e44cc2d867dc")
+IDWriteRenderingParams3 : public IDWriteRenderingParams2
+{
+    virtual DWRITE_RENDERING_MODE1 STDMETHODCALLTYPE GetRenderingMode1(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteRenderingParams3, 0xb7924baa, 0x391b, 0x412a, 0x8c,0x5c, 0xe4,0x4c,0xc2,0xd8,0x67,0xdc)
+#endif
+#else
+typedef struct IDWriteRenderingParams3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteRenderingParams3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteRenderingParams3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteRenderingParams3 *This);
+
+    /*** IDWriteRenderingParams methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGamma)(
+        IDWriteRenderingParams3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetEnhancedContrast)(
+        IDWriteRenderingParams3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetClearTypeLevel)(
+        IDWriteRenderingParams3 *This);
+
+    DWRITE_PIXEL_GEOMETRY (STDMETHODCALLTYPE *GetPixelGeometry)(
+        IDWriteRenderingParams3 *This);
+
+    DWRITE_RENDERING_MODE (STDMETHODCALLTYPE *GetRenderingMode)(
+        IDWriteRenderingParams3 *This);
+
+    /*** IDWriteRenderingParams1 methods ***/
+    FLOAT (STDMETHODCALLTYPE *GetGrayscaleEnhancedContrast)(
+        IDWriteRenderingParams3 *This);
+
+    /*** IDWriteRenderingParams2 methods ***/
+    DWRITE_GRID_FIT_MODE (STDMETHODCALLTYPE *GetGridFitMode)(
+        IDWriteRenderingParams3 *This);
+
+    /*** IDWriteRenderingParams3 methods ***/
+    DWRITE_RENDERING_MODE1 (STDMETHODCALLTYPE *GetRenderingMode1)(
+        IDWriteRenderingParams3 *This);
+
+    END_INTERFACE
+} IDWriteRenderingParams3Vtbl;
+
+interface IDWriteRenderingParams3 {
+    CONST_VTBL IDWriteRenderingParams3Vtbl* lpVtbl;
 };
 
-struct DWRITE_GLYPH_IMAGE_DATA {
-    void const *imageData;
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteRenderingParams3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteRenderingParams3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteRenderingParams3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteRenderingParams methods ***/
+#define IDWriteRenderingParams3_GetGamma(This) (This)->lpVtbl->GetGamma(This)
+#define IDWriteRenderingParams3_GetEnhancedContrast(This) (This)->lpVtbl->GetEnhancedContrast(This)
+#define IDWriteRenderingParams3_GetClearTypeLevel(This) (This)->lpVtbl->GetClearTypeLevel(This)
+#define IDWriteRenderingParams3_GetPixelGeometry(This) (This)->lpVtbl->GetPixelGeometry(This)
+#define IDWriteRenderingParams3_GetRenderingMode(This) (This)->lpVtbl->GetRenderingMode(This)
+/*** IDWriteRenderingParams1 methods ***/
+#define IDWriteRenderingParams3_GetGrayscaleEnhancedContrast(This) (This)->lpVtbl->GetGrayscaleEnhancedContrast(This)
+/*** IDWriteRenderingParams2 methods ***/
+#define IDWriteRenderingParams3_GetGridFitMode(This) (This)->lpVtbl->GetGridFitMode(This)
+/*** IDWriteRenderingParams3 methods ***/
+#define IDWriteRenderingParams3_GetRenderingMode1(This) (This)->lpVtbl->GetRenderingMode1(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteRenderingParams3_QueryInterface(IDWriteRenderingParams3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams3_AddRef(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteRenderingParams3_Release(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteRenderingParams methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams3_GetGamma(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetGamma(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams3_GetEnhancedContrast(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetEnhancedContrast(This);
+}
+static FORCEINLINE FLOAT IDWriteRenderingParams3_GetClearTypeLevel(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetClearTypeLevel(This);
+}
+static FORCEINLINE DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams3_GetPixelGeometry(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetPixelGeometry(This);
+}
+static FORCEINLINE DWRITE_RENDERING_MODE IDWriteRenderingParams3_GetRenderingMode(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetRenderingMode(This);
+}
+/*** IDWriteRenderingParams1 methods ***/
+static FORCEINLINE FLOAT IDWriteRenderingParams3_GetGrayscaleEnhancedContrast(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetGrayscaleEnhancedContrast(This);
+}
+/*** IDWriteRenderingParams2 methods ***/
+static FORCEINLINE DWRITE_GRID_FIT_MODE IDWriteRenderingParams3_GetGridFitMode(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetGridFitMode(This);
+}
+/*** IDWriteRenderingParams3 methods ***/
+static FORCEINLINE DWRITE_RENDERING_MODE1 IDWriteRenderingParams3_GetRenderingMode1(IDWriteRenderingParams3* This) {
+    return This->lpVtbl->GetRenderingMode1(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteRenderingParams3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteStringList interface
+ */
+#ifndef __IDWriteStringList_INTERFACE_DEFINED__
+#define __IDWriteStringList_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteStringList, 0xcfee3140, 0x1257, 0x47ca, 0x8b,0x85, 0x31,0xbf,0xcf,0x3f,0x2d,0x0e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("cfee3140-1257-47ca-8b85-31bfcf3f2d0e")
+IDWriteStringList : public IUnknown
+{
+    virtual UINT32 STDMETHODCALLTYPE GetCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleNameLength(
+        UINT32 index,
+        UINT32 *length) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocaleName(
+        UINT32 index,
+        WCHAR *name,
+        UINT32 size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStringLength(
+        UINT32 index,
+        UINT32 *length) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetString(
+        UINT32 index,
+        WCHAR *string,
+        UINT32 size) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteStringList, 0xcfee3140, 0x1257, 0x47ca, 0x8b,0x85, 0x31,0xbf,0xcf,0x3f,0x2d,0x0e)
+#endif
+#else
+typedef struct IDWriteStringListVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteStringList *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteStringList *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteStringList *This);
+
+    /*** IDWriteStringList methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetCount)(
+        IDWriteStringList *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteStringList *This,
+        UINT32 index,
+        UINT32 *length);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteStringList *This,
+        UINT32 index,
+        WCHAR *name,
+        UINT32 size);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
+        IDWriteStringList *This,
+        UINT32 index,
+        UINT32 *length);
+
+    HRESULT (STDMETHODCALLTYPE *GetString)(
+        IDWriteStringList *This,
+        UINT32 index,
+        WCHAR *string,
+        UINT32 size);
+
+    END_INTERFACE
+} IDWriteStringListVtbl;
+
+interface IDWriteStringList {
+    CONST_VTBL IDWriteStringListVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteStringList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteStringList_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteStringList_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteStringList methods ***/
+#define IDWriteStringList_GetCount(This) (This)->lpVtbl->GetCount(This)
+#define IDWriteStringList_GetLocaleNameLength(This,index,length) (This)->lpVtbl->GetLocaleNameLength(This,index,length)
+#define IDWriteStringList_GetLocaleName(This,index,name,size) (This)->lpVtbl->GetLocaleName(This,index,name,size)
+#define IDWriteStringList_GetStringLength(This,index,length) (This)->lpVtbl->GetStringLength(This,index,length)
+#define IDWriteStringList_GetString(This,index,string,size) (This)->lpVtbl->GetString(This,index,string,size)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteStringList_QueryInterface(IDWriteStringList* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteStringList_AddRef(IDWriteStringList* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteStringList_Release(IDWriteStringList* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteStringList methods ***/
+static FORCEINLINE UINT32 IDWriteStringList_GetCount(IDWriteStringList* This) {
+    return This->lpVtbl->GetCount(This);
+}
+static FORCEINLINE HRESULT IDWriteStringList_GetLocaleNameLength(IDWriteStringList* This,UINT32 index,UINT32 *length) {
+    return This->lpVtbl->GetLocaleNameLength(This,index,length);
+}
+static FORCEINLINE HRESULT IDWriteStringList_GetLocaleName(IDWriteStringList* This,UINT32 index,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetLocaleName(This,index,name,size);
+}
+static FORCEINLINE HRESULT IDWriteStringList_GetStringLength(IDWriteStringList* This,UINT32 index,UINT32 *length) {
+    return This->lpVtbl->GetStringLength(This,index,length);
+}
+static FORCEINLINE HRESULT IDWriteStringList_GetString(IDWriteStringList* This,UINT32 index,WCHAR *string,UINT32 size) {
+    return This->lpVtbl->GetString(This,index,string,size);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteStringList_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSet interface
+ */
+#ifndef __IDWriteFontSet_INTERFACE_DEFINED__
+#define __IDWriteFontSet_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSet, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("53585141-d9f8-4095-8321-d73cf6bd116b")
+IDWriteFontSet : public IUnknown
+{
+    virtual UINT32 STDMETHODCALLTYPE GetFontCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
+        UINT32 index,
+        IDWriteFontFaceReference **reference) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindFontFaceReference(
+        IDWriteFontFaceReference *reference,
+        UINT32 *index,
+        WINBOOL *exists) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindFontFace(
+        IDWriteFontFace *fontface,
+        UINT32 *index,
+        WINBOOL *exists) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyValues__(
+        DWRITE_FONT_PROPERTY_ID id,
+        IDWriteStringList **values) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyValues_(
+        DWRITE_FONT_PROPERTY_ID id,
+        const WCHAR *preferred_locales,
+        IDWriteStringList **values) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyValues(
+        UINT32 index,
+        DWRITE_FONT_PROPERTY_ID id,
+        WINBOOL *exists,
+        IDWriteLocalizedStrings **values) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyOccurrenceCount(
+        const DWRITE_FONT_PROPERTY *property,
+        UINT32 *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts_(
+        const WCHAR *family,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontSet **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts(
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 count,
+        IDWriteFontSet **fontset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSet, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6b)
+#endif
+#else
+typedef struct IDWriteFontSetVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSet *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSet *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSet *This);
+
+    /*** IDWriteFontSet methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontSet *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontSet *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFaceReference)(
+        IDWriteFontSet *This,
+        IDWriteFontFaceReference *reference,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFace)(
+        IDWriteFontSet *This,
+        IDWriteFontFace *fontface,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues__)(
+        IDWriteFontSet *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues_)(
+        IDWriteFontSet *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        const WCHAR *preferred_locales,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues)(
+        IDWriteFontSet *This,
+        UINT32 index,
+        DWRITE_FONT_PROPERTY_ID id,
+        WINBOOL *exists,
+        IDWriteLocalizedStrings **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyOccurrenceCount)(
+        IDWriteFontSet *This,
+        const DWRITE_FONT_PROPERTY *property,
+        UINT32 *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts_)(
+        IDWriteFontSet *This,
+        const WCHAR *family,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontSet *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 count,
+        IDWriteFontSet **fontset);
+
+    END_INTERFACE
+} IDWriteFontSetVtbl;
+
+interface IDWriteFontSet {
+    CONST_VTBL IDWriteFontSetVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSet_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSet_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSet methods ***/
+#define IDWriteFontSet_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+#define IDWriteFontSet_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
+#define IDWriteFontSet_FindFontFaceReference(This,reference,index,exists) (This)->lpVtbl->FindFontFaceReference(This,reference,index,exists)
+#define IDWriteFontSet_FindFontFace(This,fontface,index,exists) (This)->lpVtbl->FindFontFace(This,fontface,index,exists)
+#define IDWriteFontSet_GetPropertyValues__(This,id,values) (This)->lpVtbl->GetPropertyValues__(This,id,values)
+#define IDWriteFontSet_GetPropertyValues_(This,id,preferred_locales,values) (This)->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values)
+#define IDWriteFontSet_GetPropertyValues(This,index,id,exists,values) (This)->lpVtbl->GetPropertyValues(This,index,id,exists,values)
+#define IDWriteFontSet_GetPropertyOccurrenceCount(This,property,count) (This)->lpVtbl->GetPropertyOccurrenceCount(This,property,count)
+#define IDWriteFontSet_GetMatchingFonts_(This,family,weight,stretch,style,fontset) (This)->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset)
+#define IDWriteFontSet_GetMatchingFonts(This,props,count,fontset) (This)->lpVtbl->GetMatchingFonts(This,props,count,fontset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet_QueryInterface(IDWriteFontSet* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSet_AddRef(IDWriteFontSet* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSet_Release(IDWriteFontSet* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSet methods ***/
+static FORCEINLINE UINT32 IDWriteFontSet_GetFontCount(IDWriteFontSet* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetFontFaceReference(IDWriteFontSet* This,UINT32 index,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,index,reference);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_FindFontFaceReference(IDWriteFontSet* This,IDWriteFontFaceReference *reference,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFaceReference(This,reference,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_FindFontFace(IDWriteFontSet* This,IDWriteFontFace *fontface,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFace(This,fontface,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyValues__(IDWriteFontSet* This,DWRITE_FONT_PROPERTY_ID id,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues__(This,id,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyValues_(IDWriteFontSet* This,DWRITE_FONT_PROPERTY_ID id,const WCHAR *preferred_locales,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyValues(IDWriteFontSet* This,UINT32 index,DWRITE_FONT_PROPERTY_ID id,WINBOOL *exists,IDWriteLocalizedStrings **values) {
+    return This->lpVtbl->GetPropertyValues(This,index,id,exists,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyOccurrenceCount(IDWriteFontSet* This,const DWRITE_FONT_PROPERTY *property,UINT32 *count) {
+    return This->lpVtbl->GetPropertyOccurrenceCount(This,property,count);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetMatchingFonts_(IDWriteFontSet* This,const WCHAR *family,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet_GetMatchingFonts(IDWriteFontSet* This,const DWRITE_FONT_PROPERTY *props,UINT32 count,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetMatchingFonts(This,props,count,fontset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSet_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontResource interface
+ */
+#ifndef __IDWriteFontResource_INTERFACE_DEFINED__
+#define __IDWriteFontResource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontResource, 0x1f803a76, 0x6871, 0x48e8, 0x98,0x7f, 0xb9,0x75,0x55,0x1c,0x50,0xf2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("1f803a76-6871-48e8-987f-b975551c50f2")
+IDWriteFontResource : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontFile(
+        IDWriteFontFile **fontfile) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontFaceIndex(
+        ) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontAxisCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDefaultFontAxisValues(
+        const DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisRanges(
+        const DWRITE_FONT_AXIS_RANGE *ranges,
+        UINT32 num_ranges) = 0;
+
+    virtual DWRITE_FONT_AXIS_ATTRIBUTES STDMETHODCALLTYPE GetFontAxisAttributes(
+        UINT32 axis) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAxisNames(
+        UINT32 axis,
+        IDWriteLocalizedStrings **names) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetAxisValueNameCount(
+        UINT32 axis) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAxisValueNames(
+        UINT32 axis,
+        UINT32 axis_value,
+        DWRITE_FONT_AXIS_RANGE *axis_range,
+        IDWriteLocalizedStrings **names) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE HasVariations(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontFace5 **fontface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceReference(
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontFaceReference1 **reference) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontResource, 0x1f803a76, 0x6871, 0x48e8, 0x98,0x7f, 0xb9,0x75,0x55,0x1c,0x50,0xf2)
+#endif
+#else
+typedef struct IDWriteFontResourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontResource *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontResource *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontResource *This);
+
+    /*** IDWriteFontResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFile)(
+        IDWriteFontResource *This,
+        IDWriteFontFile **fontfile);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFaceIndex)(
+        IDWriteFontResource *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontAxisCount)(
+        IDWriteFontResource *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDefaultFontAxisValues)(
+        IDWriteFontResource *This,
+        const DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges)(
+        IDWriteFontResource *This,
+        const DWRITE_FONT_AXIS_RANGE *ranges,
+        UINT32 num_ranges);
+
+    DWRITE_FONT_AXIS_ATTRIBUTES (STDMETHODCALLTYPE *GetFontAxisAttributes)(
+        IDWriteFontResource *This,
+        UINT32 axis);
+
+    HRESULT (STDMETHODCALLTYPE *GetAxisNames)(
+        IDWriteFontResource *This,
+        UINT32 axis,
+        IDWriteLocalizedStrings **names);
+
+    UINT32 (STDMETHODCALLTYPE *GetAxisValueNameCount)(
+        IDWriteFontResource *This,
+        UINT32 axis);
+
+    HRESULT (STDMETHODCALLTYPE *GetAxisValueNames)(
+        IDWriteFontResource *This,
+        UINT32 axis,
+        UINT32 axis_value,
+        DWRITE_FONT_AXIS_RANGE *axis_range,
+        IDWriteLocalizedStrings **names);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVariations)(
+        IDWriteFontResource *This);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFontResource *This,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontFace5 **fontface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
+        IDWriteFontResource *This,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontFaceReference1 **reference);
+
+    END_INTERFACE
+} IDWriteFontResourceVtbl;
+
+interface IDWriteFontResource {
+    CONST_VTBL IDWriteFontResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontResource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontResource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontResource_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontResource methods ***/
+#define IDWriteFontResource_GetFontFile(This,fontfile) (This)->lpVtbl->GetFontFile(This,fontfile)
+#define IDWriteFontResource_GetFontFaceIndex(This) (This)->lpVtbl->GetFontFaceIndex(This)
+#define IDWriteFontResource_GetFontAxisCount(This) (This)->lpVtbl->GetFontAxisCount(This)
+#define IDWriteFontResource_GetDefaultFontAxisValues(This,values,num_values) (This)->lpVtbl->GetDefaultFontAxisValues(This,values,num_values)
+#define IDWriteFontResource_GetFontAxisRanges(This,ranges,num_ranges) (This)->lpVtbl->GetFontAxisRanges(This,ranges,num_ranges)
+#define IDWriteFontResource_GetFontAxisAttributes(This,axis) (This)->lpVtbl->GetFontAxisAttributes(This,axis)
+#define IDWriteFontResource_GetAxisNames(This,axis,names) (This)->lpVtbl->GetAxisNames(This,axis,names)
+#define IDWriteFontResource_GetAxisValueNameCount(This,axis) (This)->lpVtbl->GetAxisValueNameCount(This,axis)
+#define IDWriteFontResource_GetAxisValueNames(This,axis,axis_value,axis_range,names) (This)->lpVtbl->GetAxisValueNames(This,axis,axis_value,axis_range,names)
+#define IDWriteFontResource_HasVariations(This) (This)->lpVtbl->HasVariations(This)
+#define IDWriteFontResource_CreateFontFace(This,simulations,axis_values,num_values,fontface) (This)->lpVtbl->CreateFontFace(This,simulations,axis_values,num_values,fontface)
+#define IDWriteFontResource_CreateFontFaceReference(This,simulations,axis_values,num_values,reference) (This)->lpVtbl->CreateFontFaceReference(This,simulations,axis_values,num_values,reference)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontResource_QueryInterface(IDWriteFontResource* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontResource_AddRef(IDWriteFontResource* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontResource_Release(IDWriteFontResource* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontResource methods ***/
+static FORCEINLINE HRESULT IDWriteFontResource_GetFontFile(IDWriteFontResource* This,IDWriteFontFile **fontfile) {
+    return This->lpVtbl->GetFontFile(This,fontfile);
+}
+static FORCEINLINE UINT32 IDWriteFontResource_GetFontFaceIndex(IDWriteFontResource* This) {
+    return This->lpVtbl->GetFontFaceIndex(This);
+}
+static FORCEINLINE UINT32 IDWriteFontResource_GetFontAxisCount(IDWriteFontResource* This) {
+    return This->lpVtbl->GetFontAxisCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontResource_GetDefaultFontAxisValues(IDWriteFontResource* This,const DWRITE_FONT_AXIS_VALUE *values,UINT32 num_values) {
+    return This->lpVtbl->GetDefaultFontAxisValues(This,values,num_values);
+}
+static FORCEINLINE HRESULT IDWriteFontResource_GetFontAxisRanges(IDWriteFontResource* This,const DWRITE_FONT_AXIS_RANGE *ranges,UINT32 num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges(This,ranges,num_ranges);
+}
+static FORCEINLINE DWRITE_FONT_AXIS_ATTRIBUTES IDWriteFontResource_GetFontAxisAttributes(IDWriteFontResource* This,UINT32 axis) {
+    return This->lpVtbl->GetFontAxisAttributes(This,axis);
+}
+static FORCEINLINE HRESULT IDWriteFontResource_GetAxisNames(IDWriteFontResource* This,UINT32 axis,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetAxisNames(This,axis,names);
+}
+static FORCEINLINE UINT32 IDWriteFontResource_GetAxisValueNameCount(IDWriteFontResource* This,UINT32 axis) {
+    return This->lpVtbl->GetAxisValueNameCount(This,axis);
+}
+static FORCEINLINE HRESULT IDWriteFontResource_GetAxisValueNames(IDWriteFontResource* This,UINT32 axis,UINT32 axis_value,DWRITE_FONT_AXIS_RANGE *axis_range,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetAxisValueNames(This,axis,axis_value,axis_range,names);
+}
+static FORCEINLINE WINBOOL IDWriteFontResource_HasVariations(IDWriteFontResource* This) {
+    return This->lpVtbl->HasVariations(This);
+}
+static FORCEINLINE HRESULT IDWriteFontResource_CreateFontFace(IDWriteFontResource* This,DWRITE_FONT_SIMULATIONS simulations,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontFace5 **fontface) {
+    return This->lpVtbl->CreateFontFace(This,simulations,axis_values,num_values,fontface);
+}
+static FORCEINLINE HRESULT IDWriteFontResource_CreateFontFaceReference(IDWriteFontResource* This,DWRITE_FONT_SIMULATIONS simulations,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontFaceReference1 **reference) {
+    return This->lpVtbl->CreateFontFaceReference(This,simulations,axis_values,num_values,reference);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontResource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSet1 interface
+ */
+#ifndef __IDWriteFontSet1_INTERFACE_DEFINED__
+#define __IDWriteFontSet1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSet1, 0x7e9fda85, 0x6c92, 0x4053, 0xbc,0x47, 0x7a,0xe3,0x53,0x0d,0xb4,0xd3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7e9fda85-6c92-4053-bc47-7ae3530db4d3")
+IDWriteFontSet1 : public IDWriteFontSet
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts(
+        const DWRITE_FONT_PROPERTY *property,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontSet1 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFirstFontResources(
+        IDWriteFontSet1 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFilteredFonts__(
+        const UINT32 *indices,
+        UINT32 num_indices,
+        IDWriteFontSet1 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFilteredFonts_(
+        const DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        IDWriteFontSet1 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFilteredFonts(
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_property,
+        IDWriteFontSet1 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFilteredFontIndices_(
+        const DWRITE_FONT_AXIS_RANGE *ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFilteredFontIndices(
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisRanges_(
+        UINT32 font_index,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisRanges(
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
+        UINT32 index,
+        IDWriteFontFaceReference1 **reference) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontResource(
+        UINT32 index,
+        IDWriteFontResource **resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        UINT32 index,
+        IDWriteFontFace5 **fontface) = 0;
+
+    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetFontLocality(
+        UINT32 index) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSet1, 0x7e9fda85, 0x6c92, 0x4053, 0xbc,0x47, 0x7a,0xe3,0x53,0x0d,0xb4,0xd3)
+#endif
+#else
+typedef struct IDWriteFontSet1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSet1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSet1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSet1 *This);
+
+    /*** IDWriteFontSet methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontSet1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontSet1 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFaceReference)(
+        IDWriteFontSet1 *This,
+        IDWriteFontFaceReference *reference,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFace)(
+        IDWriteFontSet1 *This,
+        IDWriteFontFace *fontface,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues__)(
+        IDWriteFontSet1 *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues_)(
+        IDWriteFontSet1 *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        const WCHAR *preferred_locales,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues)(
+        IDWriteFontSet1 *This,
+        UINT32 index,
+        DWRITE_FONT_PROPERTY_ID id,
+        WINBOOL *exists,
+        IDWriteLocalizedStrings **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyOccurrenceCount)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_PROPERTY *property,
+        UINT32 *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts_)(
+        IDWriteFontSet1 *This,
+        const WCHAR *family,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 count,
+        IDWriteFontSet **fontset);
+
+    /*** IDWriteFontSet1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSet1_GetMatchingFonts)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_PROPERTY *property,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstFontResources)(
+        IDWriteFontSet1 *This,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts__)(
+        IDWriteFontSet1 *This,
+        const UINT32 *indices,
+        UINT32 num_indices,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts_)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_property,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFontIndices_)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_AXIS_RANGE *ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFontIndices)(
+        IDWriteFontSet1 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges_)(
+        IDWriteFontSet1 *This,
+        UINT32 font_index,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges)(
+        IDWriteFontSet1 *This,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSet1_GetFontFaceReference)(
+        IDWriteFontSet1 *This,
+        UINT32 index,
+        IDWriteFontFaceReference1 **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontResource)(
+        IDWriteFontSet1 *This,
+        UINT32 index,
+        IDWriteFontResource **resource);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFontSet1 *This,
+        UINT32 index,
+        IDWriteFontFace5 **fontface);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontSet1 *This,
+        UINT32 index);
+
+    END_INTERFACE
+} IDWriteFontSet1Vtbl;
+
+interface IDWriteFontSet1 {
+    CONST_VTBL IDWriteFontSet1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSet1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSet1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSet1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSet methods ***/
+#define IDWriteFontSet1_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+#define IDWriteFontSet1_FindFontFaceReference(This,reference,index,exists) (This)->lpVtbl->FindFontFaceReference(This,reference,index,exists)
+#define IDWriteFontSet1_FindFontFace(This,fontface,index,exists) (This)->lpVtbl->FindFontFace(This,fontface,index,exists)
+#define IDWriteFontSet1_GetPropertyValues__(This,id,values) (This)->lpVtbl->GetPropertyValues__(This,id,values)
+#define IDWriteFontSet1_GetPropertyValues_(This,id,preferred_locales,values) (This)->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values)
+#define IDWriteFontSet1_GetPropertyValues(This,index,id,exists,values) (This)->lpVtbl->GetPropertyValues(This,index,id,exists,values)
+#define IDWriteFontSet1_GetPropertyOccurrenceCount(This,property,count) (This)->lpVtbl->GetPropertyOccurrenceCount(This,property,count)
+#define IDWriteFontSet1_GetMatchingFonts_(This,family,weight,stretch,style,fontset) (This)->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset)
+/*** IDWriteFontSet1 methods ***/
+#define IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset) (This)->lpVtbl->IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset)
+#define IDWriteFontSet1_GetFirstFontResources(This,fontset) (This)->lpVtbl->GetFirstFontResources(This,fontset)
+#define IDWriteFontSet1_GetFilteredFonts__(This,indices,num_indices,fontset) (This)->lpVtbl->GetFilteredFonts__(This,indices,num_indices,fontset)
+#define IDWriteFontSet1_GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset) (This)->lpVtbl->GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset)
+#define IDWriteFontSet1_GetFilteredFonts(This,props,num_properties,select_any_property,fontset) (This)->lpVtbl->GetFilteredFonts(This,props,num_properties,select_any_property,fontset)
+#define IDWriteFontSet1_GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices) (This)->lpVtbl->GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices)
+#define IDWriteFontSet1_GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices) (This)->lpVtbl->GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices)
+#define IDWriteFontSet1_GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges) (This)->lpVtbl->GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges)
+#define IDWriteFontSet1_GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges) (This)->lpVtbl->GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges)
+#define IDWriteFontSet1_GetFontFaceReference(This,index,reference) (This)->lpVtbl->IDWriteFontSet1_GetFontFaceReference(This,index,reference)
+#define IDWriteFontSet1_CreateFontResource(This,index,resource) (This)->lpVtbl->CreateFontResource(This,index,resource)
+#define IDWriteFontSet1_CreateFontFace(This,index,fontface) (This)->lpVtbl->CreateFontFace(This,index,fontface)
+#define IDWriteFontSet1_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet1_QueryInterface(IDWriteFontSet1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSet1_AddRef(IDWriteFontSet1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSet1_Release(IDWriteFontSet1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSet methods ***/
+static FORCEINLINE UINT32 IDWriteFontSet1_GetFontCount(IDWriteFontSet1* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_FindFontFaceReference(IDWriteFontSet1* This,IDWriteFontFaceReference *reference,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFaceReference(This,reference,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_FindFontFace(IDWriteFontSet1* This,IDWriteFontFace *fontface,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFace(This,fontface,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetPropertyValues__(IDWriteFontSet1* This,DWRITE_FONT_PROPERTY_ID id,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues__(This,id,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetPropertyValues_(IDWriteFontSet1* This,DWRITE_FONT_PROPERTY_ID id,const WCHAR *preferred_locales,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetPropertyValues(IDWriteFontSet1* This,UINT32 index,DWRITE_FONT_PROPERTY_ID id,WINBOOL *exists,IDWriteLocalizedStrings **values) {
+    return This->lpVtbl->GetPropertyValues(This,index,id,exists,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetPropertyOccurrenceCount(IDWriteFontSet1* This,const DWRITE_FONT_PROPERTY *property,UINT32 *count) {
+    return This->lpVtbl->GetPropertyOccurrenceCount(This,property,count);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetMatchingFonts_(IDWriteFontSet1* This,const WCHAR *family,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset);
+}
+/*** IDWriteFontSet1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet1_GetMatchingFonts(IDWriteFontSet1* This,const DWRITE_FONT_PROPERTY *property,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFirstFontResources(IDWriteFontSet1* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFirstFontResources(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFilteredFonts__(IDWriteFontSet1* This,const UINT32 *indices,UINT32 num_indices,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts__(This,indices,num_indices,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFilteredFonts_(IDWriteFontSet1* This,const DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,WINBOOL select_any_range,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFilteredFonts(IDWriteFontSet1* This,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties,WINBOOL select_any_property,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts(This,props,num_properties,select_any_property,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFilteredFontIndices_(IDWriteFontSet1* This,const DWRITE_FONT_AXIS_RANGE *ranges,UINT32 num_ranges,WINBOOL select_any_range,UINT32 *indices,UINT32 num_indices,UINT32 *actual_num_indices) {
+    return This->lpVtbl->GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFilteredFontIndices(IDWriteFontSet1* This,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties,WINBOOL select_any_range,UINT32 *indices,UINT32 num_indices,UINT32 *actual_num_indices) {
+    return This->lpVtbl->GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFontAxisRanges_(IDWriteFontSet1* This,UINT32 font_index,DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,UINT32 *actual_num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFontAxisRanges(IDWriteFontSet1* This,DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,UINT32 *actual_num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_GetFontFaceReference(IDWriteFontSet1* This,UINT32 index,IDWriteFontFaceReference1 **reference) {
+    return This->lpVtbl->IDWriteFontSet1_GetFontFaceReference(This,index,reference);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_CreateFontResource(IDWriteFontSet1* This,UINT32 index,IDWriteFontResource **resource) {
+    return This->lpVtbl->CreateFontResource(This,index,resource);
+}
+static FORCEINLINE HRESULT IDWriteFontSet1_CreateFontFace(IDWriteFontSet1* This,UINT32 index,IDWriteFontFace5 **fontface) {
+    return This->lpVtbl->CreateFontFace(This,index,fontface);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontSet1_GetFontLocality(IDWriteFontSet1* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSet1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFont3 interface
+ */
+#ifndef __IDWriteFont3_INTERFACE_DEFINED__
+#define __IDWriteFont3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFont3, 0x29748ed6, 0x8c9c, 0x4a6a, 0xbe,0x0b, 0xd9,0x12,0xe8,0x53,0x89,0x44);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("29748ed6-8c9c-4a6a-be0b-d912e8538944")
+IDWriteFont3 : public IDWriteFont2
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        IDWriteFontFace3 **fontface) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE Equals(
+        IDWriteFont *font) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
+        IDWriteFontFaceReference **reference) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE HasCharacter(
+        UINT32 character) = 0;
+
+    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetLocality(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFont3, 0x29748ed6, 0x8c9c, 0x4a6a, 0xbe,0x0b, 0xd9,0x12,0xe8,0x53,0x89,0x44)
+#endif
+#else
+typedef struct IDWriteFont3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFont3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFont3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFont3 *This);
+
+    /*** IDWriteFont methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFont3 *This,
+        IDWriteFontFamily **family);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFont3 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFont3 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFont3 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFont3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFont3 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFont3 *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFont3 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFont3 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFont3 *This,
+        UINT32 value,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFont3 *This,
+        IDWriteFontFace **face);
+
+    /*** IDWriteFont1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFont1_GetMetrics)(
+        IDWriteFont3 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetPanose)(
+        IDWriteFont3 *This,
+        DWRITE_PANOSE *panose);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFont3 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFont3 *This);
+
+    /*** IDWriteFont2 methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsColorFont)(
+        IDWriteFont3 *This);
+
+    /*** IDWriteFont3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFont3_CreateFontFace)(
+        IDWriteFont3 *This,
+        IDWriteFontFace3 **fontface);
+
+    WINBOOL (STDMETHODCALLTYPE *Equals)(
+        IDWriteFont3 *This,
+        IDWriteFont *font);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFont3 *This,
+        IDWriteFontFaceReference **reference);
+
+    WINBOOL (STDMETHODCALLTYPE *IDWriteFont3_HasCharacter)(
+        IDWriteFont3 *This,
+        UINT32 character);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetLocality)(
+        IDWriteFont3 *This);
+
+    END_INTERFACE
+} IDWriteFont3Vtbl;
+
+interface IDWriteFont3 {
+    CONST_VTBL IDWriteFont3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFont3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFont3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFont3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFont methods ***/
+#define IDWriteFont3_GetFontFamily(This,family) (This)->lpVtbl->GetFontFamily(This,family)
+#define IDWriteFont3_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFont3_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFont3_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFont3_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFont3_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFont3_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFont3_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+/*** IDWriteFont1 methods ***/
+#define IDWriteFont3_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFont1_GetMetrics(This,metrics)
+#define IDWriteFont3_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
+#define IDWriteFont3_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFont3_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+/*** IDWriteFont2 methods ***/
+#define IDWriteFont3_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
+/*** IDWriteFont3 methods ***/
+#define IDWriteFont3_CreateFontFace(This,fontface) (This)->lpVtbl->IDWriteFont3_CreateFontFace(This,fontface)
+#define IDWriteFont3_Equals(This,font) (This)->lpVtbl->Equals(This,font)
+#define IDWriteFont3_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
+#define IDWriteFont3_HasCharacter(This,character) (This)->lpVtbl->IDWriteFont3_HasCharacter(This,character)
+#define IDWriteFont3_GetLocality(This) (This)->lpVtbl->GetLocality(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFont3_QueryInterface(IDWriteFont3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFont3_AddRef(IDWriteFont3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFont3_Release(IDWriteFont3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFont methods ***/
+static FORCEINLINE HRESULT IDWriteFont3_GetFontFamily(IDWriteFont3* This,IDWriteFontFamily **family) {
+    return This->lpVtbl->GetFontFamily(This,family);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFont3_GetWeight(IDWriteFont3* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFont3_GetStretch(IDWriteFont3* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFont3_GetStyle(IDWriteFont3* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE WINBOOL IDWriteFont3_IsSymbolFont(IDWriteFont3* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFont3_GetFaceNames(IDWriteFont3* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFont3_GetInformationalStrings(IDWriteFont3* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFont3_GetSimulations(IDWriteFont3* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+/*** IDWriteFont1 methods ***/
+static FORCEINLINE void IDWriteFont3_GetMetrics(IDWriteFont3* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFont1_GetMetrics(This,metrics);
+}
+static FORCEINLINE void IDWriteFont3_GetPanose(IDWriteFont3* This,DWRITE_PANOSE *panose) {
+    This->lpVtbl->GetPanose(This,panose);
+}
+static FORCEINLINE HRESULT IDWriteFont3_GetUnicodeRanges(IDWriteFont3* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFont3_IsMonospacedFont(IDWriteFont3* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+/*** IDWriteFont2 methods ***/
+static FORCEINLINE WINBOOL IDWriteFont3_IsColorFont(IDWriteFont3* This) {
+    return This->lpVtbl->IsColorFont(This);
+}
+/*** IDWriteFont3 methods ***/
+static FORCEINLINE HRESULT IDWriteFont3_CreateFontFace(IDWriteFont3* This,IDWriteFontFace3 **fontface) {
+    return This->lpVtbl->IDWriteFont3_CreateFontFace(This,fontface);
+}
+static FORCEINLINE WINBOOL IDWriteFont3_Equals(IDWriteFont3* This,IDWriteFont *font) {
+    return This->lpVtbl->Equals(This,font);
+}
+static FORCEINLINE HRESULT IDWriteFont3_GetFontFaceReference(IDWriteFont3* This,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,reference);
+}
+static FORCEINLINE WINBOOL IDWriteFont3_HasCharacter(IDWriteFont3* This,UINT32 character) {
+    return This->lpVtbl->IDWriteFont3_HasCharacter(This,character);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteFont3_GetLocality(IDWriteFont3* This) {
+    return This->lpVtbl->GetLocality(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFont3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFamily1 interface
+ */
+#ifndef __IDWriteFontFamily1_INTERFACE_DEFINED__
+#define __IDWriteFontFamily1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFamily1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xdf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("da20d8ef-812a-4c43-9802-62ec4abd7adf")
+IDWriteFontFamily1 : public IDWriteFontFamily
+{
+    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetFontLocality(
+        UINT32 index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFont(
+        UINT32 index,
+        IDWriteFont3 **font) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
+        UINT32 index,
+        IDWriteFontFaceReference **reference) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFamily1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xdf)
+#endif
+#else
+typedef struct IDWriteFontFamily1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFamily1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFamily1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFamily1 *This);
+
+    /*** IDWriteFontList methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteFontFamily1 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontFamily1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFont)(
+        IDWriteFontFamily1 *This,
+        UINT32 index,
+        IDWriteFont **font);
+
+    /*** IDWriteFontFamily methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
+        IDWriteFontFamily1 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstMatchingFont)(
+        IDWriteFontFamily1 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFont **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontFamily1 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontList **fonts);
+
+    /*** IDWriteFontFamily1 methods ***/
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontFamily1 *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFamily1_GetFont)(
+        IDWriteFontFamily1 *This,
+        UINT32 index,
+        IDWriteFont3 **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontFamily1 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    END_INTERFACE
+} IDWriteFontFamily1Vtbl;
+
+interface IDWriteFontFamily1 {
+    CONST_VTBL IDWriteFontFamily1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFamily1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFamily1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFamily1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontList methods ***/
+#define IDWriteFontFamily1_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteFontFamily1_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+/*** IDWriteFontFamily methods ***/
+#define IDWriteFontFamily1_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
+#define IDWriteFontFamily1_GetFirstMatchingFont(This,weight,stretch,style,font) (This)->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font)
+#define IDWriteFontFamily1_GetMatchingFonts(This,weight,stretch,style,fonts) (This)->lpVtbl->GetMatchingFonts(This,weight,stretch,style,fonts)
+/*** IDWriteFontFamily1 methods ***/
+#define IDWriteFontFamily1_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+#define IDWriteFontFamily1_GetFont(This,index,font) (This)->lpVtbl->IDWriteFontFamily1_GetFont(This,index,font)
+#define IDWriteFontFamily1_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily1_QueryInterface(IDWriteFontFamily1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFamily1_AddRef(IDWriteFontFamily1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFamily1_Release(IDWriteFontFamily1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontList methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily1_GetFontCollection(IDWriteFontFamily1* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteFontFamily1_GetFontCount(IDWriteFontFamily1* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+/*** IDWriteFontFamily methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily1_GetFamilyNames(IDWriteFontFamily1* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFamilyNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily1_GetFirstMatchingFont(IDWriteFontFamily1* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFont **font) {
+    return This->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily1_GetMatchingFonts(IDWriteFontFamily1* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontList **fonts) {
+    return This->lpVtbl->GetMatchingFonts(This,weight,stretch,style,fonts);
+}
+/*** IDWriteFontFamily1 methods ***/
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontFamily1_GetFontLocality(IDWriteFontFamily1* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily1_GetFont(IDWriteFontFamily1* This,UINT32 index,IDWriteFont3 **font) {
+    return This->lpVtbl->IDWriteFontFamily1_GetFont(This,index,font);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily1_GetFontFaceReference(IDWriteFontFamily1* This,UINT32 index,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,index,reference);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFamily1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFamily2 interface
+ */
+#ifndef __IDWriteFontFamily2_INTERFACE_DEFINED__
+#define __IDWriteFontFamily2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFamily2, 0x3ed49e77, 0xa398, 0x4261, 0xb9,0xcf, 0xc1,0x26,0xc2,0x13,0x1e,0xf3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3ed49e77-a398-4261-b9cf-c126c2131ef3")
+IDWriteFontFamily2 : public IDWriteFontFamily1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts(
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontSet(
+        IDWriteFontSet1 **fontset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFamily2, 0x3ed49e77, 0xa398, 0x4261, 0xb9,0xcf, 0xc1,0x26,0xc2,0x13,0x1e,0xf3)
+#endif
+#else
+typedef struct IDWriteFontFamily2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFamily2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFamily2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFamily2 *This);
+
+    /*** IDWriteFontList methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteFontFamily2 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontFamily2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFont)(
+        IDWriteFontFamily2 *This,
+        UINT32 index,
+        IDWriteFont **font);
+
+    /*** IDWriteFontFamily methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
+        IDWriteFontFamily2 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstMatchingFont)(
+        IDWriteFontFamily2 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFont **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontFamily2 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontList **fonts);
+
+    /*** IDWriteFontFamily1 methods ***/
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontFamily2 *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFamily1_GetFont)(
+        IDWriteFontFamily2 *This,
+        UINT32 index,
+        IDWriteFont3 **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontFamily2 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    /*** IDWriteFontFamily2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFamily2_GetMatchingFonts)(
+        IDWriteFontFamily2 *This,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontSet)(
+        IDWriteFontFamily2 *This,
+        IDWriteFontSet1 **fontset);
+
+    END_INTERFACE
+} IDWriteFontFamily2Vtbl;
+
+interface IDWriteFontFamily2 {
+    CONST_VTBL IDWriteFontFamily2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFamily2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFamily2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFamily2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontList methods ***/
+#define IDWriteFontFamily2_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteFontFamily2_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+/*** IDWriteFontFamily methods ***/
+#define IDWriteFontFamily2_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
+#define IDWriteFontFamily2_GetFirstMatchingFont(This,weight,stretch,style,font) (This)->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font)
+/*** IDWriteFontFamily1 methods ***/
+#define IDWriteFontFamily2_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+#define IDWriteFontFamily2_GetFont(This,index,font) (This)->lpVtbl->IDWriteFontFamily1_GetFont(This,index,font)
+#define IDWriteFontFamily2_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
+/*** IDWriteFontFamily2 methods ***/
+#define IDWriteFontFamily2_GetMatchingFonts(This,axis_values,num_values,fontlist) (This)->lpVtbl->IDWriteFontFamily2_GetMatchingFonts(This,axis_values,num_values,fontlist)
+#define IDWriteFontFamily2_GetFontSet(This,fontset) (This)->lpVtbl->GetFontSet(This,fontset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily2_QueryInterface(IDWriteFontFamily2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFamily2_AddRef(IDWriteFontFamily2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFamily2_Release(IDWriteFontFamily2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontList methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetFontCollection(IDWriteFontFamily2* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteFontFamily2_GetFontCount(IDWriteFontFamily2* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+/*** IDWriteFontFamily methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetFamilyNames(IDWriteFontFamily2* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFamilyNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetFirstMatchingFont(IDWriteFontFamily2* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFont **font) {
+    return This->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font);
+}
+/*** IDWriteFontFamily1 methods ***/
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontFamily2_GetFontLocality(IDWriteFontFamily2* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetFont(IDWriteFontFamily2* This,UINT32 index,IDWriteFont3 **font) {
+    return This->lpVtbl->IDWriteFontFamily1_GetFont(This,index,font);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetFontFaceReference(IDWriteFontFamily2* This,UINT32 index,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,index,reference);
+}
+/*** IDWriteFontFamily2 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetMatchingFonts(IDWriteFontFamily2* This,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontList2 **fontlist) {
+    return This->lpVtbl->IDWriteFontFamily2_GetMatchingFonts(This,axis_values,num_values,fontlist);
+}
+static FORCEINLINE HRESULT IDWriteFontFamily2_GetFontSet(IDWriteFontFamily2* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFontSet(This,fontset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFamily2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontCollection1 interface
+ */
+#ifndef __IDWriteFontCollection1_INTERFACE_DEFINED__
+#define __IDWriteFontCollection1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontCollection1, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("53585141-d9f8-4095-8321-d73cf6bd116c")
+IDWriteFontCollection1 : public IDWriteFontCollection
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontSet(
+        IDWriteFontSet **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamily(
+        UINT32 index,
+        IDWriteFontFamily1 **family) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontCollection1, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6c)
+#endif
+#else
+typedef struct IDWriteFontCollection1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontCollection1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontCollection1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontCollection1 *This);
+
+    /*** IDWriteFontCollection methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyCount)(
+        IDWriteFontCollection1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFontCollection1 *This,
+        UINT32 index,
+        IDWriteFontFamily **family);
+
+    HRESULT (STDMETHODCALLTYPE *FindFamilyName)(
+        IDWriteFontCollection1 *This,
+        const WCHAR *name,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFromFontFace)(
+        IDWriteFontCollection1 *This,
+        IDWriteFontFace *face,
+        IDWriteFont **font);
+
+    /*** IDWriteFontCollection1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontSet)(
+        IDWriteFontCollection1 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection1_GetFontFamily)(
+        IDWriteFontCollection1 *This,
+        UINT32 index,
+        IDWriteFontFamily1 **family);
+
+    END_INTERFACE
+} IDWriteFontCollection1Vtbl;
+
+interface IDWriteFontCollection1 {
+    CONST_VTBL IDWriteFontCollection1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontCollection1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontCollection1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontCollection1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontCollection methods ***/
+#define IDWriteFontCollection1_GetFontFamilyCount(This) (This)->lpVtbl->GetFontFamilyCount(This)
+#define IDWriteFontCollection1_FindFamilyName(This,name,index,exists) (This)->lpVtbl->FindFamilyName(This,name,index,exists)
+#define IDWriteFontCollection1_GetFontFromFontFace(This,face,font) (This)->lpVtbl->GetFontFromFontFace(This,face,font)
+/*** IDWriteFontCollection1 methods ***/
+#define IDWriteFontCollection1_GetFontSet(This,fontset) (This)->lpVtbl->GetFontSet(This,fontset)
+#define IDWriteFontCollection1_GetFontFamily(This,index,family) (This)->lpVtbl->IDWriteFontCollection1_GetFontFamily(This,index,family)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection1_QueryInterface(IDWriteFontCollection1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontCollection1_AddRef(IDWriteFontCollection1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontCollection1_Release(IDWriteFontCollection1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontCollection methods ***/
+static FORCEINLINE UINT32 IDWriteFontCollection1_GetFontFamilyCount(IDWriteFontCollection1* This) {
+    return This->lpVtbl->GetFontFamilyCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection1_FindFamilyName(IDWriteFontCollection1* This,const WCHAR *name,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFamilyName(This,name,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection1_GetFontFromFontFace(IDWriteFontCollection1* This,IDWriteFontFace *face,IDWriteFont **font) {
+    return This->lpVtbl->GetFontFromFontFace(This,face,font);
+}
+/*** IDWriteFontCollection1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection1_GetFontSet(IDWriteFontCollection1* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection1_GetFontFamily(IDWriteFontCollection1* This,UINT32 index,IDWriteFontFamily1 **family) {
+    return This->lpVtbl->IDWriteFontCollection1_GetFontFamily(This,index,family);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontCollection1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontCollection2 interface
+ */
+#ifndef __IDWriteFontCollection2_INTERFACE_DEFINED__
+#define __IDWriteFontCollection2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontCollection2, 0x514039c6, 0x4617, 0x4064, 0xbf,0x8b, 0x92,0xea,0x83,0xe5,0x06,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("514039c6-4617-4064-bf8b-92ea83e506e0")
+IDWriteFontCollection2 : public IDWriteFontCollection1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontFamily(
+        UINT32 index,
+        IDWriteFontFamily2 **family) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts(
+        const WCHAR *familyname,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist) = 0;
+
+    virtual DWRITE_FONT_FAMILY_MODEL STDMETHODCALLTYPE GetFontFamilyModel(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontSet(
+        IDWriteFontSet1 **fontset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontCollection2, 0x514039c6, 0x4617, 0x4064, 0xbf,0x8b, 0x92,0xea,0x83,0xe5,0x06,0xe0)
+#endif
+#else
+typedef struct IDWriteFontCollection2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontCollection2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontCollection2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontCollection2 *This);
+
+    /*** IDWriteFontCollection methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyCount)(
+        IDWriteFontCollection2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFontCollection2 *This,
+        UINT32 index,
+        IDWriteFontFamily **family);
+
+    HRESULT (STDMETHODCALLTYPE *FindFamilyName)(
+        IDWriteFontCollection2 *This,
+        const WCHAR *name,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFromFontFace)(
+        IDWriteFontCollection2 *This,
+        IDWriteFontFace *face,
+        IDWriteFont **font);
+
+    /*** IDWriteFontCollection1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontSet)(
+        IDWriteFontCollection2 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection1_GetFontFamily)(
+        IDWriteFontCollection2 *This,
+        UINT32 index,
+        IDWriteFontFamily1 **family);
+
+    /*** IDWriteFontCollection2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection2_GetFontFamily)(
+        IDWriteFontCollection2 *This,
+        UINT32 index,
+        IDWriteFontFamily2 **family);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontCollection2 *This,
+        const WCHAR *familyname,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist);
+
+    DWRITE_FONT_FAMILY_MODEL (STDMETHODCALLTYPE *GetFontFamilyModel)(
+        IDWriteFontCollection2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection2_GetFontSet)(
+        IDWriteFontCollection2 *This,
+        IDWriteFontSet1 **fontset);
+
+    END_INTERFACE
+} IDWriteFontCollection2Vtbl;
+
+interface IDWriteFontCollection2 {
+    CONST_VTBL IDWriteFontCollection2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontCollection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontCollection2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontCollection2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontCollection methods ***/
+#define IDWriteFontCollection2_GetFontFamilyCount(This) (This)->lpVtbl->GetFontFamilyCount(This)
+#define IDWriteFontCollection2_FindFamilyName(This,name,index,exists) (This)->lpVtbl->FindFamilyName(This,name,index,exists)
+#define IDWriteFontCollection2_GetFontFromFontFace(This,face,font) (This)->lpVtbl->GetFontFromFontFace(This,face,font)
+/*** IDWriteFontCollection1 methods ***/
+/*** IDWriteFontCollection2 methods ***/
+#define IDWriteFontCollection2_GetFontFamily(This,index,family) (This)->lpVtbl->IDWriteFontCollection2_GetFontFamily(This,index,family)
+#define IDWriteFontCollection2_GetMatchingFonts(This,familyname,axis_values,num_values,fontlist) (This)->lpVtbl->GetMatchingFonts(This,familyname,axis_values,num_values,fontlist)
+#define IDWriteFontCollection2_GetFontFamilyModel(This) (This)->lpVtbl->GetFontFamilyModel(This)
+#define IDWriteFontCollection2_GetFontSet(This,fontset) (This)->lpVtbl->IDWriteFontCollection2_GetFontSet(This,fontset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection2_QueryInterface(IDWriteFontCollection2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontCollection2_AddRef(IDWriteFontCollection2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontCollection2_Release(IDWriteFontCollection2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontCollection methods ***/
+static FORCEINLINE UINT32 IDWriteFontCollection2_GetFontFamilyCount(IDWriteFontCollection2* This) {
+    return This->lpVtbl->GetFontFamilyCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection2_FindFamilyName(IDWriteFontCollection2* This,const WCHAR *name,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFamilyName(This,name,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection2_GetFontFromFontFace(IDWriteFontCollection2* This,IDWriteFontFace *face,IDWriteFont **font) {
+    return This->lpVtbl->GetFontFromFontFace(This,face,font);
+}
+/*** IDWriteFontCollection1 methods ***/
+/*** IDWriteFontCollection2 methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection2_GetFontFamily(IDWriteFontCollection2* This,UINT32 index,IDWriteFontFamily2 **family) {
+    return This->lpVtbl->IDWriteFontCollection2_GetFontFamily(This,index,family);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection2_GetMatchingFonts(IDWriteFontCollection2* This,const WCHAR *familyname,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontList2 **fontlist) {
+    return This->lpVtbl->GetMatchingFonts(This,familyname,axis_values,num_values,fontlist);
+}
+static FORCEINLINE DWRITE_FONT_FAMILY_MODEL IDWriteFontCollection2_GetFontFamilyModel(IDWriteFontCollection2* This) {
+    return This->lpVtbl->GetFontFamilyModel(This);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection2_GetFontSet(IDWriteFontCollection2* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->IDWriteFontCollection2_GetFontSet(This,fontset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontCollection2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontCollection3 interface
+ */
+#ifndef __IDWriteFontCollection3_INTERFACE_DEFINED__
+#define __IDWriteFontCollection3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontCollection3, 0xa4d055a6, 0xf9e3, 0x4e25, 0x93,0xb7, 0x9e,0x30,0x9f,0x3a,0xf8,0xe9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a4d055a6-f9e3-4e25-93b7-9e309f3af8e9")
+IDWriteFontCollection3 : public IDWriteFontCollection2
+{
+    virtual HANDLE STDMETHODCALLTYPE GetExpirationEvent(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontCollection3, 0xa4d055a6, 0xf9e3, 0x4e25, 0x93,0xb7, 0x9e,0x30,0x9f,0x3a,0xf8,0xe9)
+#endif
+#else
+typedef struct IDWriteFontCollection3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontCollection3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontCollection3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontCollection3 *This);
+
+    /*** IDWriteFontCollection methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyCount)(
+        IDWriteFontCollection3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
+        IDWriteFontCollection3 *This,
+        UINT32 index,
+        IDWriteFontFamily **family);
+
+    HRESULT (STDMETHODCALLTYPE *FindFamilyName)(
+        IDWriteFontCollection3 *This,
+        const WCHAR *name,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFromFontFace)(
+        IDWriteFontCollection3 *This,
+        IDWriteFontFace *face,
+        IDWriteFont **font);
+
+    /*** IDWriteFontCollection1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontSet)(
+        IDWriteFontCollection3 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection1_GetFontFamily)(
+        IDWriteFontCollection3 *This,
+        UINT32 index,
+        IDWriteFontFamily1 **family);
+
+    /*** IDWriteFontCollection2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection2_GetFontFamily)(
+        IDWriteFontCollection3 *This,
+        UINT32 index,
+        IDWriteFontFamily2 **family);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontCollection3 *This,
+        const WCHAR *familyname,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist);
+
+    DWRITE_FONT_FAMILY_MODEL (STDMETHODCALLTYPE *GetFontFamilyModel)(
+        IDWriteFontCollection3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection2_GetFontSet)(
+        IDWriteFontCollection3 *This,
+        IDWriteFontSet1 **fontset);
+
+    /*** IDWriteFontCollection3 methods ***/
+    HANDLE (STDMETHODCALLTYPE *GetExpirationEvent)(
+        IDWriteFontCollection3 *This);
+
+    END_INTERFACE
+} IDWriteFontCollection3Vtbl;
+
+interface IDWriteFontCollection3 {
+    CONST_VTBL IDWriteFontCollection3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontCollection3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontCollection3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontCollection3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontCollection methods ***/
+#define IDWriteFontCollection3_GetFontFamilyCount(This) (This)->lpVtbl->GetFontFamilyCount(This)
+#define IDWriteFontCollection3_FindFamilyName(This,name,index,exists) (This)->lpVtbl->FindFamilyName(This,name,index,exists)
+#define IDWriteFontCollection3_GetFontFromFontFace(This,face,font) (This)->lpVtbl->GetFontFromFontFace(This,face,font)
+/*** IDWriteFontCollection1 methods ***/
+/*** IDWriteFontCollection2 methods ***/
+#define IDWriteFontCollection3_GetFontFamily(This,index,family) (This)->lpVtbl->IDWriteFontCollection2_GetFontFamily(This,index,family)
+#define IDWriteFontCollection3_GetMatchingFonts(This,familyname,axis_values,num_values,fontlist) (This)->lpVtbl->GetMatchingFonts(This,familyname,axis_values,num_values,fontlist)
+#define IDWriteFontCollection3_GetFontFamilyModel(This) (This)->lpVtbl->GetFontFamilyModel(This)
+#define IDWriteFontCollection3_GetFontSet(This,fontset) (This)->lpVtbl->IDWriteFontCollection2_GetFontSet(This,fontset)
+/*** IDWriteFontCollection3 methods ***/
+#define IDWriteFontCollection3_GetExpirationEvent(This) (This)->lpVtbl->GetExpirationEvent(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection3_QueryInterface(IDWriteFontCollection3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontCollection3_AddRef(IDWriteFontCollection3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontCollection3_Release(IDWriteFontCollection3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontCollection methods ***/
+static FORCEINLINE UINT32 IDWriteFontCollection3_GetFontFamilyCount(IDWriteFontCollection3* This) {
+    return This->lpVtbl->GetFontFamilyCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection3_FindFamilyName(IDWriteFontCollection3* This,const WCHAR *name,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFamilyName(This,name,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection3_GetFontFromFontFace(IDWriteFontCollection3* This,IDWriteFontFace *face,IDWriteFont **font) {
+    return This->lpVtbl->GetFontFromFontFace(This,face,font);
+}
+/*** IDWriteFontCollection1 methods ***/
+/*** IDWriteFontCollection2 methods ***/
+static FORCEINLINE HRESULT IDWriteFontCollection3_GetFontFamily(IDWriteFontCollection3* This,UINT32 index,IDWriteFontFamily2 **family) {
+    return This->lpVtbl->IDWriteFontCollection2_GetFontFamily(This,index,family);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection3_GetMatchingFonts(IDWriteFontCollection3* This,const WCHAR *familyname,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontList2 **fontlist) {
+    return This->lpVtbl->GetMatchingFonts(This,familyname,axis_values,num_values,fontlist);
+}
+static FORCEINLINE DWRITE_FONT_FAMILY_MODEL IDWriteFontCollection3_GetFontFamilyModel(IDWriteFontCollection3* This) {
+    return This->lpVtbl->GetFontFamilyModel(This);
+}
+static FORCEINLINE HRESULT IDWriteFontCollection3_GetFontSet(IDWriteFontCollection3* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->IDWriteFontCollection2_GetFontSet(This,fontset);
+}
+/*** IDWriteFontCollection3 methods ***/
+static FORCEINLINE HANDLE IDWriteFontCollection3_GetExpirationEvent(IDWriteFontCollection3* This) {
+    return This->lpVtbl->GetExpirationEvent(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontCollection3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFaceReference interface
+ */
+#ifndef __IDWriteFontFaceReference_INTERFACE_DEFINED__
+#define __IDWriteFontFaceReference_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFaceReference, 0x5e7fa7ca, 0xdde3, 0x424c, 0x89,0xf0, 0x9f,0xcd,0x6f,0xed,0x58,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5e7fa7ca-dde3-424c-89f0-9fcd6fed58cd")
+IDWriteFontFaceReference : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        IDWriteFontFace3 **fontface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceWithSimulations(
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFace3 **fontface) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE Equals(
+        IDWriteFontFaceReference *reference) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontFaceIndex(
+        ) = 0;
+
+    virtual DWRITE_FONT_SIMULATIONS STDMETHODCALLTYPE GetSimulations(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFile(
+        IDWriteFontFile **fontfile) = 0;
+
+    virtual UINT64 STDMETHODCALLTYPE GetLocalFileSize(
+        ) = 0;
+
+    virtual UINT64 STDMETHODCALLTYPE GetFileSize(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFileTime(
+        FILETIME *writetime) = 0;
+
+    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetLocality(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnqueueFontDownloadRequest(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnqueueCharacterDownloadRequest(
+        const WCHAR *chars,
+        UINT32 count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnqueueGlyphDownloadRequest(
+        const UINT16 *glyphs,
+        UINT32 count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnqueueFileFragmentDownloadRequest(
+        UINT64 offset,
+        UINT64 size) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFaceReference, 0x5e7fa7ca, 0xdde3, 0x424c, 0x89,0xf0, 0x9f,0xcd,0x6f,0xed,0x58,0xcd)
+#endif
+#else
+typedef struct IDWriteFontFaceReferenceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFaceReference *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFaceReference *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFaceReference *This);
+
+    /*** IDWriteFontFaceReference methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFontFaceReference *This,
+        IDWriteFontFace3 **fontface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceWithSimulations)(
+        IDWriteFontFaceReference *This,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFace3 **fontface);
+
+    WINBOOL (STDMETHODCALLTYPE *Equals)(
+        IDWriteFontFaceReference *This,
+        IDWriteFontFaceReference *reference);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFaceIndex)(
+        IDWriteFontFaceReference *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFaceReference *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFile)(
+        IDWriteFontFaceReference *This,
+        IDWriteFontFile **fontfile);
+
+    UINT64 (STDMETHODCALLTYPE *GetLocalFileSize)(
+        IDWriteFontFaceReference *This);
+
+    UINT64 (STDMETHODCALLTYPE *GetFileSize)(
+        IDWriteFontFaceReference *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFileTime)(
+        IDWriteFontFaceReference *This,
+        FILETIME *writetime);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetLocality)(
+        IDWriteFontFaceReference *This);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueFontDownloadRequest)(
+        IDWriteFontFaceReference *This);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueCharacterDownloadRequest)(
+        IDWriteFontFaceReference *This,
+        const WCHAR *chars,
+        UINT32 count);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueGlyphDownloadRequest)(
+        IDWriteFontFaceReference *This,
+        const UINT16 *glyphs,
+        UINT32 count);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueFileFragmentDownloadRequest)(
+        IDWriteFontFaceReference *This,
+        UINT64 offset,
+        UINT64 size);
+
+    END_INTERFACE
+} IDWriteFontFaceReferenceVtbl;
+
+interface IDWriteFontFaceReference {
+    CONST_VTBL IDWriteFontFaceReferenceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFaceReference_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFaceReference_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFaceReference_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFaceReference methods ***/
+#define IDWriteFontFaceReference_CreateFontFace(This,fontface) (This)->lpVtbl->CreateFontFace(This,fontface)
+#define IDWriteFontFaceReference_CreateFontFaceWithSimulations(This,simulations,fontface) (This)->lpVtbl->CreateFontFaceWithSimulations(This,simulations,fontface)
+#define IDWriteFontFaceReference_Equals(This,reference) (This)->lpVtbl->Equals(This,reference)
+#define IDWriteFontFaceReference_GetFontFaceIndex(This) (This)->lpVtbl->GetFontFaceIndex(This)
+#define IDWriteFontFaceReference_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFaceReference_GetFontFile(This,fontfile) (This)->lpVtbl->GetFontFile(This,fontfile)
+#define IDWriteFontFaceReference_GetLocalFileSize(This) (This)->lpVtbl->GetLocalFileSize(This)
+#define IDWriteFontFaceReference_GetFileSize(This) (This)->lpVtbl->GetFileSize(This)
+#define IDWriteFontFaceReference_GetFileTime(This,writetime) (This)->lpVtbl->GetFileTime(This,writetime)
+#define IDWriteFontFaceReference_GetLocality(This) (This)->lpVtbl->GetLocality(This)
+#define IDWriteFontFaceReference_EnqueueFontDownloadRequest(This) (This)->lpVtbl->EnqueueFontDownloadRequest(This)
+#define IDWriteFontFaceReference_EnqueueCharacterDownloadRequest(This,chars,count) (This)->lpVtbl->EnqueueCharacterDownloadRequest(This,chars,count)
+#define IDWriteFontFaceReference_EnqueueGlyphDownloadRequest(This,glyphs,count) (This)->lpVtbl->EnqueueGlyphDownloadRequest(This,glyphs,count)
+#define IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest(This,offset,size) (This)->lpVtbl->EnqueueFileFragmentDownloadRequest(This,offset,size)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFaceReference_QueryInterface(IDWriteFontFaceReference* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFaceReference_AddRef(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFaceReference_Release(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFaceReference methods ***/
+static FORCEINLINE HRESULT IDWriteFontFaceReference_CreateFontFace(IDWriteFontFaceReference* This,IDWriteFontFace3 **fontface) {
+    return This->lpVtbl->CreateFontFace(This,fontface);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_CreateFontFaceWithSimulations(IDWriteFontFaceReference* This,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFace3 **fontface) {
+    return This->lpVtbl->CreateFontFaceWithSimulations(This,simulations,fontface);
+}
+static FORCEINLINE WINBOOL IDWriteFontFaceReference_Equals(IDWriteFontFaceReference* This,IDWriteFontFaceReference *reference) {
+    return This->lpVtbl->Equals(This,reference);
+}
+static FORCEINLINE UINT32 IDWriteFontFaceReference_GetFontFaceIndex(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->GetFontFaceIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFaceReference_GetSimulations(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_GetFontFile(IDWriteFontFaceReference* This,IDWriteFontFile **fontfile) {
+    return This->lpVtbl->GetFontFile(This,fontfile);
+}
+static FORCEINLINE UINT64 IDWriteFontFaceReference_GetLocalFileSize(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->GetLocalFileSize(This);
+}
+static FORCEINLINE UINT64 IDWriteFontFaceReference_GetFileSize(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->GetFileSize(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_GetFileTime(IDWriteFontFaceReference* This,FILETIME *writetime) {
+    return This->lpVtbl->GetFileTime(This,writetime);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontFaceReference_GetLocality(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->GetLocality(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueFontDownloadRequest(IDWriteFontFaceReference* This) {
+    return This->lpVtbl->EnqueueFontDownloadRequest(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueCharacterDownloadRequest(IDWriteFontFaceReference* This,const WCHAR *chars,UINT32 count) {
+    return This->lpVtbl->EnqueueCharacterDownloadRequest(This,chars,count);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueGlyphDownloadRequest(IDWriteFontFaceReference* This,const UINT16 *glyphs,UINT32 count) {
+    return This->lpVtbl->EnqueueGlyphDownloadRequest(This,glyphs,count);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest(IDWriteFontFaceReference* This,UINT64 offset,UINT64 size) {
+    return This->lpVtbl->EnqueueFileFragmentDownloadRequest(This,offset,size);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFaceReference_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFaceReference1 interface
+ */
+#ifndef __IDWriteFontFaceReference1_INTERFACE_DEFINED__
+#define __IDWriteFontFaceReference1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFaceReference1, 0xc081fe77, 0x2fd1, 0x41ac, 0xa5,0xa3, 0x34,0x98,0x3c,0x4b,0xa6,0x1a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c081fe77-2fd1-41ac-a5a3-34983c4ba61a")
+IDWriteFontFaceReference1 : public IDWriteFontFaceReference
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
+        IDWriteFontFace5 **fontface) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontAxisValueCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFaceReference1, 0xc081fe77, 0x2fd1, 0x41ac, 0xa5,0xa3, 0x34,0x98,0x3c,0x4b,0xa6,0x1a)
+#endif
+#else
+typedef struct IDWriteFontFaceReference1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFaceReference1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFaceReference1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFaceReference1 *This);
+
+    /*** IDWriteFontFaceReference methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFontFaceReference1 *This,
+        IDWriteFontFace3 **fontface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceWithSimulations)(
+        IDWriteFontFaceReference1 *This,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFace3 **fontface);
+
+    WINBOOL (STDMETHODCALLTYPE *Equals)(
+        IDWriteFontFaceReference1 *This,
+        IDWriteFontFaceReference *reference);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFaceIndex)(
+        IDWriteFontFaceReference1 *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFaceReference1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFile)(
+        IDWriteFontFaceReference1 *This,
+        IDWriteFontFile **fontfile);
+
+    UINT64 (STDMETHODCALLTYPE *GetLocalFileSize)(
+        IDWriteFontFaceReference1 *This);
+
+    UINT64 (STDMETHODCALLTYPE *GetFileSize)(
+        IDWriteFontFaceReference1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFileTime)(
+        IDWriteFontFaceReference1 *This,
+        FILETIME *writetime);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetLocality)(
+        IDWriteFontFaceReference1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueFontDownloadRequest)(
+        IDWriteFontFaceReference1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueCharacterDownloadRequest)(
+        IDWriteFontFaceReference1 *This,
+        const WCHAR *chars,
+        UINT32 count);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueGlyphDownloadRequest)(
+        IDWriteFontFaceReference1 *This,
+        const UINT16 *glyphs,
+        UINT32 count);
+
+    HRESULT (STDMETHODCALLTYPE *EnqueueFileFragmentDownloadRequest)(
+        IDWriteFontFaceReference1 *This,
+        UINT64 offset,
+        UINT64 size);
+
+    /*** IDWriteFontFaceReference1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFaceReference1_CreateFontFace)(
+        IDWriteFontFaceReference1 *This,
+        IDWriteFontFace5 **fontface);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontAxisValueCount)(
+        IDWriteFontFaceReference1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisValues)(
+        IDWriteFontFaceReference1 *This,
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values);
+
+    END_INTERFACE
+} IDWriteFontFaceReference1Vtbl;
+
+interface IDWriteFontFaceReference1 {
+    CONST_VTBL IDWriteFontFaceReference1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFaceReference1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFaceReference1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFaceReference1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFaceReference methods ***/
+#define IDWriteFontFaceReference1_CreateFontFaceWithSimulations(This,simulations,fontface) (This)->lpVtbl->CreateFontFaceWithSimulations(This,simulations,fontface)
+#define IDWriteFontFaceReference1_Equals(This,reference) (This)->lpVtbl->Equals(This,reference)
+#define IDWriteFontFaceReference1_GetFontFaceIndex(This) (This)->lpVtbl->GetFontFaceIndex(This)
+#define IDWriteFontFaceReference1_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFaceReference1_GetFontFile(This,fontfile) (This)->lpVtbl->GetFontFile(This,fontfile)
+#define IDWriteFontFaceReference1_GetLocalFileSize(This) (This)->lpVtbl->GetLocalFileSize(This)
+#define IDWriteFontFaceReference1_GetFileSize(This) (This)->lpVtbl->GetFileSize(This)
+#define IDWriteFontFaceReference1_GetFileTime(This,writetime) (This)->lpVtbl->GetFileTime(This,writetime)
+#define IDWriteFontFaceReference1_GetLocality(This) (This)->lpVtbl->GetLocality(This)
+#define IDWriteFontFaceReference1_EnqueueFontDownloadRequest(This) (This)->lpVtbl->EnqueueFontDownloadRequest(This)
+#define IDWriteFontFaceReference1_EnqueueCharacterDownloadRequest(This,chars,count) (This)->lpVtbl->EnqueueCharacterDownloadRequest(This,chars,count)
+#define IDWriteFontFaceReference1_EnqueueGlyphDownloadRequest(This,glyphs,count) (This)->lpVtbl->EnqueueGlyphDownloadRequest(This,glyphs,count)
+#define IDWriteFontFaceReference1_EnqueueFileFragmentDownloadRequest(This,offset,size) (This)->lpVtbl->EnqueueFileFragmentDownloadRequest(This,offset,size)
+/*** IDWriteFontFaceReference1 methods ***/
+#define IDWriteFontFaceReference1_CreateFontFace(This,fontface) (This)->lpVtbl->IDWriteFontFaceReference1_CreateFontFace(This,fontface)
+#define IDWriteFontFaceReference1_GetFontAxisValueCount(This) (This)->lpVtbl->GetFontAxisValueCount(This)
+#define IDWriteFontFaceReference1_GetFontAxisValues(This,values,num_values) (This)->lpVtbl->GetFontAxisValues(This,values,num_values)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_QueryInterface(IDWriteFontFaceReference1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFaceReference1_AddRef(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFaceReference1_Release(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFaceReference methods ***/
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_CreateFontFaceWithSimulations(IDWriteFontFaceReference1* This,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFace3 **fontface) {
+    return This->lpVtbl->CreateFontFaceWithSimulations(This,simulations,fontface);
+}
+static FORCEINLINE WINBOOL IDWriteFontFaceReference1_Equals(IDWriteFontFaceReference1* This,IDWriteFontFaceReference *reference) {
+    return This->lpVtbl->Equals(This,reference);
+}
+static FORCEINLINE UINT32 IDWriteFontFaceReference1_GetFontFaceIndex(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->GetFontFaceIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFaceReference1_GetSimulations(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_GetFontFile(IDWriteFontFaceReference1* This,IDWriteFontFile **fontfile) {
+    return This->lpVtbl->GetFontFile(This,fontfile);
+}
+static FORCEINLINE UINT64 IDWriteFontFaceReference1_GetLocalFileSize(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->GetLocalFileSize(This);
+}
+static FORCEINLINE UINT64 IDWriteFontFaceReference1_GetFileSize(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->GetFileSize(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_GetFileTime(IDWriteFontFaceReference1* This,FILETIME *writetime) {
+    return This->lpVtbl->GetFileTime(This,writetime);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontFaceReference1_GetLocality(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->GetLocality(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_EnqueueFontDownloadRequest(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->EnqueueFontDownloadRequest(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_EnqueueCharacterDownloadRequest(IDWriteFontFaceReference1* This,const WCHAR *chars,UINT32 count) {
+    return This->lpVtbl->EnqueueCharacterDownloadRequest(This,chars,count);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_EnqueueGlyphDownloadRequest(IDWriteFontFaceReference1* This,const UINT16 *glyphs,UINT32 count) {
+    return This->lpVtbl->EnqueueGlyphDownloadRequest(This,glyphs,count);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_EnqueueFileFragmentDownloadRequest(IDWriteFontFaceReference1* This,UINT64 offset,UINT64 size) {
+    return This->lpVtbl->EnqueueFileFragmentDownloadRequest(This,offset,size);
+}
+/*** IDWriteFontFaceReference1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_CreateFontFace(IDWriteFontFaceReference1* This,IDWriteFontFace5 **fontface) {
+    return This->lpVtbl->IDWriteFontFaceReference1_CreateFontFace(This,fontface);
+}
+static FORCEINLINE UINT32 IDWriteFontFaceReference1_GetFontAxisValueCount(IDWriteFontFaceReference1* This) {
+    return This->lpVtbl->GetFontAxisValueCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFaceReference1_GetFontAxisValues(IDWriteFontFaceReference1* This,DWRITE_FONT_AXIS_VALUE *values,UINT32 num_values) {
+    return This->lpVtbl->GetFontAxisValues(This,values,num_values);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFaceReference1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontList1 interface
+ */
+#ifndef __IDWriteFontList1_INTERFACE_DEFINED__
+#define __IDWriteFontList1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontList1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xde);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("da20d8ef-812a-4c43-9802-62ec4abd7ade")
+IDWriteFontList1 : public IDWriteFontList
+{
+    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetFontLocality(
+        UINT32 index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFont(
+        UINT32 index,
+        IDWriteFont3 **font) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
+        UINT32 index,
+        IDWriteFontFaceReference **reference) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontList1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xde)
+#endif
+#else
+typedef struct IDWriteFontList1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontList1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontList1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontList1 *This);
+
+    /*** IDWriteFontList methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteFontList1 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontList1 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFont)(
+        IDWriteFontList1 *This,
+        UINT32 index,
+        IDWriteFont **font);
+
+    /*** IDWriteFontList1 methods ***/
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontList1 *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontList1_GetFont)(
+        IDWriteFontList1 *This,
+        UINT32 index,
+        IDWriteFont3 **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontList1 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    END_INTERFACE
+} IDWriteFontList1Vtbl;
+
+interface IDWriteFontList1 {
+    CONST_VTBL IDWriteFontList1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontList1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontList1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontList1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontList methods ***/
+#define IDWriteFontList1_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteFontList1_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+/*** IDWriteFontList1 methods ***/
+#define IDWriteFontList1_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+#define IDWriteFontList1_GetFont(This,index,font) (This)->lpVtbl->IDWriteFontList1_GetFont(This,index,font)
+#define IDWriteFontList1_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontList1_QueryInterface(IDWriteFontList1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontList1_AddRef(IDWriteFontList1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontList1_Release(IDWriteFontList1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontList methods ***/
+static FORCEINLINE HRESULT IDWriteFontList1_GetFontCollection(IDWriteFontList1* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteFontList1_GetFontCount(IDWriteFontList1* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+/*** IDWriteFontList1 methods ***/
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontList1_GetFontLocality(IDWriteFontList1* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+static FORCEINLINE HRESULT IDWriteFontList1_GetFont(IDWriteFontList1* This,UINT32 index,IDWriteFont3 **font) {
+    return This->lpVtbl->IDWriteFontList1_GetFont(This,index,font);
+}
+static FORCEINLINE HRESULT IDWriteFontList1_GetFontFaceReference(IDWriteFontList1* This,UINT32 index,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,index,reference);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontList1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontList2 interface
+ */
+#ifndef __IDWriteFontList2_INTERFACE_DEFINED__
+#define __IDWriteFontList2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontList2, 0xc0763a34, 0x77af, 0x445a, 0xb7,0x35, 0x08,0xc3,0x7b,0x0a,0x5b,0xf5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c0763a34-77af-445a-b735-08c37b0a5bf5")
+IDWriteFontList2 : public IDWriteFontList1
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontSet(
+        IDWriteFontSet1 **fontset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontList2, 0xc0763a34, 0x77af, 0x445a, 0xb7,0x35, 0x08,0xc3,0x7b,0x0a,0x5b,0xf5)
+#endif
+#else
+typedef struct IDWriteFontList2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontList2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontList2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontList2 *This);
+
+    /*** IDWriteFontList methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteFontList2 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontList2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFont)(
+        IDWriteFontList2 *This,
+        UINT32 index,
+        IDWriteFont **font);
+
+    /*** IDWriteFontList1 methods ***/
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontList2 *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontList1_GetFont)(
+        IDWriteFontList2 *This,
+        UINT32 index,
+        IDWriteFont3 **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontList2 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    /*** IDWriteFontList2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontSet)(
+        IDWriteFontList2 *This,
+        IDWriteFontSet1 **fontset);
+
+    END_INTERFACE
+} IDWriteFontList2Vtbl;
+
+interface IDWriteFontList2 {
+    CONST_VTBL IDWriteFontList2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontList2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontList2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontList2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontList methods ***/
+#define IDWriteFontList2_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteFontList2_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+/*** IDWriteFontList1 methods ***/
+#define IDWriteFontList2_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+#define IDWriteFontList2_GetFont(This,index,font) (This)->lpVtbl->IDWriteFontList1_GetFont(This,index,font)
+#define IDWriteFontList2_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
+/*** IDWriteFontList2 methods ***/
+#define IDWriteFontList2_GetFontSet(This,fontset) (This)->lpVtbl->GetFontSet(This,fontset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontList2_QueryInterface(IDWriteFontList2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontList2_AddRef(IDWriteFontList2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontList2_Release(IDWriteFontList2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontList methods ***/
+static FORCEINLINE HRESULT IDWriteFontList2_GetFontCollection(IDWriteFontList2* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteFontList2_GetFontCount(IDWriteFontList2* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+/*** IDWriteFontList1 methods ***/
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontList2_GetFontLocality(IDWriteFontList2* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+static FORCEINLINE HRESULT IDWriteFontList2_GetFont(IDWriteFontList2* This,UINT32 index,IDWriteFont3 **font) {
+    return This->lpVtbl->IDWriteFontList1_GetFont(This,index,font);
+}
+static FORCEINLINE HRESULT IDWriteFontList2_GetFontFaceReference(IDWriteFontList2* This,UINT32 index,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,index,reference);
+}
+/*** IDWriteFontList2 methods ***/
+static FORCEINLINE HRESULT IDWriteFontList2_GetFontSet(IDWriteFontList2* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFontSet(This,fontset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontList2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSet2 interface
+ */
+#ifndef __IDWriteFontSet2_INTERFACE_DEFINED__
+#define __IDWriteFontSet2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSet2, 0xdc7ead19, 0xe54c, 0x43af, 0xb2,0xda, 0x4e,0x2b,0x79,0xba,0x3f,0x7f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("dc7ead19-e54c-43af-b2da-4e2b79ba3f7f")
+IDWriteFontSet2 : public IDWriteFontSet1
+{
+    virtual HANDLE STDMETHODCALLTYPE GetExpirationEvent(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSet2, 0xdc7ead19, 0xe54c, 0x43af, 0xb2,0xda, 0x4e,0x2b,0x79,0xba,0x3f,0x7f)
+#endif
+#else
+typedef struct IDWriteFontSet2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSet2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSet2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSet2 *This);
+
+    /*** IDWriteFontSet methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontSet2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontSet2 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFaceReference)(
+        IDWriteFontSet2 *This,
+        IDWriteFontFaceReference *reference,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFace)(
+        IDWriteFontSet2 *This,
+        IDWriteFontFace *fontface,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues__)(
+        IDWriteFontSet2 *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues_)(
+        IDWriteFontSet2 *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        const WCHAR *preferred_locales,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues)(
+        IDWriteFontSet2 *This,
+        UINT32 index,
+        DWRITE_FONT_PROPERTY_ID id,
+        WINBOOL *exists,
+        IDWriteLocalizedStrings **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyOccurrenceCount)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_PROPERTY *property,
+        UINT32 *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts_)(
+        IDWriteFontSet2 *This,
+        const WCHAR *family,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 count,
+        IDWriteFontSet **fontset);
+
+    /*** IDWriteFontSet1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSet1_GetMatchingFonts)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_PROPERTY *property,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstFontResources)(
+        IDWriteFontSet2 *This,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts__)(
+        IDWriteFontSet2 *This,
+        const UINT32 *indices,
+        UINT32 num_indices,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts_)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_property,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFontIndices_)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_AXIS_RANGE *ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFontIndices)(
+        IDWriteFontSet2 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges_)(
+        IDWriteFontSet2 *This,
+        UINT32 font_index,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges)(
+        IDWriteFontSet2 *This,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSet1_GetFontFaceReference)(
+        IDWriteFontSet2 *This,
+        UINT32 index,
+        IDWriteFontFaceReference1 **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontResource)(
+        IDWriteFontSet2 *This,
+        UINT32 index,
+        IDWriteFontResource **resource);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFontSet2 *This,
+        UINT32 index,
+        IDWriteFontFace5 **fontface);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontSet2 *This,
+        UINT32 index);
+
+    /*** IDWriteFontSet2 methods ***/
+    HANDLE (STDMETHODCALLTYPE *GetExpirationEvent)(
+        IDWriteFontSet2 *This);
+
+    END_INTERFACE
+} IDWriteFontSet2Vtbl;
+
+interface IDWriteFontSet2 {
+    CONST_VTBL IDWriteFontSet2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSet2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSet2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSet2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSet methods ***/
+#define IDWriteFontSet2_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+#define IDWriteFontSet2_FindFontFaceReference(This,reference,index,exists) (This)->lpVtbl->FindFontFaceReference(This,reference,index,exists)
+#define IDWriteFontSet2_FindFontFace(This,fontface,index,exists) (This)->lpVtbl->FindFontFace(This,fontface,index,exists)
+#define IDWriteFontSet2_GetPropertyValues__(This,id,values) (This)->lpVtbl->GetPropertyValues__(This,id,values)
+#define IDWriteFontSet2_GetPropertyValues_(This,id,preferred_locales,values) (This)->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values)
+#define IDWriteFontSet2_GetPropertyValues(This,index,id,exists,values) (This)->lpVtbl->GetPropertyValues(This,index,id,exists,values)
+#define IDWriteFontSet2_GetPropertyOccurrenceCount(This,property,count) (This)->lpVtbl->GetPropertyOccurrenceCount(This,property,count)
+#define IDWriteFontSet2_GetMatchingFonts_(This,family,weight,stretch,style,fontset) (This)->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset)
+/*** IDWriteFontSet1 methods ***/
+#define IDWriteFontSet2_GetMatchingFonts(This,property,axis_values,num_values,fontset) (This)->lpVtbl->IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset)
+#define IDWriteFontSet2_GetFirstFontResources(This,fontset) (This)->lpVtbl->GetFirstFontResources(This,fontset)
+#define IDWriteFontSet2_GetFilteredFonts__(This,indices,num_indices,fontset) (This)->lpVtbl->GetFilteredFonts__(This,indices,num_indices,fontset)
+#define IDWriteFontSet2_GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset) (This)->lpVtbl->GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset)
+#define IDWriteFontSet2_GetFilteredFonts(This,props,num_properties,select_any_property,fontset) (This)->lpVtbl->GetFilteredFonts(This,props,num_properties,select_any_property,fontset)
+#define IDWriteFontSet2_GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices) (This)->lpVtbl->GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices)
+#define IDWriteFontSet2_GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices) (This)->lpVtbl->GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices)
+#define IDWriteFontSet2_GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges) (This)->lpVtbl->GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges)
+#define IDWriteFontSet2_GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges) (This)->lpVtbl->GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges)
+#define IDWriteFontSet2_GetFontFaceReference(This,index,reference) (This)->lpVtbl->IDWriteFontSet1_GetFontFaceReference(This,index,reference)
+#define IDWriteFontSet2_CreateFontResource(This,index,resource) (This)->lpVtbl->CreateFontResource(This,index,resource)
+#define IDWriteFontSet2_CreateFontFace(This,index,fontface) (This)->lpVtbl->CreateFontFace(This,index,fontface)
+#define IDWriteFontSet2_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+/*** IDWriteFontSet2 methods ***/
+#define IDWriteFontSet2_GetExpirationEvent(This) (This)->lpVtbl->GetExpirationEvent(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet2_QueryInterface(IDWriteFontSet2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSet2_AddRef(IDWriteFontSet2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSet2_Release(IDWriteFontSet2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSet methods ***/
+static FORCEINLINE UINT32 IDWriteFontSet2_GetFontCount(IDWriteFontSet2* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_FindFontFaceReference(IDWriteFontSet2* This,IDWriteFontFaceReference *reference,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFaceReference(This,reference,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_FindFontFace(IDWriteFontSet2* This,IDWriteFontFace *fontface,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFace(This,fontface,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetPropertyValues__(IDWriteFontSet2* This,DWRITE_FONT_PROPERTY_ID id,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues__(This,id,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetPropertyValues_(IDWriteFontSet2* This,DWRITE_FONT_PROPERTY_ID id,const WCHAR *preferred_locales,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetPropertyValues(IDWriteFontSet2* This,UINT32 index,DWRITE_FONT_PROPERTY_ID id,WINBOOL *exists,IDWriteLocalizedStrings **values) {
+    return This->lpVtbl->GetPropertyValues(This,index,id,exists,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetPropertyOccurrenceCount(IDWriteFontSet2* This,const DWRITE_FONT_PROPERTY *property,UINT32 *count) {
+    return This->lpVtbl->GetPropertyOccurrenceCount(This,property,count);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetMatchingFonts_(IDWriteFontSet2* This,const WCHAR *family,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset);
+}
+/*** IDWriteFontSet1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet2_GetMatchingFonts(IDWriteFontSet2* This,const DWRITE_FONT_PROPERTY *property,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFirstFontResources(IDWriteFontSet2* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFirstFontResources(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFilteredFonts__(IDWriteFontSet2* This,const UINT32 *indices,UINT32 num_indices,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts__(This,indices,num_indices,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFilteredFonts_(IDWriteFontSet2* This,const DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,WINBOOL select_any_range,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFilteredFonts(IDWriteFontSet2* This,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties,WINBOOL select_any_property,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts(This,props,num_properties,select_any_property,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFilteredFontIndices_(IDWriteFontSet2* This,const DWRITE_FONT_AXIS_RANGE *ranges,UINT32 num_ranges,WINBOOL select_any_range,UINT32 *indices,UINT32 num_indices,UINT32 *actual_num_indices) {
+    return This->lpVtbl->GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFilteredFontIndices(IDWriteFontSet2* This,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties,WINBOOL select_any_range,UINT32 *indices,UINT32 num_indices,UINT32 *actual_num_indices) {
+    return This->lpVtbl->GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFontAxisRanges_(IDWriteFontSet2* This,UINT32 font_index,DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,UINT32 *actual_num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFontAxisRanges(IDWriteFontSet2* This,DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,UINT32 *actual_num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_GetFontFaceReference(IDWriteFontSet2* This,UINT32 index,IDWriteFontFaceReference1 **reference) {
+    return This->lpVtbl->IDWriteFontSet1_GetFontFaceReference(This,index,reference);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_CreateFontResource(IDWriteFontSet2* This,UINT32 index,IDWriteFontResource **resource) {
+    return This->lpVtbl->CreateFontResource(This,index,resource);
+}
+static FORCEINLINE HRESULT IDWriteFontSet2_CreateFontFace(IDWriteFontSet2* This,UINT32 index,IDWriteFontFace5 **fontface) {
+    return This->lpVtbl->CreateFontFace(This,index,fontface);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontSet2_GetFontLocality(IDWriteFontSet2* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+/*** IDWriteFontSet2 methods ***/
+static FORCEINLINE HANDLE IDWriteFontSet2_GetExpirationEvent(IDWriteFontSet2* This) {
+    return This->lpVtbl->GetExpirationEvent(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSet2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSet3 interface
+ */
+#ifndef __IDWriteFontSet3_INTERFACE_DEFINED__
+#define __IDWriteFontSet3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSet3, 0x7c073ef2, 0xa7f4, 0x4045, 0x8c,0x32, 0x8a,0xb8,0xae,0x64,0x0f,0x90);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7c073ef2-a7f4-4045-8c32-8ab8ae640f90")
+IDWriteFontSet3 : public IDWriteFontSet2
+{
+    virtual DWRITE_FONT_SOURCE_TYPE STDMETHODCALLTYPE GetFontSourceType(
+        UINT32 index) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontSourceNameLength(
+        UINT32 index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontSourceName(
+        UINT32 index,
+        WCHAR *buffer,
+        UINT32 buffer_size) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSet3, 0x7c073ef2, 0xa7f4, 0x4045, 0x8c,0x32, 0x8a,0xb8,0xae,0x64,0x0f,0x90)
+#endif
+#else
+typedef struct IDWriteFontSet3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSet3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSet3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSet3 *This);
+
+    /*** IDWriteFontSet methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
+        IDWriteFontSet3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontSet3 *This,
+        UINT32 index,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFaceReference)(
+        IDWriteFontSet3 *This,
+        IDWriteFontFaceReference *reference,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *FindFontFace)(
+        IDWriteFontSet3 *This,
+        IDWriteFontFace *fontface,
+        UINT32 *index,
+        WINBOOL *exists);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues__)(
+        IDWriteFontSet3 *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues_)(
+        IDWriteFontSet3 *This,
+        DWRITE_FONT_PROPERTY_ID id,
+        const WCHAR *preferred_locales,
+        IDWriteStringList **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyValues)(
+        IDWriteFontSet3 *This,
+        UINT32 index,
+        DWRITE_FONT_PROPERTY_ID id,
+        WINBOOL *exists,
+        IDWriteLocalizedStrings **values);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyOccurrenceCount)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_PROPERTY *property,
+        UINT32 *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts_)(
+        IDWriteFontSet3 *This,
+        const WCHAR *family,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 count,
+        IDWriteFontSet **fontset);
+
+    /*** IDWriteFontSet1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSet1_GetMatchingFonts)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_PROPERTY *property,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstFontResources)(
+        IDWriteFontSet3 *This,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts__)(
+        IDWriteFontSet3 *This,
+        const UINT32 *indices,
+        UINT32 num_indices,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts_)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFonts)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_property,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFontIndices_)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_AXIS_RANGE *ranges,
+        UINT32 num_ranges,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetFilteredFontIndices)(
+        IDWriteFontSet3 *This,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties,
+        WINBOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges_)(
+        IDWriteFontSet3 *This,
+        UINT32 font_index,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisRanges)(
+        IDWriteFontSet3 *This,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSet1_GetFontFaceReference)(
+        IDWriteFontSet3 *This,
+        UINT32 index,
+        IDWriteFontFaceReference1 **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontResource)(
+        IDWriteFontSet3 *This,
+        UINT32 index,
+        IDWriteFontResource **resource);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFontSet3 *This,
+        UINT32 index,
+        IDWriteFontFace5 **fontface);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
+        IDWriteFontSet3 *This,
+        UINT32 index);
+
+    /*** IDWriteFontSet2 methods ***/
+    HANDLE (STDMETHODCALLTYPE *GetExpirationEvent)(
+        IDWriteFontSet3 *This);
+
+    /*** IDWriteFontSet3 methods ***/
+    DWRITE_FONT_SOURCE_TYPE (STDMETHODCALLTYPE *GetFontSourceType)(
+        IDWriteFontSet3 *This,
+        UINT32 index);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontSourceNameLength)(
+        IDWriteFontSet3 *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontSourceName)(
+        IDWriteFontSet3 *This,
+        UINT32 index,
+        WCHAR *buffer,
+        UINT32 buffer_size);
+
+    END_INTERFACE
+} IDWriteFontSet3Vtbl;
+
+interface IDWriteFontSet3 {
+    CONST_VTBL IDWriteFontSet3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSet3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSet3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSet3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSet methods ***/
+#define IDWriteFontSet3_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
+#define IDWriteFontSet3_FindFontFaceReference(This,reference,index,exists) (This)->lpVtbl->FindFontFaceReference(This,reference,index,exists)
+#define IDWriteFontSet3_FindFontFace(This,fontface,index,exists) (This)->lpVtbl->FindFontFace(This,fontface,index,exists)
+#define IDWriteFontSet3_GetPropertyValues__(This,id,values) (This)->lpVtbl->GetPropertyValues__(This,id,values)
+#define IDWriteFontSet3_GetPropertyValues_(This,id,preferred_locales,values) (This)->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values)
+#define IDWriteFontSet3_GetPropertyValues(This,index,id,exists,values) (This)->lpVtbl->GetPropertyValues(This,index,id,exists,values)
+#define IDWriteFontSet3_GetPropertyOccurrenceCount(This,property,count) (This)->lpVtbl->GetPropertyOccurrenceCount(This,property,count)
+#define IDWriteFontSet3_GetMatchingFonts_(This,family,weight,stretch,style,fontset) (This)->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset)
+/*** IDWriteFontSet1 methods ***/
+#define IDWriteFontSet3_GetMatchingFonts(This,property,axis_values,num_values,fontset) (This)->lpVtbl->IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset)
+#define IDWriteFontSet3_GetFirstFontResources(This,fontset) (This)->lpVtbl->GetFirstFontResources(This,fontset)
+#define IDWriteFontSet3_GetFilteredFonts__(This,indices,num_indices,fontset) (This)->lpVtbl->GetFilteredFonts__(This,indices,num_indices,fontset)
+#define IDWriteFontSet3_GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset) (This)->lpVtbl->GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset)
+#define IDWriteFontSet3_GetFilteredFonts(This,props,num_properties,select_any_property,fontset) (This)->lpVtbl->GetFilteredFonts(This,props,num_properties,select_any_property,fontset)
+#define IDWriteFontSet3_GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices) (This)->lpVtbl->GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices)
+#define IDWriteFontSet3_GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices) (This)->lpVtbl->GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices)
+#define IDWriteFontSet3_GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges) (This)->lpVtbl->GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges)
+#define IDWriteFontSet3_GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges) (This)->lpVtbl->GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges)
+#define IDWriteFontSet3_GetFontFaceReference(This,index,reference) (This)->lpVtbl->IDWriteFontSet1_GetFontFaceReference(This,index,reference)
+#define IDWriteFontSet3_CreateFontResource(This,index,resource) (This)->lpVtbl->CreateFontResource(This,index,resource)
+#define IDWriteFontSet3_CreateFontFace(This,index,fontface) (This)->lpVtbl->CreateFontFace(This,index,fontface)
+#define IDWriteFontSet3_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
+/*** IDWriteFontSet2 methods ***/
+#define IDWriteFontSet3_GetExpirationEvent(This) (This)->lpVtbl->GetExpirationEvent(This)
+/*** IDWriteFontSet3 methods ***/
+#define IDWriteFontSet3_GetFontSourceType(This,index) (This)->lpVtbl->GetFontSourceType(This,index)
+#define IDWriteFontSet3_GetFontSourceNameLength(This,index) (This)->lpVtbl->GetFontSourceNameLength(This,index)
+#define IDWriteFontSet3_GetFontSourceName(This,index,buffer,buffer_size) (This)->lpVtbl->GetFontSourceName(This,index,buffer,buffer_size)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet3_QueryInterface(IDWriteFontSet3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSet3_AddRef(IDWriteFontSet3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSet3_Release(IDWriteFontSet3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSet methods ***/
+static FORCEINLINE UINT32 IDWriteFontSet3_GetFontCount(IDWriteFontSet3* This) {
+    return This->lpVtbl->GetFontCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_FindFontFaceReference(IDWriteFontSet3* This,IDWriteFontFaceReference *reference,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFaceReference(This,reference,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_FindFontFace(IDWriteFontSet3* This,IDWriteFontFace *fontface,UINT32 *index,WINBOOL *exists) {
+    return This->lpVtbl->FindFontFace(This,fontface,index,exists);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetPropertyValues__(IDWriteFontSet3* This,DWRITE_FONT_PROPERTY_ID id,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues__(This,id,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetPropertyValues_(IDWriteFontSet3* This,DWRITE_FONT_PROPERTY_ID id,const WCHAR *preferred_locales,IDWriteStringList **values) {
+    return This->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetPropertyValues(IDWriteFontSet3* This,UINT32 index,DWRITE_FONT_PROPERTY_ID id,WINBOOL *exists,IDWriteLocalizedStrings **values) {
+    return This->lpVtbl->GetPropertyValues(This,index,id,exists,values);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetPropertyOccurrenceCount(IDWriteFontSet3* This,const DWRITE_FONT_PROPERTY *property,UINT32 *count) {
+    return This->lpVtbl->GetPropertyOccurrenceCount(This,property,count);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetMatchingFonts_(IDWriteFontSet3* This,const WCHAR *family,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset);
+}
+/*** IDWriteFontSet1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontSet3_GetMatchingFonts(IDWriteFontSet3* This,const DWRITE_FONT_PROPERTY *property,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->IDWriteFontSet1_GetMatchingFonts(This,property,axis_values,num_values,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFirstFontResources(IDWriteFontSet3* This,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFirstFontResources(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFilteredFonts__(IDWriteFontSet3* This,const UINT32 *indices,UINT32 num_indices,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts__(This,indices,num_indices,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFilteredFonts_(IDWriteFontSet3* This,const DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,WINBOOL select_any_range,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts_(This,axis_ranges,num_ranges,select_any_range,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFilteredFonts(IDWriteFontSet3* This,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties,WINBOOL select_any_property,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->GetFilteredFonts(This,props,num_properties,select_any_property,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFilteredFontIndices_(IDWriteFontSet3* This,const DWRITE_FONT_AXIS_RANGE *ranges,UINT32 num_ranges,WINBOOL select_any_range,UINT32 *indices,UINT32 num_indices,UINT32 *actual_num_indices) {
+    return This->lpVtbl->GetFilteredFontIndices_(This,ranges,num_ranges,select_any_range,indices,num_indices,actual_num_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFilteredFontIndices(IDWriteFontSet3* This,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties,WINBOOL select_any_range,UINT32 *indices,UINT32 num_indices,UINT32 *actual_num_indices) {
+    return This->lpVtbl->GetFilteredFontIndices(This,props,num_properties,select_any_range,indices,num_indices,actual_num_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFontAxisRanges_(IDWriteFontSet3* This,UINT32 font_index,DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,UINT32 *actual_num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges_(This,font_index,axis_ranges,num_ranges,actual_num_ranges);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFontAxisRanges(IDWriteFontSet3* This,DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,UINT32 *actual_num_ranges) {
+    return This->lpVtbl->GetFontAxisRanges(This,axis_ranges,num_ranges,actual_num_ranges);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFontFaceReference(IDWriteFontSet3* This,UINT32 index,IDWriteFontFaceReference1 **reference) {
+    return This->lpVtbl->IDWriteFontSet1_GetFontFaceReference(This,index,reference);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_CreateFontResource(IDWriteFontSet3* This,UINT32 index,IDWriteFontResource **resource) {
+    return This->lpVtbl->CreateFontResource(This,index,resource);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_CreateFontFace(IDWriteFontSet3* This,UINT32 index,IDWriteFontFace5 **fontface) {
+    return This->lpVtbl->CreateFontFace(This,index,fontface);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteFontSet3_GetFontLocality(IDWriteFontSet3* This,UINT32 index) {
+    return This->lpVtbl->GetFontLocality(This,index);
+}
+/*** IDWriteFontSet2 methods ***/
+static FORCEINLINE HANDLE IDWriteFontSet3_GetExpirationEvent(IDWriteFontSet3* This) {
+    return This->lpVtbl->GetExpirationEvent(This);
+}
+/*** IDWriteFontSet3 methods ***/
+static FORCEINLINE DWRITE_FONT_SOURCE_TYPE IDWriteFontSet3_GetFontSourceType(IDWriteFontSet3* This,UINT32 index) {
+    return This->lpVtbl->GetFontSourceType(This,index);
+}
+static FORCEINLINE UINT32 IDWriteFontSet3_GetFontSourceNameLength(IDWriteFontSet3* This,UINT32 index) {
+    return This->lpVtbl->GetFontSourceNameLength(This,index);
+}
+static FORCEINLINE HRESULT IDWriteFontSet3_GetFontSourceName(IDWriteFontSet3* This,UINT32 index,WCHAR *buffer,UINT32 buffer_size) {
+    return This->lpVtbl->GetFontSourceName(This,index,buffer,buffer_size);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSet3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFace3 interface
+ */
+#ifndef __IDWriteFontFace3_INTERFACE_DEFINED__
+#define __IDWriteFontFace3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFace3, 0xd37d7598, 0x09be, 0x4222, 0xa2,0x36, 0x20,0x81,0x34,0x1c,0xc1,0xf2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d37d7598-09be-4222-a236-2081341cc1f2")
+IDWriteFontFace3 : public IDWriteFontFace2
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
+        IDWriteFontFaceReference **reference) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPanose(
+        DWRITE_PANOSE *panose) = 0;
+
+    virtual DWRITE_FONT_WEIGHT STDMETHODCALLTYPE GetWeight(
+        ) = 0;
+
+    virtual DWRITE_FONT_STRETCH STDMETHODCALLTYPE GetStretch(
+        ) = 0;
+
+    virtual DWRITE_FONT_STYLE STDMETHODCALLTYPE GetStyle(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFamilyNames(
+        IDWriteLocalizedStrings **names) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFaceNames(
+        IDWriteLocalizedStrings **names) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInformationalStrings(
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE HasCharacter(
+        UINT32 character) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRecommendedRenderingMode(
+        FLOAT emsize,
+        FLOAT dpi_x,
+        FLOAT dpi_y,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE1 *rendering_mode,
+        DWRITE_GRID_FIT_MODE *gridfit_mode) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsCharacterLocal(
+        UINT32 character) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsGlyphLocal(
+        UINT16 glyph) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AreCharactersLocal(
+        const WCHAR *characters,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AreGlyphsLocal(
+        const UINT16 *glyphs,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFace3, 0xd37d7598, 0x09be, 0x4222, 0xa2,0x36, 0x20,0x81,0x34,0x1c,0xc1,0xf2)
+#endif
+#else
+typedef struct IDWriteFontFace3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFace3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFace3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFace3 *This);
+
+    /*** IDWriteFontFace methods ***/
+    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
+        IDWriteFontFace3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFiles)(
+        IDWriteFontFace3 *This,
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles);
+
+    UINT32 (STDMETHODCALLTYPE *GetIndex)(
+        IDWriteFontFace3 *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFace3 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFontFace3 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFontFace3 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
+        IDWriteFontFace3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
+        IDWriteFontFace3 *This,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
+        IDWriteFontFace3 *This,
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
+        IDWriteFontFace3 *This,
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists);
+
+    void (STDMETHODCALLTYPE *ReleaseFontTable)(
+        IDWriteFontFace3 *This,
+        void *table_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
+        IDWriteFontFace3 *This,
+        FLOAT emSize,
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
+        IDWriteFontFace3 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
+        IDWriteFontFace3 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
+        IDWriteFontFace3 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    /*** IDWriteFontFace1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
+        IDWriteFontFace3 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
+        IDWriteFontFace3 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetCaretMetrics)(
+        IDWriteFontFace3 *This,
+        DWRITE_CARET_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFontFace3 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFontFace3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
+        IDWriteFontFace3 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
+        IDWriteFontFace3 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances);
+
+    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
+        IDWriteFontFace3 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *adjustments);
+
+    WINBOOL (STDMETHODCALLTYPE *HasKerningPairs)(
+        IDWriteFontFace3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
+        IDWriteFontFace3 *This,
+        FLOAT font_emsize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
+        IDWriteFontFace3 *This,
+        UINT32 glyph_count,
+        const UINT16 *nominal_indices,
+        UINT16 *vertical_indices);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
+        IDWriteFontFace3 *This);
+
+    /*** IDWriteFontFace2 methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsColorFont)(
+        IDWriteFontFace3 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetColorPaletteCount)(
+        IDWriteFontFace3 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetPaletteEntryCount)(
+        IDWriteFontFace3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IDWriteFontFace3 *This,
+        UINT32 palette_index,
+        UINT32 first_entry_index,
+        UINT32 entry_count,
+        DWRITE_COLOR_F *entries);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace2_GetRecommendedRenderingMode)(
+        IDWriteFontFace3 *This,
+        FLOAT fontEmSize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuringmode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *renderingmode,
+        DWRITE_GRID_FIT_MODE *gridfitmode);
+
+    /*** IDWriteFontFace3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontFace3 *This,
+        IDWriteFontFaceReference **reference);
+
+    void (STDMETHODCALLTYPE *GetPanose)(
+        IDWriteFontFace3 *This,
+        DWRITE_PANOSE *panose);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFontFace3 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFontFace3 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFontFace3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
+        IDWriteFontFace3 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFontFace3 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFontFace3 *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    WINBOOL (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFontFace3 *This,
+        UINT32 character);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace3_GetRecommendedRenderingMode)(
+        IDWriteFontFace3 *This,
+        FLOAT emsize,
+        FLOAT dpi_x,
+        FLOAT dpi_y,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE1 *rendering_mode,
+        DWRITE_GRID_FIT_MODE *gridfit_mode);
+
+    WINBOOL (STDMETHODCALLTYPE *IsCharacterLocal)(
+        IDWriteFontFace3 *This,
+        UINT32 character);
+
+    WINBOOL (STDMETHODCALLTYPE *IsGlyphLocal)(
+        IDWriteFontFace3 *This,
+        UINT16 glyph);
+
+    HRESULT (STDMETHODCALLTYPE *AreCharactersLocal)(
+        IDWriteFontFace3 *This,
+        const WCHAR *characters,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local);
+
+    HRESULT (STDMETHODCALLTYPE *AreGlyphsLocal)(
+        IDWriteFontFace3 *This,
+        const UINT16 *glyphs,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local);
+
+    END_INTERFACE
+} IDWriteFontFace3Vtbl;
+
+interface IDWriteFontFace3 {
+    CONST_VTBL IDWriteFontFace3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFace3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFace3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFace3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFace methods ***/
+#define IDWriteFontFace3_GetType(This) (This)->lpVtbl->GetType(This)
+#define IDWriteFontFace3_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
+#define IDWriteFontFace3_GetIndex(This) (This)->lpVtbl->GetIndex(This)
+#define IDWriteFontFace3_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFace3_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFontFace3_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
+#define IDWriteFontFace3_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
+#define IDWriteFontFace3_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
+#define IDWriteFontFace3_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
+#define IDWriteFontFace3_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
+#define IDWriteFontFace3_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
+#define IDWriteFontFace3_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
+/*** IDWriteFontFace1 methods ***/
+#define IDWriteFontFace3_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
+#define IDWriteFontFace3_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
+#define IDWriteFontFace3_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
+#define IDWriteFontFace3_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFontFace3_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+#define IDWriteFontFace3_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
+#define IDWriteFontFace3_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
+#define IDWriteFontFace3_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
+#define IDWriteFontFace3_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
+#define IDWriteFontFace3_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
+#define IDWriteFontFace3_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
+/*** IDWriteFontFace2 methods ***/
+#define IDWriteFontFace3_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
+#define IDWriteFontFace3_GetColorPaletteCount(This) (This)->lpVtbl->GetColorPaletteCount(This)
+#define IDWriteFontFace3_GetPaletteEntryCount(This) (This)->lpVtbl->GetPaletteEntryCount(This)
+#define IDWriteFontFace3_GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries)
+/*** IDWriteFontFace3 methods ***/
+#define IDWriteFontFace3_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
+#define IDWriteFontFace3_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
+#define IDWriteFontFace3_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFontFace3_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFontFace3_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFontFace3_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
+#define IDWriteFontFace3_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFontFace3_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFontFace3_HasCharacter(This,character) (This)->lpVtbl->HasCharacter(This,character)
+#define IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode) (This)->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode)
+#define IDWriteFontFace3_IsCharacterLocal(This,character) (This)->lpVtbl->IsCharacterLocal(This,character)
+#define IDWriteFontFace3_IsGlyphLocal(This,glyph) (This)->lpVtbl->IsGlyphLocal(This,glyph)
+#define IDWriteFontFace3_AreCharactersLocal(This,characters,count,enqueue_if_not,are_local) (This)->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local)
+#define IDWriteFontFace3_AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local) (This)->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace3_QueryInterface(IDWriteFontFace3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFace3_AddRef(IDWriteFontFace3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFace3_Release(IDWriteFontFace3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFace methods ***/
+static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace3_GetType(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetType(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetFiles(IDWriteFontFace3* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
+    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
+}
+static FORCEINLINE UINT32 IDWriteFontFace3_GetIndex(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace3_GetSimulations(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_IsSymbolFont(IDWriteFontFace3* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE UINT16 IDWriteFontFace3_GetGlyphCount(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetGlyphCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetDesignGlyphMetrics(IDWriteFontFace3* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetGlyphIndices(IDWriteFontFace3* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
+    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_TryGetFontTable(IDWriteFontFace3* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,WINBOOL *exists) {
+    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
+}
+static FORCEINLINE void IDWriteFontFace3_ReleaseFontTable(IDWriteFontFace3* This,void *table_context) {
+    This->lpVtbl->ReleaseFontTable(This,table_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetGlyphRunOutline(IDWriteFontFace3* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,WINBOOL is_sideways,WINBOOL is_rtl,IDWriteGeometrySink *geometrysink) {
+    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetGdiCompatibleGlyphMetrics(IDWriteFontFace3* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
+}
+/*** IDWriteFontFace1 methods ***/
+static FORCEINLINE void IDWriteFontFace3_GetMetrics(IDWriteFontFace3* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetGdiCompatibleMetrics(IDWriteFontFace3* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
+}
+static FORCEINLINE void IDWriteFontFace3_GetCaretMetrics(IDWriteFontFace3* This,DWRITE_CARET_METRICS *metrics) {
+    This->lpVtbl->GetCaretMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetUnicodeRanges(IDWriteFontFace3* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_IsMonospacedFont(IDWriteFontFace3* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetDesignGlyphAdvances(IDWriteFontFace3* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetGdiCompatibleGlyphAdvances(IDWriteFontFace3* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
+    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetKerningPairAdjustments(IDWriteFontFace3* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
+    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_HasKerningPairs(IDWriteFontFace3* This) {
+    return This->lpVtbl->HasKerningPairs(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetVerticalGlyphVariants(IDWriteFontFace3* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
+    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_HasVerticalGlyphVariants(IDWriteFontFace3* This) {
+    return This->lpVtbl->HasVerticalGlyphVariants(This);
+}
+/*** IDWriteFontFace2 methods ***/
+static FORCEINLINE WINBOOL IDWriteFontFace3_IsColorFont(IDWriteFontFace3* This) {
+    return This->lpVtbl->IsColorFont(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace3_GetColorPaletteCount(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetColorPaletteCount(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace3_GetPaletteEntryCount(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetPaletteEntryCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetPaletteEntries(IDWriteFontFace3* This,UINT32 palette_index,UINT32 first_entry_index,UINT32 entry_count,DWRITE_COLOR_F *entries) {
+    return This->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries);
+}
+/*** IDWriteFontFace3 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace3_GetFontFaceReference(IDWriteFontFace3* This,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,reference);
+}
+static FORCEINLINE void IDWriteFontFace3_GetPanose(IDWriteFontFace3* This,DWRITE_PANOSE *panose) {
+    This->lpVtbl->GetPanose(This,panose);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFontFace3_GetWeight(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFontFace3_GetStretch(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFontFace3_GetStyle(IDWriteFontFace3* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetFamilyNames(IDWriteFontFace3* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFamilyNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetFaceNames(IDWriteFontFace3* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetInformationalStrings(IDWriteFontFace3* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_HasCharacter(IDWriteFontFace3* This,UINT32 character) {
+    return This->lpVtbl->HasCharacter(This,character);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_GetRecommendedRenderingMode(IDWriteFontFace3* This,FLOAT emsize,FLOAT dpi_x,FLOAT dpi_y,const DWRITE_MATRIX *transform,WINBOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuring_mode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE1 *rendering_mode,DWRITE_GRID_FIT_MODE *gridfit_mode) {
+    return This->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_IsCharacterLocal(IDWriteFontFace3* This,UINT32 character) {
+    return This->lpVtbl->IsCharacterLocal(This,character);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace3_IsGlyphLocal(IDWriteFontFace3* This,UINT16 glyph) {
+    return This->lpVtbl->IsGlyphLocal(This,glyph);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_AreCharactersLocal(IDWriteFontFace3* This,const WCHAR *characters,UINT32 count,WINBOOL enqueue_if_not,WINBOOL *are_local) {
+    return This->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local);
+}
+static FORCEINLINE HRESULT IDWriteFontFace3_AreGlyphsLocal(IDWriteFontFace3* This,const UINT16 *glyphs,UINT32 count,WINBOOL enqueue_if_not,WINBOOL *are_local) {
+    return This->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFace3_INTERFACE_DEFINED__ */
+
+typedef struct DWRITE_LINE_METRICS1 {
+    UINT32 length;
+    UINT32 trailingWhitespaceLength;
+    UINT32 newlineLength;
+    FLOAT height;
+    FLOAT baseline;
+    WINBOOL isTrimmed;
+    FLOAT leadingBefore;
+    FLOAT leadingAfter;
+} DWRITE_LINE_METRICS1;
+typedef enum DWRITE_FONT_LINE_GAP_USAGE {
+    DWRITE_FONT_LINE_GAP_USAGE_DEFAULT = 0,
+    DWRITE_FONT_LINE_GAP_USAGE_DISABLED = 1,
+    DWRITE_FONT_LINE_GAP_USAGE_ENABLED = 2
+} DWRITE_FONT_LINE_GAP_USAGE;
+typedef struct DWRITE_LINE_SPACING {
+    DWRITE_LINE_SPACING_METHOD method;
+    FLOAT height;
+    FLOAT baseline;
+    FLOAT leadingBefore;
+    DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage;
+} DWRITE_LINE_SPACING;
+/*****************************************************************************
+ * IDWriteTextFormat2 interface
+ */
+#ifndef __IDWriteTextFormat2_INTERFACE_DEFINED__
+#define __IDWriteTextFormat2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextFormat2, 0xf67e0edd, 0x9e3d, 0x4ecc, 0x8c,0x32, 0x41,0x83,0x25,0x3d,0xfe,0x70);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f67e0edd-9e3d-4ecc-8c32-4183253dfe70")
+IDWriteTextFormat2 : public IDWriteTextFormat1
+{
+    virtual HRESULT STDMETHODCALLTYPE SetLineSpacing(
+        const DWRITE_LINE_SPACING *spacing) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLineSpacing(
+        DWRITE_LINE_SPACING *spacing) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextFormat2, 0xf67e0edd, 0x9e3d, 0x4ecc, 0x8c,0x32, 0x41,0x83,0x25,0x3d,0xfe,0x70)
+#endif
+#else
+typedef struct IDWriteTextFormat2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextFormat2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextFormat2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextFormat2 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextFormat2 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextFormat2 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextFormat2 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextFormat2 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextFormat2 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextFormat2 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextFormat2 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextFormat2 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextFormat2 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextFormat2 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextFormat2 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextFormat2 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextFormat2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextFormat2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextFormat2 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextFormat2 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextFormat2 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextFormat2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextFormat2 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextFormat2 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextFormat2 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextFormat2 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextFormat2 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextFormat2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextFormat2 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextFormat1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
+        IDWriteTextFormat2 *This,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+
+    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextFormat2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
+        IDWriteTextFormat2 *This,
+        WINBOOL lastline_wrapping_enabled);
+
+    WINBOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
+        IDWriteTextFormat2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
+        IDWriteTextFormat2 *This,
+        DWRITE_OPTICAL_ALIGNMENT alignment);
+
+    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
+        IDWriteTextFormat2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
+        IDWriteTextFormat2 *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
+        IDWriteTextFormat2 *This,
+        IDWriteFontFallback **fallback);
+
+    /*** IDWriteTextFormat2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextFormat2_SetLineSpacing)(
+        IDWriteTextFormat2 *This,
+        const DWRITE_LINE_SPACING *spacing);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextFormat2_GetLineSpacing)(
+        IDWriteTextFormat2 *This,
+        DWRITE_LINE_SPACING *spacing);
+
+    END_INTERFACE
+} IDWriteTextFormat2Vtbl;
+
+interface IDWriteTextFormat2 {
+    CONST_VTBL IDWriteTextFormat2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextFormat2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextFormat2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextFormat2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextFormat2_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextFormat2_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextFormat2_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextFormat2_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextFormat2_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextFormat2_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextFormat2_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextFormat2_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextFormat2_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextFormat2_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextFormat2_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextFormat2_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextFormat2_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextFormat2_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextFormat2_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteTextFormat2_GetFontFamilyNameLength(This) (This)->lpVtbl->GetFontFamilyNameLength(This)
+#define IDWriteTextFormat2_GetFontFamilyName(This,name,size) (This)->lpVtbl->GetFontFamilyName(This,name,size)
+#define IDWriteTextFormat2_GetFontWeight(This) (This)->lpVtbl->GetFontWeight(This)
+#define IDWriteTextFormat2_GetFontStyle(This) (This)->lpVtbl->GetFontStyle(This)
+#define IDWriteTextFormat2_GetFontStretch(This) (This)->lpVtbl->GetFontStretch(This)
+#define IDWriteTextFormat2_GetFontSize(This) (This)->lpVtbl->GetFontSize(This)
+#define IDWriteTextFormat2_GetLocaleNameLength(This) (This)->lpVtbl->GetLocaleNameLength(This)
+#define IDWriteTextFormat2_GetLocaleName(This,name,size) (This)->lpVtbl->GetLocaleName(This,name,size)
+/*** IDWriteTextFormat1 methods ***/
+#define IDWriteTextFormat2_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
+#define IDWriteTextFormat2_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
+#define IDWriteTextFormat2_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
+#define IDWriteTextFormat2_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
+#define IDWriteTextFormat2_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
+#define IDWriteTextFormat2_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
+#define IDWriteTextFormat2_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
+#define IDWriteTextFormat2_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
+/*** IDWriteTextFormat2 methods ***/
+#define IDWriteTextFormat2_SetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextFormat2_SetLineSpacing(This,spacing)
+#define IDWriteTextFormat2_GetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextFormat2_GetLineSpacing(This,spacing)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat2_QueryInterface(IDWriteTextFormat2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextFormat2_AddRef(IDWriteTextFormat2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextFormat2_Release(IDWriteTextFormat2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetTextAlignment(IDWriteTextFormat2* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetParagraphAlignment(IDWriteTextFormat2* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetWordWrapping(IDWriteTextFormat2* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetReadingDirection(IDWriteTextFormat2* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetFlowDirection(IDWriteTextFormat2* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetIncrementalTabStop(IDWriteTextFormat2* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetTrimming(IDWriteTextFormat2* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextFormat2_GetTextAlignment(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat2_GetParagraphAlignment(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextFormat2_GetWordWrapping(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextFormat2_GetReadingDirection(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextFormat2_GetFlowDirection(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat2_GetIncrementalTabStop(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_GetTrimming(IDWriteTextFormat2* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_GetFontCollection(IDWriteTextFormat2* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat2_GetFontFamilyNameLength(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetFontFamilyNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_GetFontFamilyName(IDWriteTextFormat2* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetFontFamilyName(This,name,size);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteTextFormat2_GetFontWeight(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetFontWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteTextFormat2_GetFontStyle(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetFontStyle(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteTextFormat2_GetFontStretch(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetFontStretch(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat2_GetFontSize(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetFontSize(This);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat2_GetLocaleNameLength(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetLocaleNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_GetLocaleName(IDWriteTextFormat2* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetLocaleName(This,name,size);
+}
+/*** IDWriteTextFormat1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetVerticalGlyphOrientation(IDWriteTextFormat2* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
+    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
+}
+static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextFormat2_GetVerticalGlyphOrientation(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetLastLineWrapping(IDWriteTextFormat2* This,WINBOOL lastline_wrapping_enabled) {
+    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
+}
+static FORCEINLINE WINBOOL IDWriteTextFormat2_GetLastLineWrapping(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetLastLineWrapping(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetOpticalAlignment(IDWriteTextFormat2* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
+    return This->lpVtbl->SetOpticalAlignment(This,alignment);
+}
+static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextFormat2_GetOpticalAlignment(IDWriteTextFormat2* This) {
+    return This->lpVtbl->GetOpticalAlignment(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetFontFallback(IDWriteTextFormat2* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->SetFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_GetFontFallback(IDWriteTextFormat2* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetFontFallback(This,fallback);
+}
+/*** IDWriteTextFormat2 methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat2_SetLineSpacing(IDWriteTextFormat2* This,const DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextFormat2_SetLineSpacing(This,spacing);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat2_GetLineSpacing(IDWriteTextFormat2* This,DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextFormat2_GetLineSpacing(This,spacing);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextFormat2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextFormat3 interface
+ */
+#ifndef __IDWriteTextFormat3_INTERFACE_DEFINED__
+#define __IDWriteTextFormat3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextFormat3, 0x6d3b5641, 0xe550, 0x430d, 0xa8,0x5b, 0xb7,0xbf,0x48,0xa9,0x34,0x27);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6d3b5641-e550-430d-a85b-b7bf48a93427")
+IDWriteTextFormat3 : public IDWriteTextFormat2
+{
+    virtual HRESULT STDMETHODCALLTYPE SetFontAxisValues(
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontAxisValueCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisValues(
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values) = 0;
+
+    virtual DWRITE_AUTOMATIC_FONT_AXES STDMETHODCALLTYPE GetAutomaticFontAxes(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAutomaticFontAxes(
+        DWRITE_AUTOMATIC_FONT_AXES axes) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextFormat3, 0x6d3b5641, 0xe550, 0x430d, 0xa8,0x5b, 0xb7,0xbf,0x48,0xa9,0x34,0x27)
+#endif
+#else
+typedef struct IDWriteTextFormat3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextFormat3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextFormat3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextFormat3 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextFormat3 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextFormat3 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextFormat3 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextFormat3 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextFormat3 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextFormat3 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextFormat3 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextFormat3 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextFormat3 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextFormat3 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextFormat3 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextFormat3 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextFormat3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextFormat3 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextFormat3 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextFormat3 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextFormat3 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextFormat3 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextFormat3 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextFormat3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextFormat3 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextFormat3 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextFormat1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
+        IDWriteTextFormat3 *This,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+
+    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
+        IDWriteTextFormat3 *This,
+        WINBOOL lastline_wrapping_enabled);
+
+    WINBOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
+        IDWriteTextFormat3 *This,
+        DWRITE_OPTICAL_ALIGNMENT alignment);
+
+    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
+        IDWriteTextFormat3 *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
+        IDWriteTextFormat3 *This,
+        IDWriteFontFallback **fallback);
+
+    /*** IDWriteTextFormat2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextFormat2_SetLineSpacing)(
+        IDWriteTextFormat3 *This,
+        const DWRITE_LINE_SPACING *spacing);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextFormat2_GetLineSpacing)(
+        IDWriteTextFormat3 *This,
+        DWRITE_LINE_SPACING *spacing);
+
+    /*** IDWriteTextFormat3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetFontAxisValues)(
+        IDWriteTextFormat3 *This,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontAxisValueCount)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisValues)(
+        IDWriteTextFormat3 *This,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values);
+
+    DWRITE_AUTOMATIC_FONT_AXES (STDMETHODCALLTYPE *GetAutomaticFontAxes)(
+        IDWriteTextFormat3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutomaticFontAxes)(
+        IDWriteTextFormat3 *This,
+        DWRITE_AUTOMATIC_FONT_AXES axes);
+
+    END_INTERFACE
+} IDWriteTextFormat3Vtbl;
+
+interface IDWriteTextFormat3 {
+    CONST_VTBL IDWriteTextFormat3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextFormat3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextFormat3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextFormat3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextFormat3_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextFormat3_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextFormat3_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextFormat3_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextFormat3_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextFormat3_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextFormat3_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextFormat3_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextFormat3_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextFormat3_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextFormat3_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextFormat3_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextFormat3_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextFormat3_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+#define IDWriteTextFormat3_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
+#define IDWriteTextFormat3_GetFontFamilyNameLength(This) (This)->lpVtbl->GetFontFamilyNameLength(This)
+#define IDWriteTextFormat3_GetFontFamilyName(This,name,size) (This)->lpVtbl->GetFontFamilyName(This,name,size)
+#define IDWriteTextFormat3_GetFontWeight(This) (This)->lpVtbl->GetFontWeight(This)
+#define IDWriteTextFormat3_GetFontStyle(This) (This)->lpVtbl->GetFontStyle(This)
+#define IDWriteTextFormat3_GetFontStretch(This) (This)->lpVtbl->GetFontStretch(This)
+#define IDWriteTextFormat3_GetFontSize(This) (This)->lpVtbl->GetFontSize(This)
+#define IDWriteTextFormat3_GetLocaleNameLength(This) (This)->lpVtbl->GetLocaleNameLength(This)
+#define IDWriteTextFormat3_GetLocaleName(This,name,size) (This)->lpVtbl->GetLocaleName(This,name,size)
+/*** IDWriteTextFormat1 methods ***/
+#define IDWriteTextFormat3_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
+#define IDWriteTextFormat3_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
+#define IDWriteTextFormat3_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
+#define IDWriteTextFormat3_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
+#define IDWriteTextFormat3_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
+#define IDWriteTextFormat3_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
+#define IDWriteTextFormat3_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
+#define IDWriteTextFormat3_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
+/*** IDWriteTextFormat2 methods ***/
+#define IDWriteTextFormat3_SetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextFormat2_SetLineSpacing(This,spacing)
+#define IDWriteTextFormat3_GetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextFormat2_GetLineSpacing(This,spacing)
+/*** IDWriteTextFormat3 methods ***/
+#define IDWriteTextFormat3_SetFontAxisValues(This,axis_values,num_values) (This)->lpVtbl->SetFontAxisValues(This,axis_values,num_values)
+#define IDWriteTextFormat3_GetFontAxisValueCount(This) (This)->lpVtbl->GetFontAxisValueCount(This)
+#define IDWriteTextFormat3_GetFontAxisValues(This,axis_values,num_values) (This)->lpVtbl->GetFontAxisValues(This,axis_values,num_values)
+#define IDWriteTextFormat3_GetAutomaticFontAxes(This) (This)->lpVtbl->GetAutomaticFontAxes(This)
+#define IDWriteTextFormat3_SetAutomaticFontAxes(This,axes) (This)->lpVtbl->SetAutomaticFontAxes(This,axes)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat3_QueryInterface(IDWriteTextFormat3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextFormat3_AddRef(IDWriteTextFormat3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextFormat3_Release(IDWriteTextFormat3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetTextAlignment(IDWriteTextFormat3* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetParagraphAlignment(IDWriteTextFormat3* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetWordWrapping(IDWriteTextFormat3* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetReadingDirection(IDWriteTextFormat3* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetFlowDirection(IDWriteTextFormat3* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetIncrementalTabStop(IDWriteTextFormat3* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetTrimming(IDWriteTextFormat3* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextFormat3_GetTextAlignment(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat3_GetParagraphAlignment(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextFormat3_GetWordWrapping(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextFormat3_GetReadingDirection(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextFormat3_GetFlowDirection(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat3_GetIncrementalTabStop(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetTrimming(IDWriteTextFormat3* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetFontCollection(IDWriteTextFormat3* This,IDWriteFontCollection **collection) {
+    return This->lpVtbl->GetFontCollection(This,collection);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat3_GetFontFamilyNameLength(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFontFamilyNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetFontFamilyName(IDWriteTextFormat3* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetFontFamilyName(This,name,size);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteTextFormat3_GetFontWeight(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFontWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteTextFormat3_GetFontStyle(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFontStyle(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteTextFormat3_GetFontStretch(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFontStretch(This);
+}
+static FORCEINLINE FLOAT IDWriteTextFormat3_GetFontSize(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFontSize(This);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat3_GetLocaleNameLength(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetLocaleNameLength(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetLocaleName(IDWriteTextFormat3* This,WCHAR *name,UINT32 size) {
+    return This->lpVtbl->GetLocaleName(This,name,size);
+}
+/*** IDWriteTextFormat1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetVerticalGlyphOrientation(IDWriteTextFormat3* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
+    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
+}
+static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextFormat3_GetVerticalGlyphOrientation(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetLastLineWrapping(IDWriteTextFormat3* This,WINBOOL lastline_wrapping_enabled) {
+    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
+}
+static FORCEINLINE WINBOOL IDWriteTextFormat3_GetLastLineWrapping(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetLastLineWrapping(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetOpticalAlignment(IDWriteTextFormat3* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
+    return This->lpVtbl->SetOpticalAlignment(This,alignment);
+}
+static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextFormat3_GetOpticalAlignment(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetOpticalAlignment(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetFontFallback(IDWriteTextFormat3* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->SetFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetFontFallback(IDWriteTextFormat3* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetFontFallback(This,fallback);
+}
+/*** IDWriteTextFormat2 methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetLineSpacing(IDWriteTextFormat3* This,const DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextFormat2_SetLineSpacing(This,spacing);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetLineSpacing(IDWriteTextFormat3* This,DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextFormat2_GetLineSpacing(This,spacing);
+}
+/*** IDWriteTextFormat3 methods ***/
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetFontAxisValues(IDWriteTextFormat3* This,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values) {
+    return This->lpVtbl->SetFontAxisValues(This,axis_values,num_values);
+}
+static FORCEINLINE UINT32 IDWriteTextFormat3_GetFontAxisValueCount(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetFontAxisValueCount(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetFontAxisValues(IDWriteTextFormat3* This,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values) {
+    return This->lpVtbl->GetFontAxisValues(This,axis_values,num_values);
+}
+static FORCEINLINE DWRITE_AUTOMATIC_FONT_AXES IDWriteTextFormat3_GetAutomaticFontAxes(IDWriteTextFormat3* This) {
+    return This->lpVtbl->GetAutomaticFontAxes(This);
+}
+static FORCEINLINE HRESULT IDWriteTextFormat3_SetAutomaticFontAxes(IDWriteTextFormat3* This,DWRITE_AUTOMATIC_FONT_AXES axes) {
+    return This->lpVtbl->SetAutomaticFontAxes(This,axes);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextFormat3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextLayout3 interface
+ */
+#ifndef __IDWriteTextLayout3_INTERFACE_DEFINED__
+#define __IDWriteTextLayout3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextLayout3, 0x07ddcd52, 0x020e, 0x4de8, 0xac,0x33, 0x6c,0x95,0x3d,0x83,0xf9,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("07ddcd52-020e-4de8-ac33-6c953d83f92d")
+IDWriteTextLayout3 : public IDWriteTextLayout2
+{
+    virtual HRESULT STDMETHODCALLTYPE InvalidateLayout(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLineSpacing(
+        const DWRITE_LINE_SPACING *spacing) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLineSpacing(
+        DWRITE_LINE_SPACING *spacing) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLineMetrics(
+        DWRITE_LINE_METRICS1 *metrics,
+        UINT32 max_count,
+        UINT32 *count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextLayout3, 0x07ddcd52, 0x020e, 0x4de8, 0xac,0x33, 0x6c,0x95,0x3d,0x83,0xf9,0x2d)
+#endif
+#else
+typedef struct IDWriteTextLayout3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextLayout3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextLayout3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextLayout3 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextLayout3 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextLayout3 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextLayout3 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextLayout3 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextLayout3 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextLayout3 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextLayout3 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextLayout3 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextLayout3 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextLayout3 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextLayout3 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextLayout3 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextLayout3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextLayout3 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextLayout3 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextLayout3 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextLayout3 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextLayout3 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextLayout3 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextLayout3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextLayout3 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextLayout3 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextLayout methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetMaxWidth)(
+        IDWriteTextLayout3 *This,
+        FLOAT maxWidth);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaxHeight)(
+        IDWriteTextLayout3 *This,
+        FLOAT maxHeight);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontCollection)(
+        IDWriteTextLayout3 *This,
+        IDWriteFontCollection *collection,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFamilyName)(
+        IDWriteTextLayout3 *This,
+        const WCHAR *name,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontWeight)(
+        IDWriteTextLayout3 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStyle)(
+        IDWriteTextLayout3 *This,
+        DWRITE_FONT_STYLE style,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStretch)(
+        IDWriteTextLayout3 *This,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontSize)(
+        IDWriteTextLayout3 *This,
+        FLOAT size,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnderline)(
+        IDWriteTextLayout3 *This,
+        WINBOOL underline,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetStrikethrough)(
+        IDWriteTextLayout3 *This,
+        WINBOOL strikethrough,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetDrawingEffect)(
+        IDWriteTextLayout3 *This,
+        IUnknown *effect,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(
+        IDWriteTextLayout3 *This,
+        IDWriteInlineObject *object,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypography)(
+        IDWriteTextLayout3 *This,
+        IDWriteTypography *typography,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetLocaleName)(
+        IDWriteTextLayout3 *This,
+        const WCHAR *locale,
+        DWRITE_TEXT_RANGE range);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxWidth)(
+        IDWriteTextLayout3 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxHeight)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontCollection)(
+        IDWriteTextLayout3 *This,
+        UINT32 pos,
+        IDWriteFontCollection **collection,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyNameLength)(
+        IDWriteTextLayout3 *This,
+        UINT32 pos,
+        UINT32 *len,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyName)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontWeight)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStyle)(
+        IDWriteTextLayout3 *This,
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStretch)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontSize)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        FLOAT *size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnderline)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        WINBOOL *has_underline,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrikethrough)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        WINBOOL *has_strikethrough,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetDrawingEffect)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        IUnknown **effect,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        IDWriteInlineObject **object,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypography)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        IDWriteTypography **typography,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleNameLength)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        UINT32 *length,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleName)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IDWriteTextLayout3 *This,
+        void *context,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineMetrics)(
+        IDWriteTextLayout3 *This,
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteTextLayout3 *This,
+        DWRITE_TEXT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
+        IDWriteTextLayout3 *This,
+        DWRITE_OVERHANG_METRICS *overhangs);
+
+    HRESULT (STDMETHODCALLTYPE *GetClusterMetrics)(
+        IDWriteTextLayout3 *This,
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *act_count);
+
+    HRESULT (STDMETHODCALLTYPE *DetermineMinWidth)(
+        IDWriteTextLayout3 *This,
+        FLOAT *min_width);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestPoint)(
+        IDWriteTextLayout3 *This,
+        FLOAT pointX,
+        FLOAT pointY,
+        WINBOOL *is_trailinghit,
+        WINBOOL *is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextPosition)(
+        IDWriteTextLayout3 *This,
+        UINT32 textPosition,
+        WINBOOL is_trailinghit,
+        FLOAT *pointX,
+        FLOAT *pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextRange)(
+        IDWriteTextLayout3 *This,
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32 *actual_metricscount);
+
+    /*** IDWriteTextLayout1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPairKerning)(
+        IDWriteTextLayout3 *This,
+        WINBOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetPairKerning)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        WINBOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *SetCharacterSpacing)(
+        IDWriteTextLayout3 *This,
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetCharacterSpacing)(
+        IDWriteTextLayout3 *This,
+        UINT32 position,
+        FLOAT *leading_spacing,
+        FLOAT *trailing_spacing,
+        FLOAT *minimum_advance_width,
+        DWRITE_TEXT_RANGE *range);
+
+    /*** IDWriteTextLayout2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout2_GetMetrics)(
+        IDWriteTextLayout3 *This,
+        DWRITE_TEXT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
+        IDWriteTextLayout3 *This,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+
+    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
+        IDWriteTextLayout3 *This,
+        WINBOOL lastline_wrapping_enabled);
+
+    WINBOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
+        IDWriteTextLayout3 *This,
+        DWRITE_OPTICAL_ALIGNMENT alignment);
+
+    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
+        IDWriteTextLayout3 *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
+        IDWriteTextLayout3 *This,
+        IDWriteFontFallback **fallback);
+
+    /*** IDWriteTextLayout3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *InvalidateLayout)(
+        IDWriteTextLayout3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_SetLineSpacing)(
+        IDWriteTextLayout3 *This,
+        const DWRITE_LINE_SPACING *spacing);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_GetLineSpacing)(
+        IDWriteTextLayout3 *This,
+        DWRITE_LINE_SPACING *spacing);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_GetLineMetrics)(
+        IDWriteTextLayout3 *This,
+        DWRITE_LINE_METRICS1 *metrics,
+        UINT32 max_count,
+        UINT32 *count);
+
+    END_INTERFACE
+} IDWriteTextLayout3Vtbl;
+
+interface IDWriteTextLayout3 {
+    CONST_VTBL IDWriteTextLayout3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextLayout3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextLayout3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextLayout3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextLayout3_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextLayout3_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextLayout3_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextLayout3_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextLayout3_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextLayout3_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextLayout3_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextLayout3_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextLayout3_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextLayout3_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextLayout3_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextLayout3_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextLayout3_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextLayout3_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+/*** IDWriteTextLayout methods ***/
+#define IDWriteTextLayout3_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
+#define IDWriteTextLayout3_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
+#define IDWriteTextLayout3_SetFontCollection(This,collection,range) (This)->lpVtbl->SetFontCollection(This,collection,range)
+#define IDWriteTextLayout3_SetFontFamilyName(This,name,range) (This)->lpVtbl->SetFontFamilyName(This,name,range)
+#define IDWriteTextLayout3_SetFontWeight(This,weight,range) (This)->lpVtbl->SetFontWeight(This,weight,range)
+#define IDWriteTextLayout3_SetFontStyle(This,style,range) (This)->lpVtbl->SetFontStyle(This,style,range)
+#define IDWriteTextLayout3_SetFontStretch(This,stretch,range) (This)->lpVtbl->SetFontStretch(This,stretch,range)
+#define IDWriteTextLayout3_SetFontSize(This,size,range) (This)->lpVtbl->SetFontSize(This,size,range)
+#define IDWriteTextLayout3_SetUnderline(This,underline,range) (This)->lpVtbl->SetUnderline(This,underline,range)
+#define IDWriteTextLayout3_SetStrikethrough(This,strikethrough,range) (This)->lpVtbl->SetStrikethrough(This,strikethrough,range)
+#define IDWriteTextLayout3_SetDrawingEffect(This,effect,range) (This)->lpVtbl->SetDrawingEffect(This,effect,range)
+#define IDWriteTextLayout3_SetInlineObject(This,object,range) (This)->lpVtbl->SetInlineObject(This,object,range)
+#define IDWriteTextLayout3_SetTypography(This,typography,range) (This)->lpVtbl->SetTypography(This,typography,range)
+#define IDWriteTextLayout3_SetLocaleName(This,locale,range) (This)->lpVtbl->SetLocaleName(This,locale,range)
+#define IDWriteTextLayout3_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
+#define IDWriteTextLayout3_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
+#define IDWriteTextLayout3_GetFontCollection(This,pos,collection,range) (This)->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range)
+#define IDWriteTextLayout3_GetFontFamilyNameLength(This,pos,len,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range)
+#define IDWriteTextLayout3_GetFontFamilyName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range)
+#define IDWriteTextLayout3_GetFontWeight(This,position,weight,range) (This)->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range)
+#define IDWriteTextLayout3_GetFontStyle(This,currentPosition,style,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range)
+#define IDWriteTextLayout3_GetFontStretch(This,position,stretch,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range)
+#define IDWriteTextLayout3_GetFontSize(This,position,size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range)
+#define IDWriteTextLayout3_GetUnderline(This,position,has_underline,range) (This)->lpVtbl->GetUnderline(This,position,has_underline,range)
+#define IDWriteTextLayout3_GetStrikethrough(This,position,has_strikethrough,range) (This)->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range)
+#define IDWriteTextLayout3_GetDrawingEffect(This,position,effect,range) (This)->lpVtbl->GetDrawingEffect(This,position,effect,range)
+#define IDWriteTextLayout3_GetInlineObject(This,position,object,range) (This)->lpVtbl->GetInlineObject(This,position,object,range)
+#define IDWriteTextLayout3_GetTypography(This,position,typography,range) (This)->lpVtbl->GetTypography(This,position,typography,range)
+#define IDWriteTextLayout3_GetLocaleNameLength(This,position,length,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range)
+#define IDWriteTextLayout3_GetLocaleName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range)
+#define IDWriteTextLayout3_Draw(This,context,renderer,originX,originY) (This)->lpVtbl->Draw(This,context,renderer,originX,originY)
+#define IDWriteTextLayout3_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
+#define IDWriteTextLayout3_GetClusterMetrics(This,metrics,max_count,act_count) (This)->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count)
+#define IDWriteTextLayout3_DetermineMinWidth(This,min_width) (This)->lpVtbl->DetermineMinWidth(This,min_width)
+#define IDWriteTextLayout3_HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics)
+#define IDWriteTextLayout3_HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics)
+#define IDWriteTextLayout3_HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount)
+/*** IDWriteTextLayout1 methods ***/
+#define IDWriteTextLayout3_SetPairKerning(This,is_pairkerning_enabled,range) (This)->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range)
+#define IDWriteTextLayout3_GetPairKerning(This,position,is_pairkerning_enabled,range) (This)->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range)
+#define IDWriteTextLayout3_SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range)
+#define IDWriteTextLayout3_GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range)
+/*** IDWriteTextLayout2 methods ***/
+#define IDWriteTextLayout3_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics)
+#define IDWriteTextLayout3_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
+#define IDWriteTextLayout3_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
+#define IDWriteTextLayout3_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
+#define IDWriteTextLayout3_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
+#define IDWriteTextLayout3_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
+#define IDWriteTextLayout3_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
+#define IDWriteTextLayout3_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
+#define IDWriteTextLayout3_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
+/*** IDWriteTextLayout3 methods ***/
+#define IDWriteTextLayout3_InvalidateLayout(This) (This)->lpVtbl->InvalidateLayout(This)
+#define IDWriteTextLayout3_SetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextLayout3_SetLineSpacing(This,spacing)
+#define IDWriteTextLayout3_GetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextLayout3_GetLineSpacing(This,spacing)
+#define IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count) (This)->lpVtbl->IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout3_QueryInterface(IDWriteTextLayout3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextLayout3_AddRef(IDWriteTextLayout3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextLayout3_Release(IDWriteTextLayout3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetTextAlignment(IDWriteTextLayout3* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetParagraphAlignment(IDWriteTextLayout3* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetWordWrapping(IDWriteTextLayout3* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetReadingDirection(IDWriteTextLayout3* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFlowDirection(IDWriteTextLayout3* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetIncrementalTabStop(IDWriteTextLayout3* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetTrimming(IDWriteTextLayout3* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextLayout3_GetTextAlignment(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextLayout3_GetParagraphAlignment(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextLayout3_GetWordWrapping(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextLayout3_GetReadingDirection(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextLayout3_GetFlowDirection(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout3_GetIncrementalTabStop(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetTrimming(IDWriteTextLayout3* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+/*** IDWriteTextLayout methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetMaxWidth(IDWriteTextLayout3* This,FLOAT maxWidth) {
+    return This->lpVtbl->SetMaxWidth(This,maxWidth);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetMaxHeight(IDWriteTextLayout3* This,FLOAT maxHeight) {
+    return This->lpVtbl->SetMaxHeight(This,maxHeight);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontCollection(IDWriteTextLayout3* This,IDWriteFontCollection *collection,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontCollection(This,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontFamilyName(IDWriteTextLayout3* This,const WCHAR *name,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontFamilyName(This,name,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontWeight(IDWriteTextLayout3* This,DWRITE_FONT_WEIGHT weight,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontWeight(This,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontStyle(IDWriteTextLayout3* This,DWRITE_FONT_STYLE style,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStyle(This,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontStretch(IDWriteTextLayout3* This,DWRITE_FONT_STRETCH stretch,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStretch(This,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontSize(IDWriteTextLayout3* This,FLOAT size,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontSize(This,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetUnderline(IDWriteTextLayout3* This,WINBOOL underline,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetUnderline(This,underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetStrikethrough(IDWriteTextLayout3* This,WINBOOL strikethrough,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetStrikethrough(This,strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetDrawingEffect(IDWriteTextLayout3* This,IUnknown *effect,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetDrawingEffect(This,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetInlineObject(IDWriteTextLayout3* This,IDWriteInlineObject *object,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetInlineObject(This,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetTypography(IDWriteTextLayout3* This,IDWriteTypography *typography,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetTypography(This,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetLocaleName(IDWriteTextLayout3* This,const WCHAR *locale,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetLocaleName(This,locale,range);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout3_GetMaxWidth(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetMaxWidth(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout3_GetMaxHeight(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetMaxHeight(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontCollection(IDWriteTextLayout3* This,UINT32 pos,IDWriteFontCollection **collection,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontFamilyNameLength(IDWriteTextLayout3* This,UINT32 pos,UINT32 *len,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontFamilyName(IDWriteTextLayout3* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontWeight(IDWriteTextLayout3* This,UINT32 position,DWRITE_FONT_WEIGHT *weight,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontStyle(IDWriteTextLayout3* This,UINT32 currentPosition,DWRITE_FONT_STYLE *style,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontStretch(IDWriteTextLayout3* This,UINT32 position,DWRITE_FONT_STRETCH *stretch,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontSize(IDWriteTextLayout3* This,UINT32 position,FLOAT *size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetUnderline(IDWriteTextLayout3* This,UINT32 position,WINBOOL *has_underline,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetUnderline(This,position,has_underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetStrikethrough(IDWriteTextLayout3* This,UINT32 position,WINBOOL *has_strikethrough,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetDrawingEffect(IDWriteTextLayout3* This,UINT32 position,IUnknown **effect,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetDrawingEffect(This,position,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetInlineObject(IDWriteTextLayout3* This,UINT32 position,IDWriteInlineObject **object,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetInlineObject(This,position,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetTypography(IDWriteTextLayout3* This,UINT32 position,IDWriteTypography **typography,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetTypography(This,position,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetLocaleNameLength(IDWriteTextLayout3* This,UINT32 position,UINT32 *length,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetLocaleName(IDWriteTextLayout3* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_Draw(IDWriteTextLayout3* This,void *context,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY) {
+    return This->lpVtbl->Draw(This,context,renderer,originX,originY);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetOverhangMetrics(IDWriteTextLayout3* This,DWRITE_OVERHANG_METRICS *overhangs) {
+    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetClusterMetrics(IDWriteTextLayout3* This,DWRITE_CLUSTER_METRICS *metrics,UINT32 max_count,UINT32 *act_count) {
+    return This->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_DetermineMinWidth(IDWriteTextLayout3* This,FLOAT *min_width) {
+    return This->lpVtbl->DetermineMinWidth(This,min_width);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_HitTestPoint(IDWriteTextLayout3* This,FLOAT pointX,FLOAT pointY,WINBOOL *is_trailinghit,WINBOOL *is_inside,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_HitTestTextPosition(IDWriteTextLayout3* This,UINT32 textPosition,WINBOOL is_trailinghit,FLOAT *pointX,FLOAT *pointY,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_HitTestTextRange(IDWriteTextLayout3* This,UINT32 textPosition,UINT32 textLength,FLOAT originX,FLOAT originY,DWRITE_HIT_TEST_METRICS *metrics,UINT32 max_metricscount,UINT32 *actual_metricscount) {
+    return This->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount);
+}
+/*** IDWriteTextLayout1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetPairKerning(IDWriteTextLayout3* This,WINBOOL is_pairkerning_enabled,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetPairKerning(IDWriteTextLayout3* This,UINT32 position,WINBOOL *is_pairkerning_enabled,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetCharacterSpacing(IDWriteTextLayout3* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT minimum_advance_width,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetCharacterSpacing(IDWriteTextLayout3* This,UINT32 position,FLOAT *leading_spacing,FLOAT *trailing_spacing,FLOAT *minimum_advance_width,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+/*** IDWriteTextLayout2 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetMetrics(IDWriteTextLayout3* This,DWRITE_TEXT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetVerticalGlyphOrientation(IDWriteTextLayout3* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
+    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
+}
+static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextLayout3_GetVerticalGlyphOrientation(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetLastLineWrapping(IDWriteTextLayout3* This,WINBOOL lastline_wrapping_enabled) {
+    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
+}
+static FORCEINLINE WINBOOL IDWriteTextLayout3_GetLastLineWrapping(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetLastLineWrapping(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetOpticalAlignment(IDWriteTextLayout3* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
+    return This->lpVtbl->SetOpticalAlignment(This,alignment);
+}
+static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextLayout3_GetOpticalAlignment(IDWriteTextLayout3* This) {
+    return This->lpVtbl->GetOpticalAlignment(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontFallback(IDWriteTextLayout3* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->SetFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontFallback(IDWriteTextLayout3* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetFontFallback(This,fallback);
+}
+/*** IDWriteTextLayout3 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout3_InvalidateLayout(IDWriteTextLayout3* This) {
+    return This->lpVtbl->InvalidateLayout(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_SetLineSpacing(IDWriteTextLayout3* This,const DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextLayout3_SetLineSpacing(This,spacing);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetLineSpacing(IDWriteTextLayout3* This,DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextLayout3_GetLineSpacing(This,spacing);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout3_GetLineMetrics(IDWriteTextLayout3* This,DWRITE_LINE_METRICS1 *metrics,UINT32 max_count,UINT32 *count) {
+    return This->lpVtbl->IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextLayout3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteTextLayout4 interface
+ */
+#ifndef __IDWriteTextLayout4_INTERFACE_DEFINED__
+#define __IDWriteTextLayout4_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteTextLayout4, 0x05a9bf42, 0x223f, 0x4441, 0xb5,0xfb, 0x82,0x63,0x68,0x5f,0x55,0xe9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("05a9bf42-223f-4441-b5fb-8263685f55e9")
+IDWriteTextLayout4 : public IDWriteTextLayout3
+{
+    virtual HRESULT STDMETHODCALLTYPE SetFontAxisValues(
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        DWRITE_TEXT_RANGE range) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFontAxisValueCount(
+        UINT32 pos) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisValues(
+        UINT32 pos,
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values,
+        DWRITE_TEXT_RANGE *range) = 0;
+
+    virtual DWRITE_AUTOMATIC_FONT_AXES STDMETHODCALLTYPE GetAutomaticFontAxes(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAutomaticFontAxes(
+        DWRITE_AUTOMATIC_FONT_AXES axes) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteTextLayout4, 0x05a9bf42, 0x223f, 0x4441, 0xb5,0xfb, 0x82,0x63,0x68,0x5f,0x55,0xe9)
+#endif
+#else
+typedef struct IDWriteTextLayout4Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteTextLayout4 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteTextLayout4 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteTextLayout4 *This);
+
+    /*** IDWriteTextFormat methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
+        IDWriteTextLayout4 *This,
+        DWRITE_TEXT_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
+        IDWriteTextLayout4 *This,
+        DWRITE_PARAGRAPH_ALIGNMENT alignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
+        IDWriteTextLayout4 *This,
+        DWRITE_WORD_WRAPPING wrapping);
+
+    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
+        IDWriteTextLayout4 *This,
+        DWRITE_READING_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
+        IDWriteTextLayout4 *This,
+        DWRITE_FLOW_DIRECTION direction);
+
+    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
+        IDWriteTextLayout4 *This,
+        FLOAT tabstop);
+
+    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
+        IDWriteTextLayout4 *This,
+        const DWRITE_TRIMMING *trimming,
+        IDWriteInlineObject *trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
+        IDWriteTextLayout4 *This,
+        DWRITE_LINE_SPACING_METHOD spacing,
+        FLOAT line_spacing,
+        FLOAT baseline);
+
+    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
+        IDWriteTextLayout4 *This);
+
+    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
+        IDWriteTextLayout4 *This);
+
+    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
+        IDWriteTextLayout4 *This);
+
+    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
+        IDWriteTextLayout4 *This);
+
+    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
+        IDWriteTextLayout4 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
+        IDWriteTextLayout4 *This,
+        DWRITE_TRIMMING *options,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
+        IDWriteTextLayout4 *This,
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
+        IDWriteTextLayout4 *This,
+        IDWriteFontCollection **collection);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
+        IDWriteTextLayout4 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
+        IDWriteTextLayout4 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
+        IDWriteTextLayout4 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
+        IDWriteTextLayout4 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
+        IDWriteTextLayout4 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
+        IDWriteTextLayout4 *This,
+        WCHAR *name,
+        UINT32 size);
+
+    /*** IDWriteTextLayout methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetMaxWidth)(
+        IDWriteTextLayout4 *This,
+        FLOAT maxWidth);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaxHeight)(
+        IDWriteTextLayout4 *This,
+        FLOAT maxHeight);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontCollection)(
+        IDWriteTextLayout4 *This,
+        IDWriteFontCollection *collection,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFamilyName)(
+        IDWriteTextLayout4 *This,
+        const WCHAR *name,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontWeight)(
+        IDWriteTextLayout4 *This,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStyle)(
+        IDWriteTextLayout4 *This,
+        DWRITE_FONT_STYLE style,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontStretch)(
+        IDWriteTextLayout4 *This,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontSize)(
+        IDWriteTextLayout4 *This,
+        FLOAT size,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnderline)(
+        IDWriteTextLayout4 *This,
+        WINBOOL underline,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetStrikethrough)(
+        IDWriteTextLayout4 *This,
+        WINBOOL strikethrough,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetDrawingEffect)(
+        IDWriteTextLayout4 *This,
+        IUnknown *effect,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(
+        IDWriteTextLayout4 *This,
+        IDWriteInlineObject *object,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypography)(
+        IDWriteTextLayout4 *This,
+        IDWriteTypography *typography,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *SetLocaleName)(
+        IDWriteTextLayout4 *This,
+        const WCHAR *locale,
+        DWRITE_TEXT_RANGE range);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxWidth)(
+        IDWriteTextLayout4 *This);
+
+    FLOAT (STDMETHODCALLTYPE *GetMaxHeight)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontCollection)(
+        IDWriteTextLayout4 *This,
+        UINT32 pos,
+        IDWriteFontCollection **collection,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyNameLength)(
+        IDWriteTextLayout4 *This,
+        UINT32 pos,
+        UINT32 *len,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyName)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontWeight)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStyle)(
+        IDWriteTextLayout4 *This,
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStretch)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontSize)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        FLOAT *size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnderline)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        WINBOOL *has_underline,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetStrikethrough)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        WINBOOL *has_strikethrough,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetDrawingEffect)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        IUnknown **effect,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        IDWriteInlineObject **object,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypography)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        IDWriteTypography **typography,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleNameLength)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        UINT32 *length,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleName)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        WCHAR *name,
+        UINT32 name_size,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IDWriteTextLayout4 *This,
+        void *context,
+        IDWriteTextRenderer *renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT (STDMETHODCALLTYPE *GetLineMetrics)(
+        IDWriteTextLayout4 *This,
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteTextLayout4 *This,
+        DWRITE_TEXT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
+        IDWriteTextLayout4 *This,
+        DWRITE_OVERHANG_METRICS *overhangs);
+
+    HRESULT (STDMETHODCALLTYPE *GetClusterMetrics)(
+        IDWriteTextLayout4 *This,
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *act_count);
+
+    HRESULT (STDMETHODCALLTYPE *DetermineMinWidth)(
+        IDWriteTextLayout4 *This,
+        FLOAT *min_width);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestPoint)(
+        IDWriteTextLayout4 *This,
+        FLOAT pointX,
+        FLOAT pointY,
+        WINBOOL *is_trailinghit,
+        WINBOOL *is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextPosition)(
+        IDWriteTextLayout4 *This,
+        UINT32 textPosition,
+        WINBOOL is_trailinghit,
+        FLOAT *pointX,
+        FLOAT *pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *HitTestTextRange)(
+        IDWriteTextLayout4 *This,
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32 *actual_metricscount);
+
+    /*** IDWriteTextLayout1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPairKerning)(
+        IDWriteTextLayout4 *This,
+        WINBOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetPairKerning)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        WINBOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT (STDMETHODCALLTYPE *SetCharacterSpacing)(
+        IDWriteTextLayout4 *This,
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT (STDMETHODCALLTYPE *GetCharacterSpacing)(
+        IDWriteTextLayout4 *This,
+        UINT32 position,
+        FLOAT *leading_spacing,
+        FLOAT *trailing_spacing,
+        FLOAT *minimum_advance_width,
+        DWRITE_TEXT_RANGE *range);
+
+    /*** IDWriteTextLayout2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout2_GetMetrics)(
+        IDWriteTextLayout4 *This,
+        DWRITE_TEXT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
+        IDWriteTextLayout4 *This,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);
+
+    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
+        IDWriteTextLayout4 *This,
+        WINBOOL lastline_wrapping_enabled);
+
+    WINBOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
+        IDWriteTextLayout4 *This,
+        DWRITE_OPTICAL_ALIGNMENT alignment);
+
+    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
+        IDWriteTextLayout4 *This,
+        IDWriteFontFallback *fallback);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
+        IDWriteTextLayout4 *This,
+        IDWriteFontFallback **fallback);
+
+    /*** IDWriteTextLayout3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *InvalidateLayout)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_SetLineSpacing)(
+        IDWriteTextLayout4 *This,
+        const DWRITE_LINE_SPACING *spacing);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_GetLineSpacing)(
+        IDWriteTextLayout4 *This,
+        DWRITE_LINE_SPACING *spacing);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_GetLineMetrics)(
+        IDWriteTextLayout4 *This,
+        DWRITE_LINE_METRICS1 *metrics,
+        UINT32 max_count,
+        UINT32 *count);
+
+    /*** IDWriteTextLayout4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetFontAxisValues)(
+        IDWriteTextLayout4 *This,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        DWRITE_TEXT_RANGE range);
+
+    UINT32 (STDMETHODCALLTYPE *GetFontAxisValueCount)(
+        IDWriteTextLayout4 *This,
+        UINT32 pos);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisValues)(
+        IDWriteTextLayout4 *This,
+        UINT32 pos,
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values,
+        DWRITE_TEXT_RANGE *range);
+
+    DWRITE_AUTOMATIC_FONT_AXES (STDMETHODCALLTYPE *GetAutomaticFontAxes)(
+        IDWriteTextLayout4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutomaticFontAxes)(
+        IDWriteTextLayout4 *This,
+        DWRITE_AUTOMATIC_FONT_AXES axes);
+
+    END_INTERFACE
+} IDWriteTextLayout4Vtbl;
+
+interface IDWriteTextLayout4 {
+    CONST_VTBL IDWriteTextLayout4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteTextLayout4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteTextLayout4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteTextLayout4_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteTextFormat methods ***/
+#define IDWriteTextLayout4_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
+#define IDWriteTextLayout4_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
+#define IDWriteTextLayout4_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
+#define IDWriteTextLayout4_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
+#define IDWriteTextLayout4_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
+#define IDWriteTextLayout4_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
+#define IDWriteTextLayout4_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
+#define IDWriteTextLayout4_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
+#define IDWriteTextLayout4_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
+#define IDWriteTextLayout4_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
+#define IDWriteTextLayout4_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
+#define IDWriteTextLayout4_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
+#define IDWriteTextLayout4_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
+#define IDWriteTextLayout4_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
+/*** IDWriteTextLayout methods ***/
+#define IDWriteTextLayout4_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
+#define IDWriteTextLayout4_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
+#define IDWriteTextLayout4_SetFontCollection(This,collection,range) (This)->lpVtbl->SetFontCollection(This,collection,range)
+#define IDWriteTextLayout4_SetFontFamilyName(This,name,range) (This)->lpVtbl->SetFontFamilyName(This,name,range)
+#define IDWriteTextLayout4_SetFontWeight(This,weight,range) (This)->lpVtbl->SetFontWeight(This,weight,range)
+#define IDWriteTextLayout4_SetFontStyle(This,style,range) (This)->lpVtbl->SetFontStyle(This,style,range)
+#define IDWriteTextLayout4_SetFontStretch(This,stretch,range) (This)->lpVtbl->SetFontStretch(This,stretch,range)
+#define IDWriteTextLayout4_SetFontSize(This,size,range) (This)->lpVtbl->SetFontSize(This,size,range)
+#define IDWriteTextLayout4_SetUnderline(This,underline,range) (This)->lpVtbl->SetUnderline(This,underline,range)
+#define IDWriteTextLayout4_SetStrikethrough(This,strikethrough,range) (This)->lpVtbl->SetStrikethrough(This,strikethrough,range)
+#define IDWriteTextLayout4_SetDrawingEffect(This,effect,range) (This)->lpVtbl->SetDrawingEffect(This,effect,range)
+#define IDWriteTextLayout4_SetInlineObject(This,object,range) (This)->lpVtbl->SetInlineObject(This,object,range)
+#define IDWriteTextLayout4_SetTypography(This,typography,range) (This)->lpVtbl->SetTypography(This,typography,range)
+#define IDWriteTextLayout4_SetLocaleName(This,locale,range) (This)->lpVtbl->SetLocaleName(This,locale,range)
+#define IDWriteTextLayout4_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
+#define IDWriteTextLayout4_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
+#define IDWriteTextLayout4_GetFontCollection(This,pos,collection,range) (This)->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range)
+#define IDWriteTextLayout4_GetFontFamilyNameLength(This,pos,len,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range)
+#define IDWriteTextLayout4_GetFontFamilyName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range)
+#define IDWriteTextLayout4_GetFontWeight(This,position,weight,range) (This)->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range)
+#define IDWriteTextLayout4_GetFontStyle(This,currentPosition,style,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range)
+#define IDWriteTextLayout4_GetFontStretch(This,position,stretch,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range)
+#define IDWriteTextLayout4_GetFontSize(This,position,size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range)
+#define IDWriteTextLayout4_GetUnderline(This,position,has_underline,range) (This)->lpVtbl->GetUnderline(This,position,has_underline,range)
+#define IDWriteTextLayout4_GetStrikethrough(This,position,has_strikethrough,range) (This)->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range)
+#define IDWriteTextLayout4_GetDrawingEffect(This,position,effect,range) (This)->lpVtbl->GetDrawingEffect(This,position,effect,range)
+#define IDWriteTextLayout4_GetInlineObject(This,position,object,range) (This)->lpVtbl->GetInlineObject(This,position,object,range)
+#define IDWriteTextLayout4_GetTypography(This,position,typography,range) (This)->lpVtbl->GetTypography(This,position,typography,range)
+#define IDWriteTextLayout4_GetLocaleNameLength(This,position,length,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range)
+#define IDWriteTextLayout4_GetLocaleName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range)
+#define IDWriteTextLayout4_Draw(This,context,renderer,originX,originY) (This)->lpVtbl->Draw(This,context,renderer,originX,originY)
+#define IDWriteTextLayout4_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
+#define IDWriteTextLayout4_GetClusterMetrics(This,metrics,max_count,act_count) (This)->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count)
+#define IDWriteTextLayout4_DetermineMinWidth(This,min_width) (This)->lpVtbl->DetermineMinWidth(This,min_width)
+#define IDWriteTextLayout4_HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics)
+#define IDWriteTextLayout4_HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics)
+#define IDWriteTextLayout4_HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount)
+/*** IDWriteTextLayout1 methods ***/
+#define IDWriteTextLayout4_SetPairKerning(This,is_pairkerning_enabled,range) (This)->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range)
+#define IDWriteTextLayout4_GetPairKerning(This,position,is_pairkerning_enabled,range) (This)->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range)
+#define IDWriteTextLayout4_SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range)
+#define IDWriteTextLayout4_GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range)
+/*** IDWriteTextLayout2 methods ***/
+#define IDWriteTextLayout4_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics)
+#define IDWriteTextLayout4_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
+#define IDWriteTextLayout4_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
+#define IDWriteTextLayout4_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
+#define IDWriteTextLayout4_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
+#define IDWriteTextLayout4_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
+#define IDWriteTextLayout4_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
+#define IDWriteTextLayout4_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
+#define IDWriteTextLayout4_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
+/*** IDWriteTextLayout3 methods ***/
+#define IDWriteTextLayout4_InvalidateLayout(This) (This)->lpVtbl->InvalidateLayout(This)
+#define IDWriteTextLayout4_SetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextLayout3_SetLineSpacing(This,spacing)
+#define IDWriteTextLayout4_GetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextLayout3_GetLineSpacing(This,spacing)
+#define IDWriteTextLayout4_GetLineMetrics(This,metrics,max_count,count) (This)->lpVtbl->IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count)
+/*** IDWriteTextLayout4 methods ***/
+#define IDWriteTextLayout4_SetFontAxisValues(This,axis_values,num_values,range) (This)->lpVtbl->SetFontAxisValues(This,axis_values,num_values,range)
+#define IDWriteTextLayout4_GetFontAxisValueCount(This,pos) (This)->lpVtbl->GetFontAxisValueCount(This,pos)
+#define IDWriteTextLayout4_GetFontAxisValues(This,pos,values,num_values,range) (This)->lpVtbl->GetFontAxisValues(This,pos,values,num_values,range)
+#define IDWriteTextLayout4_GetAutomaticFontAxes(This) (This)->lpVtbl->GetAutomaticFontAxes(This)
+#define IDWriteTextLayout4_SetAutomaticFontAxes(This,axes) (This)->lpVtbl->SetAutomaticFontAxes(This,axes)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_QueryInterface(IDWriteTextLayout4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteTextLayout4_AddRef(IDWriteTextLayout4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteTextLayout4_Release(IDWriteTextLayout4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteTextFormat methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetTextAlignment(IDWriteTextLayout4* This,DWRITE_TEXT_ALIGNMENT alignment) {
+    return This->lpVtbl->SetTextAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetParagraphAlignment(IDWriteTextLayout4* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
+    return This->lpVtbl->SetParagraphAlignment(This,alignment);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetWordWrapping(IDWriteTextLayout4* This,DWRITE_WORD_WRAPPING wrapping) {
+    return This->lpVtbl->SetWordWrapping(This,wrapping);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetReadingDirection(IDWriteTextLayout4* This,DWRITE_READING_DIRECTION direction) {
+    return This->lpVtbl->SetReadingDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFlowDirection(IDWriteTextLayout4* This,DWRITE_FLOW_DIRECTION direction) {
+    return This->lpVtbl->SetFlowDirection(This,direction);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetIncrementalTabStop(IDWriteTextLayout4* This,FLOAT tabstop) {
+    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetTrimming(IDWriteTextLayout4* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
+    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
+}
+static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextLayout4_GetTextAlignment(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetTextAlignment(This);
+}
+static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextLayout4_GetParagraphAlignment(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetParagraphAlignment(This);
+}
+static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextLayout4_GetWordWrapping(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetWordWrapping(This);
+}
+static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextLayout4_GetReadingDirection(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetReadingDirection(This);
+}
+static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextLayout4_GetFlowDirection(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetFlowDirection(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout4_GetIncrementalTabStop(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetIncrementalTabStop(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetTrimming(IDWriteTextLayout4* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
+}
+/*** IDWriteTextLayout methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetMaxWidth(IDWriteTextLayout4* This,FLOAT maxWidth) {
+    return This->lpVtbl->SetMaxWidth(This,maxWidth);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetMaxHeight(IDWriteTextLayout4* This,FLOAT maxHeight) {
+    return This->lpVtbl->SetMaxHeight(This,maxHeight);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontCollection(IDWriteTextLayout4* This,IDWriteFontCollection *collection,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontCollection(This,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontFamilyName(IDWriteTextLayout4* This,const WCHAR *name,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontFamilyName(This,name,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontWeight(IDWriteTextLayout4* This,DWRITE_FONT_WEIGHT weight,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontWeight(This,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontStyle(IDWriteTextLayout4* This,DWRITE_FONT_STYLE style,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStyle(This,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontStretch(IDWriteTextLayout4* This,DWRITE_FONT_STRETCH stretch,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontStretch(This,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontSize(IDWriteTextLayout4* This,FLOAT size,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontSize(This,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetUnderline(IDWriteTextLayout4* This,WINBOOL underline,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetUnderline(This,underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetStrikethrough(IDWriteTextLayout4* This,WINBOOL strikethrough,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetStrikethrough(This,strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetDrawingEffect(IDWriteTextLayout4* This,IUnknown *effect,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetDrawingEffect(This,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetInlineObject(IDWriteTextLayout4* This,IDWriteInlineObject *object,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetInlineObject(This,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetTypography(IDWriteTextLayout4* This,IDWriteTypography *typography,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetTypography(This,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetLocaleName(IDWriteTextLayout4* This,const WCHAR *locale,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetLocaleName(This,locale,range);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout4_GetMaxWidth(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetMaxWidth(This);
+}
+static FORCEINLINE FLOAT IDWriteTextLayout4_GetMaxHeight(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetMaxHeight(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontCollection(IDWriteTextLayout4* This,UINT32 pos,IDWriteFontCollection **collection,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontFamilyNameLength(IDWriteTextLayout4* This,UINT32 pos,UINT32 *len,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontFamilyName(IDWriteTextLayout4* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontWeight(IDWriteTextLayout4* This,UINT32 position,DWRITE_FONT_WEIGHT *weight,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontStyle(IDWriteTextLayout4* This,UINT32 currentPosition,DWRITE_FONT_STYLE *style,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontStretch(IDWriteTextLayout4* This,UINT32 position,DWRITE_FONT_STRETCH *stretch,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontSize(IDWriteTextLayout4* This,UINT32 position,FLOAT *size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetUnderline(IDWriteTextLayout4* This,UINT32 position,WINBOOL *has_underline,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetUnderline(This,position,has_underline,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetStrikethrough(IDWriteTextLayout4* This,UINT32 position,WINBOOL *has_strikethrough,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetDrawingEffect(IDWriteTextLayout4* This,UINT32 position,IUnknown **effect,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetDrawingEffect(This,position,effect,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetInlineObject(IDWriteTextLayout4* This,UINT32 position,IDWriteInlineObject **object,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetInlineObject(This,position,object,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetTypography(IDWriteTextLayout4* This,UINT32 position,IDWriteTypography **typography,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetTypography(This,position,typography,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetLocaleNameLength(IDWriteTextLayout4* This,UINT32 position,UINT32 *length,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetLocaleName(IDWriteTextLayout4* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_Draw(IDWriteTextLayout4* This,void *context,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY) {
+    return This->lpVtbl->Draw(This,context,renderer,originX,originY);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetOverhangMetrics(IDWriteTextLayout4* This,DWRITE_OVERHANG_METRICS *overhangs) {
+    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetClusterMetrics(IDWriteTextLayout4* This,DWRITE_CLUSTER_METRICS *metrics,UINT32 max_count,UINT32 *act_count) {
+    return This->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_DetermineMinWidth(IDWriteTextLayout4* This,FLOAT *min_width) {
+    return This->lpVtbl->DetermineMinWidth(This,min_width);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_HitTestPoint(IDWriteTextLayout4* This,FLOAT pointX,FLOAT pointY,WINBOOL *is_trailinghit,WINBOOL *is_inside,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_HitTestTextPosition(IDWriteTextLayout4* This,UINT32 textPosition,WINBOOL is_trailinghit,FLOAT *pointX,FLOAT *pointY,DWRITE_HIT_TEST_METRICS *metrics) {
+    return This->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_HitTestTextRange(IDWriteTextLayout4* This,UINT32 textPosition,UINT32 textLength,FLOAT originX,FLOAT originY,DWRITE_HIT_TEST_METRICS *metrics,UINT32 max_metricscount,UINT32 *actual_metricscount) {
+    return This->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount);
+}
+/*** IDWriteTextLayout1 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetPairKerning(IDWriteTextLayout4* This,WINBOOL is_pairkerning_enabled,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetPairKerning(IDWriteTextLayout4* This,UINT32 position,WINBOOL *is_pairkerning_enabled,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetCharacterSpacing(IDWriteTextLayout4* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT minimum_advance_width,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetCharacterSpacing(IDWriteTextLayout4* This,UINT32 position,FLOAT *leading_spacing,FLOAT *trailing_spacing,FLOAT *minimum_advance_width,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range);
+}
+/*** IDWriteTextLayout2 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetMetrics(IDWriteTextLayout4* This,DWRITE_TEXT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetVerticalGlyphOrientation(IDWriteTextLayout4* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
+    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
+}
+static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextLayout4_GetVerticalGlyphOrientation(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetVerticalGlyphOrientation(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetLastLineWrapping(IDWriteTextLayout4* This,WINBOOL lastline_wrapping_enabled) {
+    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
+}
+static FORCEINLINE WINBOOL IDWriteTextLayout4_GetLastLineWrapping(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetLastLineWrapping(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetOpticalAlignment(IDWriteTextLayout4* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
+    return This->lpVtbl->SetOpticalAlignment(This,alignment);
+}
+static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextLayout4_GetOpticalAlignment(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetOpticalAlignment(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontFallback(IDWriteTextLayout4* This,IDWriteFontFallback *fallback) {
+    return This->lpVtbl->SetFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontFallback(IDWriteTextLayout4* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetFontFallback(This,fallback);
+}
+/*** IDWriteTextLayout3 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_InvalidateLayout(IDWriteTextLayout4* This) {
+    return This->lpVtbl->InvalidateLayout(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetLineSpacing(IDWriteTextLayout4* This,const DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextLayout3_SetLineSpacing(This,spacing);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetLineSpacing(IDWriteTextLayout4* This,DWRITE_LINE_SPACING *spacing) {
+    return This->lpVtbl->IDWriteTextLayout3_GetLineSpacing(This,spacing);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetLineMetrics(IDWriteTextLayout4* This,DWRITE_LINE_METRICS1 *metrics,UINT32 max_count,UINT32 *count) {
+    return This->lpVtbl->IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count);
+}
+/*** IDWriteTextLayout4 methods ***/
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetFontAxisValues(IDWriteTextLayout4* This,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,DWRITE_TEXT_RANGE range) {
+    return This->lpVtbl->SetFontAxisValues(This,axis_values,num_values,range);
+}
+static FORCEINLINE UINT32 IDWriteTextLayout4_GetFontAxisValueCount(IDWriteTextLayout4* This,UINT32 pos) {
+    return This->lpVtbl->GetFontAxisValueCount(This,pos);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_GetFontAxisValues(IDWriteTextLayout4* This,UINT32 pos,DWRITE_FONT_AXIS_VALUE *values,UINT32 num_values,DWRITE_TEXT_RANGE *range) {
+    return This->lpVtbl->GetFontAxisValues(This,pos,values,num_values,range);
+}
+static FORCEINLINE DWRITE_AUTOMATIC_FONT_AXES IDWriteTextLayout4_GetAutomaticFontAxes(IDWriteTextLayout4* This) {
+    return This->lpVtbl->GetAutomaticFontAxes(This);
+}
+static FORCEINLINE HRESULT IDWriteTextLayout4_SetAutomaticFontAxes(IDWriteTextLayout4* This,DWRITE_AUTOMATIC_FONT_AXES axes) {
+    return This->lpVtbl->SetAutomaticFontAxes(This,axes);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteTextLayout4_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFallback1 interface
+ */
+#ifndef __IDWriteFontFallback1_INTERFACE_DEFINED__
+#define __IDWriteFontFallback1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFallback1, 0x2397599d, 0xdd0d, 0x4681, 0xbd,0x6a, 0xf4,0xf3,0x1e,0xaa,0xde,0x77);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2397599d-dd0d-4681-bd6a-f4f31eaade77")
+IDWriteFontFallback1 : public IDWriteFontFallback
+{
+    virtual HRESULT STDMETHODCALLTYPE MapCharacters(
+        IDWriteTextAnalysisSource *source,
+        UINT32 pos,
+        UINT32 length,
+        IDWriteFontCollection *base_collection,
+        const WCHAR *familyname,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        UINT32 *mapped_length,
+        FLOAT *scale,
+        IDWriteFontFace5 **fontface) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFallback1, 0x2397599d, 0xdd0d, 0x4681, 0xbd,0x6a, 0xf4,0xf3,0x1e,0xaa,0xde,0x77)
+#endif
+#else
+typedef struct IDWriteFontFallback1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFallback1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFallback1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFallback1 *This);
+
+    /*** IDWriteFontFallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *MapCharacters)(
+        IDWriteFontFallback1 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteFontCollection *basecollection,
+        const WCHAR *baseFamilyName,
+        DWRITE_FONT_WEIGHT baseWeight,
+        DWRITE_FONT_STYLE baseStyle,
+        DWRITE_FONT_STRETCH baseStretch,
+        UINT32 *mappedLength,
+        IDWriteFont **mappedFont,
+        FLOAT *scale);
+
+    /*** IDWriteFontFallback1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFallback1_MapCharacters)(
+        IDWriteFontFallback1 *This,
+        IDWriteTextAnalysisSource *source,
+        UINT32 pos,
+        UINT32 length,
+        IDWriteFontCollection *base_collection,
+        const WCHAR *familyname,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        UINT32 *mapped_length,
+        FLOAT *scale,
+        IDWriteFontFace5 **fontface);
+
+    END_INTERFACE
+} IDWriteFontFallback1Vtbl;
+
+interface IDWriteFontFallback1 {
+    CONST_VTBL IDWriteFontFallback1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFallback1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFallback1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFallback1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFallback methods ***/
+/*** IDWriteFontFallback1 methods ***/
+#define IDWriteFontFallback1_MapCharacters(This,source,pos,length,base_collection,familyname,axis_values,num_values,mapped_length,scale,fontface) (This)->lpVtbl->IDWriteFontFallback1_MapCharacters(This,source,pos,length,base_collection,familyname,axis_values,num_values,mapped_length,scale,fontface)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFallback1_QueryInterface(IDWriteFontFallback1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFallback1_AddRef(IDWriteFontFallback1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFallback1_Release(IDWriteFontFallback1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFallback methods ***/
+/*** IDWriteFontFallback1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFallback1_MapCharacters(IDWriteFontFallback1* This,IDWriteTextAnalysisSource *source,UINT32 pos,UINT32 length,IDWriteFontCollection *base_collection,const WCHAR *familyname,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,UINT32 *mapped_length,FLOAT *scale,IDWriteFontFace5 **fontface) {
+    return This->lpVtbl->IDWriteFontFallback1_MapCharacters(This,source,pos,length,base_collection,familyname,axis_values,num_values,mapped_length,scale,fontface);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFallback1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteGdiInterop1 interface
+ */
+#ifndef __IDWriteGdiInterop1_INTERFACE_DEFINED__
+#define __IDWriteGdiInterop1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteGdiInterop1, 0x4556be70, 0x3abd, 0x4f70, 0x90,0xbe, 0x42,0x17,0x80,0xa6,0xf5,0x15);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("4556be70-3abd-4f70-90be-421780a6f515")
+IDWriteGdiInterop1 : public IDWriteGdiInterop
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFromLOGFONT(
+        const LOGFONTW *logfont,
+        IDWriteFontCollection *collection,
+        IDWriteFont **font) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontSignature_(
+        IDWriteFontFace *fontface,
+        FONTSIGNATURE *fontsig) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontSignature(
+        IDWriteFont *font,
+        FONTSIGNATURE *fontsig) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMatchingFontsByLOGFONT(
+        const LOGFONTW *logfont,
+        IDWriteFontSet *fontset,
+        IDWriteFontSet **subset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteGdiInterop1, 0x4556be70, 0x3abd, 0x4f70, 0x90,0xbe, 0x42,0x17,0x80,0xa6,0xf5,0x15)
+#endif
+#else
+typedef struct IDWriteGdiInterop1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteGdiInterop1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteGdiInterop1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteGdiInterop1 *This);
+
+    /*** IDWriteGdiInterop methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateFontFromLOGFONT)(
+        IDWriteGdiInterop1 *This,
+        const LOGFONTW *logfont,
+        IDWriteFont **font);
+
+    HRESULT (STDMETHODCALLTYPE *ConvertFontToLOGFONT)(
+        IDWriteGdiInterop1 *This,
+        IDWriteFont *font,
+        LOGFONTW *logfont,
+        WINBOOL *is_systemfont);
+
+    HRESULT (STDMETHODCALLTYPE *ConvertFontFaceToLOGFONT)(
+        IDWriteGdiInterop1 *This,
+        IDWriteFontFace *font,
+        LOGFONTW *logfont);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceFromHdc)(
+        IDWriteGdiInterop1 *This,
+        HDC hdc,
+        IDWriteFontFace **fontface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateBitmapRenderTarget)(
+        IDWriteGdiInterop1 *This,
+        HDC hdc,
+        UINT32 width,
+        UINT32 height,
+        IDWriteBitmapRenderTarget **target);
+
+    /*** IDWriteGdiInterop1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteGdiInterop1_CreateFontFromLOGFONT)(
+        IDWriteGdiInterop1 *This,
+        const LOGFONTW *logfont,
+        IDWriteFontCollection *collection,
+        IDWriteFont **font);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontSignature_)(
+        IDWriteGdiInterop1 *This,
+        IDWriteFontFace *fontface,
+        FONTSIGNATURE *fontsig);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontSignature)(
+        IDWriteGdiInterop1 *This,
+        IDWriteFont *font,
+        FONTSIGNATURE *fontsig);
+
+    HRESULT (STDMETHODCALLTYPE *GetMatchingFontsByLOGFONT)(
+        IDWriteGdiInterop1 *This,
+        const LOGFONTW *logfont,
+        IDWriteFontSet *fontset,
+        IDWriteFontSet **subset);
+
+    END_INTERFACE
+} IDWriteGdiInterop1Vtbl;
+
+interface IDWriteGdiInterop1 {
+    CONST_VTBL IDWriteGdiInterop1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteGdiInterop1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteGdiInterop1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteGdiInterop1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteGdiInterop methods ***/
+#define IDWriteGdiInterop1_ConvertFontToLOGFONT(This,font,logfont,is_systemfont) (This)->lpVtbl->ConvertFontToLOGFONT(This,font,logfont,is_systemfont)
+#define IDWriteGdiInterop1_ConvertFontFaceToLOGFONT(This,font,logfont) (This)->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logfont)
+#define IDWriteGdiInterop1_CreateFontFaceFromHdc(This,hdc,fontface) (This)->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontface)
+#define IDWriteGdiInterop1_CreateBitmapRenderTarget(This,hdc,width,height,target) (This)->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,target)
+/*** IDWriteGdiInterop1 methods ***/
+#define IDWriteGdiInterop1_CreateFontFromLOGFONT(This,logfont,collection,font) (This)->lpVtbl->IDWriteGdiInterop1_CreateFontFromLOGFONT(This,logfont,collection,font)
+#define IDWriteGdiInterop1_GetFontSignature_(This,fontface,fontsig) (This)->lpVtbl->GetFontSignature_(This,fontface,fontsig)
+#define IDWriteGdiInterop1_GetFontSignature(This,font,fontsig) (This)->lpVtbl->GetFontSignature(This,font,fontsig)
+#define IDWriteGdiInterop1_GetMatchingFontsByLOGFONT(This,logfont,fontset,subset) (This)->lpVtbl->GetMatchingFontsByLOGFONT(This,logfont,fontset,subset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteGdiInterop1_QueryInterface(IDWriteGdiInterop1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteGdiInterop1_AddRef(IDWriteGdiInterop1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteGdiInterop1_Release(IDWriteGdiInterop1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteGdiInterop methods ***/
+static FORCEINLINE HRESULT IDWriteGdiInterop1_ConvertFontToLOGFONT(IDWriteGdiInterop1* This,IDWriteFont *font,LOGFONTW *logfont,WINBOOL *is_systemfont) {
+    return This->lpVtbl->ConvertFontToLOGFONT(This,font,logfont,is_systemfont);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop1_ConvertFontFaceToLOGFONT(IDWriteGdiInterop1* This,IDWriteFontFace *font,LOGFONTW *logfont) {
+    return This->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logfont);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop1_CreateFontFaceFromHdc(IDWriteGdiInterop1* This,HDC hdc,IDWriteFontFace **fontface) {
+    return This->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontface);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop1_CreateBitmapRenderTarget(IDWriteGdiInterop1* This,HDC hdc,UINT32 width,UINT32 height,IDWriteBitmapRenderTarget **target) {
+    return This->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,target);
+}
+/*** IDWriteGdiInterop1 methods ***/
+static FORCEINLINE HRESULT IDWriteGdiInterop1_CreateFontFromLOGFONT(IDWriteGdiInterop1* This,const LOGFONTW *logfont,IDWriteFontCollection *collection,IDWriteFont **font) {
+    return This->lpVtbl->IDWriteGdiInterop1_CreateFontFromLOGFONT(This,logfont,collection,font);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop1_GetFontSignature_(IDWriteGdiInterop1* This,IDWriteFontFace *fontface,FONTSIGNATURE *fontsig) {
+    return This->lpVtbl->GetFontSignature_(This,fontface,fontsig);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop1_GetFontSignature(IDWriteGdiInterop1* This,IDWriteFont *font,FONTSIGNATURE *fontsig) {
+    return This->lpVtbl->GetFontSignature(This,font,fontsig);
+}
+static FORCEINLINE HRESULT IDWriteGdiInterop1_GetMatchingFontsByLOGFONT(IDWriteGdiInterop1* This,const LOGFONTW *logfont,IDWriteFontSet *fontset,IDWriteFontSet **subset) {
+    return This->lpVtbl->GetMatchingFontsByLOGFONT(This,logfont,fontset,subset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteGdiInterop1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSetBuilder interface
+ */
+#ifndef __IDWriteFontSetBuilder_INTERFACE_DEFINED__
+#define __IDWriteFontSetBuilder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSetBuilder, 0x2f642afe, 0x9c68, 0x4f40, 0xb8,0xbe, 0x45,0x74,0x01,0xaf,0xcb,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2f642afe-9c68-4f40-b8be-457401afcb3d")
+IDWriteFontSetBuilder : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddFontFaceReference_(
+        IDWriteFontFaceReference *ref,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 prop_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddFontFaceReference(
+        IDWriteFontFaceReference *ref) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddFontSet(
+        IDWriteFontSet *fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontSet(
+        IDWriteFontSet **fontset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSetBuilder, 0x2f642afe, 0x9c68, 0x4f40, 0xb8,0xbe, 0x45,0x74,0x01,0xaf,0xcb,0x3d)
+#endif
+#else
+typedef struct IDWriteFontSetBuilderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSetBuilder *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSetBuilder *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSetBuilder *This);
+
+    /*** IDWriteFontSetBuilder methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference_)(
+        IDWriteFontSetBuilder *This,
+        IDWriteFontFaceReference *ref,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 prop_count);
+
+    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference)(
+        IDWriteFontSetBuilder *This,
+        IDWriteFontFaceReference *ref);
+
+    HRESULT (STDMETHODCALLTYPE *AddFontSet)(
+        IDWriteFontSetBuilder *This,
+        IDWriteFontSet *fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSet)(
+        IDWriteFontSetBuilder *This,
+        IDWriteFontSet **fontset);
+
+    END_INTERFACE
+} IDWriteFontSetBuilderVtbl;
+
+interface IDWriteFontSetBuilder {
+    CONST_VTBL IDWriteFontSetBuilderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSetBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSetBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSetBuilder_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSetBuilder methods ***/
+#define IDWriteFontSetBuilder_AddFontFaceReference_(This,ref,props,prop_count) (This)->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count)
+#define IDWriteFontSetBuilder_AddFontFaceReference(This,ref) (This)->lpVtbl->AddFontFaceReference(This,ref)
+#define IDWriteFontSetBuilder_AddFontSet(This,fontset) (This)->lpVtbl->AddFontSet(This,fontset)
+#define IDWriteFontSetBuilder_CreateFontSet(This,fontset) (This)->lpVtbl->CreateFontSet(This,fontset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder_QueryInterface(IDWriteFontSetBuilder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSetBuilder_AddRef(IDWriteFontSetBuilder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSetBuilder_Release(IDWriteFontSetBuilder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSetBuilder methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder_AddFontFaceReference_(IDWriteFontSetBuilder* This,IDWriteFontFaceReference *ref,const DWRITE_FONT_PROPERTY *props,UINT32 prop_count) {
+    return This->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder_AddFontFaceReference(IDWriteFontSetBuilder* This,IDWriteFontFaceReference *ref) {
+    return This->lpVtbl->AddFontFaceReference(This,ref);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder_AddFontSet(IDWriteFontSetBuilder* This,IDWriteFontSet *fontset) {
+    return This->lpVtbl->AddFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder_CreateFontSet(IDWriteFontSetBuilder* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->CreateFontSet(This,fontset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSetBuilder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSetBuilder1 interface
+ */
+#ifndef __IDWriteFontSetBuilder1_INTERFACE_DEFINED__
+#define __IDWriteFontSetBuilder1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSetBuilder1, 0x3ff7715f, 0x3cdc, 0x4dc6, 0x9b,0x72, 0xec,0x56,0x21,0xdc,0xca,0xfd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3ff7715f-3cdc-4dc6-9b72-ec5621dccafd")
+IDWriteFontSetBuilder1 : public IDWriteFontSetBuilder
+{
+    virtual HRESULT STDMETHODCALLTYPE AddFontFile(
+        IDWriteFontFile *file) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSetBuilder1, 0x3ff7715f, 0x3cdc, 0x4dc6, 0x9b,0x72, 0xec,0x56,0x21,0xdc,0xca,0xfd)
+#endif
+#else
+typedef struct IDWriteFontSetBuilder1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSetBuilder1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSetBuilder1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSetBuilder1 *This);
+
+    /*** IDWriteFontSetBuilder methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference_)(
+        IDWriteFontSetBuilder1 *This,
+        IDWriteFontFaceReference *ref,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 prop_count);
+
+    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference)(
+        IDWriteFontSetBuilder1 *This,
+        IDWriteFontFaceReference *ref);
+
+    HRESULT (STDMETHODCALLTYPE *AddFontSet)(
+        IDWriteFontSetBuilder1 *This,
+        IDWriteFontSet *fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSet)(
+        IDWriteFontSetBuilder1 *This,
+        IDWriteFontSet **fontset);
+
+    /*** IDWriteFontSetBuilder1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFontFile)(
+        IDWriteFontSetBuilder1 *This,
+        IDWriteFontFile *file);
+
+    END_INTERFACE
+} IDWriteFontSetBuilder1Vtbl;
+
+interface IDWriteFontSetBuilder1 {
+    CONST_VTBL IDWriteFontSetBuilder1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSetBuilder1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSetBuilder1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSetBuilder1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSetBuilder methods ***/
+#define IDWriteFontSetBuilder1_AddFontFaceReference_(This,ref,props,prop_count) (This)->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count)
+#define IDWriteFontSetBuilder1_AddFontFaceReference(This,ref) (This)->lpVtbl->AddFontFaceReference(This,ref)
+#define IDWriteFontSetBuilder1_AddFontSet(This,fontset) (This)->lpVtbl->AddFontSet(This,fontset)
+#define IDWriteFontSetBuilder1_CreateFontSet(This,fontset) (This)->lpVtbl->CreateFontSet(This,fontset)
+/*** IDWriteFontSetBuilder1 methods ***/
+#define IDWriteFontSetBuilder1_AddFontFile(This,file) (This)->lpVtbl->AddFontFile(This,file)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder1_QueryInterface(IDWriteFontSetBuilder1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSetBuilder1_AddRef(IDWriteFontSetBuilder1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSetBuilder1_Release(IDWriteFontSetBuilder1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSetBuilder methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder1_AddFontFaceReference_(IDWriteFontSetBuilder1* This,IDWriteFontFaceReference *ref,const DWRITE_FONT_PROPERTY *props,UINT32 prop_count) {
+    return This->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder1_AddFontFaceReference(IDWriteFontSetBuilder1* This,IDWriteFontFaceReference *ref) {
+    return This->lpVtbl->AddFontFaceReference(This,ref);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder1_AddFontSet(IDWriteFontSetBuilder1* This,IDWriteFontSet *fontset) {
+    return This->lpVtbl->AddFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder1_CreateFontSet(IDWriteFontSetBuilder1* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->CreateFontSet(This,fontset);
+}
+/*** IDWriteFontSetBuilder1 methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder1_AddFontFile(IDWriteFontSetBuilder1* This,IDWriteFontFile *file) {
+    return This->lpVtbl->AddFontFile(This,file);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSetBuilder1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontSetBuilder2 interface
+ */
+#ifndef __IDWriteFontSetBuilder2_INTERFACE_DEFINED__
+#define __IDWriteFontSetBuilder2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontSetBuilder2, 0xee5ba612, 0xb131, 0x463c, 0x8f,0x4f, 0x31,0x89,0xb9,0x40,0x1e,0x45);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ee5ba612-b131-463c-8f4f-3189b9401e45")
+IDWriteFontSetBuilder2 : public IDWriteFontSetBuilder1
+{
+    virtual HRESULT STDMETHODCALLTYPE AddFont(
+        IDWriteFontFile *fontfile,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        const DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddFontFile(
+        const WCHAR *filepath) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontSetBuilder2, 0xee5ba612, 0xb131, 0x463c, 0x8f,0x4f, 0x31,0x89,0xb9,0x40,0x1e,0x45)
+#endif
+#else
+typedef struct IDWriteFontSetBuilder2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontSetBuilder2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontSetBuilder2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontSetBuilder2 *This);
+
+    /*** IDWriteFontSetBuilder methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference_)(
+        IDWriteFontSetBuilder2 *This,
+        IDWriteFontFaceReference *ref,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 prop_count);
+
+    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference)(
+        IDWriteFontSetBuilder2 *This,
+        IDWriteFontFaceReference *ref);
+
+    HRESULT (STDMETHODCALLTYPE *AddFontSet)(
+        IDWriteFontSetBuilder2 *This,
+        IDWriteFontSet *fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSet)(
+        IDWriteFontSetBuilder2 *This,
+        IDWriteFontSet **fontset);
+
+    /*** IDWriteFontSetBuilder1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFontFile)(
+        IDWriteFontSetBuilder2 *This,
+        IDWriteFontFile *file);
+
+    /*** IDWriteFontSetBuilder2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddFont)(
+        IDWriteFontSetBuilder2 *This,
+        IDWriteFontFile *fontfile,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_values,
+        const DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        const DWRITE_FONT_PROPERTY *props,
+        UINT32 num_properties);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontSetBuilder2_AddFontFile)(
+        IDWriteFontSetBuilder2 *This,
+        const WCHAR *filepath);
+
+    END_INTERFACE
+} IDWriteFontSetBuilder2Vtbl;
+
+interface IDWriteFontSetBuilder2 {
+    CONST_VTBL IDWriteFontSetBuilder2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontSetBuilder2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontSetBuilder2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontSetBuilder2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontSetBuilder methods ***/
+#define IDWriteFontSetBuilder2_AddFontFaceReference_(This,ref,props,prop_count) (This)->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count)
+#define IDWriteFontSetBuilder2_AddFontFaceReference(This,ref) (This)->lpVtbl->AddFontFaceReference(This,ref)
+#define IDWriteFontSetBuilder2_AddFontSet(This,fontset) (This)->lpVtbl->AddFontSet(This,fontset)
+#define IDWriteFontSetBuilder2_CreateFontSet(This,fontset) (This)->lpVtbl->CreateFontSet(This,fontset)
+/*** IDWriteFontSetBuilder1 methods ***/
+/*** IDWriteFontSetBuilder2 methods ***/
+#define IDWriteFontSetBuilder2_AddFont(This,fontfile,face_index,simulations,axis_values,num_values,axis_ranges,num_ranges,props,num_properties) (This)->lpVtbl->AddFont(This,fontfile,face_index,simulations,axis_values,num_values,axis_ranges,num_ranges,props,num_properties)
+#define IDWriteFontSetBuilder2_AddFontFile(This,filepath) (This)->lpVtbl->IDWriteFontSetBuilder2_AddFontFile(This,filepath)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_QueryInterface(IDWriteFontSetBuilder2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontSetBuilder2_AddRef(IDWriteFontSetBuilder2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontSetBuilder2_Release(IDWriteFontSetBuilder2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontSetBuilder methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_AddFontFaceReference_(IDWriteFontSetBuilder2* This,IDWriteFontFaceReference *ref,const DWRITE_FONT_PROPERTY *props,UINT32 prop_count) {
+    return This->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_AddFontFaceReference(IDWriteFontSetBuilder2* This,IDWriteFontFaceReference *ref) {
+    return This->lpVtbl->AddFontFaceReference(This,ref);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_AddFontSet(IDWriteFontSetBuilder2* This,IDWriteFontSet *fontset) {
+    return This->lpVtbl->AddFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_CreateFontSet(IDWriteFontSetBuilder2* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->CreateFontSet(This,fontset);
+}
+/*** IDWriteFontSetBuilder1 methods ***/
+/*** IDWriteFontSetBuilder2 methods ***/
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_AddFont(IDWriteFontSetBuilder2* This,IDWriteFontFile *fontfile,UINT32 face_index,DWRITE_FONT_SIMULATIONS simulations,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values,const DWRITE_FONT_AXIS_RANGE *axis_ranges,UINT32 num_ranges,const DWRITE_FONT_PROPERTY *props,UINT32 num_properties) {
+    return This->lpVtbl->AddFont(This,fontfile,face_index,simulations,axis_values,num_values,axis_ranges,num_ranges,props,num_properties);
+}
+static FORCEINLINE HRESULT IDWriteFontSetBuilder2_AddFontFile(IDWriteFontSetBuilder2* This,const WCHAR *filepath) {
+    return This->lpVtbl->IDWriteFontSetBuilder2_AddFontFile(This,filepath);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontSetBuilder2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory3 interface
+ */
+#ifndef __IDWriteFactory3_INTERFACE_DEFINED__
+#define __IDWriteFactory3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory3, 0x9a1b41c3, 0xd3bb, 0x466a, 0x87,0xfc, 0xfe,0x67,0x55,0x6a,0x3b,0x65);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9a1b41c3-d3bb-466a-87fc-fe67556a3b65")
+IDWriteFactory3 : public IDWriteFactory2
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateGlyphRunAnalysis(
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCustomRenderingParams(
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceReference_(
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceReference(
+        const WCHAR *path,
+        const FILETIME *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontSet(
+        IDWriteFontSet **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontSetBuilder(
+        IDWriteFontSetBuilder **builder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontCollectionFromFontSet(
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontCollection(
+        WINBOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        WINBOOL check_for_updates) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontDownloadQueue(
+        IDWriteFontDownloadQueue **queue) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory3, 0x9a1b41c3, 0xd3bb, 0x466a, 0x87,0xfc, 0xfe,0x67,0x55,0x6a,0x3b,0x65)
+#endif
+#else
+typedef struct IDWriteFactory3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory3 *This);
+
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory3 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory3 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory3 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory3 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory3 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory3 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory3 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory3 *This,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory3 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory3 *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory3 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory3 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory3 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory3 *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory3 *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory3 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory3 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory3 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory3 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory3 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory3 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory3 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory3 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
+
+    /*** IDWriteFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
+        IDWriteFactory3 *This,
+        IDWriteFontFallback **fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
+        IDWriteFactory3 *This,
+        IDWriteFontFallbackBuilder **fallbackbuilder);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
+        IDWriteFactory3 *This,
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
+        IDWriteFactory3 *This,
+        FLOAT gamma,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **params);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
+        IDWriteFactory3 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
+        IDWriteFactory3 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
+        IDWriteFactory3 *This,
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
+        IDWriteFactory3 *This,
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
+        IDWriteFactory3 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
+        IDWriteFactory3 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
+        IDWriteFactory3 *This,
+        IDWriteFontSetBuilder **builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
+        IDWriteFactory3 *This,
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
+        IDWriteFactory3 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
+        IDWriteFactory3 *This,
+        IDWriteFontDownloadQueue **queue);
+
+    END_INTERFACE
+} IDWriteFactory3Vtbl;
+
+interface IDWriteFactory3 {
+    CONST_VTBL IDWriteFactory3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory3_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory3_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory3_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory3_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory3_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory3_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory3_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory3_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory3_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory3_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory3_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory3_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
+#define IDWriteFactory3_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory3_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory3_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory3_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory3_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory3_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory3_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory3_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+/*** IDWriteFactory2 methods ***/
+#define IDWriteFactory3_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
+#define IDWriteFactory3_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
+#define IDWriteFactory3_TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers) (This)->lpVtbl->TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers)
+/*** IDWriteFactory3 methods ***/
+#define IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
+#define IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
+#define IDWriteFactory3_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
+#define IDWriteFactory3_CreateFontFaceReference(This,path,writetime,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference)
+#define IDWriteFactory3_GetSystemFontSet(This,fontset) (This)->lpVtbl->GetSystemFontSet(This,fontset)
+#define IDWriteFactory3_CreateFontSetBuilder(This,builder) (This)->lpVtbl->CreateFontSetBuilder(This,builder)
+#define IDWriteFactory3_CreateFontCollectionFromFontSet(This,fontset,collection) (This)->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection)
+#define IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates) (This)->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates)
+#define IDWriteFactory3_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory3_QueryInterface(IDWriteFactory3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory3_AddRef(IDWriteFactory3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory3_Release(IDWriteFactory3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory3_CreateCustomFontCollection(IDWriteFactory3* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_RegisterFontCollectionLoader(IDWriteFactory3* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_UnregisterFontCollectionLoader(IDWriteFactory3* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFileReference(IDWriteFactory3* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateCustomFontFileReference(IDWriteFactory3* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFace(IDWriteFactory3* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateRenderingParams(IDWriteFactory3* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateMonitorRenderingParams(IDWriteFactory3* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_RegisterFontFileLoader(IDWriteFactory3* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_UnregisterFontFileLoader(IDWriteFactory3* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateTextFormat(IDWriteFactory3* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
+    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateTypography(IDWriteFactory3* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_GetGdiInterop(IDWriteFactory3* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateTextLayout(IDWriteFactory3* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateGdiCompatibleTextLayout(IDWriteFactory3* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateEllipsisTrimmingSign(IDWriteFactory3* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateTextAnalyzer(IDWriteFactory3* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateNumberSubstitution(IDWriteFactory3* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory3_GetEudcFontCollection(IDWriteFactory3* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+/*** IDWriteFactory2 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory3_GetSystemFontFallback(IDWriteFactory3* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetSystemFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFallbackBuilder(IDWriteFactory3* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
+    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_TranslateColorGlyphRun(IDWriteFactory3* This,FLOAT originX,FLOAT originY,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,DWRITE_MEASURING_MODE mode,const DWRITE_MATRIX *transform,UINT32 palette_index,IDWriteColorGlyphRunEnumerator **colorlayers) {
+    return This->lpVtbl->TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers);
+}
+/*** IDWriteFactory3 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory3_CreateGlyphRunAnalysis(IDWriteFactory3* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateCustomRenderingParams(IDWriteFactory3* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
+    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFaceReference_(IDWriteFactory3* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFaceReference(IDWriteFactory3* This,const WCHAR *path,const FILETIME *writetime,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_GetSystemFontSet(IDWriteFactory3* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetSystemFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontSetBuilder(IDWriteFactory3* This,IDWriteFontSetBuilder **builder) {
+    return This->lpVtbl->CreateFontSetBuilder(This,builder);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_CreateFontCollectionFromFontSet(IDWriteFactory3* This,IDWriteFontSet *fontset,IDWriteFontCollection1 **collection) {
+    return This->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_GetSystemFontCollection(IDWriteFactory3* This,WINBOOL include_downloadable,IDWriteFontCollection1 **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory3_GetFontDownloadQueue(IDWriteFactory3* This,IDWriteFontDownloadQueue **queue) {
+    return This->lpVtbl->GetFontDownloadQueue(This,queue);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFactory3_INTERFACE_DEFINED__ */
+
+typedef struct DWRITE_GLYPH_IMAGE_DATA {
+    const void *imageData;
     UINT32 imageDataSize;
     UINT32 uniqueDataId;
     UINT32 pixelsPerEm;
@@ -47,541 +8156,4051 @@
     D2D1_POINT_2L horizontalRightOrigin;
     D2D1_POINT_2L verticalTopOrigin;
     D2D1_POINT_2L verticalBottomOrigin;
-};
+} DWRITE_GLYPH_IMAGE_DATA;
+/*****************************************************************************
+ * IDWriteFontFace4 interface
+ */
+#ifndef __IDWriteFontFace4_INTERFACE_DEFINED__
+#define __IDWriteFontFace4_INTERFACE_DEFINED__
 
-struct DWRITE_FONT_AXIS_VALUE {
-    DWRITE_FONT_AXIS_TAG axisTag;
-    FLOAT value;
-};
-
-struct DWRITE_FONT_AXIS_RANGE {
-    DWRITE_FONT_AXIS_TAG axisTag;
-    FLOAT minValue;
-    FLOAT maxValue;
-};
-
-interface IDWriteFontResource;
-interface IDWriteFontFaceReference1;
-interface IDWriteFontFaceReference;
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFace3
-DECLARE_INTERFACE_(IDWriteFontFace3,IDWriteFontFace2)
+DEFINE_GUID(IID_IDWriteFontFace4, 0x27f2a904, 0x4eb8, 0x441d, 0x96,0x78, 0x05,0x63,0xf5,0x3e,0x3e,0x2f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("27f2a904-4eb8-441d-9678-0563f53e3e2f")
+IDWriteFontFace4 : public IDWriteFontFace3
 {
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphImageFormats_(
+        UINT16 glyph,
+        UINT32 ppem_first,
+        UINT32 ppem_last,
+        DWRITE_GLYPH_IMAGE_FORMATS *formats) = 0;
+
+    virtual DWRITE_GLYPH_IMAGE_FORMATS STDMETHODCALLTYPE GetGlyphImageFormats(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGlyphImageData(
+        UINT16 glyph,
+        UINT32 ppem,
+        DWRITE_GLYPH_IMAGE_FORMATS format,
+        DWRITE_GLYPH_IMAGE_DATA *data,
+        void **context) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseGlyphImageData(
+        void *context) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFace4, 0x27f2a904, 0x4eb8, 0x441d, 0x96,0x78, 0x05,0x63,0xf5,0x3e,0x3e,0x2f)
+#endif
+#else
+typedef struct IDWriteFontFace4Vtbl {
     BEGIN_INTERFACE
 
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFace4 *This,
+        REFIID riid,
+        void **ppvObject);
 
-    /* IDWriteFontFace methods */
-    STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD(GetFiles)(THIS_
-        UINT32 *numberOfFiles,
-        IDWriteFontFile **fontFiles) PURE;
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
+    /*** IDWriteFontFace methods ***/
+    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD_(void, GetMetrics)(THIS_
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
+    HRESULT (STDMETHODCALLTYPE *GetFiles)(
+        IDWriteFontFace4 *This,
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles);
 
-    STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
+    UINT32 (STDMETHODCALLTYPE *GetIndex)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD(GetDesignGlyphMetrics)(THIS_
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD(GetGlyphIndices)(THIS_
-        UINT32 const *codePoints,
-        UINT32 codePointCount,
-        UINT16 *glyphIndices) PURE;
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD(TryGetFontTable)(THIS_
-        UINT32 openTypeTableTag,
-        const void **tableData,
-        UINT32 *tableSize,
-        void **tableContext,
-        WINBOOL *exists) PURE;
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFontFace4 *This,
+        DWRITE_FONT_METRICS *metrics);
 
-    STDMETHOD_(void, ReleaseFontTable)(THIS_
-        void *tableContext) PURE;
+    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
+        IDWriteFontFace4 *This);
 
-    STDMETHOD(GetGlyphRunOutline)(THIS_
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
+        IDWriteFontFace4 *This,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
+        IDWriteFontFace4 *This,
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
+        IDWriteFontFace4 *This,
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists);
+
+    void (STDMETHODCALLTYPE *ReleaseFontTable)(
+        IDWriteFontFace4 *This,
+        void *table_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
+        IDWriteFontFace4 *This,
         FLOAT emSize,
-        UINT16 const *glyphIndices,
-        FLOAT const *glyphAdvances,
-        DWRITE_GLYPH_OFFSET const *glyphOffsets,
-        UINT32 glyphCount,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        IDWriteGeometrySink *geometrySink) PURE;
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
 
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
+    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
+        IDWriteFontFace4 *This,
         FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE *renderingMode) PURE;
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode);
 
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
+        IDWriteFontFace4 *This,
         FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics);
 
-    STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
+        IDWriteFontFace4 *This,
         FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
 
-    /* IDWriteFontFace1 methods */
-    STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
-    STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
-    STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
-    STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-    STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
-            UINT16 const*,INT32*) PURE;
-    STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
-    STDMETHOD_(BOOL, HasKerningPairs)(THIS);
-    STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
-            DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
-    STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
-    STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
+    /*** IDWriteFontFace1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
+        IDWriteFontFace4 *This,
+        DWRITE_FONT_METRICS1 *metrics);
 
-    /* IDWriteFontFace2 methods */
-    STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
-    STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
-    STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
-        STDMETHOD(GetPaletteEntries)(THIS_
-        UINT32 colorPaletteIndex,
-        UINT32 firstEntryIndex,
-        UINT32 entryCount,
-        DWRITE_COLOR_F* paletteEntries
-        ) PURE;
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
+        IDWriteFontFace4 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS1 *metrics);
 
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
+    void (STDMETHODCALLTYPE *GetCaretMetrics)(
+        IDWriteFontFace4 *This,
+        DWRITE_CARET_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFontFace4 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFontFace4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
+        IDWriteFontFace4 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
+        IDWriteFontFace4 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances);
+
+    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
+        IDWriteFontFace4 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *adjustments);
+
+    WINBOOL (STDMETHODCALLTYPE *HasKerningPairs)(
+        IDWriteFontFace4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
+        IDWriteFontFace4 *This,
+        FLOAT font_emsize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
+        IDWriteFontFace4 *This,
+        UINT32 glyph_count,
+        const UINT16 *nominal_indices,
+        UINT16 *vertical_indices);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
+        IDWriteFontFace4 *This);
+
+    /*** IDWriteFontFace2 methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsColorFont)(
+        IDWriteFontFace4 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetColorPaletteCount)(
+        IDWriteFontFace4 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetPaletteEntryCount)(
+        IDWriteFontFace4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IDWriteFontFace4 *This,
+        UINT32 palette_index,
+        UINT32 first_entry_index,
+        UINT32 entry_count,
+        DWRITE_COLOR_F *entries);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace2_GetRecommendedRenderingMode)(
+        IDWriteFontFace4 *This,
         FLOAT fontEmSize,
         FLOAT dpiX,
         FLOAT dpiY,
-        DWRITE_MATRIX const* transform,
-        BOOL isSideways,
-        DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams* renderingParams,
-        DWRITE_RENDERING_MODE* renderingMode,
-        DWRITE_GRID_FIT_MODE* gridFitMode
-        ) PURE;
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuringmode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *renderingmode,
+        DWRITE_GRID_FIT_MODE *gridfitmode);
+
+    /*** IDWriteFontFace3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontFace4 *This,
+        IDWriteFontFaceReference **reference);
+
+    void (STDMETHODCALLTYPE *GetPanose)(
+        IDWriteFontFace4 *This,
+        DWRITE_PANOSE *panose);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFontFace4 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFontFace4 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFontFace4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
+        IDWriteFontFace4 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFontFace4 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFontFace4 *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    WINBOOL (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFontFace4 *This,
+        UINT32 character);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace3_GetRecommendedRenderingMode)(
+        IDWriteFontFace4 *This,
+        FLOAT emsize,
+        FLOAT dpi_x,
+        FLOAT dpi_y,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE1 *rendering_mode,
+        DWRITE_GRID_FIT_MODE *gridfit_mode);
+
+    WINBOOL (STDMETHODCALLTYPE *IsCharacterLocal)(
+        IDWriteFontFace4 *This,
+        UINT32 character);
+
+    WINBOOL (STDMETHODCALLTYPE *IsGlyphLocal)(
+        IDWriteFontFace4 *This,
+        UINT16 glyph);
+
+    HRESULT (STDMETHODCALLTYPE *AreCharactersLocal)(
+        IDWriteFontFace4 *This,
+        const WCHAR *characters,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local);
+
+    HRESULT (STDMETHODCALLTYPE *AreGlyphsLocal)(
+        IDWriteFontFace4 *This,
+        const UINT16 *glyphs,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local);
+
+    /*** IDWriteFontFace4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetGlyphImageFormats_)(
+        IDWriteFontFace4 *This,
+        UINT16 glyph,
+        UINT32 ppem_first,
+        UINT32 ppem_last,
+        DWRITE_GLYPH_IMAGE_FORMATS *formats);
+
+    DWRITE_GLYPH_IMAGE_FORMATS (STDMETHODCALLTYPE *GetGlyphImageFormats)(
+        IDWriteFontFace4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphImageData)(
+        IDWriteFontFace4 *This,
+        UINT16 glyph,
+        UINT32 ppem,
+        DWRITE_GLYPH_IMAGE_FORMATS format,
+        DWRITE_GLYPH_IMAGE_DATA *data,
+        void **context);
+
+    void (STDMETHODCALLTYPE *ReleaseGlyphImageData)(
+        IDWriteFontFace4 *This,
+        void *context);
+
+    END_INTERFACE
+} IDWriteFontFace4Vtbl;
+
+interface IDWriteFontFace4 {
+    CONST_VTBL IDWriteFontFace4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFace4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFace4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFace4_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFace methods ***/
+#define IDWriteFontFace4_GetType(This) (This)->lpVtbl->GetType(This)
+#define IDWriteFontFace4_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
+#define IDWriteFontFace4_GetIndex(This) (This)->lpVtbl->GetIndex(This)
+#define IDWriteFontFace4_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFace4_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFontFace4_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
+#define IDWriteFontFace4_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
+#define IDWriteFontFace4_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
+#define IDWriteFontFace4_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
+#define IDWriteFontFace4_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
+#define IDWriteFontFace4_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
+#define IDWriteFontFace4_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
+/*** IDWriteFontFace1 methods ***/
+#define IDWriteFontFace4_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
+#define IDWriteFontFace4_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
+#define IDWriteFontFace4_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
+#define IDWriteFontFace4_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFontFace4_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+#define IDWriteFontFace4_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
+#define IDWriteFontFace4_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
+#define IDWriteFontFace4_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
+#define IDWriteFontFace4_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
+#define IDWriteFontFace4_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
+#define IDWriteFontFace4_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
+/*** IDWriteFontFace2 methods ***/
+#define IDWriteFontFace4_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
+#define IDWriteFontFace4_GetColorPaletteCount(This) (This)->lpVtbl->GetColorPaletteCount(This)
+#define IDWriteFontFace4_GetPaletteEntryCount(This) (This)->lpVtbl->GetPaletteEntryCount(This)
+#define IDWriteFontFace4_GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries)
+/*** IDWriteFontFace3 methods ***/
+#define IDWriteFontFace4_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
+#define IDWriteFontFace4_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
+#define IDWriteFontFace4_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFontFace4_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFontFace4_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFontFace4_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
+#define IDWriteFontFace4_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFontFace4_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFontFace4_HasCharacter(This,character) (This)->lpVtbl->HasCharacter(This,character)
+#define IDWriteFontFace4_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode) (This)->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode)
+#define IDWriteFontFace4_IsCharacterLocal(This,character) (This)->lpVtbl->IsCharacterLocal(This,character)
+#define IDWriteFontFace4_IsGlyphLocal(This,glyph) (This)->lpVtbl->IsGlyphLocal(This,glyph)
+#define IDWriteFontFace4_AreCharactersLocal(This,characters,count,enqueue_if_not,are_local) (This)->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local)
+#define IDWriteFontFace4_AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local) (This)->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local)
+/*** IDWriteFontFace4 methods ***/
+#define IDWriteFontFace4_GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats) (This)->lpVtbl->GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats)
+#define IDWriteFontFace4_GetGlyphImageFormats(This) (This)->lpVtbl->GetGlyphImageFormats(This)
+#define IDWriteFontFace4_GetGlyphImageData(This,glyph,ppem,format,data,context) (This)->lpVtbl->GetGlyphImageData(This,glyph,ppem,format,data,context)
+#define IDWriteFontFace4_ReleaseGlyphImageData(This,context) (This)->lpVtbl->ReleaseGlyphImageData(This,context)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace4_QueryInterface(IDWriteFontFace4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFace4_AddRef(IDWriteFontFace4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFace4_Release(IDWriteFontFace4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFace methods ***/
+static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace4_GetType(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetType(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetFiles(IDWriteFontFace4* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
+    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
+}
+static FORCEINLINE UINT32 IDWriteFontFace4_GetIndex(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace4_GetSimulations(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_IsSymbolFont(IDWriteFontFace4* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE UINT16 IDWriteFontFace4_GetGlyphCount(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetGlyphCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetDesignGlyphMetrics(IDWriteFontFace4* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphIndices(IDWriteFontFace4* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
+    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_TryGetFontTable(IDWriteFontFace4* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,WINBOOL *exists) {
+    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
+}
+static FORCEINLINE void IDWriteFontFace4_ReleaseFontTable(IDWriteFontFace4* This,void *table_context) {
+    This->lpVtbl->ReleaseFontTable(This,table_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphRunOutline(IDWriteFontFace4* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,WINBOOL is_sideways,WINBOOL is_rtl,IDWriteGeometrySink *geometrysink) {
+    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGdiCompatibleGlyphMetrics(IDWriteFontFace4* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
+}
+/*** IDWriteFontFace1 methods ***/
+static FORCEINLINE void IDWriteFontFace4_GetMetrics(IDWriteFontFace4* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGdiCompatibleMetrics(IDWriteFontFace4* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
+}
+static FORCEINLINE void IDWriteFontFace4_GetCaretMetrics(IDWriteFontFace4* This,DWRITE_CARET_METRICS *metrics) {
+    This->lpVtbl->GetCaretMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetUnicodeRanges(IDWriteFontFace4* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_IsMonospacedFont(IDWriteFontFace4* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetDesignGlyphAdvances(IDWriteFontFace4* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGdiCompatibleGlyphAdvances(IDWriteFontFace4* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
+    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetKerningPairAdjustments(IDWriteFontFace4* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
+    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_HasKerningPairs(IDWriteFontFace4* This) {
+    return This->lpVtbl->HasKerningPairs(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetVerticalGlyphVariants(IDWriteFontFace4* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
+    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_HasVerticalGlyphVariants(IDWriteFontFace4* This) {
+    return This->lpVtbl->HasVerticalGlyphVariants(This);
+}
+/*** IDWriteFontFace2 methods ***/
+static FORCEINLINE WINBOOL IDWriteFontFace4_IsColorFont(IDWriteFontFace4* This) {
+    return This->lpVtbl->IsColorFont(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace4_GetColorPaletteCount(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetColorPaletteCount(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace4_GetPaletteEntryCount(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetPaletteEntryCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetPaletteEntries(IDWriteFontFace4* This,UINT32 palette_index,UINT32 first_entry_index,UINT32 entry_count,DWRITE_COLOR_F *entries) {
+    return This->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries);
+}
+/*** IDWriteFontFace3 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace4_GetFontFaceReference(IDWriteFontFace4* This,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,reference);
+}
+static FORCEINLINE void IDWriteFontFace4_GetPanose(IDWriteFontFace4* This,DWRITE_PANOSE *panose) {
+    This->lpVtbl->GetPanose(This,panose);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFontFace4_GetWeight(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFontFace4_GetStretch(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFontFace4_GetStyle(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetFamilyNames(IDWriteFontFace4* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFamilyNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetFaceNames(IDWriteFontFace4* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetInformationalStrings(IDWriteFontFace4* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_HasCharacter(IDWriteFontFace4* This,UINT32 character) {
+    return This->lpVtbl->HasCharacter(This,character);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetRecommendedRenderingMode(IDWriteFontFace4* This,FLOAT emsize,FLOAT dpi_x,FLOAT dpi_y,const DWRITE_MATRIX *transform,WINBOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuring_mode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE1 *rendering_mode,DWRITE_GRID_FIT_MODE *gridfit_mode) {
+    return This->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_IsCharacterLocal(IDWriteFontFace4* This,UINT32 character) {
+    return This->lpVtbl->IsCharacterLocal(This,character);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace4_IsGlyphLocal(IDWriteFontFace4* This,UINT16 glyph) {
+    return This->lpVtbl->IsGlyphLocal(This,glyph);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_AreCharactersLocal(IDWriteFontFace4* This,const WCHAR *characters,UINT32 count,WINBOOL enqueue_if_not,WINBOOL *are_local) {
+    return This->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_AreGlyphsLocal(IDWriteFontFace4* This,const UINT16 *glyphs,UINT32 count,WINBOOL enqueue_if_not,WINBOOL *are_local) {
+    return This->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local);
+}
+/*** IDWriteFontFace4 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphImageFormats_(IDWriteFontFace4* This,UINT16 glyph,UINT32 ppem_first,UINT32 ppem_last,DWRITE_GLYPH_IMAGE_FORMATS *formats) {
+    return This->lpVtbl->GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats);
+}
+static FORCEINLINE DWRITE_GLYPH_IMAGE_FORMATS IDWriteFontFace4_GetGlyphImageFormats(IDWriteFontFace4* This) {
+    return This->lpVtbl->GetGlyphImageFormats(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphImageData(IDWriteFontFace4* This,UINT16 glyph,UINT32 ppem,DWRITE_GLYPH_IMAGE_FORMATS format,DWRITE_GLYPH_IMAGE_DATA *data,void **context) {
+    return This->lpVtbl->GetGlyphImageData(This,glyph,ppem,format,data,context);
+}
+static FORCEINLINE void IDWriteFontFace4_ReleaseGlyphImageData(IDWriteFontFace4* This,void *context) {
+    This->lpVtbl->ReleaseGlyphImageData(This,context);
+}
+#endif
 #endif
 
-    /* IDWriteFontFace3 methods */
-    STDMETHOD(GetFontFaceReference)(THIS_ IDWriteFontFaceReference **fontFaceReference) PURE;
-    STDMETHOD_(void, GetPanose)(THIS_ DWRITE_PANOSE *panose) PURE;
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
-    STDMETHOD(GetFamilyNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD(GetFaceNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD(GetInformationalStrings)(THIS_ DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
-        IDWriteLocalizedStrings **informationalStrings, BOOL *exists) PURE;
-    STDMETHOD_(BOOL, HasCharacter)(THIS_ UINT32 unicodeValue) PURE;
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_ FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY,
-        DWRITE_MATRIX const *transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode) PURE;
+#endif
+
+
+#endif  /* __IDWriteFontFace4_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFontFace5 interface
+ */
+#ifndef __IDWriteFontFace5_INTERFACE_DEFINED__
+#define __IDWriteFontFace5_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFontFace5, 0x98eff3a5, 0xb667, 0x479a, 0xb1,0x45, 0xe2,0xfa,0x5b,0x9f,0xdc,0x29);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("98eff3a5-b667-479a-b145-e2fa5b9fdc29")
+IDWriteFontFace5 : public IDWriteFontFace4
+{
+    virtual UINT32 STDMETHODCALLTYPE GetFontAxisValueCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 value_count) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE HasVariations(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFontResource(
+        IDWriteFontResource **resource) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE Equals(
+        IDWriteFontFace *fontface) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFontFace5, 0x98eff3a5, 0xb667, 0x479a, 0xb1,0x45, 0xe2,0xfa,0x5b,0x9f,0xdc,0x29)
+#endif
+#else
+typedef struct IDWriteFontFace5Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFontFace5 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFontFace5 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFontFace5 *This);
+
+    /*** IDWriteFontFace methods ***/
+    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFiles)(
+        IDWriteFontFace5 *This,
+        UINT32 *number_of_files,
+        IDWriteFontFile **fontfiles);
+
+    UINT32 (STDMETHODCALLTYPE *GetIndex)(
+        IDWriteFontFace5 *This);
+
+    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
+        IDWriteFontFace5 *This);
+
+    WINBOOL (STDMETHODCALLTYPE *IsSymbolFont)(
+        IDWriteFontFace5 *This);
+
+    void (STDMETHODCALLTYPE *GetMetrics)(
+        IDWriteFontFace5 *This,
+        DWRITE_FONT_METRICS *metrics);
+
+    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
+        IDWriteFontFace5 *This,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
+        IDWriteFontFace5 *This,
+        const UINT32 *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
+        IDWriteFontFace5 *This,
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        WINBOOL *exists);
+
+    void (STDMETHODCALLTYPE *ReleaseFontTable)(
+        IDWriteFontFace5 *This,
+        void *table_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
+        IDWriteFontFace5 *This,
+        FLOAT emSize,
+        const UINT16 *glyph_indices,
+        const FLOAT *glyph_advances,
+        const DWRITE_GLYPH_OFFSET *glyph_offsets,
+        UINT32 glyph_count,
+        WINBOOL is_sideways,
+        WINBOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
+        IDWriteFontFace5 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
+        IDWriteFontFace5 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
+        IDWriteFontFace5 *This,
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        const UINT16 *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        WINBOOL is_sideways);
+
+    /*** IDWriteFontFace1 methods ***/
+    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
+        IDWriteFontFace5 *This,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
+        IDWriteFontFace5 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_FONT_METRICS1 *metrics);
+
+    void (STDMETHODCALLTYPE *GetCaretMetrics)(
+        IDWriteFontFace5 *This,
+        DWRITE_CARET_METRICS *metrics);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
+        IDWriteFontFace5 *This,
+        UINT32 max_count,
+        DWRITE_UNICODE_RANGE *ranges,
+        UINT32 *count);
+
+    WINBOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
+        IDWriteFontFace5 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances,
+        WINBOOL is_sideways);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
+        IDWriteFontFace5 *This,
+        FLOAT em_size,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        WINBOOL is_sideways,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *advances);
+
+    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
+        IDWriteFontFace5 *This,
+        UINT32 glyph_count,
+        const UINT16 *indices,
+        INT32 *adjustments);
+
+    WINBOOL (STDMETHODCALLTYPE *HasKerningPairs)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
+        IDWriteFontFace5 *This,
+        FLOAT font_emsize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
+        IDWriteFontFace5 *This,
+        UINT32 glyph_count,
+        const UINT16 *nominal_indices,
+        UINT16 *vertical_indices);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
+        IDWriteFontFace5 *This);
+
+    /*** IDWriteFontFace2 methods ***/
+    WINBOOL (STDMETHODCALLTYPE *IsColorFont)(
+        IDWriteFontFace5 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetColorPaletteCount)(
+        IDWriteFontFace5 *This);
+
+    UINT32 (STDMETHODCALLTYPE *GetPaletteEntryCount)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IDWriteFontFace5 *This,
+        UINT32 palette_index,
+        UINT32 first_entry_index,
+        UINT32 entry_count,
+        DWRITE_COLOR_F *entries);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace2_GetRecommendedRenderingMode)(
+        IDWriteFontFace5 *This,
+        FLOAT fontEmSize,
+        FLOAT dpiX,
+        FLOAT dpiY,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuringmode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE *renderingmode,
+        DWRITE_GRID_FIT_MODE *gridfitmode);
+
+    /*** IDWriteFontFace3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
+        IDWriteFontFace5 *This,
+        IDWriteFontFaceReference **reference);
+
+    void (STDMETHODCALLTYPE *GetPanose)(
+        IDWriteFontFace5 *This,
+        DWRITE_PANOSE *panose);
+
+    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
+        IDWriteFontFace5 *This);
+
+    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
+        IDWriteFontFace5 *This);
+
+    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
+        IDWriteFontFace5 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
+        IDWriteFontFace5 *This,
+        IDWriteLocalizedStrings **names);
+
+    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
+        IDWriteFontFace5 *This,
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        WINBOOL *exists);
+
+    WINBOOL (STDMETHODCALLTYPE *HasCharacter)(
+        IDWriteFontFace5 *This,
+        UINT32 character);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace3_GetRecommendedRenderingMode)(
+        IDWriteFontFace5 *This,
+        FLOAT emsize,
+        FLOAT dpi_x,
+        FLOAT dpi_y,
+        const DWRITE_MATRIX *transform,
+        WINBOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE1 *rendering_mode,
+        DWRITE_GRID_FIT_MODE *gridfit_mode);
+
+    WINBOOL (STDMETHODCALLTYPE *IsCharacterLocal)(
+        IDWriteFontFace5 *This,
+        UINT32 character);
+
+    WINBOOL (STDMETHODCALLTYPE *IsGlyphLocal)(
+        IDWriteFontFace5 *This,
+        UINT16 glyph);
+
+    HRESULT (STDMETHODCALLTYPE *AreCharactersLocal)(
+        IDWriteFontFace5 *This,
+        const WCHAR *characters,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local);
+
+    HRESULT (STDMETHODCALLTYPE *AreGlyphsLocal)(
+        IDWriteFontFace5 *This,
+        const UINT16 *glyphs,
+        UINT32 count,
+        WINBOOL enqueue_if_not,
+        WINBOOL *are_local);
+
+    /*** IDWriteFontFace4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetGlyphImageFormats_)(
+        IDWriteFontFace5 *This,
+        UINT16 glyph,
+        UINT32 ppem_first,
+        UINT32 ppem_last,
+        DWRITE_GLYPH_IMAGE_FORMATS *formats);
+
+    DWRITE_GLYPH_IMAGE_FORMATS (STDMETHODCALLTYPE *GetGlyphImageFormats)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetGlyphImageData)(
+        IDWriteFontFace5 *This,
+        UINT16 glyph,
+        UINT32 ppem,
+        DWRITE_GLYPH_IMAGE_FORMATS format,
+        DWRITE_GLYPH_IMAGE_DATA *data,
+        void **context);
+
+    void (STDMETHODCALLTYPE *ReleaseGlyphImageData)(
+        IDWriteFontFace5 *This,
+        void *context);
+
+    /*** IDWriteFontFace5 methods ***/
+    UINT32 (STDMETHODCALLTYPE *GetFontAxisValueCount)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontAxisValues)(
+        IDWriteFontFace5 *This,
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 value_count);
+
+    WINBOOL (STDMETHODCALLTYPE *HasVariations)(
+        IDWriteFontFace5 *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontResource)(
+        IDWriteFontFace5 *This,
+        IDWriteFontResource **resource);
+
+    WINBOOL (STDMETHODCALLTYPE *Equals)(
+        IDWriteFontFace5 *This,
+        IDWriteFontFace *fontface);
+
+    END_INTERFACE
+} IDWriteFontFace5Vtbl;
+
+interface IDWriteFontFace5 {
+    CONST_VTBL IDWriteFontFace5Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFontFace5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFontFace5_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFontFace5_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFace methods ***/
+#define IDWriteFontFace5_GetType(This) (This)->lpVtbl->GetType(This)
+#define IDWriteFontFace5_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
+#define IDWriteFontFace5_GetIndex(This) (This)->lpVtbl->GetIndex(This)
+#define IDWriteFontFace5_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
+#define IDWriteFontFace5_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
+#define IDWriteFontFace5_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
+#define IDWriteFontFace5_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
+#define IDWriteFontFace5_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
+#define IDWriteFontFace5_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
+#define IDWriteFontFace5_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
+#define IDWriteFontFace5_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
+#define IDWriteFontFace5_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
+/*** IDWriteFontFace1 methods ***/
+#define IDWriteFontFace5_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
+#define IDWriteFontFace5_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
+#define IDWriteFontFace5_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
+#define IDWriteFontFace5_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
+#define IDWriteFontFace5_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
+#define IDWriteFontFace5_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
+#define IDWriteFontFace5_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
+#define IDWriteFontFace5_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
+#define IDWriteFontFace5_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
+#define IDWriteFontFace5_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
+#define IDWriteFontFace5_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
+/*** IDWriteFontFace2 methods ***/
+#define IDWriteFontFace5_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
+#define IDWriteFontFace5_GetColorPaletteCount(This) (This)->lpVtbl->GetColorPaletteCount(This)
+#define IDWriteFontFace5_GetPaletteEntryCount(This) (This)->lpVtbl->GetPaletteEntryCount(This)
+#define IDWriteFontFace5_GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries)
+/*** IDWriteFontFace3 methods ***/
+#define IDWriteFontFace5_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
+#define IDWriteFontFace5_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
+#define IDWriteFontFace5_GetWeight(This) (This)->lpVtbl->GetWeight(This)
+#define IDWriteFontFace5_GetStretch(This) (This)->lpVtbl->GetStretch(This)
+#define IDWriteFontFace5_GetStyle(This) (This)->lpVtbl->GetStyle(This)
+#define IDWriteFontFace5_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
+#define IDWriteFontFace5_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
+#define IDWriteFontFace5_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
+#define IDWriteFontFace5_HasCharacter(This,character) (This)->lpVtbl->HasCharacter(This,character)
+#define IDWriteFontFace5_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode) (This)->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode)
+#define IDWriteFontFace5_IsCharacterLocal(This,character) (This)->lpVtbl->IsCharacterLocal(This,character)
+#define IDWriteFontFace5_IsGlyphLocal(This,glyph) (This)->lpVtbl->IsGlyphLocal(This,glyph)
+#define IDWriteFontFace5_AreCharactersLocal(This,characters,count,enqueue_if_not,are_local) (This)->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local)
+#define IDWriteFontFace5_AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local) (This)->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local)
+/*** IDWriteFontFace4 methods ***/
+#define IDWriteFontFace5_GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats) (This)->lpVtbl->GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats)
+#define IDWriteFontFace5_GetGlyphImageFormats(This) (This)->lpVtbl->GetGlyphImageFormats(This)
+#define IDWriteFontFace5_GetGlyphImageData(This,glyph,ppem,format,data,context) (This)->lpVtbl->GetGlyphImageData(This,glyph,ppem,format,data,context)
+#define IDWriteFontFace5_ReleaseGlyphImageData(This,context) (This)->lpVtbl->ReleaseGlyphImageData(This,context)
+/*** IDWriteFontFace5 methods ***/
+#define IDWriteFontFace5_GetFontAxisValueCount(This) (This)->lpVtbl->GetFontAxisValueCount(This)
+#define IDWriteFontFace5_GetFontAxisValues(This,values,value_count) (This)->lpVtbl->GetFontAxisValues(This,values,value_count)
+#define IDWriteFontFace5_HasVariations(This) (This)->lpVtbl->HasVariations(This)
+#define IDWriteFontFace5_GetFontResource(This,resource) (This)->lpVtbl->GetFontResource(This,resource)
+#define IDWriteFontFace5_Equals(This,fontface) (This)->lpVtbl->Equals(This,fontface)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace5_QueryInterface(IDWriteFontFace5* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFontFace5_AddRef(IDWriteFontFace5* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFontFace5_Release(IDWriteFontFace5* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFace methods ***/
+static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace5_GetType(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetType(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetFiles(IDWriteFontFace5* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
+    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
+}
+static FORCEINLINE UINT32 IDWriteFontFace5_GetIndex(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetIndex(This);
+}
+static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace5_GetSimulations(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetSimulations(This);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_IsSymbolFont(IDWriteFontFace5* This) {
+    return This->lpVtbl->IsSymbolFont(This);
+}
+static FORCEINLINE UINT16 IDWriteFontFace5_GetGlyphCount(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetGlyphCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetDesignGlyphMetrics(IDWriteFontFace5* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGlyphIndices(IDWriteFontFace5* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
+    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_TryGetFontTable(IDWriteFontFace5* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,WINBOOL *exists) {
+    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
+}
+static FORCEINLINE void IDWriteFontFace5_ReleaseFontTable(IDWriteFontFace5* This,void *table_context) {
+    This->lpVtbl->ReleaseFontTable(This,table_context);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGlyphRunOutline(IDWriteFontFace5* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,WINBOOL is_sideways,WINBOOL is_rtl,IDWriteGeometrySink *geometrysink) {
+    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGdiCompatibleGlyphMetrics(IDWriteFontFace5* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,WINBOOL is_sideways) {
+    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
+}
+/*** IDWriteFontFace1 methods ***/
+static FORCEINLINE void IDWriteFontFace5_GetMetrics(IDWriteFontFace5* This,DWRITE_FONT_METRICS1 *metrics) {
+    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGdiCompatibleMetrics(IDWriteFontFace5* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
+    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
+}
+static FORCEINLINE void IDWriteFontFace5_GetCaretMetrics(IDWriteFontFace5* This,DWRITE_CARET_METRICS *metrics) {
+    This->lpVtbl->GetCaretMetrics(This,metrics);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetUnicodeRanges(IDWriteFontFace5* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
+    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_IsMonospacedFont(IDWriteFontFace5* This) {
+    return This->lpVtbl->IsMonospacedFont(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetDesignGlyphAdvances(IDWriteFontFace5* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,WINBOOL is_sideways) {
+    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGdiCompatibleGlyphAdvances(IDWriteFontFace5* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,WINBOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
+    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetKerningPairAdjustments(IDWriteFontFace5* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
+    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_HasKerningPairs(IDWriteFontFace5* This) {
+    return This->lpVtbl->HasKerningPairs(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetVerticalGlyphVariants(IDWriteFontFace5* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
+    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_HasVerticalGlyphVariants(IDWriteFontFace5* This) {
+    return This->lpVtbl->HasVerticalGlyphVariants(This);
+}
+/*** IDWriteFontFace2 methods ***/
+static FORCEINLINE WINBOOL IDWriteFontFace5_IsColorFont(IDWriteFontFace5* This) {
+    return This->lpVtbl->IsColorFont(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace5_GetColorPaletteCount(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetColorPaletteCount(This);
+}
+static FORCEINLINE UINT32 IDWriteFontFace5_GetPaletteEntryCount(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetPaletteEntryCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetPaletteEntries(IDWriteFontFace5* This,UINT32 palette_index,UINT32 first_entry_index,UINT32 entry_count,DWRITE_COLOR_F *entries) {
+    return This->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries);
+}
+/*** IDWriteFontFace3 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace5_GetFontFaceReference(IDWriteFontFace5* This,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->GetFontFaceReference(This,reference);
+}
+static FORCEINLINE void IDWriteFontFace5_GetPanose(IDWriteFontFace5* This,DWRITE_PANOSE *panose) {
+    This->lpVtbl->GetPanose(This,panose);
+}
+static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFontFace5_GetWeight(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetWeight(This);
+}
+static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFontFace5_GetStretch(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetStretch(This);
+}
+static FORCEINLINE DWRITE_FONT_STYLE IDWriteFontFace5_GetStyle(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetStyle(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetFamilyNames(IDWriteFontFace5* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFamilyNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetFaceNames(IDWriteFontFace5* This,IDWriteLocalizedStrings **names) {
+    return This->lpVtbl->GetFaceNames(This,names);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetInformationalStrings(IDWriteFontFace5* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,WINBOOL *exists) {
+    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_HasCharacter(IDWriteFontFace5* This,UINT32 character) {
+    return This->lpVtbl->HasCharacter(This,character);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetRecommendedRenderingMode(IDWriteFontFace5* This,FLOAT emsize,FLOAT dpi_x,FLOAT dpi_y,const DWRITE_MATRIX *transform,WINBOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuring_mode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE1 *rendering_mode,DWRITE_GRID_FIT_MODE *gridfit_mode) {
+    return This->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_IsCharacterLocal(IDWriteFontFace5* This,UINT32 character) {
+    return This->lpVtbl->IsCharacterLocal(This,character);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_IsGlyphLocal(IDWriteFontFace5* This,UINT16 glyph) {
+    return This->lpVtbl->IsGlyphLocal(This,glyph);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_AreCharactersLocal(IDWriteFontFace5* This,const WCHAR *characters,UINT32 count,WINBOOL enqueue_if_not,WINBOOL *are_local) {
+    return This->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_AreGlyphsLocal(IDWriteFontFace5* This,const UINT16 *glyphs,UINT32 count,WINBOOL enqueue_if_not,WINBOOL *are_local) {
+    return This->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local);
+}
+/*** IDWriteFontFace4 methods ***/
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGlyphImageFormats_(IDWriteFontFace5* This,UINT16 glyph,UINT32 ppem_first,UINT32 ppem_last,DWRITE_GLYPH_IMAGE_FORMATS *formats) {
+    return This->lpVtbl->GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats);
+}
+static FORCEINLINE DWRITE_GLYPH_IMAGE_FORMATS IDWriteFontFace5_GetGlyphImageFormats(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetGlyphImageFormats(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetGlyphImageData(IDWriteFontFace5* This,UINT16 glyph,UINT32 ppem,DWRITE_GLYPH_IMAGE_FORMATS format,DWRITE_GLYPH_IMAGE_DATA *data,void **context) {
+    return This->lpVtbl->GetGlyphImageData(This,glyph,ppem,format,data,context);
+}
+static FORCEINLINE void IDWriteFontFace5_ReleaseGlyphImageData(IDWriteFontFace5* This,void *context) {
+    This->lpVtbl->ReleaseGlyphImageData(This,context);
+}
+/*** IDWriteFontFace5 methods ***/
+static FORCEINLINE UINT32 IDWriteFontFace5_GetFontAxisValueCount(IDWriteFontFace5* This) {
+    return This->lpVtbl->GetFontAxisValueCount(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetFontAxisValues(IDWriteFontFace5* This,DWRITE_FONT_AXIS_VALUE *values,UINT32 value_count) {
+    return This->lpVtbl->GetFontAxisValues(This,values,value_count);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_HasVariations(IDWriteFontFace5* This) {
+    return This->lpVtbl->HasVariations(This);
+}
+static FORCEINLINE HRESULT IDWriteFontFace5_GetFontResource(IDWriteFontFace5* This,IDWriteFontResource **resource) {
+    return This->lpVtbl->GetFontResource(This,resource);
+}
+static FORCEINLINE WINBOOL IDWriteFontFace5_Equals(IDWriteFontFace5* This,IDWriteFontFace *fontface) {
+    return This->lpVtbl->Equals(This,fontface);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFontFace5_INTERFACE_DEFINED__ */
+
+typedef struct DWRITE_COLOR_GLYPH_RUN1 {
+    DWRITE_GLYPH_RUN glyphRun;
+    DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;
+    FLOAT baselineOriginX;
+    FLOAT baselineOriginY;
+    DWRITE_COLOR_F runColor;
+    UINT16 paletteIndex;
+    DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_COLOR_GLYPH_RUN1;
+/*****************************************************************************
+ * IDWriteColorGlyphRunEnumerator1 interface
+ */
+#ifndef __IDWriteColorGlyphRunEnumerator1_INTERFACE_DEFINED__
+#define __IDWriteColorGlyphRunEnumerator1_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteColorGlyphRunEnumerator1, 0x7c5f86da, 0xc7a1, 0x4f05, 0xb8,0xe1, 0x55,0xa1,0x79,0xfe,0x5a,0x35);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7c5f86da-c7a1-4f05-b8e1-55a179fe5a35")
+IDWriteColorGlyphRunEnumerator1 : public IDWriteColorGlyphRunEnumerator
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentRun(
+        const DWRITE_COLOR_GLYPH_RUN1 **run) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteColorGlyphRunEnumerator1, 0x7c5f86da, 0xc7a1, 0x4f05, 0xb8,0xe1, 0x55,0xa1,0x79,0xfe,0x5a,0x35)
+#endif
+#else
+typedef struct IDWriteColorGlyphRunEnumerator1Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteColorGlyphRunEnumerator1 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteColorGlyphRunEnumerator1 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteColorGlyphRunEnumerator1 *This);
+
+    /*** IDWriteColorGlyphRunEnumerator methods ***/
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        IDWriteColorGlyphRunEnumerator1 *This,
+        WINBOOL *hasRun);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentRun)(
+        IDWriteColorGlyphRunEnumerator1 *This,
+        const DWRITE_COLOR_GLYPH_RUN **run);
+
+    /*** IDWriteColorGlyphRunEnumerator1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteColorGlyphRunEnumerator1_GetCurrentRun)(
+        IDWriteColorGlyphRunEnumerator1 *This,
+        const DWRITE_COLOR_GLYPH_RUN1 **run);
+
+    END_INTERFACE
+} IDWriteColorGlyphRunEnumerator1Vtbl;
+
+interface IDWriteColorGlyphRunEnumerator1 {
+    CONST_VTBL IDWriteColorGlyphRunEnumerator1Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteColorGlyphRunEnumerator1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteColorGlyphRunEnumerator1_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteColorGlyphRunEnumerator1_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteColorGlyphRunEnumerator methods ***/
+#define IDWriteColorGlyphRunEnumerator1_MoveNext(This,hasRun) (This)->lpVtbl->MoveNext(This,hasRun)
+/*** IDWriteColorGlyphRunEnumerator1 methods ***/
+#define IDWriteColorGlyphRunEnumerator1_GetCurrentRun(This,run) (This)->lpVtbl->IDWriteColorGlyphRunEnumerator1_GetCurrentRun(This,run)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator1_QueryInterface(IDWriteColorGlyphRunEnumerator1* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteColorGlyphRunEnumerator1_AddRef(IDWriteColorGlyphRunEnumerator1* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteColorGlyphRunEnumerator1_Release(IDWriteColorGlyphRunEnumerator1* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteColorGlyphRunEnumerator methods ***/
+static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator1_MoveNext(IDWriteColorGlyphRunEnumerator1* This,WINBOOL *hasRun) {
+    return This->lpVtbl->MoveNext(This,hasRun);
+}
+/*** IDWriteColorGlyphRunEnumerator1 methods ***/
+static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator1_GetCurrentRun(IDWriteColorGlyphRunEnumerator1* This,const DWRITE_COLOR_GLYPH_RUN1 **run) {
+    return This->lpVtbl->IDWriteColorGlyphRunEnumerator1_GetCurrentRun(This,run);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteColorGlyphRunEnumerator1_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory4 interface
+ */
+#ifndef __IDWriteFactory4_INTERFACE_DEFINED__
+#define __IDWriteFactory4_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory4, 0x4b0b5bd3, 0x0797, 0x4549, 0x8a,0xc5, 0xfe,0x91,0x5c,0xc5,0x38,0x56);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("4b0b5bd3-0797-4549-8ac5-fe915cc53856")
+IDWriteFactory4 : public IDWriteFactory3
+{
+    virtual HRESULT STDMETHODCALLTYPE TranslateColorGlyphRun(
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
+        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette,
+        IDWriteColorGlyphRunEnumerator1 **layers) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ComputeGlyphOrigins_(
+        const DWRITE_GLYPH_RUN *run,
+        D2D1_POINT_2F baseline_origin,
+        D2D1_POINT_2F *origins) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ComputeGlyphOrigins(
+        const DWRITE_GLYPH_RUN *run,
+        DWRITE_MEASURING_MODE measuring_mode,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_MATRIX *transform,
+        D2D1_POINT_2F *origins) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory4, 0x4b0b5bd3, 0x0797, 0x4549, 0x8a,0xc5, 0xfe,0x91,0x5c,0xc5,0x38,0x56)
+#endif
+#else
+typedef struct IDWriteFactory4Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory4 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory4 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory4 *This);
+
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory4 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory4 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory4 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory4 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory4 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory4 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory4 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory4 *This,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory4 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory4 *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory4 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory4 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory4 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory4 *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory4 *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory4 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory4 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory4 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory4 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory4 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory4 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory4 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory4 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
+
+    /*** IDWriteFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
+        IDWriteFactory4 *This,
+        IDWriteFontFallback **fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
+        IDWriteFactory4 *This,
+        IDWriteFontFallbackBuilder **fallbackbuilder);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
+        IDWriteFactory4 *This,
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
+        IDWriteFactory4 *This,
+        FLOAT gamma,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **params);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
+        IDWriteFactory4 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
+        IDWriteFactory4 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
+        IDWriteFactory4 *This,
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
+        IDWriteFactory4 *This,
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
+        IDWriteFactory4 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
+        IDWriteFactory4 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
+        IDWriteFactory4 *This,
+        IDWriteFontSetBuilder **builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
+        IDWriteFactory4 *This,
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
+        IDWriteFactory4 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
+        IDWriteFactory4 *This,
+        IDWriteFontDownloadQueue **queue);
+
+    /*** IDWriteFactory4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory4_TranslateColorGlyphRun)(
+        IDWriteFactory4 *This,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
+        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette,
+        IDWriteColorGlyphRunEnumerator1 **layers);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins_)(
+        IDWriteFactory4 *This,
+        const DWRITE_GLYPH_RUN *run,
+        D2D1_POINT_2F baseline_origin,
+        D2D1_POINT_2F *origins);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins)(
+        IDWriteFactory4 *This,
+        const DWRITE_GLYPH_RUN *run,
+        DWRITE_MEASURING_MODE measuring_mode,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_MATRIX *transform,
+        D2D1_POINT_2F *origins);
+
+    END_INTERFACE
+} IDWriteFactory4Vtbl;
+
+interface IDWriteFactory4 {
+    CONST_VTBL IDWriteFactory4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory4_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory4_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory4_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory4_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory4_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory4_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory4_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory4_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory4_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory4_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory4_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory4_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
+#define IDWriteFactory4_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory4_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory4_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory4_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory4_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory4_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory4_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory4_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+/*** IDWriteFactory2 methods ***/
+#define IDWriteFactory4_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
+#define IDWriteFactory4_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
+/*** IDWriteFactory3 methods ***/
+#define IDWriteFactory4_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
+#define IDWriteFactory4_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
+#define IDWriteFactory4_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
+#define IDWriteFactory4_CreateFontFaceReference(This,path,writetime,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference)
+#define IDWriteFactory4_GetSystemFontSet(This,fontset) (This)->lpVtbl->GetSystemFontSet(This,fontset)
+#define IDWriteFactory4_CreateFontSetBuilder(This,builder) (This)->lpVtbl->CreateFontSetBuilder(This,builder)
+#define IDWriteFactory4_CreateFontCollectionFromFontSet(This,fontset,collection) (This)->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection)
+#define IDWriteFactory4_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates) (This)->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates)
+#define IDWriteFactory4_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
+/*** IDWriteFactory4 methods ***/
+#define IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers) (This)->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers)
+#define IDWriteFactory4_ComputeGlyphOrigins_(This,run,baseline_origin,origins) (This)->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins)
+#define IDWriteFactory4_ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins) (This)->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory4_QueryInterface(IDWriteFactory4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory4_AddRef(IDWriteFactory4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory4_Release(IDWriteFactory4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory4_CreateCustomFontCollection(IDWriteFactory4* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_RegisterFontCollectionLoader(IDWriteFactory4* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_UnregisterFontCollectionLoader(IDWriteFactory4* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFileReference(IDWriteFactory4* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateCustomFontFileReference(IDWriteFactory4* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFace(IDWriteFactory4* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateRenderingParams(IDWriteFactory4* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateMonitorRenderingParams(IDWriteFactory4* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_RegisterFontFileLoader(IDWriteFactory4* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_UnregisterFontFileLoader(IDWriteFactory4* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateTextFormat(IDWriteFactory4* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
+    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateTypography(IDWriteFactory4* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_GetGdiInterop(IDWriteFactory4* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateTextLayout(IDWriteFactory4* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateGdiCompatibleTextLayout(IDWriteFactory4* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateEllipsisTrimmingSign(IDWriteFactory4* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateTextAnalyzer(IDWriteFactory4* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateNumberSubstitution(IDWriteFactory4* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory4_GetEudcFontCollection(IDWriteFactory4* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+/*** IDWriteFactory2 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory4_GetSystemFontFallback(IDWriteFactory4* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetSystemFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFallbackBuilder(IDWriteFactory4* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
+    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
+}
+/*** IDWriteFactory3 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory4_CreateGlyphRunAnalysis(IDWriteFactory4* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateCustomRenderingParams(IDWriteFactory4* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
+    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFaceReference_(IDWriteFactory4* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFaceReference(IDWriteFactory4* This,const WCHAR *path,const FILETIME *writetime,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_GetSystemFontSet(IDWriteFactory4* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetSystemFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontSetBuilder(IDWriteFactory4* This,IDWriteFontSetBuilder **builder) {
+    return This->lpVtbl->CreateFontSetBuilder(This,builder);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_CreateFontCollectionFromFontSet(IDWriteFactory4* This,IDWriteFontSet *fontset,IDWriteFontCollection1 **collection) {
+    return This->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_GetSystemFontCollection(IDWriteFactory4* This,WINBOOL include_downloadable,IDWriteFontCollection1 **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_GetFontDownloadQueue(IDWriteFactory4* This,IDWriteFontDownloadQueue **queue) {
+    return This->lpVtbl->GetFontDownloadQueue(This,queue);
+}
+/*** IDWriteFactory4 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory4_TranslateColorGlyphRun(IDWriteFactory4* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,DWRITE_GLYPH_IMAGE_FORMATS desired_formats,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_MATRIX *transform,UINT32 palette,IDWriteColorGlyphRunEnumerator1 **layers) {
+    return This->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_ComputeGlyphOrigins_(IDWriteFactory4* This,const DWRITE_GLYPH_RUN *run,D2D1_POINT_2F baseline_origin,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins);
+}
+static FORCEINLINE HRESULT IDWriteFactory4_ComputeGlyphOrigins(IDWriteFactory4* This,const DWRITE_GLYPH_RUN *run,DWRITE_MEASURING_MODE measuring_mode,D2D1_POINT_2F baseline_origin,const DWRITE_MATRIX *transform,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFactory4_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteAsyncResult interface
+ */
+#ifndef __IDWriteAsyncResult_INTERFACE_DEFINED__
+#define __IDWriteAsyncResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteAsyncResult, 0xce25f8fd, 0x863b, 0x4d13, 0x96,0x51, 0xc1,0xf8,0x8d,0xc7,0x3f,0xe2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("ce25f8fd-863b-4d13-9651-c1f88dc73fe2")
+IDWriteAsyncResult : public IUnknown
+{
+    virtual HANDLE STDMETHODCALLTYPE GetWaitHandle(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetResult(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteAsyncResult, 0xce25f8fd, 0x863b, 0x4d13, 0x96,0x51, 0xc1,0xf8,0x8d,0xc7,0x3f,0xe2)
+#endif
+#else
+typedef struct IDWriteAsyncResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteAsyncResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteAsyncResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteAsyncResult *This);
+
+    /*** IDWriteAsyncResult methods ***/
+    HANDLE (STDMETHODCALLTYPE *GetWaitHandle)(
+        IDWriteAsyncResult *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetResult)(
+        IDWriteAsyncResult *This);
+
+    END_INTERFACE
+} IDWriteAsyncResultVtbl;
+
+interface IDWriteAsyncResult {
+    CONST_VTBL IDWriteAsyncResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteAsyncResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteAsyncResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteAsyncResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteAsyncResult methods ***/
+#define IDWriteAsyncResult_GetWaitHandle(This) (This)->lpVtbl->GetWaitHandle(This)
+#define IDWriteAsyncResult_GetResult(This) (This)->lpVtbl->GetResult(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteAsyncResult_QueryInterface(IDWriteAsyncResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteAsyncResult_AddRef(IDWriteAsyncResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteAsyncResult_Release(IDWriteAsyncResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteAsyncResult methods ***/
+static FORCEINLINE HANDLE IDWriteAsyncResult_GetWaitHandle(IDWriteAsyncResult* This) {
+    return This->lpVtbl->GetWaitHandle(This);
+}
+static FORCEINLINE HRESULT IDWriteAsyncResult_GetResult(IDWriteAsyncResult* This) {
+    return This->lpVtbl->GetResult(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteAsyncResult_INTERFACE_DEFINED__ */
+
+typedef struct DWRITE_FILE_FRAGMENT {
+    UINT64 fileOffset;
+    UINT64 fragmentSize;
+} DWRITE_FILE_FRAGMENT;
+/*****************************************************************************
+ * IDWriteRemoteFontFileStream interface
+ */
+#ifndef __IDWriteRemoteFontFileStream_INTERFACE_DEFINED__
+#define __IDWriteRemoteFontFileStream_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteRemoteFontFileStream, 0x4db3757a, 0x2c72, 0x4ed9, 0xb2,0xb6, 0x1a,0xba,0xbe,0x1a,0xff,0x9c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("4db3757a-2c72-4ed9-b2b6-1ababe1aff9c")
+IDWriteRemoteFontFileStream : public IDWriteFontFileStream
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLocalFileSize(
+        UINT64 *size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFileFragmentLocality(
+        UINT64 offset,
+        UINT64 size,
+        WINBOOL *is_local,
+        UINT64 *partial_size) = 0;
+
+    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetLocality(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginDownload(
+        const GUID *operation_id,
+        const DWRITE_FILE_FRAGMENT *fragments,
+        UINT32 fragment_count,
+        IDWriteAsyncResult **async_result) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteRemoteFontFileStream, 0x4db3757a, 0x2c72, 0x4ed9, 0xb2,0xb6, 0x1a,0xba,0xbe,0x1a,0xff,0x9c)
+#endif
+#else
+typedef struct IDWriteRemoteFontFileStreamVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteRemoteFontFileStream *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteRemoteFontFileStream *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteRemoteFontFileStream *This);
+
+    /*** IDWriteFontFileStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *ReadFileFragment)(
+        IDWriteRemoteFontFileStream *This,
+        const void **fragment_start,
+        UINT64 offset,
+        UINT64 fragment_size,
+        void **fragment_context);
+
+    void (STDMETHODCALLTYPE *ReleaseFileFragment)(
+        IDWriteRemoteFontFileStream *This,
+        void *fragment_context);
+
+    HRESULT (STDMETHODCALLTYPE *GetFileSize)(
+        IDWriteRemoteFontFileStream *This,
+        UINT64 *size);
+
+    HRESULT (STDMETHODCALLTYPE *GetLastWriteTime)(
+        IDWriteRemoteFontFileStream *This,
+        UINT64 *last_writetime);
+
+    /*** IDWriteRemoteFontFileStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLocalFileSize)(
+        IDWriteRemoteFontFileStream *This,
+        UINT64 *size);
+
+    HRESULT (STDMETHODCALLTYPE *GetFileFragmentLocality)(
+        IDWriteRemoteFontFileStream *This,
+        UINT64 offset,
+        UINT64 size,
+        WINBOOL *is_local,
+        UINT64 *partial_size);
+
+    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetLocality)(
+        IDWriteRemoteFontFileStream *This);
+
+    HRESULT (STDMETHODCALLTYPE *BeginDownload)(
+        IDWriteRemoteFontFileStream *This,
+        const GUID *operation_id,
+        const DWRITE_FILE_FRAGMENT *fragments,
+        UINT32 fragment_count,
+        IDWriteAsyncResult **async_result);
+
+    END_INTERFACE
+} IDWriteRemoteFontFileStreamVtbl;
+
+interface IDWriteRemoteFontFileStream {
+    CONST_VTBL IDWriteRemoteFontFileStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteRemoteFontFileStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteRemoteFontFileStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteRemoteFontFileStream_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileStream methods ***/
+#define IDWriteRemoteFontFileStream_ReadFileFragment(This,fragment_start,offset,fragment_size,fragment_context) (This)->lpVtbl->ReadFileFragment(This,fragment_start,offset,fragment_size,fragment_context)
+#define IDWriteRemoteFontFileStream_ReleaseFileFragment(This,fragment_context) (This)->lpVtbl->ReleaseFileFragment(This,fragment_context)
+#define IDWriteRemoteFontFileStream_GetFileSize(This,size) (This)->lpVtbl->GetFileSize(This,size)
+#define IDWriteRemoteFontFileStream_GetLastWriteTime(This,last_writetime) (This)->lpVtbl->GetLastWriteTime(This,last_writetime)
+/*** IDWriteRemoteFontFileStream methods ***/
+#define IDWriteRemoteFontFileStream_GetLocalFileSize(This,size) (This)->lpVtbl->GetLocalFileSize(This,size)
+#define IDWriteRemoteFontFileStream_GetFileFragmentLocality(This,offset,size,is_local,partial_size) (This)->lpVtbl->GetFileFragmentLocality(This,offset,size,is_local,partial_size)
+#define IDWriteRemoteFontFileStream_GetLocality(This) (This)->lpVtbl->GetLocality(This)
+#define IDWriteRemoteFontFileStream_BeginDownload(This,operation_id,fragments,fragment_count,async_result) (This)->lpVtbl->BeginDownload(This,operation_id,fragments,fragment_count,async_result)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_QueryInterface(IDWriteRemoteFontFileStream* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteRemoteFontFileStream_AddRef(IDWriteRemoteFontFileStream* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteRemoteFontFileStream_Release(IDWriteRemoteFontFileStream* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileStream methods ***/
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_ReadFileFragment(IDWriteRemoteFontFileStream* This,const void **fragment_start,UINT64 offset,UINT64 fragment_size,void **fragment_context) {
+    return This->lpVtbl->ReadFileFragment(This,fragment_start,offset,fragment_size,fragment_context);
+}
+static FORCEINLINE void IDWriteRemoteFontFileStream_ReleaseFileFragment(IDWriteRemoteFontFileStream* This,void *fragment_context) {
+    This->lpVtbl->ReleaseFileFragment(This,fragment_context);
+}
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_GetFileSize(IDWriteRemoteFontFileStream* This,UINT64 *size) {
+    return This->lpVtbl->GetFileSize(This,size);
+}
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_GetLastWriteTime(IDWriteRemoteFontFileStream* This,UINT64 *last_writetime) {
+    return This->lpVtbl->GetLastWriteTime(This,last_writetime);
+}
+/*** IDWriteRemoteFontFileStream methods ***/
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_GetLocalFileSize(IDWriteRemoteFontFileStream* This,UINT64 *size) {
+    return This->lpVtbl->GetLocalFileSize(This,size);
+}
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_GetFileFragmentLocality(IDWriteRemoteFontFileStream* This,UINT64 offset,UINT64 size,WINBOOL *is_local,UINT64 *partial_size) {
+    return This->lpVtbl->GetFileFragmentLocality(This,offset,size,is_local,partial_size);
+}
+static FORCEINLINE DWRITE_LOCALITY IDWriteRemoteFontFileStream_GetLocality(IDWriteRemoteFontFileStream* This) {
+    return This->lpVtbl->GetLocality(This);
+}
+static FORCEINLINE HRESULT IDWriteRemoteFontFileStream_BeginDownload(IDWriteRemoteFontFileStream* This,const GUID *operation_id,const DWRITE_FILE_FRAGMENT *fragments,UINT32 fragment_count,IDWriteAsyncResult **async_result) {
+    return This->lpVtbl->BeginDownload(This,operation_id,fragments,fragment_count,async_result);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteRemoteFontFileStream_INTERFACE_DEFINED__ */
+
+typedef enum DWRITE_CONTAINER_TYPE {
+    DWRITE_CONTAINER_TYPE_UNKNOWN = 0,
+    DWRITE_CONTAINER_TYPE_WOFF = 1,
+    DWRITE_CONTAINER_TYPE_WOFF2 = 2
+} DWRITE_CONTAINER_TYPE;
+/*****************************************************************************
+ * IDWriteRemoteFontFileLoader interface
+ */
+#ifndef __IDWriteRemoteFontFileLoader_INTERFACE_DEFINED__
+#define __IDWriteRemoteFontFileLoader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteRemoteFontFileLoader, 0x68648c83, 0x6ede, 0x46c0, 0xab,0x46, 0x20,0x08,0x3a,0x88,0x7f,0xde);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("68648c83-6ede-46c0-ab46-20083a887fde")
+IDWriteRemoteFontFileLoader : public IDWriteFontFileLoader
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateRemoteStreamFromKey(
+        const void *key,
+        UINT32 key_size,
+        IDWriteRemoteFontFileStream **stream) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLocalityFromKey(
+        const void *key,
+        UINT32 key_size,
+        DWRITE_LOCALITY *locality) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFileReferenceFromUrl(
+        IDWriteFactory *factory,
+        const WCHAR *base_url,
+        const WCHAR *file_url,
+        IDWriteFontFile **fontfile) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteRemoteFontFileLoader, 0x68648c83, 0x6ede, 0x46c0, 0xab,0x46, 0x20,0x08,0x3a,0x88,0x7f,0xde)
+#endif
+#else
+typedef struct IDWriteRemoteFontFileLoaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteRemoteFontFileLoader *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteRemoteFontFileLoader *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteRemoteFontFileLoader *This);
+
+    /*** IDWriteFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateStreamFromKey)(
+        IDWriteRemoteFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream);
+
+    /*** IDWriteRemoteFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateRemoteStreamFromKey)(
+        IDWriteRemoteFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        IDWriteRemoteFontFileStream **stream);
+
+    HRESULT (STDMETHODCALLTYPE *GetLocalityFromKey)(
+        IDWriteRemoteFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        DWRITE_LOCALITY *locality);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReferenceFromUrl)(
+        IDWriteRemoteFontFileLoader *This,
+        IDWriteFactory *factory,
+        const WCHAR *base_url,
+        const WCHAR *file_url,
+        IDWriteFontFile **fontfile);
+
+    END_INTERFACE
+} IDWriteRemoteFontFileLoaderVtbl;
+
+interface IDWriteRemoteFontFileLoader {
+    CONST_VTBL IDWriteRemoteFontFileLoaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteRemoteFontFileLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteRemoteFontFileLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteRemoteFontFileLoader_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileLoader methods ***/
+#define IDWriteRemoteFontFileLoader_CreateStreamFromKey(This,key,key_size,stream) (This)->lpVtbl->CreateStreamFromKey(This,key,key_size,stream)
+/*** IDWriteRemoteFontFileLoader methods ***/
+#define IDWriteRemoteFontFileLoader_CreateRemoteStreamFromKey(This,key,key_size,stream) (This)->lpVtbl->CreateRemoteStreamFromKey(This,key,key_size,stream)
+#define IDWriteRemoteFontFileLoader_GetLocalityFromKey(This,key,key_size,locality) (This)->lpVtbl->GetLocalityFromKey(This,key,key_size,locality)
+#define IDWriteRemoteFontFileLoader_CreateFontFileReferenceFromUrl(This,factory,base_url,file_url,fontfile) (This)->lpVtbl->CreateFontFileReferenceFromUrl(This,factory,base_url,file_url,fontfile)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteRemoteFontFileLoader_QueryInterface(IDWriteRemoteFontFileLoader* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteRemoteFontFileLoader_AddRef(IDWriteRemoteFontFileLoader* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteRemoteFontFileLoader_Release(IDWriteRemoteFontFileLoader* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteRemoteFontFileLoader_CreateStreamFromKey(IDWriteRemoteFontFileLoader* This,const void *key,UINT32 key_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->CreateStreamFromKey(This,key,key_size,stream);
+}
+/*** IDWriteRemoteFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteRemoteFontFileLoader_CreateRemoteStreamFromKey(IDWriteRemoteFontFileLoader* This,const void *key,UINT32 key_size,IDWriteRemoteFontFileStream **stream) {
+    return This->lpVtbl->CreateRemoteStreamFromKey(This,key,key_size,stream);
+}
+static FORCEINLINE HRESULT IDWriteRemoteFontFileLoader_GetLocalityFromKey(IDWriteRemoteFontFileLoader* This,const void *key,UINT32 key_size,DWRITE_LOCALITY *locality) {
+    return This->lpVtbl->GetLocalityFromKey(This,key,key_size,locality);
+}
+static FORCEINLINE HRESULT IDWriteRemoteFontFileLoader_CreateFontFileReferenceFromUrl(IDWriteRemoteFontFileLoader* This,IDWriteFactory *factory,const WCHAR *base_url,const WCHAR *file_url,IDWriteFontFile **fontfile) {
+    return This->lpVtbl->CreateFontFileReferenceFromUrl(This,factory,base_url,file_url,fontfile);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteRemoteFontFileLoader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteInMemoryFontFileLoader interface
+ */
+#ifndef __IDWriteInMemoryFontFileLoader_INTERFACE_DEFINED__
+#define __IDWriteInMemoryFontFileLoader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteInMemoryFontFileLoader, 0xdc102f47, 0xa12d, 0x4b1c, 0x82,0x2d, 0x9e,0x11,0x7e,0x33,0x04,0x3f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("dc102f47-a12d-4b1c-822d-9e117e33043f")
+IDWriteInMemoryFontFileLoader : public IDWriteFontFileLoader
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateInMemoryFontFileReference(
+        IDWriteFactory *factory,
+        const void *data,
+        UINT32 data_size,
+        IUnknown *owner,
+        IDWriteFontFile **fontfile) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE GetFileCount(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteInMemoryFontFileLoader, 0xdc102f47, 0xa12d, 0x4b1c, 0x82,0x2d, 0x9e,0x11,0x7e,0x33,0x04,0x3f)
+#endif
+#else
+typedef struct IDWriteInMemoryFontFileLoaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteInMemoryFontFileLoader *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteInMemoryFontFileLoader *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteInMemoryFontFileLoader *This);
+
+    /*** IDWriteFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateStreamFromKey)(
+        IDWriteInMemoryFontFileLoader *This,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream);
+
+    /*** IDWriteInMemoryFontFileLoader methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateInMemoryFontFileReference)(
+        IDWriteInMemoryFontFileLoader *This,
+        IDWriteFactory *factory,
+        const void *data,
+        UINT32 data_size,
+        IUnknown *owner,
+        IDWriteFontFile **fontfile);
+
+    UINT32 (STDMETHODCALLTYPE *GetFileCount)(
+        IDWriteInMemoryFontFileLoader *This);
+
+    END_INTERFACE
+} IDWriteInMemoryFontFileLoaderVtbl;
+
+interface IDWriteInMemoryFontFileLoader {
+    CONST_VTBL IDWriteInMemoryFontFileLoaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteInMemoryFontFileLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteInMemoryFontFileLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteInMemoryFontFileLoader_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFontFileLoader methods ***/
+#define IDWriteInMemoryFontFileLoader_CreateStreamFromKey(This,key,key_size,stream) (This)->lpVtbl->CreateStreamFromKey(This,key,key_size,stream)
+/*** IDWriteInMemoryFontFileLoader methods ***/
+#define IDWriteInMemoryFontFileLoader_CreateInMemoryFontFileReference(This,factory,data,data_size,owner,fontfile) (This)->lpVtbl->CreateInMemoryFontFileReference(This,factory,data,data_size,owner,fontfile)
+#define IDWriteInMemoryFontFileLoader_GetFileCount(This) (This)->lpVtbl->GetFileCount(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteInMemoryFontFileLoader_QueryInterface(IDWriteInMemoryFontFileLoader* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteInMemoryFontFileLoader_AddRef(IDWriteInMemoryFontFileLoader* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteInMemoryFontFileLoader_Release(IDWriteInMemoryFontFileLoader* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteInMemoryFontFileLoader_CreateStreamFromKey(IDWriteInMemoryFontFileLoader* This,const void *key,UINT32 key_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->CreateStreamFromKey(This,key,key_size,stream);
+}
+/*** IDWriteInMemoryFontFileLoader methods ***/
+static FORCEINLINE HRESULT IDWriteInMemoryFontFileLoader_CreateInMemoryFontFileReference(IDWriteInMemoryFontFileLoader* This,IDWriteFactory *factory,const void *data,UINT32 data_size,IUnknown *owner,IDWriteFontFile **fontfile) {
+    return This->lpVtbl->CreateInMemoryFontFileReference(This,factory,data,data_size,owner,fontfile);
+}
+static FORCEINLINE UINT32 IDWriteInMemoryFontFileLoader_GetFileCount(IDWriteInMemoryFontFileLoader* This) {
+    return This->lpVtbl->GetFileCount(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteInMemoryFontFileLoader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory5 interface
+ */
+#ifndef __IDWriteFactory5_INTERFACE_DEFINED__
+#define __IDWriteFactory5_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory5, 0x958db99a, 0xbe2a, 0x4f09, 0xaf,0x7d, 0x65,0x18,0x98,0x03,0xd1,0xd3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("958db99a-be2a-4f09-af7d-65189803d1d3")
+IDWriteFactory5 : public IDWriteFactory4
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontSetBuilder(
+        IDWriteFontSetBuilder1 **fontset_builder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateInMemoryFontFileLoader(
+        IDWriteInMemoryFontFileLoader **loader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateHttpFontFileLoader(
+        const WCHAR *referrer_url,
+        const WCHAR *extra_headers,
+        IDWriteRemoteFontFileLoader **loader) = 0;
+
+    virtual DWRITE_CONTAINER_TYPE STDMETHODCALLTYPE AnalyzeContainerType(
+        const void *data,
+        UINT32 data_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnpackFontFile(
+        DWRITE_CONTAINER_TYPE container_type,
+        const void *data,
+        UINT32 data_size,
+        IDWriteFontFileStream **stream) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory5, 0x958db99a, 0xbe2a, 0x4f09, 0xaf,0x7d, 0x65,0x18,0x98,0x03,0xd1,0xd3)
+#endif
+#else
+typedef struct IDWriteFactory5Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory5 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory5 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory5 *This);
+
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory5 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory5 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory5 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory5 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory5 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory5 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory5 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory5 *This,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory5 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory5 *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory5 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory5 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory5 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory5 *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory5 *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory5 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory5 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory5 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory5 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory5 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory5 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory5 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory5 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
+
+    /*** IDWriteFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
+        IDWriteFactory5 *This,
+        IDWriteFontFallback **fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
+        IDWriteFactory5 *This,
+        IDWriteFontFallbackBuilder **fallbackbuilder);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
+        IDWriteFactory5 *This,
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
+        IDWriteFactory5 *This,
+        FLOAT gamma,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **params);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
+        IDWriteFactory5 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
+        IDWriteFactory5 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
+        IDWriteFactory5 *This,
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
+        IDWriteFactory5 *This,
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
+        IDWriteFactory5 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
+        IDWriteFactory5 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
+        IDWriteFactory5 *This,
+        IDWriteFontSetBuilder **builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
+        IDWriteFactory5 *This,
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
+        IDWriteFactory5 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
+        IDWriteFactory5 *This,
+        IDWriteFontDownloadQueue **queue);
+
+    /*** IDWriteFactory4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory4_TranslateColorGlyphRun)(
+        IDWriteFactory5 *This,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
+        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette,
+        IDWriteColorGlyphRunEnumerator1 **layers);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins_)(
+        IDWriteFactory5 *This,
+        const DWRITE_GLYPH_RUN *run,
+        D2D1_POINT_2F baseline_origin,
+        D2D1_POINT_2F *origins);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins)(
+        IDWriteFactory5 *This,
+        const DWRITE_GLYPH_RUN *run,
+        DWRITE_MEASURING_MODE measuring_mode,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_MATRIX *transform,
+        D2D1_POINT_2F *origins);
+
+    /*** IDWriteFactory5 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory5_CreateFontSetBuilder)(
+        IDWriteFactory5 *This,
+        IDWriteFontSetBuilder1 **fontset_builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateInMemoryFontFileLoader)(
+        IDWriteFactory5 *This,
+        IDWriteInMemoryFontFileLoader **loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateHttpFontFileLoader)(
+        IDWriteFactory5 *This,
+        const WCHAR *referrer_url,
+        const WCHAR *extra_headers,
+        IDWriteRemoteFontFileLoader **loader);
+
+    DWRITE_CONTAINER_TYPE (STDMETHODCALLTYPE *AnalyzeContainerType)(
+        IDWriteFactory5 *This,
+        const void *data,
+        UINT32 data_size);
+
+    HRESULT (STDMETHODCALLTYPE *UnpackFontFile)(
+        IDWriteFactory5 *This,
+        DWRITE_CONTAINER_TYPE container_type,
+        const void *data,
+        UINT32 data_size,
+        IDWriteFontFileStream **stream);
+
+    END_INTERFACE
+} IDWriteFactory5Vtbl;
+
+interface IDWriteFactory5 {
+    CONST_VTBL IDWriteFactory5Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory5_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory5_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory5_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory5_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory5_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory5_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory5_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory5_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory5_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory5_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory5_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory5_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory5_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
+#define IDWriteFactory5_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory5_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory5_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory5_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory5_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory5_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory5_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory5_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+/*** IDWriteFactory2 methods ***/
+#define IDWriteFactory5_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
+#define IDWriteFactory5_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
+/*** IDWriteFactory3 methods ***/
+#define IDWriteFactory5_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
+#define IDWriteFactory5_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
+#define IDWriteFactory5_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
+#define IDWriteFactory5_CreateFontFaceReference(This,path,writetime,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference)
+#define IDWriteFactory5_GetSystemFontSet(This,fontset) (This)->lpVtbl->GetSystemFontSet(This,fontset)
+#define IDWriteFactory5_CreateFontCollectionFromFontSet(This,fontset,collection) (This)->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection)
+#define IDWriteFactory5_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates) (This)->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates)
+#define IDWriteFactory5_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
+/*** IDWriteFactory4 methods ***/
+#define IDWriteFactory5_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers) (This)->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers)
+#define IDWriteFactory5_ComputeGlyphOrigins_(This,run,baseline_origin,origins) (This)->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins)
+#define IDWriteFactory5_ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins) (This)->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins)
+/*** IDWriteFactory5 methods ***/
+#define IDWriteFactory5_CreateFontSetBuilder(This,fontset_builder) (This)->lpVtbl->IDWriteFactory5_CreateFontSetBuilder(This,fontset_builder)
+#define IDWriteFactory5_CreateInMemoryFontFileLoader(This,loader) (This)->lpVtbl->CreateInMemoryFontFileLoader(This,loader)
+#define IDWriteFactory5_CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader) (This)->lpVtbl->CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader)
+#define IDWriteFactory5_AnalyzeContainerType(This,data,data_size) (This)->lpVtbl->AnalyzeContainerType(This,data,data_size)
+#define IDWriteFactory5_UnpackFontFile(This,container_type,data,data_size,stream) (This)->lpVtbl->UnpackFontFile(This,container_type,data,data_size,stream)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_QueryInterface(IDWriteFactory5* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory5_AddRef(IDWriteFactory5* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory5_Release(IDWriteFactory5* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_CreateCustomFontCollection(IDWriteFactory5* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_RegisterFontCollectionLoader(IDWriteFactory5* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_UnregisterFontCollectionLoader(IDWriteFactory5* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontFileReference(IDWriteFactory5* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateCustomFontFileReference(IDWriteFactory5* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontFace(IDWriteFactory5* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateRenderingParams(IDWriteFactory5* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateMonitorRenderingParams(IDWriteFactory5* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_RegisterFontFileLoader(IDWriteFactory5* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_UnregisterFontFileLoader(IDWriteFactory5* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateTextFormat(IDWriteFactory5* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
+    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateTypography(IDWriteFactory5* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_GetGdiInterop(IDWriteFactory5* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateTextLayout(IDWriteFactory5* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateGdiCompatibleTextLayout(IDWriteFactory5* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateEllipsisTrimmingSign(IDWriteFactory5* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateTextAnalyzer(IDWriteFactory5* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateNumberSubstitution(IDWriteFactory5* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_GetEudcFontCollection(IDWriteFactory5* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+/*** IDWriteFactory2 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_GetSystemFontFallback(IDWriteFactory5* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetSystemFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontFallbackBuilder(IDWriteFactory5* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
+    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
+}
+/*** IDWriteFactory3 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_CreateGlyphRunAnalysis(IDWriteFactory5* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateCustomRenderingParams(IDWriteFactory5* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
+    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontFaceReference_(IDWriteFactory5* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontFaceReference(IDWriteFactory5* This,const WCHAR *path,const FILETIME *writetime,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_GetSystemFontSet(IDWriteFactory5* This,IDWriteFontSet **fontset) {
+    return This->lpVtbl->GetSystemFontSet(This,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontCollectionFromFontSet(IDWriteFactory5* This,IDWriteFontSet *fontset,IDWriteFontCollection1 **collection) {
+    return This->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_GetSystemFontCollection(IDWriteFactory5* This,WINBOOL include_downloadable,IDWriteFontCollection1 **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_GetFontDownloadQueue(IDWriteFactory5* This,IDWriteFontDownloadQueue **queue) {
+    return This->lpVtbl->GetFontDownloadQueue(This,queue);
+}
+/*** IDWriteFactory4 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_TranslateColorGlyphRun(IDWriteFactory5* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,DWRITE_GLYPH_IMAGE_FORMATS desired_formats,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_MATRIX *transform,UINT32 palette,IDWriteColorGlyphRunEnumerator1 **layers) {
+    return This->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_ComputeGlyphOrigins_(IDWriteFactory5* This,const DWRITE_GLYPH_RUN *run,D2D1_POINT_2F baseline_origin,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_ComputeGlyphOrigins(IDWriteFactory5* This,const DWRITE_GLYPH_RUN *run,DWRITE_MEASURING_MODE measuring_mode,D2D1_POINT_2F baseline_origin,const DWRITE_MATRIX *transform,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins);
+}
+/*** IDWriteFactory5 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory5_CreateFontSetBuilder(IDWriteFactory5* This,IDWriteFontSetBuilder1 **fontset_builder) {
+    return This->lpVtbl->IDWriteFactory5_CreateFontSetBuilder(This,fontset_builder);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateInMemoryFontFileLoader(IDWriteFactory5* This,IDWriteInMemoryFontFileLoader **loader) {
+    return This->lpVtbl->CreateInMemoryFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_CreateHttpFontFileLoader(IDWriteFactory5* This,const WCHAR *referrer_url,const WCHAR *extra_headers,IDWriteRemoteFontFileLoader **loader) {
+    return This->lpVtbl->CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader);
+}
+static FORCEINLINE DWRITE_CONTAINER_TYPE IDWriteFactory5_AnalyzeContainerType(IDWriteFactory5* This,const void *data,UINT32 data_size) {
+    return This->lpVtbl->AnalyzeContainerType(This,data,data_size);
+}
+static FORCEINLINE HRESULT IDWriteFactory5_UnpackFontFile(IDWriteFactory5* This,DWRITE_CONTAINER_TYPE container_type,const void *data,UINT32 data_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->UnpackFontFile(This,container_type,data,data_size,stream);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFactory5_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory6 interface
+ */
+#ifndef __IDWriteFactory6_INTERFACE_DEFINED__
+#define __IDWriteFactory6_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory6, 0xf3744d80, 0x21f7, 0x42eb, 0xb3,0x5d, 0x99,0x5b,0xc7,0x2f,0xc2,0x23);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f3744d80-21f7-42eb-b35d-995bc72fc223")
+IDWriteFactory6 : public IDWriteFactory5
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceReference(
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_axis,
+        IDWriteFontFaceReference1 **face_ref) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontResource(
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        IDWriteFontResource **resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontSet(
+        WINBOOL include_downloadable,
+        IDWriteFontSet1 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontCollection(
+        WINBOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontCollectionFromFontSet(
+        IDWriteFontSet *fontset,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFontSetBuilder(
+        IDWriteFontSetBuilder2 **builder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTextFormat(
+        const WCHAR *familyname,
+        IDWriteFontCollection *collection,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_axis,
+        FLOAT fontsize,
+        const WCHAR *localename,
+        IDWriteTextFormat3 **format) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory6, 0xf3744d80, 0x21f7, 0x42eb, 0xb3,0x5d, 0x99,0x5b,0xc7,0x2f,0xc2,0x23)
+#endif
+#else
+typedef struct IDWriteFactory6Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory6 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory6 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory6 *This);
+
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory6 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory6 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory6 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory6 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory6 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory6 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory6 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory6 *This,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory6 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory6 *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory6 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory6 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory6 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory6 *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory6 *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory6 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory6 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory6 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory6 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory6 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory6 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory6 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory6 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
+
+    /*** IDWriteFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
+        IDWriteFactory6 *This,
+        IDWriteFontFallback **fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
+        IDWriteFactory6 *This,
+        IDWriteFontFallbackBuilder **fallbackbuilder);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
+        IDWriteFactory6 *This,
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
+        IDWriteFactory6 *This,
+        FLOAT gamma,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **params);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
+        IDWriteFactory6 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
+        IDWriteFactory6 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
+        IDWriteFactory6 *This,
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
+        IDWriteFactory6 *This,
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
+        IDWriteFactory6 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
+        IDWriteFactory6 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
+        IDWriteFactory6 *This,
+        IDWriteFontSetBuilder **builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
+        IDWriteFactory6 *This,
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
+        IDWriteFactory6 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
+        IDWriteFactory6 *This,
+        IDWriteFontDownloadQueue **queue);
+
+    /*** IDWriteFactory4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory4_TranslateColorGlyphRun)(
+        IDWriteFactory6 *This,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
+        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette,
+        IDWriteColorGlyphRunEnumerator1 **layers);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins_)(
+        IDWriteFactory6 *This,
+        const DWRITE_GLYPH_RUN *run,
+        D2D1_POINT_2F baseline_origin,
+        D2D1_POINT_2F *origins);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins)(
+        IDWriteFactory6 *This,
+        const DWRITE_GLYPH_RUN *run,
+        DWRITE_MEASURING_MODE measuring_mode,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_MATRIX *transform,
+        D2D1_POINT_2F *origins);
+
+    /*** IDWriteFactory5 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory5_CreateFontSetBuilder)(
+        IDWriteFactory6 *This,
+        IDWriteFontSetBuilder1 **fontset_builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateInMemoryFontFileLoader)(
+        IDWriteFactory6 *This,
+        IDWriteInMemoryFontFileLoader **loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateHttpFontFileLoader)(
+        IDWriteFactory6 *This,
+        const WCHAR *referrer_url,
+        const WCHAR *extra_headers,
+        IDWriteRemoteFontFileLoader **loader);
+
+    DWRITE_CONTAINER_TYPE (STDMETHODCALLTYPE *AnalyzeContainerType)(
+        IDWriteFactory6 *This,
+        const void *data,
+        UINT32 data_size);
+
+    HRESULT (STDMETHODCALLTYPE *UnpackFontFile)(
+        IDWriteFactory6 *This,
+        DWRITE_CONTAINER_TYPE container_type,
+        const void *data,
+        UINT32 data_size,
+        IDWriteFontFileStream **stream);
+
+    /*** IDWriteFactory6 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateFontFaceReference)(
+        IDWriteFactory6 *This,
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_axis,
+        IDWriteFontFaceReference1 **face_ref);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontResource)(
+        IDWriteFactory6 *This,
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        IDWriteFontResource **resource);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_GetSystemFontSet)(
+        IDWriteFactory6 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_GetSystemFontCollection)(
+        IDWriteFactory6 *This,
+        WINBOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateFontCollectionFromFontSet)(
+        IDWriteFactory6 *This,
+        IDWriteFontSet *fontset,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateFontSetBuilder)(
+        IDWriteFactory6 *This,
+        IDWriteFontSetBuilder2 **builder);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateTextFormat)(
+        IDWriteFactory6 *This,
+        const WCHAR *familyname,
+        IDWriteFontCollection *collection,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_axis,
+        FLOAT fontsize,
+        const WCHAR *localename,
+        IDWriteTextFormat3 **format);
+
+    END_INTERFACE
+} IDWriteFactory6Vtbl;
+
+interface IDWriteFactory6 {
+    CONST_VTBL IDWriteFactory6Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory6_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory6_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory6_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory6_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory6_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory6_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory6_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory6_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory6_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory6_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory6_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory6_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory6_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory6_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory6_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory6_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory6_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory6_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory6_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory6_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory6_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+/*** IDWriteFactory2 methods ***/
+#define IDWriteFactory6_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
+#define IDWriteFactory6_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
+/*** IDWriteFactory3 methods ***/
+#define IDWriteFactory6_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
+#define IDWriteFactory6_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
+#define IDWriteFactory6_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
+#define IDWriteFactory6_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
+/*** IDWriteFactory4 methods ***/
+#define IDWriteFactory6_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers) (This)->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers)
+#define IDWriteFactory6_ComputeGlyphOrigins_(This,run,baseline_origin,origins) (This)->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins)
+#define IDWriteFactory6_ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins) (This)->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins)
+/*** IDWriteFactory5 methods ***/
+#define IDWriteFactory6_CreateInMemoryFontFileLoader(This,loader) (This)->lpVtbl->CreateInMemoryFontFileLoader(This,loader)
+#define IDWriteFactory6_CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader) (This)->lpVtbl->CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader)
+#define IDWriteFactory6_AnalyzeContainerType(This,data,data_size) (This)->lpVtbl->AnalyzeContainerType(This,data,data_size)
+#define IDWriteFactory6_UnpackFontFile(This,container_type,data,data_size,stream) (This)->lpVtbl->UnpackFontFile(This,container_type,data,data_size,stream)
+/*** IDWriteFactory6 methods ***/
+#define IDWriteFactory6_CreateFontFaceReference(This,file,face_index,simulations,axis_values,num_axis,face_ref) (This)->lpVtbl->IDWriteFactory6_CreateFontFaceReference(This,file,face_index,simulations,axis_values,num_axis,face_ref)
+#define IDWriteFactory6_CreateFontResource(This,file,face_index,resource) (This)->lpVtbl->CreateFontResource(This,file,face_index,resource)
+#define IDWriteFactory6_GetSystemFontSet(This,include_downloadable,fontset) (This)->lpVtbl->IDWriteFactory6_GetSystemFontSet(This,include_downloadable,fontset)
+#define IDWriteFactory6_GetSystemFontCollection(This,include_downloadable,family_model,collection) (This)->lpVtbl->IDWriteFactory6_GetSystemFontCollection(This,include_downloadable,family_model,collection)
+#define IDWriteFactory6_CreateFontCollectionFromFontSet(This,fontset,family_model,collection) (This)->lpVtbl->IDWriteFactory6_CreateFontCollectionFromFontSet(This,fontset,family_model,collection)
+#define IDWriteFactory6_CreateFontSetBuilder(This,builder) (This)->lpVtbl->IDWriteFactory6_CreateFontSetBuilder(This,builder)
+#define IDWriteFactory6_CreateTextFormat(This,familyname,collection,axis_values,num_axis,fontsize,localename,format) (This)->lpVtbl->IDWriteFactory6_CreateTextFormat(This,familyname,collection,axis_values,num_axis,fontsize,localename,format)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_QueryInterface(IDWriteFactory6* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory6_AddRef(IDWriteFactory6* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory6_Release(IDWriteFactory6* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_CreateCustomFontCollection(IDWriteFactory6* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_RegisterFontCollectionLoader(IDWriteFactory6* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_UnregisterFontCollectionLoader(IDWriteFactory6* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontFileReference(IDWriteFactory6* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateCustomFontFileReference(IDWriteFactory6* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontFace(IDWriteFactory6* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateRenderingParams(IDWriteFactory6* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateMonitorRenderingParams(IDWriteFactory6* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_RegisterFontFileLoader(IDWriteFactory6* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_UnregisterFontFileLoader(IDWriteFactory6* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateTypography(IDWriteFactory6* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_GetGdiInterop(IDWriteFactory6* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateTextLayout(IDWriteFactory6* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateGdiCompatibleTextLayout(IDWriteFactory6* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateEllipsisTrimmingSign(IDWriteFactory6* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateTextAnalyzer(IDWriteFactory6* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateNumberSubstitution(IDWriteFactory6* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_GetEudcFontCollection(IDWriteFactory6* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+/*** IDWriteFactory2 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_GetSystemFontFallback(IDWriteFactory6* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetSystemFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontFallbackBuilder(IDWriteFactory6* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
+    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
+}
+/*** IDWriteFactory3 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_CreateGlyphRunAnalysis(IDWriteFactory6* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateCustomRenderingParams(IDWriteFactory6* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
+    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontFaceReference_(IDWriteFactory6* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_GetFontDownloadQueue(IDWriteFactory6* This,IDWriteFontDownloadQueue **queue) {
+    return This->lpVtbl->GetFontDownloadQueue(This,queue);
+}
+/*** IDWriteFactory4 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_TranslateColorGlyphRun(IDWriteFactory6* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,DWRITE_GLYPH_IMAGE_FORMATS desired_formats,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_MATRIX *transform,UINT32 palette,IDWriteColorGlyphRunEnumerator1 **layers) {
+    return This->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_ComputeGlyphOrigins_(IDWriteFactory6* This,const DWRITE_GLYPH_RUN *run,D2D1_POINT_2F baseline_origin,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_ComputeGlyphOrigins(IDWriteFactory6* This,const DWRITE_GLYPH_RUN *run,DWRITE_MEASURING_MODE measuring_mode,D2D1_POINT_2F baseline_origin,const DWRITE_MATRIX *transform,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins);
+}
+/*** IDWriteFactory5 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_CreateInMemoryFontFileLoader(IDWriteFactory6* This,IDWriteInMemoryFontFileLoader **loader) {
+    return This->lpVtbl->CreateInMemoryFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateHttpFontFileLoader(IDWriteFactory6* This,const WCHAR *referrer_url,const WCHAR *extra_headers,IDWriteRemoteFontFileLoader **loader) {
+    return This->lpVtbl->CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader);
+}
+static FORCEINLINE DWRITE_CONTAINER_TYPE IDWriteFactory6_AnalyzeContainerType(IDWriteFactory6* This,const void *data,UINT32 data_size) {
+    return This->lpVtbl->AnalyzeContainerType(This,data,data_size);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_UnpackFontFile(IDWriteFactory6* This,DWRITE_CONTAINER_TYPE container_type,const void *data,UINT32 data_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->UnpackFontFile(This,container_type,data,data_size,stream);
+}
+/*** IDWriteFactory6 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontFaceReference(IDWriteFactory6* This,IDWriteFontFile *file,UINT32 face_index,DWRITE_FONT_SIMULATIONS simulations,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_axis,IDWriteFontFaceReference1 **face_ref) {
+    return This->lpVtbl->IDWriteFactory6_CreateFontFaceReference(This,file,face_index,simulations,axis_values,num_axis,face_ref);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontResource(IDWriteFactory6* This,IDWriteFontFile *file,UINT32 face_index,IDWriteFontResource **resource) {
+    return This->lpVtbl->CreateFontResource(This,file,face_index,resource);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_GetSystemFontSet(IDWriteFactory6* This,WINBOOL include_downloadable,IDWriteFontSet1 **fontset) {
+    return This->lpVtbl->IDWriteFactory6_GetSystemFontSet(This,include_downloadable,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_GetSystemFontCollection(IDWriteFactory6* This,WINBOOL include_downloadable,DWRITE_FONT_FAMILY_MODEL family_model,IDWriteFontCollection2 **collection) {
+    return This->lpVtbl->IDWriteFactory6_GetSystemFontCollection(This,include_downloadable,family_model,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontCollectionFromFontSet(IDWriteFactory6* This,IDWriteFontSet *fontset,DWRITE_FONT_FAMILY_MODEL family_model,IDWriteFontCollection2 **collection) {
+    return This->lpVtbl->IDWriteFactory6_CreateFontCollectionFromFontSet(This,fontset,family_model,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateFontSetBuilder(IDWriteFactory6* This,IDWriteFontSetBuilder2 **builder) {
+    return This->lpVtbl->IDWriteFactory6_CreateFontSetBuilder(This,builder);
+}
+static FORCEINLINE HRESULT IDWriteFactory6_CreateTextFormat(IDWriteFactory6* This,const WCHAR *familyname,IDWriteFontCollection *collection,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_axis,FLOAT fontsize,const WCHAR *localename,IDWriteTextFormat3 **format) {
+    return This->lpVtbl->IDWriteFactory6_CreateTextFormat(This,familyname,collection,axis_values,num_axis,fontsize,localename,format);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFactory6_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDWriteFactory7 interface
+ */
+#ifndef __IDWriteFactory7_INTERFACE_DEFINED__
+#define __IDWriteFactory7_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDWriteFactory7, 0x35d0e0b3, 0x9076, 0x4d2e, 0xa0,0x16, 0xa9,0x1b,0x56,0x8a,0x06,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("35d0e0b3-9076-4d2e-a016-a91b568a06b4")
+IDWriteFactory7 : public IDWriteFactory6
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontSet(
+        WINBOOL include_downloadable,
+        IDWriteFontSet2 **fontset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSystemFontCollection(
+        WINBOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection3 **collection) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDWriteFactory7, 0x35d0e0b3, 0x9076, 0x4d2e, 0xa0,0x16, 0xa9,0x1b,0x56,0x8a,0x06,0xb4)
+#endif
+#else
+typedef struct IDWriteFactory7Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDWriteFactory7 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDWriteFactory7 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDWriteFactory7 *This);
+
+    /*** IDWriteFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
+        IDWriteFactory7 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
+        IDWriteFactory7 *This,
+        IDWriteFontCollectionLoader *loader,
+        const void *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
+        IDWriteFactory7 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
+        IDWriteFactory7 *This,
+        IDWriteFontCollectionLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
+        IDWriteFactory7 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
+        IDWriteFactory7 *This,
+        const void *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
+        IDWriteFactory7 *This,
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile *const *font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
+        IDWriteFactory7 *This,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
+        IDWriteFactory7 *This,
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
+        IDWriteFactory7 *This,
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
+        IDWriteFactory7 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
+        IDWriteFactory7 *This,
+        IDWriteFontFileLoader *loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
+        IDWriteFactory7 *This,
+        const WCHAR *family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        const WCHAR *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
+        IDWriteFactory7 *This,
+        IDWriteTypography **typography);
+
+    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
+        IDWriteFactory7 *This,
+        IDWriteGdiInterop **gdi_interop);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
+        IDWriteFactory7 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
+        IDWriteFactory7 *This,
+        const WCHAR *string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        WINBOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
+        IDWriteFactory7 *This,
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
+        IDWriteFactory7 *This,
+        IDWriteTextAnalyzer **analyzer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
+        IDWriteFactory7 *This,
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        const WCHAR *locale,
+        WINBOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
+        IDWriteFactory7 *This,
+        const DWRITE_GLYPH_RUN *glyph_run,
+        FLOAT pixels_per_dip,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory1 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
+        IDWriteFactory7 *This,
+        IDWriteFontCollection **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
+        IDWriteFactory7 *This,
+        FLOAT gamma,
+        FLOAT enhcontrast,
+        FLOAT enhcontrast_grayscale,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams1 **params);
+
+    /*** IDWriteFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
+        IDWriteFactory7 *This,
+        IDWriteFontFallback **fallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
+        IDWriteFactory7 *This,
+        IDWriteFontFallbackBuilder **fallbackbuilder);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
+        IDWriteFactory7 *This,
+        FLOAT originX,
+        FLOAT originY,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
+        DWRITE_MEASURING_MODE mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette_index,
+        IDWriteColorGlyphRunEnumerator **colorlayers);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
+        IDWriteFactory7 *This,
+        FLOAT gamma,
+        FLOAT contrast,
+        FLOAT grayscalecontrast,
+        FLOAT cleartypeLevel,
+        DWRITE_PIXEL_GEOMETRY pixelGeometry,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        IDWriteRenderingParams2 **params);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
+        IDWriteFactory7 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE renderingMode,
+        DWRITE_MEASURING_MODE measuringMode,
+        DWRITE_GRID_FIT_MODE gridFitMode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    /*** IDWriteFactory3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
+        IDWriteFactory7 *This,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_MATRIX *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
+        IDWriteFactory7 *This,
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
+        IDWriteFactory7 *This,
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
+        IDWriteFactory7 *This,
+        const WCHAR *path,
+        const FILETIME *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
+        IDWriteFactory7 *This,
+        IDWriteFontSet **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
+        IDWriteFactory7 *This,
+        IDWriteFontSetBuilder **builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
+        IDWriteFactory7 *This,
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
+        IDWriteFactory7 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        WINBOOL check_for_updates);
+
+    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
+        IDWriteFactory7 *This,
+        IDWriteFontDownloadQueue **queue);
+
+    /*** IDWriteFactory4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory4_TranslateColorGlyphRun)(
+        IDWriteFactory7 *This,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_GLYPH_RUN *run,
+        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
+        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
+        DWRITE_MEASURING_MODE measuring_mode,
+        const DWRITE_MATRIX *transform,
+        UINT32 palette,
+        IDWriteColorGlyphRunEnumerator1 **layers);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins_)(
+        IDWriteFactory7 *This,
+        const DWRITE_GLYPH_RUN *run,
+        D2D1_POINT_2F baseline_origin,
+        D2D1_POINT_2F *origins);
+
+    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins)(
+        IDWriteFactory7 *This,
+        const DWRITE_GLYPH_RUN *run,
+        DWRITE_MEASURING_MODE measuring_mode,
+        D2D1_POINT_2F baseline_origin,
+        const DWRITE_MATRIX *transform,
+        D2D1_POINT_2F *origins);
+
+    /*** IDWriteFactory5 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory5_CreateFontSetBuilder)(
+        IDWriteFactory7 *This,
+        IDWriteFontSetBuilder1 **fontset_builder);
+
+    HRESULT (STDMETHODCALLTYPE *CreateInMemoryFontFileLoader)(
+        IDWriteFactory7 *This,
+        IDWriteInMemoryFontFileLoader **loader);
+
+    HRESULT (STDMETHODCALLTYPE *CreateHttpFontFileLoader)(
+        IDWriteFactory7 *This,
+        const WCHAR *referrer_url,
+        const WCHAR *extra_headers,
+        IDWriteRemoteFontFileLoader **loader);
+
+    DWRITE_CONTAINER_TYPE (STDMETHODCALLTYPE *AnalyzeContainerType)(
+        IDWriteFactory7 *This,
+        const void *data,
+        UINT32 data_size);
+
+    HRESULT (STDMETHODCALLTYPE *UnpackFontFile)(
+        IDWriteFactory7 *This,
+        DWRITE_CONTAINER_TYPE container_type,
+        const void *data,
+        UINT32 data_size,
+        IDWriteFontFileStream **stream);
+
+    /*** IDWriteFactory6 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateFontFaceReference)(
+        IDWriteFactory7 *This,
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_axis,
+        IDWriteFontFaceReference1 **face_ref);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFontResource)(
+        IDWriteFactory7 *This,
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        IDWriteFontResource **resource);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_GetSystemFontSet)(
+        IDWriteFactory7 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontSet1 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_GetSystemFontCollection)(
+        IDWriteFactory7 *This,
+        WINBOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateFontCollectionFromFontSet)(
+        IDWriteFactory7 *This,
+        IDWriteFontSet *fontset,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateFontSetBuilder)(
+        IDWriteFactory7 *This,
+        IDWriteFontSetBuilder2 **builder);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory6_CreateTextFormat)(
+        IDWriteFactory7 *This,
+        const WCHAR *familyname,
+        IDWriteFontCollection *collection,
+        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        UINT32 num_axis,
+        FLOAT fontsize,
+        const WCHAR *localename,
+        IDWriteTextFormat3 **format);
+
+    /*** IDWriteFactory7 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory7_GetSystemFontSet)(
+        IDWriteFactory7 *This,
+        WINBOOL include_downloadable,
+        IDWriteFontSet2 **fontset);
+
+    HRESULT (STDMETHODCALLTYPE *IDWriteFactory7_GetSystemFontCollection)(
+        IDWriteFactory7 *This,
+        WINBOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection3 **collection);
+
+    END_INTERFACE
+} IDWriteFactory7Vtbl;
+
+interface IDWriteFactory7 {
+    CONST_VTBL IDWriteFactory7Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDWriteFactory7_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDWriteFactory7_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDWriteFactory7_Release(This) (This)->lpVtbl->Release(This)
+/*** IDWriteFactory methods ***/
+#define IDWriteFactory7_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
+#define IDWriteFactory7_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
+#define IDWriteFactory7_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
+#define IDWriteFactory7_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
+#define IDWriteFactory7_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
+#define IDWriteFactory7_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
+#define IDWriteFactory7_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
+#define IDWriteFactory7_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
+#define IDWriteFactory7_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
+#define IDWriteFactory7_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
+#define IDWriteFactory7_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
+#define IDWriteFactory7_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
+#define IDWriteFactory7_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
+#define IDWriteFactory7_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
+#define IDWriteFactory7_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
+#define IDWriteFactory7_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
+#define IDWriteFactory7_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
+/*** IDWriteFactory1 methods ***/
+#define IDWriteFactory7_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
+/*** IDWriteFactory2 methods ***/
+#define IDWriteFactory7_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
+#define IDWriteFactory7_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
+/*** IDWriteFactory3 methods ***/
+#define IDWriteFactory7_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
+#define IDWriteFactory7_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
+#define IDWriteFactory7_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
+#define IDWriteFactory7_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
+/*** IDWriteFactory4 methods ***/
+#define IDWriteFactory7_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers) (This)->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers)
+#define IDWriteFactory7_ComputeGlyphOrigins_(This,run,baseline_origin,origins) (This)->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins)
+#define IDWriteFactory7_ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins) (This)->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins)
+/*** IDWriteFactory5 methods ***/
+#define IDWriteFactory7_CreateInMemoryFontFileLoader(This,loader) (This)->lpVtbl->CreateInMemoryFontFileLoader(This,loader)
+#define IDWriteFactory7_CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader) (This)->lpVtbl->CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader)
+#define IDWriteFactory7_AnalyzeContainerType(This,data,data_size) (This)->lpVtbl->AnalyzeContainerType(This,data,data_size)
+#define IDWriteFactory7_UnpackFontFile(This,container_type,data,data_size,stream) (This)->lpVtbl->UnpackFontFile(This,container_type,data,data_size,stream)
+/*** IDWriteFactory6 methods ***/
+#define IDWriteFactory7_CreateFontFaceReference(This,file,face_index,simulations,axis_values,num_axis,face_ref) (This)->lpVtbl->IDWriteFactory6_CreateFontFaceReference(This,file,face_index,simulations,axis_values,num_axis,face_ref)
+#define IDWriteFactory7_CreateFontResource(This,file,face_index,resource) (This)->lpVtbl->CreateFontResource(This,file,face_index,resource)
+#define IDWriteFactory7_CreateFontCollectionFromFontSet(This,fontset,family_model,collection) (This)->lpVtbl->IDWriteFactory6_CreateFontCollectionFromFontSet(This,fontset,family_model,collection)
+#define IDWriteFactory7_CreateFontSetBuilder(This,builder) (This)->lpVtbl->IDWriteFactory6_CreateFontSetBuilder(This,builder)
+#define IDWriteFactory7_CreateTextFormat(This,familyname,collection,axis_values,num_axis,fontsize,localename,format) (This)->lpVtbl->IDWriteFactory6_CreateTextFormat(This,familyname,collection,axis_values,num_axis,fontsize,localename,format)
+/*** IDWriteFactory7 methods ***/
+#define IDWriteFactory7_GetSystemFontSet(This,include_downloadable,fontset) (This)->lpVtbl->IDWriteFactory7_GetSystemFontSet(This,include_downloadable,fontset)
+#define IDWriteFactory7_GetSystemFontCollection(This,include_downloadable,family_model,collection) (This)->lpVtbl->IDWriteFactory7_GetSystemFontCollection(This,include_downloadable,family_model,collection)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_QueryInterface(IDWriteFactory7* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDWriteFactory7_AddRef(IDWriteFactory7* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDWriteFactory7_Release(IDWriteFactory7* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDWriteFactory methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_CreateCustomFontCollection(IDWriteFactory7* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
+    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_RegisterFontCollectionLoader(IDWriteFactory7* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_UnregisterFontCollectionLoader(IDWriteFactory7* This,IDWriteFontCollectionLoader *loader) {
+    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontFileReference(IDWriteFactory7* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateCustomFontFileReference(IDWriteFactory7* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
+    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontFace(IDWriteFactory7* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
+    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateRenderingParams(IDWriteFactory7* This,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateRenderingParams(This,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateMonitorRenderingParams(IDWriteFactory7* This,HMONITOR monitor,IDWriteRenderingParams **params) {
+    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_RegisterFontFileLoader(IDWriteFactory7* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->RegisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_UnregisterFontFileLoader(IDWriteFactory7* This,IDWriteFontFileLoader *loader) {
+    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateTypography(IDWriteFactory7* This,IDWriteTypography **typography) {
+    return This->lpVtbl->CreateTypography(This,typography);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_GetGdiInterop(IDWriteFactory7* This,IDWriteGdiInterop **gdi_interop) {
+    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateTextLayout(IDWriteFactory7* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateGdiCompatibleTextLayout(IDWriteFactory7* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,WINBOOL use_gdi_natural,IDWriteTextLayout **layout) {
+    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateEllipsisTrimmingSign(IDWriteFactory7* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
+    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateTextAnalyzer(IDWriteFactory7* This,IDWriteTextAnalyzer **analyzer) {
+    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateNumberSubstitution(IDWriteFactory7* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,WINBOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
+    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
+}
+/*** IDWriteFactory1 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_GetEudcFontCollection(IDWriteFactory7* This,IDWriteFontCollection **collection,WINBOOL check_for_updates) {
+    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
+}
+/*** IDWriteFactory2 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_GetSystemFontFallback(IDWriteFactory7* This,IDWriteFontFallback **fallback) {
+    return This->lpVtbl->GetSystemFontFallback(This,fallback);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontFallbackBuilder(IDWriteFactory7* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
+    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
+}
+/*** IDWriteFactory3 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_CreateGlyphRunAnalysis(IDWriteFactory7* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
+    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateCustomRenderingParams(IDWriteFactory7* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
+    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontFaceReference_(IDWriteFactory7* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
+    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_GetFontDownloadQueue(IDWriteFactory7* This,IDWriteFontDownloadQueue **queue) {
+    return This->lpVtbl->GetFontDownloadQueue(This,queue);
+}
+/*** IDWriteFactory4 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_TranslateColorGlyphRun(IDWriteFactory7* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,DWRITE_GLYPH_IMAGE_FORMATS desired_formats,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_MATRIX *transform,UINT32 palette,IDWriteColorGlyphRunEnumerator1 **layers) {
+    return This->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_ComputeGlyphOrigins_(IDWriteFactory7* This,const DWRITE_GLYPH_RUN *run,D2D1_POINT_2F baseline_origin,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_ComputeGlyphOrigins(IDWriteFactory7* This,const DWRITE_GLYPH_RUN *run,DWRITE_MEASURING_MODE measuring_mode,D2D1_POINT_2F baseline_origin,const DWRITE_MATRIX *transform,D2D1_POINT_2F *origins) {
+    return This->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins);
+}
+/*** IDWriteFactory5 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_CreateInMemoryFontFileLoader(IDWriteFactory7* This,IDWriteInMemoryFontFileLoader **loader) {
+    return This->lpVtbl->CreateInMemoryFontFileLoader(This,loader);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateHttpFontFileLoader(IDWriteFactory7* This,const WCHAR *referrer_url,const WCHAR *extra_headers,IDWriteRemoteFontFileLoader **loader) {
+    return This->lpVtbl->CreateHttpFontFileLoader(This,referrer_url,extra_headers,loader);
+}
+static FORCEINLINE DWRITE_CONTAINER_TYPE IDWriteFactory7_AnalyzeContainerType(IDWriteFactory7* This,const void *data,UINT32 data_size) {
+    return This->lpVtbl->AnalyzeContainerType(This,data,data_size);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_UnpackFontFile(IDWriteFactory7* This,DWRITE_CONTAINER_TYPE container_type,const void *data,UINT32 data_size,IDWriteFontFileStream **stream) {
+    return This->lpVtbl->UnpackFontFile(This,container_type,data,data_size,stream);
+}
+/*** IDWriteFactory6 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontFaceReference(IDWriteFactory7* This,IDWriteFontFile *file,UINT32 face_index,DWRITE_FONT_SIMULATIONS simulations,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_axis,IDWriteFontFaceReference1 **face_ref) {
+    return This->lpVtbl->IDWriteFactory6_CreateFontFaceReference(This,file,face_index,simulations,axis_values,num_axis,face_ref);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontResource(IDWriteFactory7* This,IDWriteFontFile *file,UINT32 face_index,IDWriteFontResource **resource) {
+    return This->lpVtbl->CreateFontResource(This,file,face_index,resource);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontCollectionFromFontSet(IDWriteFactory7* This,IDWriteFontSet *fontset,DWRITE_FONT_FAMILY_MODEL family_model,IDWriteFontCollection2 **collection) {
+    return This->lpVtbl->IDWriteFactory6_CreateFontCollectionFromFontSet(This,fontset,family_model,collection);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateFontSetBuilder(IDWriteFactory7* This,IDWriteFontSetBuilder2 **builder) {
+    return This->lpVtbl->IDWriteFactory6_CreateFontSetBuilder(This,builder);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_CreateTextFormat(IDWriteFactory7* This,const WCHAR *familyname,IDWriteFontCollection *collection,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_axis,FLOAT fontsize,const WCHAR *localename,IDWriteTextFormat3 **format) {
+    return This->lpVtbl->IDWriteFactory6_CreateTextFormat(This,familyname,collection,axis_values,num_axis,fontsize,localename,format);
+}
+/*** IDWriteFactory7 methods ***/
+static FORCEINLINE HRESULT IDWriteFactory7_GetSystemFontSet(IDWriteFactory7* This,WINBOOL include_downloadable,IDWriteFontSet2 **fontset) {
+    return This->lpVtbl->IDWriteFactory7_GetSystemFontSet(This,include_downloadable,fontset);
+}
+static FORCEINLINE HRESULT IDWriteFactory7_GetSystemFontCollection(IDWriteFactory7* This,WINBOOL include_downloadable,DWRITE_FONT_FAMILY_MODEL family_model,IDWriteFontCollection3 **collection) {
+    return This->lpVtbl->IDWriteFactory7_GetSystemFontCollection(This,include_downloadable,family_model,collection);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDWriteFactory7_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
 
 #ifdef __cplusplus
-    using IDWriteFontFace2::GetRecommendedRenderingMode;
+}
 #endif
 
-    STDMETHOD_(BOOL, IsCharacterLocal)(THIS_ UINT32 unicodeValue) PURE;
-    STDMETHOD_(BOOL, IsGlyphLocal)(THIS_ UINT16 glyphId) PURE;
-    STDMETHOD(AreCharactersLocal)(THIS_ WCHAR const *characters, UINT32 characterCount,
-        BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
-    STDMETHOD(AreGlyphsLocal)(THIS_ UINT16 const *glyphIndices, UINT32 glyphCount,
-        BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
-
-    END_INTERFACE
-};
-
-__CRT_UUID_DECL(IDWriteFontFace3, 0xd37d7598,0x09be,0x4222,0xa2,0x36,0x20,0x81,0x34,0x1c,0xc1,0xf2)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFace4
-DECLARE_INTERFACE_(IDWriteFontFace4,IDWriteFontFace3)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWriteFontFace methods */
-    STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
-
-    STDMETHOD(GetFiles)(THIS_
-        UINT32 *numberOfFiles,
-        IDWriteFontFile **fontFiles) PURE;
-
-    STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
-
-    STDMETHOD_(void, GetMetrics)(THIS_
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-    STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
-
-    STDMETHOD(GetDesignGlyphMetrics)(THIS_
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(GetGlyphIndices)(THIS_
-        UINT32 const *codePoints,
-        UINT32 codePointCount,
-        UINT16 *glyphIndices) PURE;
-
-    STDMETHOD(TryGetFontTable)(THIS_
-        UINT32 openTypeTableTag,
-        const void **tableData,
-        UINT32 *tableSize,
-        void **tableContext,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD_(void, ReleaseFontTable)(THIS_
-        void *tableContext) PURE;
-
-    STDMETHOD(GetGlyphRunOutline)(THIS_
-        FLOAT emSize,
-        UINT16 const *glyphIndices,
-        FLOAT const *glyphAdvances,
-        DWRITE_GLYPH_OFFSET const *glyphOffsets,
-        UINT32 glyphCount,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        IDWriteGeometrySink *geometrySink) PURE;
-
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE *renderingMode) PURE;
-
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-    STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    /* IDWriteFontFace1 methods */
-    STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
-    STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
-    STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
-    STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-    STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
-            UINT16 const*,INT32*) PURE;
-    STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
-    STDMETHOD_(BOOL, HasKerningPairs)(THIS);
-    STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
-            DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
-    STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
-    STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
-
-    /* IDWriteFontFace2 methods */
-    STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
-    STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
-    STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
-        STDMETHOD(GetPaletteEntries)(THIS_
-        UINT32 colorPaletteIndex,
-        UINT32 firstEntryIndex,
-        UINT32 entryCount,
-        DWRITE_COLOR_F* paletteEntries
-        ) PURE;
-
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT fontEmSize,
-        FLOAT dpiX,
-        FLOAT dpiY,
-        DWRITE_MATRIX const* transform,
-        BOOL isSideways,
-        DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams* renderingParams,
-        DWRITE_RENDERING_MODE* renderingMode,
-        DWRITE_GRID_FIT_MODE* gridFitMode
-        ) PURE;
-
-    /* IDWriteFontFace3 methods */
-    STDMETHOD(GetFontFaceReference)(THIS_ IDWriteFontFaceReference **fontFaceReference) PURE;
-    STDMETHOD_(void, GetPanose)(THIS_ DWRITE_PANOSE *panose) PURE;
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
-    STDMETHOD(GetFamilyNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD(GetFaceNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD(GetInformationalStrings)(THIS_ DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
-        IDWriteLocalizedStrings **informationalStrings, BOOL *exists) PURE;
-    STDMETHOD_(BOOL, HasCharacter)(THIS_ UINT32 unicodeValue) PURE;
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_ FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY,
-        DWRITE_MATRIX const *transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode) PURE;
-    STDMETHOD_(BOOL, IsCharacterLocal)(THIS_ UINT32 unicodeValue) PURE;
-    STDMETHOD_(BOOL, IsGlyphLocal)(THIS_ UINT16 glyphId) PURE;
-    STDMETHOD(AreCharactersLocal)(THIS_ WCHAR const *characters, UINT32 characterCount,
-        BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
-    STDMETHOD(AreGlyphsLocal)(THIS_ UINT16 const *glyphIndices, UINT32 glyphCount,
-        BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
-#endif
-
-    /* IDWriteFontFace4 methods */
-    STDMETHOD_(DWRITE_GLYPH_IMAGE_FORMATS, GetGlyphImageFormats)(THIS) PURE;
-    STDMETHOD(GetGlyphImageFormats)(THIS_ UINT16 glyphId, UINT32 pixelsPerEmFirst,
-        UINT32 pixelsPerEmLast, DWRITE_GLYPH_IMAGE_FORMATS *glyphImageFormats) PURE;
-    STDMETHOD(GetGlyphImageData)(THIS_ UINT16 glyphId, UINT32 pixelsPerEm,
-        DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat, DWRITE_GLYPH_IMAGE_DATA *glyphData,
-        void **glyphDataContext) PURE;
-    STDMETHOD_(void, ReleaseGlyphImageData)(THIS_ void *glyphDataContext) PURE;
-
-    END_INTERFACE
-};
-
-__CRT_UUID_DECL(IDWriteFontFace4, 0x27f2a904,0x4eb8,0x441d,0x96,0x78,0x05,0x63,0xf5,0x3e,0x3e,0x2f)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontFace5
-DECLARE_INTERFACE_(IDWriteFontFace5,IDWriteFontFace4)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IDWriteFontFace methods */
-    STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
-
-    STDMETHOD(GetFiles)(THIS_
-        UINT32 *numberOfFiles,
-        IDWriteFontFile **fontFiles) PURE;
-
-    STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
-    STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
-
-    STDMETHOD_(void, GetMetrics)(THIS_
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-    STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
-
-    STDMETHOD(GetDesignGlyphMetrics)(THIS_
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    STDMETHOD(GetGlyphIndices)(THIS_
-        UINT32 const *codePoints,
-        UINT32 codePointCount,
-        UINT16 *glyphIndices) PURE;
-
-    STDMETHOD(TryGetFontTable)(THIS_
-        UINT32 openTypeTableTag,
-        const void **tableData,
-        UINT32 *tableSize,
-        void **tableContext,
-        WINBOOL *exists) PURE;
-
-    STDMETHOD_(void, ReleaseFontTable)(THIS_
-        void *tableContext) PURE;
-
-    STDMETHOD(GetGlyphRunOutline)(THIS_
-        FLOAT emSize,
-        UINT16 const *glyphIndices,
-        FLOAT const *glyphAdvances,
-        DWRITE_GLYPH_OFFSET const *glyphOffsets,
-        UINT32 glyphCount,
-        WINBOOL isSideways,
-        WINBOOL isRightToLeft,
-        IDWriteGeometrySink *geometrySink) PURE;
-
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE *renderingMode) PURE;
-
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
-
-    STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MATRIX const *transform,
-        WINBOOL useGdiNatural,
-        UINT16 const *glyphIndices,
-        UINT32 glyphCount,
-        DWRITE_GLYPH_METRICS *glyphMetrics,
-        WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-
-    /* IDWriteFontFace1 methods */
-    STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
-    STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
-    STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
-    STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
-    STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
-    STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
-            UINT16 const*,INT32*) PURE;
-    STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
-    STDMETHOD_(BOOL, HasKerningPairs)(THIS);
-    STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
-            DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
-    STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
-    STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
-
-    /* IDWriteFontFace2 methods */
-    STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
-    STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
-    STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
-        STDMETHOD(GetPaletteEntries)(THIS_
-        UINT32 colorPaletteIndex,
-        UINT32 firstEntryIndex,
-        UINT32 entryCount,
-        DWRITE_COLOR_F* paletteEntries
-        ) PURE;
-
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_
-        FLOAT fontEmSize,
-        FLOAT dpiX,
-        FLOAT dpiY,
-        DWRITE_MATRIX const* transform,
-        BOOL isSideways,
-        DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams* renderingParams,
-        DWRITE_RENDERING_MODE* renderingMode,
-        DWRITE_GRID_FIT_MODE* gridFitMode
-        ) PURE;
-
-    /* IDWriteFontFace3 methods */
-    STDMETHOD(GetFontFaceReference)(THIS_ IDWriteFontFaceReference **fontFaceReference) PURE;
-    STDMETHOD_(void, GetPanose)(THIS_ DWRITE_PANOSE *panose) PURE;
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
-    STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
-    STDMETHOD(GetFamilyNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD(GetFaceNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD(GetInformationalStrings)(THIS_ DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
-        IDWriteLocalizedStrings **informationalStrings, BOOL *exists) PURE;
-    STDMETHOD_(BOOL, HasCharacter)(THIS_ UINT32 unicodeValue) PURE;
-    STDMETHOD(GetRecommendedRenderingMode)(THIS_ FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY,
-        DWRITE_MATRIX const *transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold,
-        DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams,
-        DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode) PURE;
-    STDMETHOD_(BOOL, IsCharacterLocal)(THIS_ UINT32 unicodeValue) PURE;
-    STDMETHOD_(BOOL, IsGlyphLocal)(THIS_ UINT16 glyphId) PURE;
-    STDMETHOD(AreCharactersLocal)(THIS_ WCHAR const *characters, UINT32 characterCount,
-        BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
-    STDMETHOD(AreGlyphsLocal)(THIS_ UINT16 const *glyphIndices, UINT32 glyphCount,
-        BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
-
-    /* IDWriteFontFace4 methods */
-    STDMETHOD_(DWRITE_GLYPH_IMAGE_FORMATS, GetGlyphImageFormats)(THIS) PURE;
-    STDMETHOD(GetGlyphImageFormats)(THIS_ UINT16 glyphId, UINT32 pixelsPerEmFirst,
-        UINT32 pixelsPerEmLast, DWRITE_GLYPH_IMAGE_FORMATS *glyphImageFormats) PURE;
-    STDMETHOD(GetGlyphImageData)(THIS_ UINT16 glyphId, UINT32 pixelsPerEm,
-        DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat, DWRITE_GLYPH_IMAGE_DATA *glyphData,
-        void **glyphDataContext) PURE;
-    STDMETHOD_(void, ReleaseGlyphImageData)(THIS_ void *glyphDataContext) PURE;
-#endif
-
-    /* IDWriteFontFace5 methods */
-    STDMETHOD_(UINT32, GetFontAxisValueCount)(THIS) PURE;
-    STDMETHOD(GetFontAxisValues)(THIS_ DWRITE_FONT_AXIS_VALUE *fontAxisValues,
-        UINT32 fontAxisValueCount) PURE;
-    STDMETHOD_(BOOL, HasVariations)(THIS) PURE;
-    STDMETHOD(GetFontResource)(THIS_ IDWriteFontResource **fontResource) PURE;
-    STDMETHOD_(BOOL, Equals)(THIS_ IDWriteFontFace *fontFace) PURE;
-
-    END_INTERFACE
-};
-
-__CRT_UUID_DECL(IDWriteFontFace5, 0x98eff3a5,0xb667,0x479a,0xb1,0x45,0xe2,0xfa,0x5b,0x9f,0xdc,0x29)
-
-#undef  INTERFACE
-#define INTERFACE IDWriteFontResource
-DECLARE_INTERFACE_(IDWriteFontResource,IUnknown)
-{
-    BEGIN_INTERFACE
-
-#ifndef __cplusplus
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-#endif
-
-    STDMETHOD(GetFontFile)(THIS_ IDWriteFontFile **fontFile) PURE;
-    STDMETHOD_(UINT32, GetFontFaceIndex)(THIS) PURE;
-    STDMETHOD_(UINT32, GetFontAxisCount)(THIS) PURE;
-    STDMETHOD(GetDefaultFontAxisValues)(THIS_ DWRITE_FONT_AXIS_VALUE *fontAxisValues,
-        UINT32 fontAxisValueCount) PURE;
-    STDMETHOD(GetFontAxisRanges)(THIS_ DWRITE_FONT_AXIS_RANGE *fontAxisRanges,
-        UINT32 fontAxisRangeCount) PURE;
-    STDMETHOD_(DWRITE_FONT_AXIS_ATTRIBUTES, GetFontAxisAttributes)(THIS_ UINT32 axisIndex) PURE;
-    STDMETHOD(GetAxisNames)(THIS_ UINT32 axisIndex, IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD_(UINT32, GetAxisValueNameCount)(THIS_ UINT32 axisIndex) PURE;
-    STDMETHOD(GetAxisValueNames)(THIS_ UINT32 axisIndex, UINT32 axisValueIndex,
-        DWRITE_FONT_AXIS_RANGE* fontAxisRange, IDWriteLocalizedStrings **names) PURE;
-    STDMETHOD_(BOOL, HasVariations)(THIS) PURE;
-    STDMETHOD(CreateFontFace)(THIS_ DWRITE_FONT_SIMULATIONS fontSimulations,
-        DWRITE_FONT_AXIS_VALUE const *fontAxisValues, UINT32 fontAxisValueCount,
-        IDWriteFontFace5 **fontFace) PURE;
-    STDMETHOD(CreateFontFaceReference)(THIS_ DWRITE_FONT_SIMULATIONS fontSimulations,
-        DWRITE_FONT_AXIS_VALUE const *fontAxisValues, UINT32 fontAxisValueCount,
-        IDWriteFontFaceReference1 **fontFaceReference) PURE;
-
-    END_INTERFACE
-};
-
-__CRT_UUID_DECL(IDWriteFontResource, 0x1f803a76,0x6871,0x48e8,0x98,0x7f,0xb9,0x75,0x55,0x1c,0x50,0xf2)
-
-
-#endif /* DWRITE_3_H_INCLUDED */
+#endif /* __dwrite_3_h__ */
diff --git a/mingw-w64-headers/include/dwrite_3.idl b/mingw-w64-headers/include/dwrite_3.idl
new file mode 100644
index 0000000..f5ee615
--- /dev/null
+++ b/mingw-w64-headers/include/dwrite_3.idl
@@ -0,0 +1,994 @@
+/*
+ * Copyright 2016 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "dwrite_2.idl";
+
+interface IDWriteFontFaceReference;
+interface IDWriteFontFaceReference1;
+interface IDWriteFontFace3;
+interface IDWriteFontSet;
+interface IDWriteFontDownloadQueue;
+interface IDWriteFontFace5;
+interface IDWriteFontList2;
+
+cpp_quote("#ifndef _WINGDI_")
+/* already defined in wingdi.h but needed for WIDL */
+typedef struct FONTSIGNATURE FONTSIGNATURE;
+cpp_quote("#endif /* _WINGDI_ */")
+
+typedef enum DWRITE_LOCALITY
+{
+    DWRITE_LOCALITY_REMOTE,
+    DWRITE_LOCALITY_PARTIAL,
+    DWRITE_LOCALITY_LOCAL
+} DWRITE_LOCALITY;
+
+typedef enum DWRITE_RENDERING_MODE1
+{
+    DWRITE_RENDERING_MODE1_DEFAULT,
+    DWRITE_RENDERING_MODE1_ALIASED,
+    DWRITE_RENDERING_MODE1_GDI_CLASSIC,
+    DWRITE_RENDERING_MODE1_GDI_NATURAL,
+    DWRITE_RENDERING_MODE1_NATURAL,
+    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC,
+    DWRITE_RENDERING_MODE1_OUTLINE,
+    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED
+} DWRITE_RENDERING_MODE1;
+
+typedef enum DWRITE_FONT_PROPERTY_ID
+{
+    DWRITE_FONT_PROPERTY_ID_NONE,
+    DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FACE_NAME,
+    DWRITE_FONT_PROPERTY_ID_FULL_NAME,
+    DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME,
+    DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG,
+    DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG,
+    DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG,
+    DWRITE_FONT_PROPERTY_ID_WEIGHT,
+    DWRITE_FONT_PROPERTY_ID_STRETCH,
+    DWRITE_FONT_PROPERTY_ID_STYLE,
+    DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FACE_NAME,
+    DWRITE_FONT_PROPERTY_ID_TOTAL = DWRITE_FONT_PROPERTY_ID_STYLE + 1,
+    DWRITE_FONT_PROPERTY_ID_TOTAL_RS3 = DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FACE_NAME + 1,
+    DWRITE_FONT_PROPERTY_ID_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME,
+    DWRITE_FONT_PROPERTY_ID_FACE_NAME = DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FACE_NAME,
+} DWRITE_FONT_PROPERTY_ID;
+
+typedef struct DWRITE_FONT_PROPERTY
+{
+    DWRITE_FONT_PROPERTY_ID propertyId;
+    WCHAR const *propertyValue;
+    WCHAR const *localeName;
+} DWRITE_FONT_PROPERTY;
+
+typedef enum DWRITE_FONT_AXIS_TAG
+{
+    DWRITE_FONT_AXIS_TAG_WEIGHT       = 0x74686777, /* 'wght' */
+    DWRITE_FONT_AXIS_TAG_WIDTH        = 0x68746477, /* 'wdth' */
+    DWRITE_FONT_AXIS_TAG_SLANT        = 0x746e6c73, /* 'slnt' */
+    DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = 0x7a73706f, /* 'opsz' */
+    DWRITE_FONT_AXIS_TAG_ITALIC       = 0x6c617469, /* 'ital' */
+} DWRITE_FONT_AXIS_TAG;
+
+typedef enum DWRITE_FONT_SOURCE_TYPE
+{
+    DWRITE_FONT_SOURCE_TYPE_UNKNOWN,
+    DWRITE_FONT_SOURCE_TYPE_PER_MACHINE,
+    DWRITE_FONT_SOURCE_TYPE_PER_USER,
+    DWRITE_FONT_SOURCE_TYPE_APPX_PACKAGE,
+    DWRITE_FONT_SOURCE_TYPE_REMOTE_FONT_PROVIDER
+} DWRITE_FONT_SOURCE_TYPE;
+
+typedef struct DWRITE_FONT_AXIS_VALUE
+{
+    DWRITE_FONT_AXIS_TAG axisTag;
+    FLOAT value;
+} DWRITE_FONT_AXIS_VALUE;
+
+typedef struct DWRITE_FONT_AXIS_RANGE
+{
+    DWRITE_FONT_AXIS_TAG axisTag;
+    FLOAT minValue;
+    FLOAT maxValue;
+} DWRITE_FONT_AXIS_RANGE;
+
+typedef enum DWRITE_AUTOMATIC_FONT_AXES
+{
+    DWRITE_AUTOMATIC_FONT_AXES_NONE,
+    DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE,
+} DWRITE_AUTOMATIC_FONT_AXES;
+
+typedef enum DWRITE_FONT_AXIS_ATTRIBUTES
+{
+    DWRITE_FONT_AXIS_ATTRIBUTES_NONE,
+    DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE,
+    DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN,
+} DWRITE_FONT_AXIS_ATTRIBUTES;
+
+typedef enum DWRITE_FONT_FAMILY_MODEL
+{
+    DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC,
+    DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE,
+} DWRITE_FONT_FAMILY_MODEL;
+
+[
+    local,
+    object,
+    uuid(b06fe5b9-43ec-4393-881b-dbe4dc72fda7)
+]
+interface IDWriteFontDownloadListener : IUnknown
+{
+    void DownloadCompleted(IDWriteFontDownloadQueue *queue, IUnknown *context, HRESULT result);
+}
+
+[
+    local,
+    object,
+    uuid(b71e6052-5aea-4fa3-832e-f60d431f7e91)
+]
+interface IDWriteFontDownloadQueue : IUnknown
+{
+    HRESULT AddListener(IDWriteFontDownloadListener *listener, UINT32 *token);
+    HRESULT RemoveListener(UINT32 token);
+    BOOL IsEmpty();
+    HRESULT BeginDownload(IUnknown *context);
+    HRESULT CancelDownload();
+    UINT64 GetGenerationCount();
+}
+
+[
+    local,
+    object,
+    uuid(b7924baa-391b-412a-8c5c-e44cc2d867dc)
+]
+interface IDWriteRenderingParams3 : IDWriteRenderingParams2
+{
+    DWRITE_RENDERING_MODE1 GetRenderingMode1();
+}
+
+[
+    local,
+    object,
+    uuid(cfee3140-1257-47ca-8b85-31bfcf3f2d0e)
+]
+interface IDWriteStringList : IUnknown
+{
+    UINT32 GetCount();
+    HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length);
+    HRESULT GetLocaleName(UINT32 index, WCHAR *name, UINT32 size);
+    HRESULT GetStringLength(UINT32 index, UINT32 *length);
+    HRESULT GetString(UINT32 index, WCHAR *string, UINT32 size);
+}
+
+[
+    local,
+    object,
+    uuid(53585141-d9f8-4095-8321-d73cf6bd116b)
+]
+interface IDWriteFontSet : IUnknown
+{
+    UINT32 GetFontCount();
+    HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference);
+    HRESULT FindFontFaceReference(IDWriteFontFaceReference *reference,
+        UINT32 *index, BOOL *exists);
+    HRESULT FindFontFace(IDWriteFontFace *fontface, UINT32 *index, BOOL *exists);
+    HRESULT GetPropertyValues__(DWRITE_FONT_PROPERTY_ID id, IDWriteStringList **values);
+    HRESULT GetPropertyValues_(DWRITE_FONT_PROPERTY_ID id,
+        WCHAR const *preferred_locales, IDWriteStringList **values);
+    HRESULT GetPropertyValues(UINT32 index, DWRITE_FONT_PROPERTY_ID id, BOOL *exists,
+        IDWriteLocalizedStrings **values);
+    HRESULT GetPropertyOccurrenceCount(DWRITE_FONT_PROPERTY const *property, UINT32 *count);
+    HRESULT GetMatchingFonts_(WCHAR const *family, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style, IDWriteFontSet **fontset);
+    HRESULT GetMatchingFonts(DWRITE_FONT_PROPERTY const *props, UINT32 count, IDWriteFontSet **fontset);
+}
+
+[
+    local,
+    object,
+    uuid(1f803a76-6871-48e8-987f-b975551c50f2)
+]
+interface IDWriteFontResource : IUnknown
+{
+    HRESULT GetFontFile(IDWriteFontFile **fontfile);
+    UINT32 GetFontFaceIndex();
+    UINT32 GetFontAxisCount();
+    HRESULT GetDefaultFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE const *values,
+        UINT32 num_values);
+    HRESULT GetFontAxisRanges(
+        DWRITE_FONT_AXIS_RANGE const *ranges,
+        UINT32 num_ranges);
+    DWRITE_FONT_AXIS_ATTRIBUTES GetFontAxisAttributes(
+        UINT32 axis);
+    HRESULT GetAxisNames(
+        UINT32 axis,
+        IDWriteLocalizedStrings **names);
+    UINT32 GetAxisValueNameCount(
+        UINT32 axis);
+    HRESULT GetAxisValueNames(
+        UINT32 axis,
+        UINT32 axis_value,
+        DWRITE_FONT_AXIS_RANGE *axis_range,
+        IDWriteLocalizedStrings **names);
+    BOOL HasVariations();
+    HRESULT CreateFontFace(
+        DWRITE_FONT_SIMULATIONS simulations,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        IDWriteFontFace5 **fontface);
+    HRESULT CreateFontFaceReference(
+        DWRITE_FONT_SIMULATIONS simulations,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        IDWriteFontFaceReference1 **reference);
+}
+
+[
+    local,
+    object,
+    uuid(7e9fda85-6c92-4053-bc47-7ae3530db4d3)
+]
+interface IDWriteFontSet1 : IDWriteFontSet
+{
+    HRESULT GetMatchingFonts(
+        DWRITE_FONT_PROPERTY const *property,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        IDWriteFontSet1 **fontset);
+    HRESULT GetFirstFontResources(IDWriteFontSet1 **fontset);
+    HRESULT GetFilteredFonts__(
+        UINT32 const *indices,
+        UINT32 num_indices,
+        IDWriteFontSet1 **fontset);
+    HRESULT GetFilteredFonts_(
+        DWRITE_FONT_AXIS_RANGE const *axis_ranges,
+        UINT32 num_ranges,
+        BOOL select_any_range,
+        IDWriteFontSet1 **fontset);
+    HRESULT GetFilteredFonts(
+        DWRITE_FONT_PROPERTY const *props,
+        UINT32 num_properties,
+        BOOL select_any_property,
+        IDWriteFontSet1 **fontset);
+    HRESULT GetFilteredFontIndices_(
+        DWRITE_FONT_AXIS_RANGE const *ranges,
+        UINT32 num_ranges,
+        BOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+    HRESULT GetFilteredFontIndices(
+        DWRITE_FONT_PROPERTY const *props,
+        UINT32 num_properties,
+        BOOL select_any_range,
+        UINT32 *indices,
+        UINT32 num_indices,
+        UINT32 *actual_num_indices);
+    HRESULT GetFontAxisRanges_(
+        UINT32 font_index,
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+    HRESULT GetFontAxisRanges(
+        DWRITE_FONT_AXIS_RANGE *axis_ranges,
+        UINT32 num_ranges,
+        UINT32 *actual_num_ranges);
+    HRESULT GetFontFaceReference(
+        UINT32 index,
+        IDWriteFontFaceReference1 **reference);
+    HRESULT CreateFontResource(
+        UINT32 index,
+        IDWriteFontResource **resource);
+    HRESULT CreateFontFace(
+        UINT32 index,
+        IDWriteFontFace5 **fontface);
+    DWRITE_LOCALITY GetFontLocality(UINT32 index);
+}
+
+[
+    local,
+    object,
+    uuid(29748ed6-8c9c-4a6a-be0b-d912e8538944)
+]
+interface IDWriteFont3 : IDWriteFont2
+{
+    HRESULT CreateFontFace(IDWriteFontFace3 **fontface);
+    BOOL Equals(IDWriteFont *font);
+    HRESULT GetFontFaceReference(IDWriteFontFaceReference **reference);
+    BOOL HasCharacter(UINT32 character);
+    DWRITE_LOCALITY GetLocality();
+}
+
+[
+    local,
+    object,
+    uuid(da20d8ef-812a-4c43-9802-62ec4abd7adf)
+]
+interface IDWriteFontFamily1 : IDWriteFontFamily
+{
+    DWRITE_LOCALITY GetFontLocality(UINT32 index);
+    HRESULT GetFont(UINT32 index, IDWriteFont3 **font);
+    HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference);
+}
+
+[
+    local,
+    object,
+    uuid(3ed49e77-a398-4261-b9cf-c126c2131ef3)
+]
+interface IDWriteFontFamily2 : IDWriteFontFamily1
+{
+    HRESULT GetMatchingFonts(
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist);
+    HRESULT GetFontSet(IDWriteFontSet1 **fontset);
+}
+
+[
+    local,
+    object,
+    uuid(53585141-d9f8-4095-8321-d73cf6bd116c)
+]
+interface IDWriteFontCollection1 : IDWriteFontCollection
+{
+    HRESULT GetFontSet(IDWriteFontSet **fontset);
+    HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily1 **family);
+}
+
+[
+    local,
+    object,
+    uuid(514039c6-4617-4064-bf8b-92ea83e506e0)
+]
+interface IDWriteFontCollection2 : IDWriteFontCollection1
+{
+    HRESULT GetFontFamily(
+        UINT32 index,
+        IDWriteFontFamily2 **family);
+    HRESULT GetMatchingFonts(
+        const WCHAR *familyname,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        IDWriteFontList2 **fontlist);
+    DWRITE_FONT_FAMILY_MODEL GetFontFamilyModel();
+    HRESULT GetFontSet(IDWriteFontSet1 **fontset);
+}
+
+[
+    local,
+    object,
+    uuid(a4d055a6-f9e3-4e25-93b7-9e309f3af8e9)
+]
+interface IDWriteFontCollection3 : IDWriteFontCollection2
+{
+    HANDLE GetExpirationEvent();
+}
+
+[
+    local,
+    object,
+    uuid(5e7fa7ca-dde3-424c-89f0-9fcd6fed58cd)
+]
+interface IDWriteFontFaceReference : IUnknown
+{
+    HRESULT CreateFontFace(IDWriteFontFace3 **fontface);
+    HRESULT CreateFontFaceWithSimulations(DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFace3 **fontface);
+    BOOL Equals(IDWriteFontFaceReference *reference);
+    UINT32 GetFontFaceIndex();
+    DWRITE_FONT_SIMULATIONS GetSimulations();
+    HRESULT GetFontFile(IDWriteFontFile **fontfile);
+    UINT64 GetLocalFileSize();
+    UINT64 GetFileSize();
+    HRESULT GetFileTime(FILETIME *writetime);
+    DWRITE_LOCALITY GetLocality();
+    HRESULT EnqueueFontDownloadRequest();
+    HRESULT EnqueueCharacterDownloadRequest(WCHAR const *chars, UINT32 count);
+    HRESULT EnqueueGlyphDownloadRequest(UINT16 const *glyphs, UINT32 count);
+    HRESULT EnqueueFileFragmentDownloadRequest(UINT64 offset, UINT64 size);
+}
+
+[
+    local,
+    object,
+    uuid(c081fe77-2fd1-41ac-a5a3-34983c4ba61a)
+]
+interface IDWriteFontFaceReference1 : IDWriteFontFaceReference
+{
+    HRESULT CreateFontFace(IDWriteFontFace5 **fontface);
+    UINT32 GetFontAxisValueCount();
+    HRESULT GetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values);
+}
+
+[
+    local,
+    object,
+    uuid(da20d8ef-812a-4c43-9802-62ec4abd7ade)
+]
+interface IDWriteFontList1 : IDWriteFontList
+{
+    DWRITE_LOCALITY GetFontLocality(UINT32 index);
+    HRESULT GetFont(UINT32 index, IDWriteFont3 **font);
+    HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference);
+}
+
+[
+    local,
+    object,
+    uuid(c0763a34-77af-445a-b735-08c37b0a5bf5)
+]
+interface IDWriteFontList2 : IDWriteFontList1
+{
+    HRESULT GetFontSet(IDWriteFontSet1 **fontset);
+}
+
+[
+    local,
+    object,
+    uuid(dc7ead19-e54c-43af-b2da-4e2b79ba3f7f)
+]
+interface IDWriteFontSet2 : IDWriteFontSet1
+{
+    HANDLE GetExpirationEvent();
+}
+
+[
+    local,
+    object,
+    uuid(7c073ef2-a7f4-4045-8c32-8ab8ae640f90)
+]
+interface IDWriteFontSet3 : IDWriteFontSet2
+{
+    DWRITE_FONT_SOURCE_TYPE GetFontSourceType(UINT32 index);
+    UINT32 GetFontSourceNameLength(UINT32 index);
+    HRESULT GetFontSourceName(UINT32 index, WCHAR *buffer, UINT32 buffer_size);
+}
+
+[
+    local,
+    object,
+    uuid(d37d7598-09be-4222-a236-2081341cc1f2)
+]
+interface IDWriteFontFace3 : IDWriteFontFace2
+{
+    HRESULT GetFontFaceReference(IDWriteFontFaceReference **reference);
+    void GetPanose(DWRITE_PANOSE *panose);
+    DWRITE_FONT_WEIGHT GetWeight();
+    DWRITE_FONT_STRETCH GetStretch();
+    DWRITE_FONT_STYLE GetStyle();
+    HRESULT GetFamilyNames(IDWriteLocalizedStrings **names);
+    HRESULT GetFaceNames(IDWriteLocalizedStrings **names);
+    HRESULT GetInformationalStrings(DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        BOOL *exists);
+    BOOL HasCharacter(UINT32 character);
+    HRESULT GetRecommendedRenderingMode(
+        FLOAT emsize,
+        FLOAT dpi_x,
+        FLOAT dpi_y,
+        DWRITE_MATRIX const *transform,
+        BOOL is_sideways,
+        DWRITE_OUTLINE_THRESHOLD threshold,
+        DWRITE_MEASURING_MODE measuring_mode,
+        IDWriteRenderingParams *params,
+        DWRITE_RENDERING_MODE1 *rendering_mode,
+        DWRITE_GRID_FIT_MODE *gridfit_mode);
+    BOOL IsCharacterLocal(UINT32 character);
+    BOOL IsGlyphLocal(UINT16 glyph);
+    HRESULT AreCharactersLocal(WCHAR const *characters,
+        UINT32 count, BOOL enqueue_if_not, BOOL *are_local);
+    HRESULT AreGlyphsLocal(UINT16 const *glyphs, UINT32 count,
+        BOOL enqueue_if_not, BOOL *are_local);
+}
+
+
+typedef struct DWRITE_LINE_METRICS1
+{
+    UINT32 length;
+    UINT32 trailingWhitespaceLength;
+    UINT32 newlineLength;
+    FLOAT height;
+    FLOAT baseline;
+    BOOL isTrimmed;
+    FLOAT leadingBefore;
+    FLOAT leadingAfter;
+} DWRITE_LINE_METRICS1;
+
+typedef enum DWRITE_FONT_LINE_GAP_USAGE
+{
+    DWRITE_FONT_LINE_GAP_USAGE_DEFAULT,
+    DWRITE_FONT_LINE_GAP_USAGE_DISABLED,
+    DWRITE_FONT_LINE_GAP_USAGE_ENABLED
+} DWRITE_FONT_LINE_GAP_USAGE;
+
+typedef struct DWRITE_LINE_SPACING
+{
+    DWRITE_LINE_SPACING_METHOD method;
+    FLOAT height;
+    FLOAT baseline;
+    FLOAT leadingBefore;
+    DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage;
+} DWRITE_LINE_SPACING;
+
+[
+    local,
+    object,
+    uuid(f67e0edd-9e3d-4ecc-8c32-4183253dfe70)
+]
+interface IDWriteTextFormat2 : IDWriteTextFormat1
+{
+    HRESULT SetLineSpacing(DWRITE_LINE_SPACING const *spacing);
+    HRESULT GetLineSpacing(DWRITE_LINE_SPACING *spacing);
+}
+
+[
+    local,
+    object,
+    uuid(6d3b5641-e550-430d-a85b-b7bf48a93427)
+]
+interface IDWriteTextFormat3 : IDWriteTextFormat2
+{
+    HRESULT SetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values);
+    UINT32 GetFontAxisValueCount();
+    HRESULT GetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values);
+    DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes();
+    HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES axes);
+}
+
+[
+    local,
+    object,
+    uuid(07ddcd52-020e-4de8-ac33-6c953d83f92d)
+]
+interface IDWriteTextLayout3 : IDWriteTextLayout2
+{
+    HRESULT InvalidateLayout();
+    HRESULT SetLineSpacing(DWRITE_LINE_SPACING const *spacing);
+    HRESULT GetLineSpacing(DWRITE_LINE_SPACING *spacing);
+    HRESULT GetLineMetrics(DWRITE_LINE_METRICS1 *metrics, UINT32 max_count, UINT32 *count);
+}
+
+[
+    local,
+    object,
+    uuid(05a9bf42-223f-4441-b5fb-8263685f55e9)
+]
+interface IDWriteTextLayout4 : IDWriteTextLayout3
+{
+    HRESULT SetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        DWRITE_TEXT_RANGE range);
+    UINT32 GetFontAxisValueCount(UINT32 pos);
+    HRESULT GetFontAxisValues(
+        UINT32 pos,
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 num_values,
+        DWRITE_TEXT_RANGE *range);
+    DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes();
+    HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES axes);
+}
+
+[
+    local,
+    object,
+    uuid(2397599d-dd0d-4681-bd6a-f4f31eaade77)
+]
+interface IDWriteFontFallback1 : IDWriteFontFallback
+{
+    HRESULT MapCharacters(
+        IDWriteTextAnalysisSource *source,
+        UINT32 pos,
+        UINT32 length,
+        IDWriteFontCollection *base_collection,
+        const WCHAR *familyname,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        UINT32 *mapped_length,
+        FLOAT *scale,
+        IDWriteFontFace5 **fontface);
+}
+
+[
+    local,
+    object,
+    uuid(4556be70-3abd-4f70-90be-421780a6f515)
+]
+interface IDWriteGdiInterop1 : IDWriteGdiInterop
+{
+    HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont,
+        IDWriteFontCollection *collection,
+        IDWriteFont **font);
+
+    /* GetFontSignature() methods are listed in reversed order to make
+       resulting vtable order compatible. */
+    HRESULT GetFontSignature_(IDWriteFontFace *fontface, FONTSIGNATURE *fontsig);
+    HRESULT GetFontSignature(IDWriteFont *font, FONTSIGNATURE *fontsig);
+    HRESULT GetMatchingFontsByLOGFONT(LOGFONTW const *logfont,
+        IDWriteFontSet *fontset,
+        IDWriteFontSet **subset);
+}
+
+[
+    local,
+    object,
+    uuid(2f642afe-9c68-4f40-b8be-457401afcb3d)
+]
+interface IDWriteFontSetBuilder : IUnknown
+{
+    HRESULT AddFontFaceReference_(IDWriteFontFaceReference *ref,
+        DWRITE_FONT_PROPERTY const *props,
+        UINT32 prop_count);
+    HRESULT AddFontFaceReference(IDWriteFontFaceReference *ref);
+    HRESULT AddFontSet(IDWriteFontSet *fontset);
+    HRESULT CreateFontSet(IDWriteFontSet **fontset);
+}
+
+[
+    local,
+    object,
+    uuid(3ff7715f-3cdc-4dc6-9b72-ec5621dccafd)
+]
+interface IDWriteFontSetBuilder1 : IDWriteFontSetBuilder
+{
+    HRESULT AddFontFile(IDWriteFontFile *file);
+}
+
+[
+    local,
+    object,
+    uuid(ee5ba612-b131-463c-8f4f-3189b9401e45)
+]
+interface IDWriteFontSetBuilder2 : IDWriteFontSetBuilder1
+{
+    HRESULT AddFont(
+        IDWriteFontFile *fontfile,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_values,
+        DWRITE_FONT_AXIS_RANGE const *axis_ranges,
+        UINT32 num_ranges,
+        DWRITE_FONT_PROPERTY const *props,
+        UINT32 num_properties);
+    HRESULT AddFontFile(const WCHAR *filepath);
+}
+
+[
+    local,
+    object,
+    uuid(9a1b41c3-d3bb-466a-87fc-fe67556a3b65)
+]
+interface IDWriteFactory3 : IDWriteFactory2
+{
+    HRESULT CreateGlyphRunAnalysis(
+        DWRITE_GLYPH_RUN const *run,
+        DWRITE_MATRIX const *transform,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
+        FLOAT origin_x,
+        FLOAT origin_y,
+        IDWriteGlyphRunAnalysis **analysis);
+
+    HRESULT CreateCustomRenderingParams(
+        FLOAT gamma,
+        FLOAT enhanced_contrast,
+        FLOAT grayscale_enhanced_contrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY pixel_geometry,
+        DWRITE_RENDERING_MODE1 rendering_mode,
+        DWRITE_GRID_FIT_MODE gridfit_mode,
+        IDWriteRenderingParams3 **params);
+
+    /* CreateFontFaceReference methods are listed in reversed order to make
+       resulting vtable order compatible. */
+    HRESULT CreateFontFaceReference_(
+        IDWriteFontFile *file,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT CreateFontFaceReference(
+        WCHAR const *path,
+        FILETIME const *writetime,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        IDWriteFontFaceReference **reference);
+
+    HRESULT GetSystemFontSet(IDWriteFontSet **fontset);
+    HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder **builder);
+    HRESULT CreateFontCollectionFromFontSet(
+        IDWriteFontSet *fontset,
+        IDWriteFontCollection1 **collection);
+
+    HRESULT GetSystemFontCollection(
+        BOOL include_downloadable,
+        IDWriteFontCollection1 **collection,
+        BOOL check_for_updates);
+
+    HRESULT GetFontDownloadQueue(IDWriteFontDownloadQueue **queue);
+}
+
+typedef struct DWRITE_GLYPH_IMAGE_DATA
+{
+    void const *imageData;
+    UINT32 imageDataSize;
+    UINT32 uniqueDataId;
+    UINT32 pixelsPerEm;
+    D2D1_SIZE_U pixelSize;
+    D2D1_POINT_2L horizontalLeftOrigin;
+    D2D1_POINT_2L horizontalRightOrigin;
+    D2D1_POINT_2L verticalTopOrigin;
+    D2D1_POINT_2L verticalBottomOrigin;
+} DWRITE_GLYPH_IMAGE_DATA;
+
+[
+    local,
+    object,
+    uuid(27f2a904-4eb8-441d-9678-0563f53e3e2f)
+]
+interface IDWriteFontFace4 : IDWriteFontFace3
+{
+    HRESULT GetGlyphImageFormats_(
+        UINT16 glyph,
+        UINT32 ppem_first,
+        UINT32 ppem_last,
+        DWRITE_GLYPH_IMAGE_FORMATS *formats);
+    DWRITE_GLYPH_IMAGE_FORMATS GetGlyphImageFormats();
+    HRESULT GetGlyphImageData(
+        UINT16 glyph,
+        UINT32 ppem,
+        DWRITE_GLYPH_IMAGE_FORMATS format,
+        DWRITE_GLYPH_IMAGE_DATA *data,
+        void **context);
+    void ReleaseGlyphImageData(void *context);
+}
+
+[
+    local,
+    object,
+    uuid(98eff3a5-b667-479a-b145-e2fa5b9fdc29)
+]
+interface IDWriteFontFace5 : IDWriteFontFace4
+{
+    UINT32 GetFontAxisValueCount();
+    HRESULT GetFontAxisValues(
+        DWRITE_FONT_AXIS_VALUE *values,
+        UINT32 value_count);
+    BOOL HasVariations();
+    HRESULT GetFontResource(IDWriteFontResource **resource);
+    BOOL Equals(IDWriteFontFace *fontface);
+}
+
+typedef struct DWRITE_COLOR_GLYPH_RUN1
+{
+    DWRITE_GLYPH_RUN glyphRun;
+    DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;
+    FLOAT baselineOriginX;
+    FLOAT baselineOriginY;
+    DWRITE_COLOR_F runColor;
+    UINT16 paletteIndex;
+    DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_COLOR_GLYPH_RUN1;
+
+[
+    local,
+    object,
+    uuid(7c5f86da-c7a1-4f05-b8e1-55a179fe5a35)
+]
+interface IDWriteColorGlyphRunEnumerator1 : IDWriteColorGlyphRunEnumerator
+{
+    HRESULT GetCurrentRun(
+        DWRITE_COLOR_GLYPH_RUN1 const **run);
+}
+
+[
+    local,
+    object,
+    uuid(4b0b5bd3-0797-4549-8ac5-fe915cc53856)
+]
+interface IDWriteFactory4 : IDWriteFactory3
+{
+    HRESULT TranslateColorGlyphRun(
+        D2D1_POINT_2F baseline_origin,
+        DWRITE_GLYPH_RUN const *run,
+        DWRITE_GLYPH_RUN_DESCRIPTION const *run_desc,
+        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_MATRIX const *transform,
+        UINT32 palette,
+        IDWriteColorGlyphRunEnumerator1 **layers);
+
+    HRESULT ComputeGlyphOrigins_(
+        DWRITE_GLYPH_RUN const *run,
+        D2D1_POINT_2F baseline_origin,
+        D2D1_POINT_2F *origins);
+
+    HRESULT ComputeGlyphOrigins(
+        DWRITE_GLYPH_RUN const *run,
+        DWRITE_MEASURING_MODE measuring_mode,
+        D2D1_POINT_2F baseline_origin,
+        DWRITE_MATRIX const *transform,
+        D2D1_POINT_2F *origins);
+}
+
+[
+    local,
+    object,
+    uuid(ce25f8fd-863b-4d13-9651-c1f88dc73fe2)
+]
+interface IDWriteAsyncResult : IUnknown
+{
+    HANDLE GetWaitHandle();
+    HRESULT GetResult();
+}
+
+typedef struct DWRITE_FILE_FRAGMENT
+{
+    UINT64 fileOffset;
+    UINT64 fragmentSize;
+} DWRITE_FILE_FRAGMENT;
+
+[
+    local,
+    object,
+    uuid(4db3757a-2c72-4ed9-b2b6-1ababe1aff9c)
+]
+interface IDWriteRemoteFontFileStream : IDWriteFontFileStream
+{
+    HRESULT GetLocalFileSize(UINT64 *size);
+    HRESULT GetFileFragmentLocality(UINT64 offset, UINT64 size, BOOL *is_local, UINT64 *partial_size);
+    DWRITE_LOCALITY GetLocality();
+    HRESULT BeginDownload(
+        GUID const *operation_id,
+        DWRITE_FILE_FRAGMENT const *fragments,
+        UINT32 fragment_count,
+        IDWriteAsyncResult **async_result);
+}
+
+typedef enum DWRITE_CONTAINER_TYPE
+{
+    DWRITE_CONTAINER_TYPE_UNKNOWN,
+    DWRITE_CONTAINER_TYPE_WOFF,
+    DWRITE_CONTAINER_TYPE_WOFF2,
+} DWRITE_CONTAINER_TYPE;
+
+[
+    local,
+    object,
+    uuid(68648c83-6ede-46c0-ab46-20083a887fde)
+]
+interface IDWriteRemoteFontFileLoader : IDWriteFontFileLoader
+{
+    HRESULT CreateRemoteStreamFromKey(void const *key, UINT32 key_size, IDWriteRemoteFontFileStream **stream);
+    HRESULT GetLocalityFromKey(void const *key, UINT32 key_size, DWRITE_LOCALITY *locality);
+    HRESULT CreateFontFileReferenceFromUrl(
+        IDWriteFactory *factory,
+        WCHAR const *base_url,
+        WCHAR const *file_url,
+        IDWriteFontFile **fontfile);
+}
+
+[
+    local,
+    object,
+    uuid(dc102f47-a12d-4b1c-822d-9e117e33043f)
+]
+interface IDWriteInMemoryFontFileLoader : IDWriteFontFileLoader
+{
+    HRESULT CreateInMemoryFontFileReference(
+        IDWriteFactory *factory,
+        void const *data,
+        UINT32 data_size,
+        IUnknown *owner,
+        IDWriteFontFile **fontfile);
+    UINT32 GetFileCount();
+}
+
+[
+    local,
+    object,
+    uuid(958db99a-be2a-4f09-af7d-65189803d1d3)
+]
+interface IDWriteFactory5 : IDWriteFactory4
+{
+    HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder1 **fontset_builder);
+    HRESULT CreateInMemoryFontFileLoader(IDWriteInMemoryFontFileLoader **loader);
+    HRESULT CreateHttpFontFileLoader(
+        WCHAR const *referrer_url,
+        WCHAR const *extra_headers,
+        IDWriteRemoteFontFileLoader **loader);
+    DWRITE_CONTAINER_TYPE AnalyzeContainerType(void const *data, UINT32 data_size);
+    HRESULT UnpackFontFile(
+        DWRITE_CONTAINER_TYPE container_type,
+        void const *data,
+        UINT32 data_size,
+        IDWriteFontFileStream **stream);
+}
+
+[
+    local,
+    object,
+    uuid(f3744d80-21f7-42eb-b35d-995bc72fc223)
+]
+interface IDWriteFactory6 : IDWriteFactory5
+{
+    HRESULT CreateFontFaceReference(
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        DWRITE_FONT_SIMULATIONS simulations,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_axis,
+        IDWriteFontFaceReference1 **face_ref);
+    HRESULT CreateFontResource(
+        IDWriteFontFile *file,
+        UINT32 face_index,
+        IDWriteFontResource **resource);
+    HRESULT GetSystemFontSet(
+        BOOL include_downloadable,
+        IDWriteFontSet1 **fontset);
+    HRESULT GetSystemFontCollection(
+        BOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection);
+    HRESULT CreateFontCollectionFromFontSet(
+        IDWriteFontSet *fontset,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection2 **collection);
+    HRESULT CreateFontSetBuilder(
+        IDWriteFontSetBuilder2 **builder);
+    HRESULT CreateTextFormat(
+        const WCHAR *familyname,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_AXIS_VALUE const *axis_values,
+        UINT32 num_axis,
+        FLOAT fontsize,
+        const WCHAR *localename,
+        IDWriteTextFormat3 **format);
+}
+
+[
+    local,
+    object,
+    uuid(35d0e0b3-9076-4d2e-a016-a91b568a06b4)
+]
+interface IDWriteFactory7 : IDWriteFactory6
+{
+    HRESULT GetSystemFontSet(
+        BOOL include_downloadable,
+        IDWriteFontSet2 **fontset);
+    HRESULT GetSystemFontCollection(
+        BOOL include_downloadable,
+        DWRITE_FONT_FAMILY_MODEL family_model,
+        IDWriteFontCollection3 **collection);
+}
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index 12ec2d6..3b8ff60 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -47,6 +47,7 @@
 	amaudio.h \
 	audevcod.h \
 	corerror.h \
+	d2dbasetypes.h \
 	d3d10_1shader.h \
 	d3d10effect.h \
 	d3d10misc.h \
@@ -141,11 +142,16 @@
 	d3d11sdklayers \
 	d3d12shader \
 	d3dcommon \
+	dcommon \
 	ddstream \
 	devicetopology \
 	downloadmgr \
 	drmexternals \
 	dvdif \
+	dwrite \
+	dwrite_1 \
+	dwrite_2 \
+	dwrite_3 \
 	dxgi \
 	dxgi1_2 \
 	dxgi1_3 \
@@ -158,7 +164,7 @@
 	dxgitype \
 	dxva2api \
 	endpointvolume \
-        exdisp \
+	exdisp \
 	fusion \
 	icftypes \
 	mediaobj \
@@ -171,7 +177,7 @@
 	objectarray \
 	optary \
 	qedit \
-        spatialaudioclient \
+	spatialaudioclient \
 	taskschd \
 	thumbcache \
 	uiautomationclient \