Ada计算机图形DirectX之DWrite

----------------------------------------
-- File : DWrite.ads                  --
-- Translator:Dongfeng.Gu,2018/10/31  --
-- Mail: [email protected]                --
-- Progress:100%                      --
----------------------------------------

with win32;                           use win32;
with win32.Wingdi;
with win32.winbase;                   use win32.winbase;
with win32.windef;                    use win32.windef;
with win32.winnt;                     use win32.winnt;
with win32.rpcdce;                    use win32.rpcdce;
with win32.objbase;                   use win32.objbase;
with win32.Winerror;

with Interfaces.C;

WITH audiodefs;                       use audiodefs;
                            

package DWrite is

   subtype UINT8   is win32.BYTE;
   subtype UINT16  is win32.WORD;
   subtype int16   is win32.char;
   subtype int32   is win32.int;
   subtype uint32  is win32.DWORD;
   type LPUINT32 is access all UINT32;
   type LPIUNKNOWN is access all IUnknown;
   type LPLOGFONTW is access all Wingdi.LOGFONTW;



   function Shift_Left(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Lsh(A:dword;B:Natural) return dword is (Shift_Left(A,B));

   function Shift_Right(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Rsh(A:dword;B:Natural) return dword is (Shift_Right(A,B));


   type IDWriteFontFileLoader;
   type LPIDWriteFontFileLoader is access all IDWriteFontFileLoader;
   type LPLPIDWriteFontFileLoader is access all LPIDWriteFontFileLoader;
   subtype LPDWriteFontFileLoader is LPIDWriteFontFileLoader;
   subtype LPLPDWriteFontFileLoader is LPLPIDWriteFontFileLoader;

   type IDWriteFontFileStream;
   type LPIDWriteFontFileStream is access all IDWriteFontFileStream;
   type LPLPIDWriteFontFileStream is access all LPIDWriteFontFileStream;
   subtype LPDWriteFontFileStream is LPIDWriteFontFileStream;
   subtype LPLPDWriteFontFileStream is LPLPIDWriteFontFileStream;

   type IDWriteLocalFontFileLoader;
   type LPIDWriteLocalFontFileLoader is access all IDWriteLocalFontFileLoader;
   type LPLPIDWriteLocalFontFileLoader is access all LPIDWriteLocalFontFileLoader;
   subtype LPDWriteLocalFontFileLoader is LPIDWriteLocalFontFileLoader;
   subtype LPLPDWriteLocalFontFileLoader is LPLPIDWriteLocalFontFileLoader;

   type IDWriteFontFile;
   type LPIDWriteFontFile is access all IDWriteFontFile;
   type LPLPIDWriteFontFile is access all LPIDWriteFontFile;
   subtype LPDWriteFontFile is LPIDWriteFontFile;
   subtype LPLPDWriteFontFile is LPLPIDWriteFontFile;

   type IDWriteRenderingParams;
   type LPIDWriteRenderingParams is access all IDWriteRenderingParams;
   type LPLPIDWriteRenderingParams is access all LPIDWriteRenderingParams;
   subtype LPDWriteRenderingParams is LPIDWriteRenderingParams;
   subtype LPLPDWriteRenderingParams is LPLPIDWriteRenderingParams;

   type IDWriteFontFace;
   type LPIDWriteFontFace is access all IDWriteFontFace;
   type LPLPIDWriteFontFace is access all LPIDWriteFontFace;
   subtype LPDWriteFontFace is LPIDWriteFontFace;
   subtype LPLPDWriteFontFace is LPLPIDWriteFontFace;

   type IDWriteFontCollectionLoader;
   type LPIDWriteFontCollectionLoader is access all IDWriteFontCollectionLoader;
   type LPLPIDWriteFontCollectionLoader is access all LPIDWriteFontCollectionLoader;
   subtype LPDWriteFontCollectionLoader is LPIDWriteFontCollectionLoader;
   subtype LPLPDWriteFontCollectionLoader is LPLPIDWriteFontCollectionLoader;

   type IDWriteFactory;
   type LPIDWriteFactory is access all IDWriteFactory;
   type LPLPIDWriteFactory is access all LPIDWriteFactory;
   subtype LPDWriteFactory is LPIDWriteFactory;
   subtype LPLPDWriteFactory is LPLPIDWriteFactory;

   type IDWriteFontFileEnumerator;
   type LPIDWriteFontFileEnumerator is access all IDWriteFontFileEnumerator;
   type LPLPIDWriteFontFileEnumerator is access all LPIDWriteFontFileEnumerator;
   subtype LPDWriteFontFileEnumerator is LPIDWriteFontFileEnumerator;
   subtype LPLPDWriteFontFileEnumerator is LPLPIDWriteFontFileEnumerator;

   type IDWriteLocalizedStrings;
   type LPIDWriteLocalizedStrings is access all IDWriteLocalizedStrings;
   type LPLPIDWriteLocalizedStrings is access all LPIDWriteLocalizedStrings;
   subtype LPDWriteLocalizedStrings is LPIDWriteLocalizedStrings;
   subtype LPLPDWriteLocalizedStrings is LPLPIDWriteLocalizedStrings;

   type IDWriteFontCollection;
   type LPIDWriteFontCollection is access all IDWriteFontCollection;
   type LPLPIDWriteFontCollection is access all LPIDWriteFontCollection;
   subtype LPDWriteFontCollection is LPIDWriteFontCollection;
   subtype LPLPDWriteFontCollection is LPLPIDWriteFontCollection;

   type IDWriteFontFamily;
   type LPIDWriteFontFamily is access all IDWriteFontFamily;
   type LPLPIDWriteFontFamily is access all LPIDWriteFontFamily;
   subtype LPDWriteFontFamily is LPIDWriteFontFamily;
   subtype LPLPDWriteFontFamily is LPLPIDWriteFontFamily;

   type IDWriteFont;
   type LPIDWriteFont is access all IDWriteFont;
   type LPLPIDWriteFont is access all LPIDWriteFont;
   subtype LPDWriteFont is LPIDWriteFont;
   subtype LPLPDWriteFont is LPLPIDWriteFont;

   type IDWriteFontList;
   type LPIDWriteFontList is access all IDWriteFontList;
   type LPLPIDWriteFontList is access all LPIDWriteFontList;
   subtype LPDWriteFontList is LPIDWriteFontList;
   subtype LPLPDWriteFontList is LPLPIDWriteFontList;
   
   type IDWriteTextFormat;
   type LPIDWriteTextFormat is access all IDWriteTextFormat;
   type LPLPIDWriteTextFormat is access all LPIDWriteTextFormat;
   subtype LPDWriteTextFormat is LPIDWriteTextFormat;
   subtype LPLPDWriteTextFormat is LPLPIDWriteTextFormat;
   
   type IDWriteInlineObject;
   type LPIDWriteInlineObject is access all IDWriteInlineObject;
   type LPLPIDWriteInlineObject is access all LPIDWriteInlineObject;
   subtype LPDWriteInlineObject is LPIDWriteInlineObject;
   subtype LPLPDWriteInlineObject is LPLPIDWriteInlineObject;
   
   type IDWriteTypography;
   type LPIDWriteTypography is access all IDWriteTypography;
   type LPLPIDWriteTypography is access all LPIDWriteTypography;
   subtype LPDWriteTypography is LPIDWriteTypography;
   subtype LPLPDWriteTypography is LPLPIDWriteTypography;
   
   type IDWriteNumberSubstitution;
   type LPIDWriteNumberSubstitution is access all IDWriteNumberSubstitution;
   type LPLPIDWriteNumberSubstitution is access all LPIDWriteNumberSubstitution;
   subtype LPDWriteNumberSubstitution is LPIDWriteNumberSubstitution;
   subtype LPLPDWriteNumberSubstitution is LPLPIDWriteNumberSubstitution;
   
   type IDWriteTextAnalysisSource;
   type LPIDWriteTextAnalysisSource is access all IDWriteTextAnalysisSource;
   type LPLPIDWriteTextAnalysisSource is access all LPIDWriteTextAnalysisSource;
   subtype LPDWriteTextAnalysisSource is LPIDWriteTextAnalysisSource;
   subtype LPLPDWriteTextAnalysisSource is LPLPIDWriteTextAnalysisSource;
   
   type IDWriteTextAnalysisSink;
   type LPIDWriteTextAnalysisSink is access all IDWriteTextAnalysisSink;
   type LPLPIDWriteTextAnalysisSink is access all LPIDWriteTextAnalysisSink;
   subtype LPDWriteTextAnalysisSink is LPIDWriteTextAnalysisSink;
   subtype LPLPDWriteTextAnalysisSink is LPLPIDWriteTextAnalysisSink;
   
   
   type IDWriteTextAnalyzer;
   type LPIDWriteTextAnalyzer is access all IDWriteTextAnalyzer;
   type LPLPIDWriteTextAnalyzer is access all LPIDWriteTextAnalyzer;
   subtype LPDWriteTextAnalyzer is LPIDWriteTextAnalyzer;
   subtype LPLPDWriteTextAnalyzer is LPLPIDWriteTextAnalyzer;
   
   type IDWriteTextRenderer;
   type LPIDWriteTextRenderer is access all IDWriteTextRenderer;
   type LPLPIDWriteTextRenderer is access all LPIDWriteTextRenderer;
   subtype LPDWriteTextRenderer is LPIDWriteTextRenderer;
   subtype LPLPDWriteTextRenderer is LPLPIDWriteTextRenderer;
   
   type IDWritePixelSnapping;
   type LPIDWritePixelSnapping is access all IDWritePixelSnapping;
   type LPLPIDWritePixelSnapping is access all LPIDWritePixelSnapping;
   subtype LPDWritePixelSnapping is LPIDWritePixelSnapping;
   subtype LPLPDWritePixelSnapping is LPLPIDWritePixelSnapping;
   
   type IDWriteTextLayout;
   type LPIDWriteTextLayout is access all IDWriteTextLayout;
   type LPLPIDWriteTextLayout is access all LPIDWriteTextLayout;
   subtype LPDWriteTextLayout is LPIDWriteTextLayout;
   subtype LPLPDWriteTextLayout is LPLPIDWriteTextLayout;
   
   type IDWriteBitmapRenderTarget;
   type LPIDWriteBitmapRenderTarget is access all IDWriteBitmapRenderTarget;
   type LPLPIDWriteBitmapRenderTarget is access all LPIDWriteBitmapRenderTarget;
   subtype LPDWriteBitmapRenderTarget is LPIDWriteBitmapRenderTarget;
   subtype LPLPDWriteBitmapRenderTarget is LPLPIDWriteBitmapRenderTarget;
   
   type IDWriteGdiInterop;
   type LPIDWriteGdiInterop is access all IDWriteGdiInterop;
   type LPLPIDWriteGdiInterop is access all LPIDWriteGdiInterop;
   subtype LPDWriteGdiInterop is LPIDWriteGdiInterop;
   subtype LPLPDWriteGdiInterop is LPLPIDWriteGdiInterop;
   
   type IDWriteGlyphRunAnalysis;
   type LPIDWriteGlyphRunAnalysis is access all IDWriteGlyphRunAnalysis;
   type LPLPIDWriteGlyphRunAnalysis is access all LPIDWriteGlyphRunAnalysis;
   subtype LPDWriteGlyphRunAnalysis is LPIDWriteGlyphRunAnalysis;
   subtype LPLPDWriteGlyphRunAnalysis is LPLPIDWriteGlyphRunAnalysis;
   
   















   type DWRITE_FONT_FILE_TYPE is (DWRITE_FONT_FILE_TYPE_UNKNOWN,
                                  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);
   type LPDWRITE_FONT_FILE_TYPE is access all DWRITE_FONT_FILE_TYPE;


   type DWRITE_FONT_FACE_TYPE is (DWRITE_FONT_FACE_TYPE_CFF,
                                  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);
   type LPDWRITE_FONT_FACE_TYPE is access all DWRITE_FONT_FACE_TYPE;


   type DWRITE_FONT_SIMULATIONS is (DWRITE_FONT_SIMULATIONS_NONE,
                                    DWRITE_FONT_SIMULATIONS_BOLD,
                                    DWRITE_FONT_SIMULATIONS_OBLIQUE);
   for DWRITE_FONT_SIMULATIONS use (DWRITE_FONT_SIMULATIONS_NONE=>16#0000#,
                                    DWRITE_FONT_SIMULATIONS_BOLD=>16#0001#,
                                    DWRITE_FONT_SIMULATIONS_OBLIQUE=>16#0002#);



   type DWRITE_FONT_WEIGHT is (DWRITE_FONT_WEIGHT_THIN,
                               DWRITE_FONT_WEIGHT_EXTRA_LIGHT,
                               --DWRITE_FONT_WEIGHT_ULTRA_LIGHT,
                               DWRITE_FONT_WEIGHT_LIGHT,
                               DWRITE_FONT_WEIGHT_NORMAL,
                               --DWRITE_FONT_WEIGHT_REGULAR,
                               DWRITE_FONT_WEIGHT_MEDIUM,
                               DWRITE_FONT_WEIGHT_DEMI_BOLD,
                               --DWRITE_FONT_WEIGHT_SEMI_BOLD,
                               DWRITE_FONT_WEIGHT_BOLD,
                               DWRITE_FONT_WEIGHT_EXTRA_BOLD,
                               --DWRITE_FONT_WEIGHT_ULTRA_BOLD,
                               DWRITE_FONT_WEIGHT_BLACK,
                               --DWRITE_FONT_WEIGHT_HEAVY,
                               DWRITE_FONT_WEIGHT_EXTRA_BLACK
                               --DWRITE_FONT_WEIGHT_ULTRA_BLACK
                              );
   for DWRITE_FONT_WEIGHT use (DWRITE_FONT_WEIGHT_THIN=>100,
                               DWRITE_FONT_WEIGHT_EXTRA_LIGHT=>200,

                               DWRITE_FONT_WEIGHT_LIGHT=>300,
                               DWRITE_FONT_WEIGHT_NORMAL=>400,

                               DWRITE_FONT_WEIGHT_MEDIUM=>500,
                               DWRITE_FONT_WEIGHT_DEMI_BOLD=>600,

                               DWRITE_FONT_WEIGHT_BOLD=>700,
                               DWRITE_FONT_WEIGHT_EXTRA_BOLD=>800,

                               DWRITE_FONT_WEIGHT_BLACK=>900,

                               DWRITE_FONT_WEIGHT_EXTRA_BLACK=>950
                              );
   type LPDWRITE_FONT_WEIGHT is access all DWRITE_FONT_WEIGHT;

   DWRITE_FONT_WEIGHT_ULTRA_LIGHT:constant:=200;
   DWRITE_FONT_WEIGHT_REGULAR:constant:=400;
   DWRITE_FONT_WEIGHT_SEMI_BOLD:constant:=600;
   DWRITE_FONT_WEIGHT_ULTRA_BOLD:constant:=800;
   DWRITE_FONT_WEIGHT_HEAVY:constant:=900;
   DWRITE_FONT_WEIGHT_ULTRA_BLACK:constant:=950;


   type DWRITE_FONT_STRETCH is (DWRITE_FONT_STRETCH_UNDEFINED,
                                DWRITE_FONT_STRETCH_ULTRA_CONDENSED,
                                DWRITE_FONT_STRETCH_EXTRA_CONDENSED,
                                DWRITE_FONT_STRETCH_CONDENSED,
                                DWRITE_FONT_STRETCH_SEMI_CONDENSED,
                                DWRITE_FONT_STRETCH_NORMAL,
                                --DWRITE_FONT_STRETCH_MEDIUM,
                                DWRITE_FONT_STRETCH_SEMI_EXPANDED,
                                DWRITE_FONT_STRETCH_EXPANDED,
                                DWRITE_FONT_STRETCH_EXTRA_EXPANDED,
                                DWRITE_FONT_STRETCH_ULTRA_EXPANDED);
   for DWRITE_FONT_STRETCH use (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_SEMI_EXPANDED=>6,
                                DWRITE_FONT_STRETCH_EXPANDED=>7,
                                DWRITE_FONT_STRETCH_EXTRA_EXPANDED=>8,
                                DWRITE_FONT_STRETCH_ULTRA_EXPANDED=>9);
   type LPDWRITE_FONT_STRETCH is access all DWRITE_FONT_STRETCH;


   DWRITE_FONT_STRETCH_MEDIUM:constant:=5;


   type DWRITE_FONT_STYLE is (DWRITE_FONT_STYLE_NORMAL,
                              DWRITE_FONT_STYLE_OBLIQUE,
                              DWRITE_FONT_STYLE_ITALIC);
   type LPDWRITE_FONT_STYLE is access all DWRITE_FONT_STYLE;


   type DWRITE_INFORMATIONAL_STRING_ID is (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_PREFERRED_FAMILY_NAMES,
                                           DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,
                                           DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT);



   type DWRITE_FONT_METRICS is record
      designUnitsPerEm: UINT16;
      ascent: UINT16;
      descent: UINT16;
      lineGap: INT16;
      capHeight: UINT16;
      xHeight: UINT16;
      underlinePosition: INT16;
      underlineThickness: UINT16;
      strikethroughPosition: INT16;
      strikethroughThickness: UINT16;
   end record;
   type LPDWRITE_FONT_METRICS is access all DWRITE_FONT_METRICS;

   type DWRITE_GLYPH_METRICS is record
      leftSideBearing: INT32;
      advanceWidth: UINT32;
      rightSideBearing: INT32;
      topSideBearing: INT32;
      advanceHeight: UINT32;
      bottomSideBearing: INT32;
      verticalOriginY: INT32;
   end record;
   type LPDWRITE_GLYPH_METRICS is access all DWRITE_GLYPH_METRICS;

   type DWRITE_GLYPH_OFFSET is record
      advanceOffset: FLOAT;
      ascenderOffset: FLOAT;
   end record;
   type LPDWRITE_GLYPH_OFFSET is access all DWRITE_GLYPH_OFFSET;

   type DWRITE_FACTORY_TYPE is (DWRITE_FACTORY_TYPE_SHARED,
                                DWRITE_FACTORY_TYPE_ISOLATED);


   use type Interfaces.C.unsigned_long;
   -- MACRO FUNCTION
   function DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d:uint8) return uint32 is (Lsh(uint32(d),24) or Lsh(uint32(c),16) or Lsh(uint32(b),8) or uint32(a));

   IID_IDWriteFontFileLoader :constant GUID:=uuidof("727cad4e-d6af-4c9e-8a08-d695b11caa49");

   type IDWriteFontFileLoader is record
      QueryInterface:access function(THIS:LPIDWriteFontFileLoader;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontFileLoader) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontFileLoader) return ULONG with Convention=>Stdcall;
      CreateStreamFromKey:access function(THIS:LPIDWriteFontFileLoader;fontFileReferenceKey:LPvoid;fontFileReferenceKeySize:UINT32;fontFileStream:LPLPIDWriteFontFileStream) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteLocalFontFileLoader :constant GUID:=uuidof("b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2");

   type IDWriteLocalFontFileLoader is record
      QueryInterface:access function(THIS:LPIDWriteLocalFontFileLoader;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteLocalFontFileLoader) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteLocalFontFileLoader) return ULONG with Convention=>Stdcall;
      CreateStreamFromKey:access function(THIS:LPIDWriteLocalFontFileLoader;fontFileReferenceKey:LPvoid;fontFileReferenceKeySize:UINT32;fontFileStream:LPLPIDWriteFontFileStream) return HRESULT with Convention=>Stdcall;
      GetFilePathLengthFromKey:access function(THIS:LPIDWriteLocalFontFileLoader;fontFileReferenceKey:LPvoid;fontFileReferenceKeySize:UINT32;filePathLength:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetFilePathFromKey:access function(THIS:LPIDWriteLocalFontFileLoader;fontFileReferenceKey:LPvoid;fontFileReferenceKeySize:UINT32;filePath:LPWCHAR;filePathSize:UINT32) return HRESULT with Convention=>Stdcall;
      GetLastWriteTimeFromKey:access function(THIS:LPIDWriteLocalFontFileLoader;fontFileReferenceKey:LPvoid;fontFileReferenceKeySize:UINT32;lastWriteTime:LPFILETIME) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontFileStream :constant GUID:=uuidof("6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0");

   type IDWriteFontFileStream is record
      QueryInterface:access function(THIS:LPIDWriteFontFileStream;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontFileStream) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontFileStream) return ULONG with Convention=>Stdcall;
      ReadFileFragment:access function(THIS:LPIDWriteFontFileStream;fragmentStart:LPLPvoid;fileOffset:UINT64;fragmentSize:UINT64;fragmentContext:LPLPvoid) return HRESULT with Convention=>Stdcall;
      ReleaseFileFragment:access function(THIS:LPIDWriteFontFileStream;fragmentContext:LPvoid) return void with Convention=>Stdcall;
      GetFileSize:access function(THIS:LPIDWriteFontFileStream;fileSize:LPUINT64) return HRESULT with Convention=>Stdcall;
      GetLastWriteTime:access function(THIS:LPIDWriteFontFileStream;lastWriteTime:LPUINT64) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontFile :constant GUID:=uuidof("739d886a-cef5-47dc-8769-1a8b41bebbb0");

   type IDWriteFontFile is record
      QueryInterface:access function(THIS:LPIDWriteFontFile;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontFile) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontFile) return ULONG with Convention=>Stdcall;
      GetReferenceKey:access function(THIS:LPIDWriteFontFile;fontFileReferenceKey:LPLPvoid;fontFileReferenceKeySize:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetLoader:access function(THIS:LPIDWriteFontFile;fontFileLoader:LPLPIDWriteFontFileLoader) return HRESULT with Convention=>Stdcall;
      Analyze:access function(THIS:LPIDWriteFontFile;isSupportedFontType:LPBOOL;fontFileType:LPDWRITE_FONT_FILE_TYPE;fontFaceType:LPDWRITE_FONT_FACE_TYPE;numberOfFaces:LPUINT32) return HRESULT with Convention=>Stdcall;
   end record;

   type DWRITE_PIXEL_GEOMETRY is (DWRITE_PIXEL_GEOMETRY_FLAT,
                                  DWRITE_PIXEL_GEOMETRY_RGB,
                                  DWRITE_PIXEL_GEOMETRY_BGR);

   type DWRITE_RENDERING_MODE is (DWRITE_RENDERING_MODE_DEFAULT,
                                  DWRITE_RENDERING_MODE_ALIASED,
                                  DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC,
                                  DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL,
                                  DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL,
                                  DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC,
                                  DWRITE_RENDERING_MODE_OUTLINE);
   type LPDWRITE_RENDERING_MODE is access all DWRITE_RENDERING_MODE;


   type DWRITE_MATRIX is record
      m11: FLOAT;
      m12: FLOAT;
      m21: FLOAT;
      m22: FLOAT;
      dx: FLOAT;
      dy: FLOAT;
   end record;
   type LPDWRITE_MATRIX is access all DWRITE_MATRIX;

   IID_IDWriteRenderingParams :constant GUID:=uuidof("2f0da53a-2add-47cd-82ee-d9ec34688e75");

   type IDWriteRenderingParams is record
      QueryInterface:access function(THIS:LPIDWriteRenderingParams;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteRenderingParams) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteRenderingParams) return ULONG with Convention=>Stdcall;
      GetGamma:access function(THIS:LPIDWriteRenderingParams) return FLOAT with Convention=>Stdcall;
      GetEnhancedContrast:access function(THIS:LPIDWriteRenderingParams) return FLOAT with Convention=>Stdcall;
      GetClearTypeLevel:access function(THIS:LPIDWriteRenderingParams) return FLOAT with Convention=>Stdcall;
      GetPixelGeometry:access function(THIS:LPIDWriteRenderingParams) return DWRITE_PIXEL_GEOMETRY with Convention=>Stdcall;
      GetRenderingMode:access function(THIS:LPIDWriteRenderingParams) return DWRITE_RENDERING_MODE with Convention=>Stdcall;
   end record;


   type DWRITE_MEASURING_MODE is(
                                 DWRITE_MEASURING_MODE_NATURAL,
                                 DWRITE_MEASURING_MODE_GDI_CLASSIC,
                                 DWRITE_MEASURING_MODE_GDI_NATURAL );
   type LPDWRITE_MEASURING_MODE is access all DWRITE_MEASURING_MODE;


   
   
   --
   -- ÒÔÏÂD2D1¿ªÍ·µÄ¶¨ÒåÊǶ¨ÒåÓÚD2D1.hÖÐ,ÓÉÓÚÑ­»·°üº¬µÄÔ­Òò,ÕâÀ︴ÖƹýÀ´ÁË
   --
   type D2D1_FILL_MODE is (D2D1_FILL_MODE_ALTERNATE,
                           D2D1_FILL_MODE_WINDING,
                           D2D1_FILL_MODE_FORCE_DWORD);
   for D2D1_FILL_MODE use (D2D1_FILL_MODE_ALTERNATE=>0,
                           D2D1_FILL_MODE_WINDING=>1,
                           D2D1_FILL_MODE_FORCE_DWORD=>16#ffffffff#);
   
   type D2D1_PATH_SEGMENT is (D2D1_PATH_SEGMENT_NONE,
                              D2D1_PATH_SEGMENT_FORCE_UNSTROKED,
                              D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN,
                              D2D1_PATH_SEGMENT_FORCE_DWORD);
   for D2D1_PATH_SEGMENT use (D2D1_PATH_SEGMENT_NONE=>16#00000000#,
                              D2D1_PATH_SEGMENT_FORCE_UNSTROKED=>16#00000001#,
                              D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN=>16#00000002#,
                              D2D1_PATH_SEGMENT_FORCE_DWORD=>16#ffffffff#);
   
   type D2D1_FIGURE_BEGIN is (D2D1_FIGURE_BEGIN_FILLED,
                              D2D1_FIGURE_BEGIN_HOLLOW,
                              D2D1_FIGURE_BEGIN_FORCE_DWORD);
   for D2D1_FIGURE_BEGIN use (D2D1_FIGURE_BEGIN_FILLED=>0,
                              D2D1_FIGURE_BEGIN_HOLLOW=>1,
                              D2D1_FIGURE_BEGIN_FORCE_DWORD=>16#ffffffff#);
   
   type D2D1_FIGURE_END is (D2D1_FIGURE_END_OPEN,
                            D2D1_FIGURE_END_CLOSED,
                            D2D1_FIGURE_END_FORCE_DWORD);
   for D2D1_FIGURE_END use (D2D1_FIGURE_END_OPEN=>0,
                            D2D1_FIGURE_END_CLOSED=>1,
                            D2D1_FIGURE_END_FORCE_DWORD=>16#ffffffff#);
   
   type D2D1_POINT_2F is record
      x,y:float;
   end record;
   type LPCD2D1_POINT_2F is access constant D2D1_POINT_2F;
   
   type D2D1_BEZIER_SEGMENT is record
      point1: D2D1_POINT_2F;
      point2: D2D1_POINT_2F;
      point3: D2D1_POINT_2F;
   end record;
   type LPD2D1_BEZIER_SEGMENT is access all D2D1_BEZIER_SEGMENT;
   type LPCD2D1_BEZIER_SEGMENT is access constant D2D1_BEZIER_SEGMENT;
   
   IID_ID2D1SimplifiedGeometrySink : constant GUID:=uuidof("2cd9069e-12e2-11dc-9fed-001143a055f9");

   type ID2D1SimplifiedGeometrySink;
   type LPID2D1SimplifiedGeometrySink is access all ID2D1SimplifiedGeometrySink;
   type ID2D1SimplifiedGeometrySink is record
      QueryInterface:access function(THIS:LPID2D1SimplifiedGeometrySink;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPID2D1SimplifiedGeometrySink) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID2D1SimplifiedGeometrySink) return ULONG with Convention=>Stdcall;
      SetFillMode:access function(THIS:LPID2D1SimplifiedGeometrySink;fillMode:D2D1_FILL_MODE) return void with Convention=>Stdcall;
      SetSegmentFlags:access function(THIS:LPID2D1SimplifiedGeometrySink;vertexFlags:D2D1_PATH_SEGMENT) return void with Convention=>Stdcall;
      BeginFigure:access function(THIS:LPID2D1SimplifiedGeometrySink;startPoint:D2D1_POINT_2F;figureBegin:D2D1_FIGURE_BEGIN) return void with Convention=>Stdcall;
      AddLines:access function(THIS:LPID2D1SimplifiedGeometrySink;points:LPCD2D1_POINT_2F;pointsCount:UINT) return void with Convention=>Stdcall;
      AddBeziers:access function(THIS:LPID2D1SimplifiedGeometrySink;beziers:LPCD2D1_BEZIER_SEGMENT;beziersCount:UINT) return void with Convention=>Stdcall;
      EndFigure:access function(THIS:LPID2D1SimplifiedGeometrySink;figureEnd:D2D1_FIGURE_END) return void with Convention=>Stdcall;
      Close:access function(THIS:LPID2D1SimplifiedGeometrySink) return HRESULT with Convention=>Stdcall;
   end record;

   
   
   
   
   -- ÁÙʱÌæ´ú D2D1ÀïÃæ
   subtype IDWriteGeometrySink is ID2D1SimplifiedGeometrySink;
   type LPIDWriteGeometrySink is access all ID2D1SimplifiedGeometrySink;


   IID_IDWriteFontFace :constant GUID:=uuidof("5f49804d-7024-4d43-bfa9-d25984f53849");

   type IDWriteFontFace is record
      QueryInterface:access function(THIS:LPIDWriteFontFace;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontFace) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontFace) return ULONG with Convention=>Stdcall;
      GetType:access function(THIS:LPIDWriteFontFace) return DWRITE_FONT_FACE_TYPE with Convention=>Stdcall;
      GetFiles:access function(THIS:LPIDWriteFontFace;numberOfFiles:LPUINT32;fontFiles:LPLPIDWriteFontFile) return HRESULT with Convention=>Stdcall;
      GetIndex:access function(THIS:LPIDWriteFontFace) return UINT32 with Convention=>Stdcall;
      GetSimulations:access function(THIS:LPIDWriteFontFace) return DWRITE_FONT_SIMULATIONS with Convention=>Stdcall;
      IsSymbolFont:access function(THIS:LPIDWriteFontFace) return BOOL with Convention=>Stdcall;
      GetMetrics:access function(THIS:LPIDWriteFontFace;fontFaceMetrics:LPDWRITE_FONT_METRICS) return void with Convention=>Stdcall;
      GetGlyphCount:access function(THIS:LPIDWriteFontFace) return UINT16 with Convention=>Stdcall;
      GetDesignGlyphMetrics:access function(THIS:LPIDWriteFontFace;glyphIndices:LPUINT16;glyphCount:UINT32;glyphMetrics:LPDWRITE_GLYPH_METRICS;isSideways:BOOL:=0) return HRESULT with Convention=>Stdcall;
      GetGlyphIndices:access function(THIS:LPIDWriteFontFace;codePoints:LPUINT32;codePointCount:UINT32;glyphIndices:LPUINT16) return HRESULT with Convention=>Stdcall;
      TryGetFontTable:access function(THIS:LPIDWriteFontFace;openTypeTableTag:UINT32;tableData:LPLPCvoid;tableSize:LPUINT32;tableContext:LPLPvoid;exists:LPBOOL) return HRESULT with Convention=>Stdcall;
      ReleaseFontTable:access function(THIS:LPIDWriteFontFace;tableContext:LPvoid) return void with Convention=>Stdcall;
      GetGlyphRunOutline:access function(THIS:LPIDWriteFontFace;emSize:FLOAT;glyphIndices:LPUINT16;glyphAdvances:LPFLOAT;glyphOffsets:LPDWRITE_GLYPH_OFFSET;glyphCount:UINT32;isSideways:BOOL;isRightToLeft:BOOL;geometrySink:LPIDWriteGeometrySink) return HRESULT with Convention=>Stdcall;
      GetRecommendedRenderingMode:access function(THIS:LPIDWriteFontFace;emSize:FLOAT;pixelsPerDip:FLOAT;measuringMode:DWRITE_MEASURING_MODE;renderingParams:LPIDWriteRenderingParams;renderingMode:LPDWRITE_RENDERING_MODE) return HRESULT with Convention=>Stdcall;
      GetGdiCompatibleMetrics:access function(THIS:LPIDWriteFontFace;emSize:FLOAT;pixelsPerDip:FLOAT;transform:LPDWRITE_MATRIX;fontFaceMetrics:LPDWRITE_FONT_METRICS) return HRESULT with Convention=>Stdcall;
      GetGdiCompatibleGlyphMetrics:access function(THIS:LPIDWriteFontFace;emSize:FLOAT;pixelsPerDip:FLOAT;transform:LPDWRITE_MATRIX;useGdiNatural:BOOL;glyphIndices:LPUINT16;glyphCount:UINT32;glyphMetrics:LPDWRITE_GLYPH_METRICS;isSideways:BOOL:=0) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontCollectionLoader :constant GUID:=uuidof("cca920e4-52f0-492b-bfa8-29c72ee0a468");

   type IDWriteFontCollectionLoader is record
      QueryInterface:access function(THIS:LPIDWriteFontCollectionLoader;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontCollectionLoader) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontCollectionLoader) return ULONG with Convention=>Stdcall;
      CreateEnumeratorFromKey:access function(THIS:LPIDWriteFontCollectionLoader;factory:LPIDWriteFactory;collectionKey:LPvoid;collectionKeySize:UINT32;fontFileEnumerator:LPLPIDWriteFontFileEnumerator) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontFileEnumerator :constant GUID:=uuidof("72755049-5ff7-435d-8348-4be97cfa6c7c");

   type IDWriteFontFileEnumerator is record
      QueryInterface:access function(THIS:LPIDWriteFontFileEnumerator;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontFileEnumerator) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontFileEnumerator) return ULONG with Convention=>Stdcall;
      MoveNext:access function(THIS:LPIDWriteFontFileEnumerator;hasCurrentFile:LPBOOL) return HRESULT with Convention=>Stdcall;
      GetCurrentFontFile:access function(THIS:LPIDWriteFontFileEnumerator;fontFile:LPLPIDWriteFontFile) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteLocalizedStrings :constant GUID:=uuidof("08256209-099a-4b34-b86d-c22b110e7771");

   type IDWriteLocalizedStrings is record
      QueryInterface:access function(THIS:LPIDWriteLocalizedStrings;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteLocalizedStrings) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteLocalizedStrings) return ULONG with Convention=>Stdcall;
      GetCount:access function(THIS:LPIDWriteLocalizedStrings) return UINT32 with Convention=>Stdcall;
      FindLocaleName:access function(THIS:LPIDWriteLocalizedStrings;localeName:LPWCHAR;index:LPUINT32;exists:LPBOOL) return HRESULT with Convention=>Stdcall;
      GetLocaleNameLength:access function(THIS:LPIDWriteLocalizedStrings;index:UINT32;length:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetLocaleName:access function(THIS:LPIDWriteLocalizedStrings;index:UINT32;localeName:LPWCHAR;size:UINT32) return HRESULT with Convention=>Stdcall;
      GetStringLength:access function(THIS:LPIDWriteLocalizedStrings;index:UINT32;length:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetString:access function(THIS:LPIDWriteLocalizedStrings;index:UINT32;stringBuffer:LPWCHAR;size:UINT32) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontCollection :constant GUID:=uuidof("a84cee02-3eea-4eee-a827-87c1a02a0fcc");

   type IDWriteFontCollection is record
      QueryInterface:access function(THIS:LPIDWriteFontCollection;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontCollection) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontCollection) return ULONG with Convention=>Stdcall;
      GetFontFamilyCount:access function(THIS:LPIDWriteFontCollection) return UINT32 with Convention=>Stdcall;
      GetFontFamily:access function(THIS:LPIDWriteFontCollection;index:UINT32;fontFamily:LPLPIDWriteFontFamily) return HRESULT with Convention=>Stdcall;
      FindFamilyName:access function(THIS:LPIDWriteFontCollection;familyName:LPWCHAR;index:LPUINT32;exists:LPBOOL) return HRESULT with Convention=>Stdcall;
      GetFontFromFontFace:access function(THIS:LPIDWriteFontCollection;fontFace:LPIDWriteFontFace;font:LPLPIDWriteFont) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontList :constant GUID:=uuidof("1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb");

   type IDWriteFontList is record
      QueryInterface:access function(THIS:LPIDWriteFontList;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontList) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontList) return ULONG with Convention=>Stdcall;
      GetFontCollection:access function(THIS:LPIDWriteFontList;fontCollection:LPLPIDWriteFontCollection) return HRESULT with Convention=>Stdcall;
      GetFontCount:access function(THIS:LPIDWriteFontList;Arg2:void) return UINT32 with Convention=>Stdcall;
      GetFont:access function(THIS:LPIDWriteFontList;index:UINT32;font:LPLPIDWriteFont) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFontFamily :constant GUID:=uuidof("da20d8ef-812a-4c43-9802-62ec4abd7add");

   type IDWriteFontFamily is record
      QueryInterface:access function(THIS:LPIDWriteFontFamily;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFontFamily) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFontFamily) return ULONG with Convention=>Stdcall;
      GetFontCollection:access function(THIS:LPIDWriteFontFamily;fontCollection:LPLPIDWriteFontCollection) return HRESULT with Convention=>Stdcall;
      GetFontCount:access function(THIS:LPIDWriteFontFamily;Arg2:void) return UINT32 with Convention=>Stdcall;
      GetFont:access function(THIS:LPIDWriteFontFamily;index:UINT32;font:LPLPIDWriteFont) return HRESULT with Convention=>Stdcall;
      GetFamilyNames:access function(THIS:LPIDWriteFontFamily;names:LPLPIDWriteLocalizedStrings) return HRESULT with Convention=>Stdcall;
      GetFirstMatchingFont:access function(THIS:LPIDWriteFontFamily;weight:DWRITE_FONT_WEIGHT;stretch:DWRITE_FONT_STRETCH;style:DWRITE_FONT_STYLE;matchingFont:LPLPIDWriteFont) return HRESULT with Convention=>Stdcall;
      GetMatchingFonts:access function(THIS:LPIDWriteFontFamily;weight:DWRITE_FONT_WEIGHT;stretch:DWRITE_FONT_STRETCH;style:DWRITE_FONT_STYLE;matchingFonts:LPLPIDWriteFontList) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFont :constant GUID:=uuidof("acd16696-8c14-4f5d-877e-fe3fc1d32737");

   type IDWriteFont is record
      QueryInterface:access function(THIS:LPIDWriteFont;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFont) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFont) return ULONG with Convention=>Stdcall;
      GetFontFamily:access function(THIS:LPIDWriteFont;fontFamily:LPLPIDWriteFontFamily) return HRESULT with Convention=>Stdcall;
      GetWeight:access function(THIS:LPIDWriteFont) return DWRITE_FONT_WEIGHT with Convention=>Stdcall;
      GetStretch:access function(THIS:LPIDWriteFont) return DWRITE_FONT_STRETCH with Convention=>Stdcall;
      GetStyle:access function(THIS:LPIDWriteFont) return DWRITE_FONT_STYLE with Convention=>Stdcall;
      IsSymbolFont:access function(THIS:LPIDWriteFont) return BOOL with Convention=>Stdcall;
      GetFaceNames:access function(THIS:LPIDWriteFont;names:LPLPIDWriteLocalizedStrings) return HRESULT with Convention=>Stdcall;
      GetInformationalStrings:access function(THIS:LPIDWriteFont;informationalStringID:DWRITE_INFORMATIONAL_STRING_ID;informationalStrings:LPLPIDWriteLocalizedStrings;exists:LPBOOL) return HRESULT with Convention=>Stdcall;
      GetSimulations:access function(THIS:LPIDWriteFont) return DWRITE_FONT_SIMULATIONS with Convention=>Stdcall;
      GetMetrics:access function(THIS:LPIDWriteFont;fontMetrics:LPDWRITE_FONT_METRICS) return void with Convention=>Stdcall;
      HasCharacter:access function(THIS:LPIDWriteFont;unicodeValue:UINT32;exists:LPBOOL) return HRESULT with Convention=>Stdcall;
      CreateFontFace:access function(THIS:LPIDWriteFont;fontFace:LPLPIDWriteFontFace) return HRESULT with Convention=>Stdcall;
   end record;

   type DWRITE_READING_DIRECTION is (DWRITE_READING_DIRECTION_LEFT_TO_RIGHT,
                                     DWRITE_READING_DIRECTION_RIGHT_TO_LEFT);



   type DWRITE_FLOW_DIRECTION is (DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM);




   type DWRITE_TEXT_ALIGNMENT is (DWRITE_TEXT_ALIGNMENT_LEADING,
                                  DWRITE_TEXT_ALIGNMENT_TRAILING,
                                  DWRITE_TEXT_ALIGNMENT_CENTER);



   type DWRITE_PARAGRAPH_ALIGNMENT is (DWRITE_PARAGRAPH_ALIGNMENT_NEAR,
                                       DWRITE_PARAGRAPH_ALIGNMENT_FAR,
                                       DWRITE_PARAGRAPH_ALIGNMENT_CENTER);



   type DWRITE_WORD_WRAPPING is (DWRITE_WORD_WRAPPING_WRAP,
                                 DWRITE_WORD_WRAPPING_NO_WRAP);



   type DWRITE_LINE_SPACING_METHOD is (DWRITE_LINE_SPACING_METHOD_DEFAULT,
                                       DWRITE_LINE_SPACING_METHOD_UNIFORM);
   type LPDWRITE_LINE_SPACING_METHOD is access all DWRITE_LINE_SPACING_METHOD;



   type DWRITE_TRIMMING_GRANULARITY is (DWRITE_TRIMMING_GRANULARITY_NONE,
                                        DWRITE_TRIMMING_GRANULARITY_CHARACTER,
                                        DWRITE_TRIMMING_GRANULARITY_WORD);



   type DWRITE_FONT_FEATURE_TAG is new int;
   
   DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS   :constant DWRITE_FONT_FEATURE_TAG:=16#63703263#;
   DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS           :constant DWRITE_FONT_FEATURE_TAG:=16#63726661#;
   DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS    :constant DWRITE_FONT_FEATURE_TAG:=16#63733263#;
   DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES           :constant DWRITE_FONT_FEATURE_TAG:=16#746c6163#;
   DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS            :constant DWRITE_FONT_FEATURE_TAG:=16#65736163#;
   DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION :constant DWRITE_FONT_FEATURE_TAG:=16#706d6363#;
   DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES            :constant DWRITE_FONT_FEATURE_TAG:=16#67696c63#;
   DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING                 :constant DWRITE_FONT_FEATURE_TAG:=16#70737063#;
   DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH                :constant DWRITE_FONT_FEATURE_TAG:=16#68777363#;
   DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING             :constant DWRITE_FONT_FEATURE_TAG:=16#73727563#;
   DWRITE_FONT_FEATURE_TAG_DEFAULT                         :constant DWRITE_FONT_FEATURE_TAG:=16#746c6664#;
   DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES         :constant DWRITE_FONT_FEATURE_TAG:=16#67696c64#;
   DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS                    :constant DWRITE_FONT_FEATURE_TAG:=16#74707865#;
   DWRITE_FONT_FEATURE_TAG_FRACTIONS                       :constant DWRITE_FONT_FEATURE_TAG:=16#63617266#;
   DWRITE_FONT_FEATURE_TAG_FULL_WIDTH:constant DWRITE_FONT_FEATURE_TAG:=16#64697766#;
   DWRITE_FONT_FEATURE_TAG_HALF_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#666c6168#;
   DWRITE_FONT_FEATURE_TAG_HALANT_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#6e6c6168#;
   DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH:constant DWRITE_FONT_FEATURE_TAG:=16#746c6168#;
   DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#74736968#;
   DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES:constant DWRITE_FONT_FEATURE_TAG:=16#616e6b68#;
   DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES:constant DWRITE_FONT_FEATURE_TAG:=16#67696c68#;
   DWRITE_FONT_FEATURE_TAG_HALF_WIDTH:constant DWRITE_FONT_FEATURE_TAG:=16#64697768#;
   DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#6f6a6f68#;
   DWRITE_FONT_FEATURE_TAG_JIS04_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#3430706a#;
   DWRITE_FONT_FEATURE_TAG_JIS78_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#3837706a#;
   DWRITE_FONT_FEATURE_TAG_JIS83_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#3338706a#;
   DWRITE_FONT_FEATURE_TAG_JIS90_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#3039706a#;
   DWRITE_FONT_FEATURE_TAG_KERNING:constant DWRITE_FONT_FEATURE_TAG:=16#6e72656b#;
   DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES:constant DWRITE_FONT_FEATURE_TAG:=16#6167696c#;
   DWRITE_FONT_FEATURE_TAG_LINING_FIGURES:constant DWRITE_FONT_FEATURE_TAG:=16#6d756e6c#;
   DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#6c636f6c#;
   DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING:constant DWRITE_FONT_FEATURE_TAG:=16#6b72616d#;
   DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK:constant DWRITE_FONT_FEATURE_TAG:=16#6b72676d#;
   DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING:constant DWRITE_FONT_FEATURE_TAG:=16#6b6d6b6d#;
   DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#746c616e#;
   DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#6b636c6e#;
   DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES:constant DWRITE_FONT_FEATURE_TAG:=16#6d756e6f#;
   DWRITE_FONT_FEATURE_TAG_ORDINALS:constant DWRITE_FONT_FEATURE_TAG:=16#6e64726f#;
   DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH:constant DWRITE_FONT_FEATURE_TAG:=16#746c6170#;
   DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS:constant DWRITE_FONT_FEATURE_TAG:=16#70616370#;
   DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES:constant DWRITE_FONT_FEATURE_TAG:=16#6d756e70#;
   DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS:constant DWRITE_FONT_FEATURE_TAG:=16#64697770#;
   DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS:constant DWRITE_FONT_FEATURE_TAG:=16#64697771#;
   DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES:constant DWRITE_FONT_FEATURE_TAG:=16#67696c72#;
   DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#79627572#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES:constant DWRITE_FONT_FEATURE_TAG:=16#746c6173#;
   DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS:constant DWRITE_FONT_FEATURE_TAG:=16#666e6973#;
   DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS:constant DWRITE_FONT_FEATURE_TAG:=16#70636d73#;
   DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#6c706d73#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1:constant DWRITE_FONT_FEATURE_TAG:=16#31307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2:constant DWRITE_FONT_FEATURE_TAG:=16#32307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3:constant DWRITE_FONT_FEATURE_TAG:=16#33307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4:constant DWRITE_FONT_FEATURE_TAG:=16#34307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5:constant DWRITE_FONT_FEATURE_TAG:=16#35307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6:constant DWRITE_FONT_FEATURE_TAG:=16#36307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7:constant DWRITE_FONT_FEATURE_TAG:=16#37307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8:constant DWRITE_FONT_FEATURE_TAG:=16#38307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9:constant DWRITE_FONT_FEATURE_TAG:=16#39307373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10:constant DWRITE_FONT_FEATURE_TAG:=16#30317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11:constant DWRITE_FONT_FEATURE_TAG:=16#31317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12:constant DWRITE_FONT_FEATURE_TAG:=16#32317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13:constant DWRITE_FONT_FEATURE_TAG:=16#33317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14:constant DWRITE_FONT_FEATURE_TAG:=16#34317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15:constant DWRITE_FONT_FEATURE_TAG:=16#35317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16:constant DWRITE_FONT_FEATURE_TAG:=16#36317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17:constant DWRITE_FONT_FEATURE_TAG:=16#37317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18:constant DWRITE_FONT_FEATURE_TAG:=16#38317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19:constant DWRITE_FONT_FEATURE_TAG:=16#39317373#;
   DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20:constant DWRITE_FONT_FEATURE_TAG:=16#30327373#;
   DWRITE_FONT_FEATURE_TAG_SUBSCRIPT:constant DWRITE_FONT_FEATURE_TAG:=16#73627573#;
   DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT:constant DWRITE_FONT_FEATURE_TAG:=16#73707573#;
   DWRITE_FONT_FEATURE_TAG_SWASH:constant DWRITE_FONT_FEATURE_TAG:=16#68737773#;
   DWRITE_FONT_FEATURE_TAG_TITLING:constant DWRITE_FONT_FEATURE_TAG:=16#6c746974#;
   DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#6d616e74#;
   DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES:constant DWRITE_FONT_FEATURE_TAG:=16#6d756e74#;
   DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS:constant DWRITE_FONT_FEATURE_TAG:=16#64617274#;
   DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS:constant DWRITE_FONT_FEATURE_TAG:=16#64697774#;
   DWRITE_FONT_FEATURE_TAG_UNICASE:constant DWRITE_FONT_FEATURE_TAG:=16#63696e75#;
   DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO:constant DWRITE_FONT_FEATURE_TAG:=16#6f72657a#;


                                    


   type DWRITE_TEXT_RANGE is record
      startPosition: UINT32;
      length: UINT32;
   end record;
   type LPDWRITE_TEXT_RANGE is access all DWRITE_TEXT_RANGE;

   type DWRITE_FONT_FEATURE is record
      nameTag: DWRITE_FONT_FEATURE_TAG;
      parameter: UINT32;
   end record;
   type LPDWRITE_FONT_FEATURE is access all DWRITE_FONT_FEATURE;

   type DWRITE_TYPOGRAPHIC_FEATURES is record
      features:LPDWRITE_FONT_FEATURE;
      featureCount: UINT32;
   end record;
   type LPDWRITE_TYPOGRAPHIC_FEATURES is access all DWRITE_TYPOGRAPHIC_FEATURES;
   type LPLPDWRITE_TYPOGRAPHIC_FEATURES is access all LPDWRITE_TYPOGRAPHIC_FEATURES;

   type DWRITE_TRIMMING is record
      granularity: DWRITE_TRIMMING_GRANULARITY;
      delimiter: UINT32;
      delimiterCount: UINT32;
   end record;
   type LPDWRITE_TRIMMING is access all DWRITE_TRIMMING;

   IID_IDWriteTextFormat :constant GUID:=uuidof("9c906818-31d7-4fd3-a151-7c5e225db55a");

   type IDWriteTextFormat is record
      QueryInterface:access function(THIS:LPIDWriteTextFormat;riid:REFIID;ppvObj:LPLPVOID) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTextFormat) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTextFormat) return ULONG with Convention=>Stdcall;
      SetTextAlignment:access function(THIS:LPIDWriteTextFormat;textAlignment:DWRITE_TEXT_ALIGNMENT) return HRESULT with Convention=>Stdcall;
      SetParagraphAlignment:access function(THIS:LPIDWriteTextFormat;paragraphAlignment:DWRITE_PARAGRAPH_ALIGNMENT) return HRESULT with Convention=>Stdcall;
      SetWordWrapping:access function(THIS:LPIDWriteTextFormat;wordWrapping:DWRITE_WORD_WRAPPING) return HRESULT with Convention=>Stdcall;
      SetReadingDirection:access function(THIS:LPIDWriteTextFormat;readingDirection:DWRITE_READING_DIRECTION) return HRESULT with Convention=>Stdcall;
      SetFlowDirection:access function(THIS:LPIDWriteTextFormat;flowDirection:DWRITE_FLOW_DIRECTION) return HRESULT with Convention=>Stdcall;
      SetIncrementalTabStop:access function(THIS:LPIDWriteTextFormat;incrementalTabStop:FLOAT) return HRESULT with Convention=>Stdcall;
      SetTrimming:access function(THIS:LPIDWriteTextFormat;trimmingOptions:LPDWRITE_TRIMMING;trimmingSign:LPIDWriteInlineObject) return HRESULT with Convention=>Stdcall;
      SetLineSpacing:access function(THIS:LPIDWriteTextFormat;lineSpacingMethod:DWRITE_LINE_SPACING_METHOD;lineSpacing:FLOAT;baseline:FLOAT) return HRESULT with Convention=>Stdcall;
      GetTextAlignment:access function(THIS:LPIDWriteTextFormat) return DWRITE_TEXT_ALIGNMENT with Convention=>Stdcall;
      GetParagraphAlignment:access function(THIS:LPIDWriteTextFormat) return DWRITE_PARAGRAPH_ALIGNMENT with Convention=>Stdcall;
      GetWordWrapping:access function(THIS:LPIDWriteTextFormat) return DWRITE_WORD_WRAPPING with Convention=>Stdcall;
      GetReadingDirection:access function(THIS:LPIDWriteTextFormat) return DWRITE_READING_DIRECTION with Convention=>Stdcall;
      GetFlowDirection:access function(THIS:LPIDWriteTextFormat) return DWRITE_FLOW_DIRECTION with Convention=>Stdcall;
      GetIncrementalTabStop:access function(THIS:LPIDWriteTextFormat) return FLOAT with Convention=>Stdcall;
      GetTrimming:access function(THIS:LPIDWriteTextFormat;trimmingOptions:LPDWRITE_TRIMMING;trimmingSign:LPLPIDWriteInlineObject) return HRESULT with Convention=>Stdcall;
      GetLineSpacing:access function(THIS:LPIDWriteTextFormat;lineSpacingMethod:LPDWRITE_LINE_SPACING_METHOD;lineSpacing:LPFLOAT;baseline:LPFLOAT) return HRESULT with Convention=>Stdcall;
      GetFontCollection:access function(THIS:LPIDWriteTextFormat;fontCollection:LPLPIDWriteFontCollection) return HRESULT with Convention=>Stdcall;
      GetFontFamilyNameLength:access function(THIS:LPIDWriteTextFormat) return UINT32 with Convention=>Stdcall;
      GetFontFamilyName:access function(THIS:LPIDWriteTextFormat;fontFamilyName:LPWCHAR;nameSize:UINT32) return HRESULT with Convention=>Stdcall;
      GetFontWeight:access function(THIS:LPIDWriteTextFormat) return DWRITE_FONT_WEIGHT with Convention=>Stdcall;
      GetFontStyle:access function(THIS:LPIDWriteTextFormat) return DWRITE_FONT_STYLE with Convention=>Stdcall;
      GetFontStretch:access function(THIS:LPIDWriteTextFormat) return DWRITE_FONT_STRETCH with Convention=>Stdcall;
      GetFontSize:access function(THIS:LPIDWriteTextFormat) return FLOAT with Convention=>Stdcall;
      GetLocaleNameLength:access function(THIS:LPIDWriteTextFormat) return UINT32 with Convention=>Stdcall;
      GetLocaleName:access function(THIS:LPIDWriteTextFormat;localeName:LPWCHAR;nameSize:UINT32) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteTypography :constant GUID:=uuidof("55f1112b-1dc2-4b3c-9541-f46894ed85b6");

   type IDWriteTypography is record
      QueryInterface:access function(THIS:LPIDWriteTypography;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTypography) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTypography) return ULONG with Convention=>Stdcall;
      AddFontFeature:access function(THIS:LPIDWriteTypography;fontFeature:DWRITE_FONT_FEATURE) return HRESULT with Convention=>Stdcall;
      GetFontFeatureCount:access function(THIS:LPIDWriteTypography) return UINT32 with Convention=>Stdcall;
      GetFontFeature:access function(THIS:LPIDWriteTypography;fontFeatureIndex:UINT32;fontFeature:LPDWRITE_FONT_FEATURE) return HRESULT with Convention=>Stdcall;
   end record;

   type DWRITE_SCRIPT_SHAPES is (DWRITE_SCRIPT_SHAPES_DEFAULT,
                                 DWRITE_SCRIPT_SHAPES_NO_VISUAL);
   for DWRITE_SCRIPT_SHAPES use (DWRITE_SCRIPT_SHAPES_DEFAULT=>0,
                                 DWRITE_SCRIPT_SHAPES_NO_VISUAL=>1);


   type DWRITE_SCRIPT_ANALYSIS is record
      script: UINT16;
      shapes: DWRITE_SCRIPT_SHAPES;
   end record;
   type LPDWRITE_SCRIPT_ANALYSIS is access all DWRITE_SCRIPT_ANALYSIS;

   type DWRITE_BREAK_CONDITION is (DWRITE_BREAK_CONDITION_NEUTRAL,
                                   DWRITE_BREAK_CONDITION_CAN_BREAK,
                                   DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,
                                   DWRITE_BREAK_CONDITION_MUST_BREAK);
   type LPDWRITE_BREAK_CONDITION is access all DWRITE_BREAK_CONDITION;


   type DWRITE_LINE_BREAKPOINT is record
      breakConditionBefore: UINT8;
      breakConditionAfter: UINT8;
      isWhitespace: UINT8;
      isSoftHyphen: UINT8;
      padding: UINT8;
   end record;
   type LPDWRITE_LINE_BREAKPOINT is access all DWRITE_LINE_BREAKPOINT;
   

   type DWRITE_NUMBER_SUBSTITUTION_METHOD is (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);


   IID_IDWriteNumberSubstitution :constant GUID:=uuidof("14885CC9-BAB0-4f90-B6ED-5C366A2CD03D");

   type IDWriteNumberSubstitution is record
      QueryInterface:access function(THIS:LPIDWriteNumberSubstitution;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteNumberSubstitution) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteNumberSubstitution) return ULONG with Convention=>Stdcall;
   end record;

   type DWRITE_SHAPING_TEXT_PROPERTIES is record
      isShapedAlone: UINT16;
      reserved: UINT16;
   end record;
   type LPDWRITE_SHAPING_TEXT_PROPERTIES is access all DWRITE_SHAPING_TEXT_PROPERTIES;

   type DWRITE_SHAPING_GLYPH_PROPERTIES is record
      justification: UINT16;
      isClusterStart: UINT16;
      isDiacritic: UINT16;
      isZeroWidthSpace: UINT16;
      reserved: UINT16;
   end record;
   type LPDWRITE_SHAPING_GLYPH_PROPERTIES is access all DWRITE_SHAPING_GLYPH_PROPERTIES;

   IID_IDWriteTextAnalysisSource :constant GUID:=uuidof("688e1a58-5094-47c8-adc8-fbcea60ae92b");

   type IDWriteTextAnalysisSource is record
      QueryInterface:access function(THIS:LPIDWriteTextAnalysisSource;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTextAnalysisSource) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTextAnalysisSource) return ULONG with Convention=>Stdcall;
      GetTextAtPosition:access function(THIS:LPIDWriteTextAnalysisSource;textPosition:UINT32;textString:access LPWCHAR;textLength:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetTextBeforePosition:access function(THIS:LPIDWriteTextAnalysisSource;textPosition:UINT32;textString:access LPWCHAR;textLength:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetParagraphReadingDirection:access function(THIS:LPIDWriteTextAnalysisSource) return DWRITE_READING_DIRECTION with Convention=>Stdcall;
      GetLocaleName:access function(THIS:LPIDWriteTextAnalysisSource;textPosition:UINT32;textLength:LPUINT32;localeName:access LPWCHAR) return HRESULT with Convention=>Stdcall;
      GetNumberSubstitution:access function(THIS:LPIDWriteTextAnalysisSource;textPosition:UINT32;textLength:LPUINT32;numberSubstitution:LPLPIDWriteNumberSubstitution) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteTextAnalysisSink :constant GUID:=uuidof("5810cd44-0ca0-4701-b3fa-bec5182ae4f6");

   type IDWriteTextAnalysisSink is record
      QueryInterface:access function(THIS:LPIDWriteTextAnalysisSink;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTextAnalysisSink) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTextAnalysisSink) return ULONG with Convention=>Stdcall;
      SetScriptAnalysis:access function(THIS:LPIDWriteTextAnalysisSink;textPosition:UINT32;textLength:UINT32;scriptAnalysis:LPDWRITE_SCRIPT_ANALYSIS) return HRESULT with Convention=>Stdcall;
      SetLineBreakpoints:access function(THIS:LPIDWriteTextAnalysisSink;textPosition:UINT32;textLength:UINT32;lineBreakpoints:LPDWRITE_LINE_BREAKPOINT) return HRESULT with Convention=>Stdcall;
      SetBidiLevel:access function(THIS:LPIDWriteTextAnalysisSink;textPosition:UINT32;textLength:UINT32;explicitLevel:UINT8;resolvedLevel:UINT8) return HRESULT with Convention=>Stdcall;
      SetNumberSubstitution:access function(THIS:LPIDWriteTextAnalysisSink;textPosition:UINT32;textLength:UINT32;numberSubstitution:LPIDWriteNumberSubstitution) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteTextAnalyzer :constant GUID:=uuidof("b7e6163e-7f46-43b4-84b3-e4e6249c365d");

   type IDWriteTextAnalyzer is record
      QueryInterface:access function(THIS:LPIDWriteTextAnalyzer;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTextAnalyzer) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTextAnalyzer) return ULONG with Convention=>Stdcall;
      AnalyzeScript:access function(THIS:LPIDWriteTextAnalyzer;analysisSource:LPIDWriteTextAnalysisSource;textPosition:UINT32;textLength:UINT32;analysisSink:LPIDWriteTextAnalysisSink) return HRESULT with Convention=>Stdcall;
      AnalyzeBidi:access function(THIS:LPIDWriteTextAnalyzer;analysisSource:LPIDWriteTextAnalysisSource;textPosition:UINT32;textLength:UINT32;analysisSink:LPIDWriteTextAnalysisSink) return HRESULT with Convention=>Stdcall;
      AnalyzeNumberSubstitution:access function(THIS:LPIDWriteTextAnalyzer;analysisSource:LPIDWriteTextAnalysisSource;textPosition:UINT32;textLength:UINT32;analysisSink:LPIDWriteTextAnalysisSink) return HRESULT with Convention=>Stdcall;
      AnalyzeLineBreakpoints:access function(THIS:LPIDWriteTextAnalyzer;analysisSource:LPIDWriteTextAnalysisSource;textPosition:UINT32;textLength:UINT32;analysisSink:LPIDWriteTextAnalysisSink) return HRESULT with Convention=>Stdcall;
      GetGlyphs:access function(THIS:LPIDWriteTextAnalyzer;textString:LPWCHAR;textLength:UINT32;fontFace:LPIDWriteFontFace;isSideways:BOOL;isRightToLeft:BOOL;scriptAnalysis:LPDWRITE_SCRIPT_ANALYSIS;localeName:LPWCHAR;numberSubstitution:LPIDWriteNumberSubstitution;features:LPLPDWRITE_TYPOGRAPHIC_FEATURES;featureRangeLengths:LPUINT32;featureRanges:UINT32;maxGlyphCount:UINT32;clusterMap:LPUINT16;textProps:LPDWRITE_SHAPING_TEXT_PROPERTIES;glyphIndices:LPUINT16;glyphProps:LPDWRITE_SHAPING_GLYPH_PROPERTIES;actualGlyphCount:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetGlyphPlacements:access function(THIS:LPIDWriteTextAnalyzer;textString:LPWCHAR;clusterMap:LPUINT16;textProps:LPDWRITE_SHAPING_TEXT_PROPERTIES;textLength:UINT32;glyphIndices:LPUINT16;glyphProps:LPDWRITE_SHAPING_GLYPH_PROPERTIES;glyphCount:UINT32;fontFace:LPIDWriteFontFace;fontEmSize:FLOAT;isSideways:BOOL;isRightToLeft:BOOL;scriptAnalysis:LPDWRITE_SCRIPT_ANALYSIS;localeName:LPWCHAR;features:LPLPDWRITE_TYPOGRAPHIC_FEATURES;featureRangeLengths:LPUINT32;featureRanges:UINT32;glyphAdvances:LPFLOAT;glyphOffsets:LPDWRITE_GLYPH_OFFSET) return HRESULT with Convention=>Stdcall;
      GetGdiCompatibleGlyphPlacements:access function(THIS:LPIDWriteTextAnalyzer;textString:LPWCHAR;clusterMap:LPUINT16;textProps:LPDWRITE_SHAPING_TEXT_PROPERTIES;textLength:UINT32;glyphIndices:LPUINT16;glyphProps:LPDWRITE_SHAPING_GLYPH_PROPERTIES;glyphCount:UINT32;fontFace:LPIDWriteFontFace;fontEmSize:FLOAT;pixelsPerDip:FLOAT;transform:LPDWRITE_MATRIX;useGdiNatural:BOOL;isSideways:BOOL;isRightToLeft:BOOL;scriptAnalysis:LPDWRITE_SCRIPT_ANALYSIS;localeName:LPWCHAR;features:LPLPDWRITE_TYPOGRAPHIC_FEATURES;featureRangeLengths:LPUINT32;featureRanges:UINT32;glyphAdvances:LPFLOAT;glyphOffsets:LPDWRITE_GLYPH_OFFSET) return HRESULT with Convention=>Stdcall;
   end record;

   type DWRITE_GLYPH_RUN is record
      fontFace:LPIDWriteFontFace;
      fontEmSize: FLOAT;
      glyphCount: UINT32;
      glyphIndices:LPUINT16;
      glyphAdvances:LPFLOAT;
      glyphOffsets:LPDWRITE_GLYPH_OFFSET;
      isSideways: BOOL;
      bidiLevel: UINT32;
   end record;
   type LPDWRITE_GLYPH_RUN is access all DWRITE_GLYPH_RUN;
   type LPCDWRITE_GLYPH_RUN is access constant DWRITE_GLYPH_RUN;

   type DWRITE_GLYPH_RUN_DESCRIPTION is record
      localeName:LPWCHAR;
      string:LPWCHAR;
      stringLength: UINT32;
      clusterMap:LPUINT16;
      textPosition: UINT32;
   end record;
   type LPDWRITE_GLYPH_RUN_DESCRIPTION is access all DWRITE_GLYPH_RUN_DESCRIPTION;

   type DWRITE_UNDERLINE is record
      width: FLOAT;
      thickness: FLOAT;
      offset: FLOAT;
      runHeight: FLOAT;
      readingDirection: DWRITE_READING_DIRECTION;
      flowDirection: DWRITE_FLOW_DIRECTION;
      localeName:LPWCHAR;
      measuringMode: DWRITE_MEASURING_MODE;
   end record;
   type LPDWRITE_UNDERLINE is access all DWRITE_UNDERLINE;

   type DWRITE_STRIKETHROUGH is record
      width: FLOAT;
      thickness: FLOAT;
      offset: FLOAT;
      readingDirection: DWRITE_READING_DIRECTION;
      flowDirection: DWRITE_FLOW_DIRECTION;
      localeName:LPWCHAR;
      measuringMode: DWRITE_MEASURING_MODE;
   end record;
   type LPDWRITE_STRIKETHROUGH is access all DWRITE_STRIKETHROUGH;

   type DWRITE_LINE_METRICS is record
      length: UINT32;
      trailingWhitespaceLength: UINT32;
      newlineLength: UINT32;
      height: FLOAT;
      baseline: FLOAT;
      isTrimmed: BOOL;
   end record;
   type LPDWRITE_LINE_METRICS is access all DWRITE_LINE_METRICS;

   type DWRITE_CLUSTER_METRICS is record
      width: FLOAT;
      length: UINT16;
      canWrapLineAfter: UINT16;
      isWhitespace: UINT16;
      isNewline: UINT16;
      isSoftHyphen: UINT16;
      isRightToLeft: UINT16;
      padding: UINT16;
   end record;
   type LPDWRITE_CLUSTER_METRICS is access all DWRITE_CLUSTER_METRICS;

   type DWRITE_TEXT_METRICS is record
      left: FLOAT;
      top: FLOAT;
      width: FLOAT;
      widthIncludingTrailingWhitespace: FLOAT;
      height: FLOAT;
      layoutWidth: FLOAT;
      layoutHeight: FLOAT;
      maxBidiReorderingDepth: UINT32;
      lineCount: UINT32;
   end record;
   type LPDWRITE_TEXT_METRICS is access all DWRITE_TEXT_METRICS;

   type DWRITE_INLINE_OBJECT_METRICS is record
      width: FLOAT;
      height: FLOAT;
      baseline: FLOAT;
      supportsSideways: BOOL;
   end record;
   type LPDWRITE_INLINE_OBJECT_METRICS is access all DWRITE_INLINE_OBJECT_METRICS;

   type DWRITE_OVERHANG_METRICS is record
      left: FLOAT;
      top: FLOAT;
      right: FLOAT;
      bottom: FLOAT;
   end record;
   type LPDWRITE_OVERHANG_METRICS is access all DWRITE_OVERHANG_METRICS;

   type DWRITE_HIT_TEST_METRICS is record
      textPosition: UINT32;
      length: UINT32;
      left: FLOAT;
      top: FLOAT;
      width: FLOAT;
      height: FLOAT;
      bidiLevel: UINT32;
      isText: BOOL;
      isTrimmed: BOOL;
   end record;
   type LPDWRITE_HIT_TEST_METRICS is access all DWRITE_HIT_TEST_METRICS;

   IID_IDWriteInlineObject :constant GUID:=uuidof("8339FDE3-106F-47ab-8373-1C6295EB10B3");

   type IDWriteInlineObject is record
      QueryInterface:access function(THIS:LPIDWriteInlineObject;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteInlineObject) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteInlineObject) return ULONG with Convention=>Stdcall;
      Draw:access function(THIS:LPIDWriteInlineObject;clientDrawingContext:LPvoid;renderer:LPIDWriteTextRenderer;originX:FLOAT;originY:FLOAT;isSideways:BOOL;isRightToLeft:BOOL;clientDrawingEffect:LPIUnknown) return HRESULT with Convention=>Stdcall;
      GetMetrics:access function(THIS:LPIDWriteInlineObject;metrics:LPDWRITE_INLINE_OBJECT_METRICS) return HRESULT with Convention=>Stdcall;
      GetOverhangMetrics:access function(THIS:LPIDWriteInlineObject;overhangs:LPDWRITE_OVERHANG_METRICS) return HRESULT with Convention=>Stdcall;
      GetBreakConditions:access function(THIS:LPIDWriteInlineObject;breakConditionBefore:LPDWRITE_BREAK_CONDITION;breakConditionAfter:LPDWRITE_BREAK_CONDITION) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWritePixelSnapping :constant GUID:=uuidof("eaf3a2da-ecf4-4d24-b644-b34f6842024b");

   type IDWritePixelSnapping is record
      QueryInterface:access function(THIS:LPIDWritePixelSnapping;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWritePixelSnapping) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWritePixelSnapping) return ULONG with Convention=>Stdcall;
      IsPixelSnappingDisabled:access function(THIS:LPIDWritePixelSnapping;clientDrawingContext:LPvoid;isDisabled:LPBOOL) return HRESULT with Convention=>Stdcall;
      GetCurrentTransform:access function(THIS:LPIDWritePixelSnapping;clientDrawingContext:LPvoid;transform:LPDWRITE_MATRIX) return HRESULT with Convention=>Stdcall;
      GetPixelsPerDip:access function(THIS:LPIDWritePixelSnapping;clientDrawingContext:LPvoid;pixelsPerDip:LPFLOAT) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteTextRenderer :constant GUID:=uuidof("ef8a8135-5cc6-45fe-8825-c5a0724eb819");

   type IDWriteTextRenderer is record
      QueryInterface:access function(THIS:LPIDWriteTextRenderer;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTextRenderer) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTextRenderer) return ULONG with Convention=>Stdcall;
      IsPixelSnappingDisabled:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;isDisabled:LPBOOL) return HRESULT with Convention=>Stdcall;
      GetCurrentTransform:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;transform:LPDWRITE_MATRIX) return HRESULT with Convention=>Stdcall;
      GetPixelsPerDip:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;pixelsPerDip:LPFLOAT) return HRESULT with Convention=>Stdcall;
      DrawGlyphRun:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;baselineOriginX:FLOAT;baselineOriginY:FLOAT;measuringMode:DWRITE_MEASURING_MODE;glyphRun:LPDWRITE_GLYPH_RUN;glyphRunDescription:LPDWRITE_GLYPH_RUN_DESCRIPTION;clientDrawingEffect:LPIUnknown) return HRESULT with Convention=>Stdcall;
      DrawUnderline:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;baselineOriginX:FLOAT;baselineOriginY:FLOAT;underline:LPDWRITE_UNDERLINE;clientDrawingEffect:LPIUnknown) return HRESULT with Convention=>Stdcall;
      DrawStrikethrough:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;baselineOriginX:FLOAT;baselineOriginY:FLOAT;strikethrough:LPDWRITE_STRIKETHROUGH;clientDrawingEffect:LPIUnknown) return HRESULT with Convention=>Stdcall;
      DrawInlineObject:access function(THIS:LPIDWriteTextRenderer;clientDrawingContext:LPvoid;originX:FLOAT;originY:FLOAT;inlineObject:LPIDWriteInlineObject;isSideways:BOOL;isRightToLeft:BOOL;clientDrawingEffect:LPIUnknown) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteTextLayout :constant GUID:=uuidof("53737037-6d14-410b-9bfe-0b182bb70961");

   type IDWriteTextLayout is record
      QueryInterface:access function(THIS:LPIDWriteTextLayout;riid:REFIID;ppvObj:LPLPVOID) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteTextLayout) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteTextLayout) return ULONG with Convention=>Stdcall;
      SetTextAlignment:access function(THIS:LPIDWriteTextLayout;textAlignment:DWRITE_TEXT_ALIGNMENT) return HRESULT with Convention=>Stdcall;
      SetParagraphAlignment:access function(THIS:LPIDWriteTextLayout;paragraphAlignment:DWRITE_PARAGRAPH_ALIGNMENT) return HRESULT with Convention=>Stdcall;
      SetWordWrapping:access function(THIS:LPIDWriteTextLayout;wordWrapping:DWRITE_WORD_WRAPPING) return HRESULT with Convention=>Stdcall;
      SetReadingDirection:access function(THIS:LPIDWriteTextLayout;readingDirection:DWRITE_READING_DIRECTION) return HRESULT with Convention=>Stdcall;
      SetFlowDirection:access function(THIS:LPIDWriteTextLayout;flowDirection:DWRITE_FLOW_DIRECTION) return HRESULT with Convention=>Stdcall;
      SetIncrementalTabStop:access function(THIS:LPIDWriteTextLayout;incrementalTabStop:FLOAT) return HRESULT with Convention=>Stdcall;
      SetTrimming:access function(THIS:LPIDWriteTextLayout;trimmingOptions:LPDWRITE_TRIMMING;trimmingSign:LPIDWriteInlineObject) return HRESULT with Convention=>Stdcall;
      SetLineSpacing:access function(THIS:LPIDWriteTextLayout;lineSpacingMethod:DWRITE_LINE_SPACING_METHOD;lineSpacing:FLOAT;baseline:FLOAT) return HRESULT with Convention=>Stdcall;
      GetTextAlignment:access function(THIS:LPIDWriteTextLayout) return DWRITE_TEXT_ALIGNMENT with Convention=>Stdcall;
      GetParagraphAlignment:access function(THIS:LPIDWriteTextLayout) return DWRITE_PARAGRAPH_ALIGNMENT with Convention=>Stdcall;
      GetWordWrapping:access function(THIS:LPIDWriteTextLayout) return DWRITE_WORD_WRAPPING with Convention=>Stdcall;
      GetReadingDirection:access function(THIS:LPIDWriteTextLayout) return DWRITE_READING_DIRECTION with Convention=>Stdcall;
      GetFlowDirection:access function(THIS:LPIDWriteTextLayout) return DWRITE_FLOW_DIRECTION with Convention=>Stdcall;
      GetIncrementalTabStop:access function(THIS:LPIDWriteTextLayout) return FLOAT with Convention=>Stdcall;
      GetTrimming:access function(THIS:LPIDWriteTextLayout;trimmingOptions:LPDWRITE_TRIMMING;trimmingSign:LPLPIDWriteInlineObject) return HRESULT with Convention=>Stdcall;
      GetLineSpacing:access function(THIS:LPIDWriteTextLayout;lineSpacingMethod:LPDWRITE_LINE_SPACING_METHOD;lineSpacing:LPFLOAT;baseline:LPFLOAT) return HRESULT with Convention=>Stdcall;
      GetFontCollection:access function(THIS:LPIDWriteTextLayout;fontCollection:LPLPIDWriteFontCollection) return HRESULT with Convention=>Stdcall;
      GetFontFamilyNameLength:access function(THIS:LPIDWriteTextLayout) return UINT32 with Convention=>Stdcall;
      GetFontFamilyName:access function(THIS:LPIDWriteTextLayout;fontFamilyName:LPWCHAR;nameSize:UINT32) return HRESULT with Convention=>Stdcall;
      GetFontWeight:access function(THIS:LPIDWriteTextLayout) return DWRITE_FONT_WEIGHT with Convention=>Stdcall;
      GetFontStyle:access function(THIS:LPIDWriteTextLayout) return DWRITE_FONT_STYLE with Convention=>Stdcall;
      GetFontStretch:access function(THIS:LPIDWriteTextLayout) return DWRITE_FONT_STRETCH with Convention=>Stdcall;
      GetFontSize:access function(THIS:LPIDWriteTextLayout) return FLOAT with Convention=>Stdcall;
      GetLocaleNameLength:access function(THIS:LPIDWriteTextLayout) return UINT32 with Convention=>Stdcall;
      GetLocaleName:access function(THIS:LPIDWriteTextLayout;localeName:LPWCHAR;nameSize:UINT32) return HRESULT with Convention=>Stdcall;
      SetMaxWidth:access function(THIS:LPIDWriteTextLayout;maxWidth:FLOAT) return HRESULT with Convention=>Stdcall;
      SetMaxHeight:access function(THIS:LPIDWriteTextLayout;maxHeight:FLOAT) return HRESULT with Convention=>Stdcall;
      SetFontCollection:access function(THIS:LPIDWriteTextLayout;fontCollection:LPIDWriteFontCollection;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetFontFamilyName:access function(THIS:LPIDWriteTextLayout;fontFamilyName:LPWCHAR;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetFontWeight:access function(THIS:LPIDWriteTextLayout;fontWeight:DWRITE_FONT_WEIGHT;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetFontStyle:access function(THIS:LPIDWriteTextLayout;fontStyle:DWRITE_FONT_STYLE;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetFontStretch:access function(THIS:LPIDWriteTextLayout;fontStretch:DWRITE_FONT_STRETCH;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetFontSize:access function(THIS:LPIDWriteTextLayout;fontSize:FLOAT;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetUnderline:access function(THIS:LPIDWriteTextLayout;hasUnderline:BOOL;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetStrikethrough:access function(THIS:LPIDWriteTextLayout;hasStrikethrough:BOOL;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetDrawingEffect:access function(THIS:LPIDWriteTextLayout;drawingEffect:LPIUnknown;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetInlineObject:access function(THIS:LPIDWriteTextLayout;inlineObject:LPIDWriteInlineObject;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetTypography:access function(THIS:LPIDWriteTextLayout;typography:LPIDWriteTypography;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      SetLocaleName:access function(THIS:LPIDWriteTextLayout;localeName:LPWCHAR;textRange:DWRITE_TEXT_RANGE) return HRESULT with Convention=>Stdcall;
      GetMaxWidth:access function(THIS:LPIDWriteTextLayout) return FLOAT with Convention=>Stdcall;
      GetMaxHeight:access function(THIS:LPIDWriteTextLayout) return FLOAT with Convention=>Stdcall;
      GetFontCollection1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;fontCollection:LPLPIDWriteFontCollection;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetFontFamilyNameLength1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;nameLength:LPUINT32;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetFontFamilyName1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;fontFamilyName:LPWCHAR;nameSize:UINT32;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetFontWeight1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;fontWeight:LPDWRITE_FONT_WEIGHT;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetFontStyle1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;fontStyle:LPDWRITE_FONT_STYLE;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetFontStretch1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;fontStretch:LPDWRITE_FONT_STRETCH;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetFontSize1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;fontSize:LPFLOAT;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetUnderline:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;hasUnderline:LPBOOL;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetStrikethrough:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;hasStrikethrough:LPBOOL;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetDrawingEffect1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;drawingEffect:access LPIUnknown;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetInlineObject:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;inlineObject:LPLPIDWriteInlineObject;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetTypography:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;typography:LPLPIDWriteTypography;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetLocaleNameLength1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;nameLength:LPUINT32;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      GetLocaleName1:access function(THIS:LPIDWriteTextLayout;currentPosition:UINT32;localeName:LPWCHAR;nameSize:UINT32;textRange:LPDWRITE_TEXT_RANGE:=Null) return HRESULT with Convention=>Stdcall;
      Draw:access function(THIS:LPIDWriteTextLayout;clientDrawingContext:LPvoid;renderer:LPIDWriteTextRenderer;originX:FLOAT;originY:FLOAT) return HRESULT with Convention=>Stdcall;
      GetLineMetrics:access function(THIS:LPIDWriteTextLayout;lineMetrics:LPDWRITE_LINE_METRICS;maxLineCount:UINT32;actualLineCount:LPUINT32) return HRESULT with Convention=>Stdcall;
      GetMetrics:access function(THIS:LPIDWriteTextLayout;textMetrics:LPDWRITE_TEXT_METRICS) return HRESULT with Convention=>Stdcall;
      GetOverhangMetrics:access function(THIS:LPIDWriteTextLayout;overhangs:LPDWRITE_OVERHANG_METRICS) return HRESULT with Convention=>Stdcall;
      GetClusterMetrics:access function(THIS:LPIDWriteTextLayout;clusterMetrics:LPDWRITE_CLUSTER_METRICS;maxClusterCount:UINT32;actualClusterCount:LPUINT32) return HRESULT with Convention=>Stdcall;
      DetermineMinWidth:access function(THIS:LPIDWriteTextLayout;minWidth:LPFLOAT) return HRESULT with Convention=>Stdcall;
      HitTestPoint:access function(THIS:LPIDWriteTextLayout;pointX:FLOAT;pointY:FLOAT;isTrailingHit:LPBOOL;isInside:LPBOOL;hitTestMetrics:LPDWRITE_HIT_TEST_METRICS) return HRESULT with Convention=>Stdcall;
      HitTestTextPosition:access function(THIS:LPIDWriteTextLayout;textPosition:UINT32;isTrailingHit:BOOL;pointX:LPFLOAT;pointY:LPFLOAT;hitTestMetrics:LPDWRITE_HIT_TEST_METRICS) return HRESULT with Convention=>Stdcall;
      HitTestTextRange:access function(THIS:LPIDWriteTextLayout;textPosition:UINT32;textLength:UINT32;originX:FLOAT;originY:FLOAT;hitTestMetrics:LPDWRITE_HIT_TEST_METRICS;maxHitTestMetricsCount:UINT32;actualHitTestMetricsCount:LPUINT32) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteBitmapRenderTarget :constant GUID:=uuidof("5e5a32a3-8dff-4773-9ff6-0696eab77267");

   type IDWriteBitmapRenderTarget is record
      QueryInterface:access function(THIS:LPIDWriteBitmapRenderTarget;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteBitmapRenderTarget) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteBitmapRenderTarget) return ULONG with Convention=>Stdcall;
      DrawGlyphRun:access function(THIS:LPIDWriteBitmapRenderTarget;baselineOriginX:FLOAT;baselineOriginY:FLOAT;measuringMode:DWRITE_MEASURING_MODE;glyphRun:LPDWRITE_GLYPH_RUN;renderingParams:LPIDWriteRenderingParams;textColor:COLORREF;blackBoxRect:LPRECT:=Null) return HRESULT with Convention=>Stdcall;
      GetMemoryDC:access function(THIS:LPIDWriteBitmapRenderTarget) return HDC with Convention=>Stdcall;
      GetPixelsPerDip:access function(THIS:LPIDWriteBitmapRenderTarget) return FLOAT with Convention=>Stdcall;
      SetPixelsPerDip:access function(THIS:LPIDWriteBitmapRenderTarget;pixelsPerDip:FLOAT) return HRESULT with Convention=>Stdcall;
      GetCurrentTransform:access function(THIS:LPIDWriteBitmapRenderTarget;transform:LPDWRITE_MATRIX) return HRESULT with Convention=>Stdcall;
      SetCurrentTransform:access function(THIS:LPIDWriteBitmapRenderTarget;transform:LPDWRITE_MATRIX) return HRESULT with Convention=>Stdcall;
      GetSize:access function(THIS:LPIDWriteBitmapRenderTarget;size:LPSIZE) return HRESULT with Convention=>Stdcall;
      Resize:access function(THIS:LPIDWriteBitmapRenderTarget;width:UINT32;height:UINT32) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteGdiInterop :constant GUID:=uuidof("1edd9491-9853-4299-898f-6432983b6f3a");

   type IDWriteGdiInterop is record
      QueryInterface:access function(THIS:LPIDWriteGdiInterop;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteGdiInterop) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteGdiInterop) return ULONG with Convention=>Stdcall;
      CreateFontFromLOGFONT:access function(THIS:LPIDWriteGdiInterop;logFont:LPLOGFONTW;font:LPLPIDWriteFont) return HRESULT with Convention=>Stdcall;
      ConvertFontToLOGFONT:access function(THIS:LPIDWriteGdiInterop;font:LPIDWriteFont;logFont:LPLOGFONTW;isSystemFont:LPBOOL) return HRESULT with Convention=>Stdcall;
      ConvertFontFaceToLOGFONT:access function(THIS:LPIDWriteGdiInterop;font:LPIDWriteFontFace;logFont:LPLOGFONTW) return HRESULT with Convention=>Stdcall;
      CreateFontFaceFromHdc:access function(THIS:LPIDWriteGdiInterop;hdc:windef.HDC;fontFace:LPLPIDWriteFontFace) return HRESULT with Convention=>Stdcall;
      CreateBitmapRenderTarget:access function(THIS:LPIDWriteGdiInterop;hdc:windef.HDC;width:UINT32;height:UINT32;renderTarget:LPLPIDWriteBitmapRenderTarget) return HRESULT with Convention=>Stdcall;
   end record;

   type DWRITE_TEXTURE_TYPE is (DWRITE_TEXTURE_ALIASED_1x1,
                                DWRITE_TEXTURE_CLEARTYPE_3x1);



   DWRITE_ALPHA_MAX : constant := 255;

   IID_IDWriteGlyphRunAnalysis :constant GUID:=uuidof("7d97dbf7-e085-42d4-81e3-6a883bded118");

   type IDWriteGlyphRunAnalysis is record
      QueryInterface:access function(THIS:LPIDWriteGlyphRunAnalysis;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteGlyphRunAnalysis) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteGlyphRunAnalysis) return ULONG with Convention=>Stdcall;
      GetAlphaTextureBounds:access function(THIS:LPIDWriteGlyphRunAnalysis;textureType:DWRITE_TEXTURE_TYPE;textureBounds:LPRECT) return HRESULT with Convention=>Stdcall;
      CreateAlphaTexture:access function(THIS:LPIDWriteGlyphRunAnalysis;textureType:DWRITE_TEXTURE_TYPE;textureBounds:LPRECT;alphaValues:LPBYTE;bufferSize:UINT32) return HRESULT with Convention=>Stdcall;
      GetAlphaBlendParams:access function(THIS:LPIDWriteGlyphRunAnalysis;renderingParams:LPIDWriteRenderingParams;blendGamma:LPFLOAT;blendEnhancedContrast:LPFLOAT;blendClearTypeLevel:LPFLOAT) return HRESULT with Convention=>Stdcall;
   end record;

   IID_IDWriteFactory :constant GUID:=uuidof("b859ee5a-d838-4b5b-a2e8-1adc7d93db48");

   type IDWriteFactory is record
      QueryInterface:access function(THIS:LPIDWriteFactory;riid:REFIID;ppvObj:LPLPvoid) return HRESULT with Convention=>Stdcall;
      AddRef:access function(THIS:LPIDWriteFactory) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPIDWriteFactory) return ULONG with Convention=>Stdcall;
      GetSystemFontCollection:access function(THIS:LPIDWriteFactory;fontCollection:LPLPIDWriteFontCollection;checkForUpdates:BOOL:=0) return HRESULT with Convention=>Stdcall;
      CreateCustomFontCollection:access function(THIS:LPIDWriteFactory;collectionLoader:LPIDWriteFontCollectionLoader;collectionKey:LPvoid;collectionKeySize:UINT32;fontCollection:LPLPIDWriteFontCollection) return HRESULT with Convention=>Stdcall;
      RegisterFontCollectionLoader:access function(THIS:LPIDWriteFactory;fontCollectionLoader:LPIDWriteFontCollectionLoader) return HRESULT with Convention=>Stdcall;
      UnregisterFontCollectionLoader:access function(THIS:LPIDWriteFactory;fontCollectionLoader:LPIDWriteFontCollectionLoader) return HRESULT with Convention=>Stdcall;
      CreateFontFileReference:access function(THIS:LPIDWriteFactory;filePath:LPWCHAR;lastWriteTime:LPFILETIME;fontFile:LPLPIDWriteFontFile) return HRESULT with Convention=>Stdcall;
      CreateCustomFontFileReference:access function(THIS:LPIDWriteFactory;fontFileReferenceKey:LPvoid;fontFileReferenceKeySize:UINT32;fontFileLoader:LPIDWriteFontFileLoader;fontFile:LPLPIDWriteFontFile) return HRESULT with Convention=>Stdcall;
      CreateFontFace:access function(THIS:LPIDWriteFactory;fontFaceType:DWRITE_FONT_FACE_TYPE;numberOfFiles:UINT32;fontFiles:LPLPIDWriteFontFile;faceIndex:UINT32;fontFaceSimulationFlags:DWRITE_FONT_SIMULATIONS;fontFace:LPLPIDWriteFontFace) return HRESULT with Convention=>Stdcall;
      CreateRenderingParams:access function(THIS:LPIDWriteFactory;renderingParams:LPLPIDWriteRenderingParams) return HRESULT with Convention=>Stdcall;
      CreateMonitorRenderingParams:access function(THIS:LPIDWriteFactory;monitor:win32.winnt.HANDLE;renderingParams:LPLPIDWriteRenderingParams) return HRESULT with Convention=>Stdcall;
      CreateCustomRenderingParams:access function(THIS:LPIDWriteFactory;gamma:FLOAT;enhancedContrast:FLOAT;clearTypeLevel:FLOAT;pixelGeometry:DWRITE_PIXEL_GEOMETRY;renderingMode:DWRITE_RENDERING_MODE;renderingParams:LPLPIDWriteRenderingParams) return HRESULT with Convention=>Stdcall;
      RegisterFontFileLoader:access function(THIS:LPIDWriteFactory;fontFileLoader:LPIDWriteFontFileLoader) return HRESULT with Convention=>Stdcall;
      UnregisterFontFileLoader:access function(THIS:LPIDWriteFactory;fontFileLoader:LPIDWriteFontFileLoader) return HRESULT with Convention=>Stdcall;
      CreateTextFormat:access function(THIS:LPIDWriteFactory;fontFamilyName:LPWCHAR;fontCollection:LPIDWriteFontCollection;fontWeight:DWRITE_FONT_WEIGHT;fontStyle:DWRITE_FONT_STYLE;fontStretch:DWRITE_FONT_STRETCH;fontSize:FLOAT;localeName:LPWCHAR;textFormat:LPLPIDWriteTextFormat) return HRESULT with Convention=>Stdcall;
      CreateTypography:access function(THIS:LPIDWriteFactory;typography:LPLPIDWriteTypography) return HRESULT with Convention=>Stdcall;
      GetGdiInterop:access function(THIS:LPIDWriteFactory;gdiInterop:LPLPIDWriteGdiInterop) return HRESULT with Convention=>Stdcall;
      CreateTextLayout:access function(THIS:LPIDWriteFactory;string:LPWCHAR;stringLength:UINT32;textFormat:LPIDWriteTextFormat;maxWidth:FLOAT;maxHeight:FLOAT;textLayout:LPLPIDWriteTextLayout) return HRESULT with Convention=>Stdcall;
      CreateGdiCompatibleTextLayout:access function(THIS:LPIDWriteFactory;string:LPWCHAR;stringLength:UINT32;textFormat:LPIDWriteTextFormat;layoutWidth:FLOAT;layoutHeight:FLOAT;pixelsPerDip:FLOAT;transform:LPDWRITE_MATRIX;useGdiNatural:BOOL;textLayout:LPLPIDWriteTextLayout) return HRESULT with Convention=>Stdcall;
      CreateEllipsisTrimmingSign:access function(THIS:LPIDWriteFactory;textFormat:LPIDWriteTextFormat;trimmingSign:LPLPIDWriteInlineObject) return HRESULT with Convention=>Stdcall;
      CreateTextAnalyzer:access function(THIS:LPIDWriteFactory;textAnalyzer:LPLPIDWriteTextAnalyzer) return HRESULT with Convention=>Stdcall;
      CreateNumberSubstitution:access function(THIS:LPIDWriteFactory;substitutionMethod:DWRITE_NUMBER_SUBSTITUTION_METHOD;localeName:LPWCHAR;ignoreUserOverride:BOOL;numberSubstitution:LPLPIDWriteNumberSubstitution) return HRESULT with Convention=>Stdcall;
      CreateGlyphRunAnalysis:access function(THIS:LPIDWriteFactory;glyphRun:LPDWRITE_GLYPH_RUN;pixelsPerDip:FLOAT;transform:LPDWRITE_MATRIX;renderingMode:DWRITE_RENDERING_MODE;measuringMode:DWRITE_MEASURING_MODE;baselineOriginX:FLOAT;baselineOriginY:FLOAT;glyphRunAnalysis:LPLPIDWriteGlyphRunAnalysis) return HRESULT with Convention=>Stdcall;
   end record;

   function DWriteCreateFactory(factoryType:DWRITE_FACTORY_TYPE;iid:REFIID;factory:access LPIUnknown) return HRESULT with Import,Convention=>stdcall,external_name=>"DWriteCreateFactory";

   FACILITY_DWRITE : constant := 16#898#;

   DWRITE_ERR_BASE : constant := 16#5000#;

   use type Interfaces.C.unsigned_short;
   function MAKE_DWRITE_HR(severity, code:word) return HRESULT is (win32.winerror.MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code)));

   function MAKE_DWRITE_HR_ERR(code:word) return HRESULT is (MAKE_DWRITE_HR(win32.Winerror.SEVERITY_ERROR, code));


   DWRITE_E_FILEFORMAT : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#000#);

   DWRITE_E_UNEXPECTED : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#001#);

   DWRITE_E_NOFONT : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#002#);

   DWRITE_E_FILENOTFOUND : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#003#);

   DWRITE_E_FILEACCESS : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#004#);

   DWRITE_E_FONTCOLLECTIONOBSOLETE : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#005#);

   DWRITE_E_ALREADYREGISTERED : constant HRESULT:= MAKE_DWRITE_HR_ERR(16#006#);


   --
   -- THE END.
   --




end DWrite;

 

你可能感兴趣的:(Ada)