2 * Copyright 2012 Nikolay Sivov for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wine/debug.h"
22 #include "wine/unicode.h"
24 static inline void *heap_alloc(size_t len
)
26 return HeapAlloc(GetProcessHeap(), 0, len
);
29 static inline void *heap_alloc_zero(size_t len
)
31 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
34 static inline void *heap_realloc(void *mem
, size_t len
)
36 return HeapReAlloc(GetProcessHeap(), 0, mem
, len
);
39 static inline void *heap_realloc_zero(void *mem
, size_t len
)
41 return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, mem
, len
);
44 static inline BOOL
heap_free(void *mem
)
46 return HeapFree(GetProcessHeap(), 0, mem
);
49 static inline LPWSTR
heap_strdupW(const WCHAR
*str
)
56 size
= (strlenW(str
)+1)*sizeof(WCHAR
);
57 ret
= heap_alloc(size
);
59 memcpy(ret
, str
, size
);
65 static inline LPWSTR
heap_strdupnW(const WCHAR
*str
, UINT32 len
)
71 ret
= heap_alloc((len
+1)*sizeof(WCHAR
));
74 memcpy(ret
, str
, len
*sizeof(WCHAR
));
82 static inline const char *debugstr_range(const DWRITE_TEXT_RANGE
*range
)
84 return wine_dbg_sprintf("%u:%u", range
->startPosition
, range
->length
);
87 static inline unsigned short get_table_entry(const unsigned short *table
, WCHAR ch
)
89 return table
[table
[table
[ch
>> 8] + ((ch
>> 4) & 0x0f)] + (ch
& 0xf)];
92 extern HRESULT
convert_fontface_to_logfont(IDWriteFontFace
*, LOGFONTW
*) DECLSPEC_HIDDEN
;
93 extern HRESULT
create_numbersubstitution(DWRITE_NUMBER_SUBSTITUTION_METHOD
,const WCHAR
*locale
,BOOL
,IDWriteNumberSubstitution
**) DECLSPEC_HIDDEN
;
94 extern HRESULT
create_textformat(const WCHAR
*,IDWriteFontCollection
*,DWRITE_FONT_WEIGHT
,DWRITE_FONT_STYLE
,DWRITE_FONT_STRETCH
,
95 FLOAT
,const WCHAR
*,IDWriteTextFormat
**) DECLSPEC_HIDDEN
;
96 extern HRESULT
create_textlayout(const WCHAR
*,UINT32
,IDWriteTextFormat
*,FLOAT
,FLOAT
,IDWriteTextLayout
**) DECLSPEC_HIDDEN
;
97 extern HRESULT
create_trimmingsign(IDWriteInlineObject
**) DECLSPEC_HIDDEN
;
98 extern HRESULT
create_typography(IDWriteTypography
**) DECLSPEC_HIDDEN
;
99 extern HRESULT
create_gdiinterop(IDWriteFactory
*,IDWriteGdiInterop
**) DECLSPEC_HIDDEN
;
100 extern void release_gdiinterop(IDWriteGdiInterop
*) DECLSPEC_HIDDEN
;
101 extern HRESULT
create_localizedstrings(IDWriteLocalizedStrings
**) DECLSPEC_HIDDEN
;
102 extern HRESULT
add_localizedstring(IDWriteLocalizedStrings
*,const WCHAR
*,const WCHAR
*) DECLSPEC_HIDDEN
;
103 extern HRESULT
clone_localizedstring(IDWriteLocalizedStrings
*iface
, IDWriteLocalizedStrings
**strings
) DECLSPEC_HIDDEN
;
104 extern HRESULT
get_system_fontcollection(IDWriteFontCollection
**) DECLSPEC_HIDDEN
;
105 extern HRESULT
get_textanalyzer(IDWriteTextAnalyzer
**) DECLSPEC_HIDDEN
;
106 extern HRESULT
create_font_file(IDWriteFontFileLoader
*loader
, const void *reference_key
, UINT32 key_size
, IDWriteFontFile
**font_file
) DECLSPEC_HIDDEN
;
107 extern HRESULT
create_localfontfileloader(IDWriteLocalFontFileLoader
** iface
) DECLSPEC_HIDDEN
;
108 extern HRESULT
create_fontface(DWRITE_FONT_FACE_TYPE
,UINT32
,IDWriteFontFile
* const*,UINT32
,DWRITE_FONT_SIMULATIONS
,IDWriteFontFace2
**) DECLSPEC_HIDDEN
;
109 extern HRESULT
create_font_collection(IDWriteFactory
*,IDWriteFontFileEnumerator
*,IDWriteFontCollection
**) DECLSPEC_HIDDEN
;
111 /* Opentype font table functions */
112 extern HRESULT
opentype_analyze_font(IDWriteFontFileStream
*,UINT32
*,DWRITE_FONT_FILE_TYPE
*,DWRITE_FONT_FACE_TYPE
*,BOOL
*) DECLSPEC_HIDDEN
;
113 extern HRESULT
opentype_get_font_table(IDWriteFontFileStream
*,DWRITE_FONT_FACE_TYPE
,UINT32
,UINT32
,const void**,void**,UINT32
*,BOOL
*) DECLSPEC_HIDDEN
;
114 extern void opentype_cmap_get_glyphindex(void*,UINT32
,UINT16
*) DECLSPEC_HIDDEN
;
115 extern HRESULT
opentype_cmap_get_unicode_ranges(void*,UINT32
,DWRITE_UNICODE_RANGE
*,UINT32
*) DECLSPEC_HIDDEN
;
116 extern VOID
get_font_properties(LPCVOID os2
, LPCVOID head
, LPCVOID post
, DWRITE_FONT_METRICS
*metrics
, DWRITE_FONT_STRETCH
*stretch
, DWRITE_FONT_WEIGHT
*weight
, DWRITE_FONT_STYLE
*style
) DECLSPEC_HIDDEN
;
117 extern HRESULT
opentype_get_font_strings_from_id(const void*,DWRITE_INFORMATIONAL_STRING_ID
,IDWriteLocalizedStrings
**) DECLSPEC_HIDDEN
;
119 extern HRESULT
bidi_computelevels(const WCHAR
*,UINT32
,UINT8
,UINT8
*,UINT8
*) DECLSPEC_HIDDEN
;
120 extern WCHAR
bidi_get_mirrored_char(WCHAR
) DECLSPEC_HIDDEN
;
126 SCRIPT_JUSTIFY_ARABIC_BLANK
,
127 SCRIPT_JUSTIFY_CHARACTER
,
128 SCRIPT_JUSTIFY_RESERVED1
,
129 SCRIPT_JUSTIFY_BLANK
,
130 SCRIPT_JUSTIFY_RESERVED2
,
131 SCRIPT_JUSTIFY_RESERVED3
,
132 SCRIPT_JUSTIFY_ARABIC_NORMAL
,
133 SCRIPT_JUSTIFY_ARABIC_KASHIDA
,
134 SCRIPT_JUSTIFY_ARABIC_ALEF
,
135 SCRIPT_JUSTIFY_ARABIC_HA
,
136 SCRIPT_JUSTIFY_ARABIC_RA
,
137 SCRIPT_JUSTIFY_ARABIC_BA
,
138 SCRIPT_JUSTIFY_ARABIC_BARA
,
139 SCRIPT_JUSTIFY_ARABIC_SEEN
,
140 SCRIPT_JUSTIFY_ARABIC_SEEN_M
143 struct scriptshaping_cache
;
144 extern HRESULT
create_scriptshaping_cache(IDWriteFontFace
*,const WCHAR
*,struct scriptshaping_cache
**) DECLSPEC_HIDDEN
;
145 extern void release_scriptshaping_cache(struct scriptshaping_cache
*) DECLSPEC_HIDDEN
;
147 struct scriptshaping_ops
149 HRESULT (*contextual_shaping
)(struct scriptshaping_cache
*cache
, BOOL is_rtl
, const WCHAR
*text
, UINT32 len
, UINT32 max_glyph_count
,
150 UINT16
*clustermap
, UINT16
*glyph_indices
, UINT32
* actual_glyph_count
);
151 HRESULT (*set_text_glyphs_props
)(struct scriptshaping_cache
*cache
, const WCHAR
*text
, UINT32 len
, UINT16
*clustermap
, UINT16
*glyph_indices
,
152 UINT32 glyphcount
, DWRITE_SHAPING_TEXT_PROPERTIES
*text_props
, DWRITE_SHAPING_GLYPH_PROPERTIES
*glyph_props
);
155 extern const struct scriptshaping_ops default_shaping_ops DECLSPEC_HIDDEN
;
156 extern const struct scriptshaping_ops latn_shaping_ops DECLSPEC_HIDDEN
;