2 * Copyright (C) 2005 Steven Edwards
3 * Copyright (C) 2005 Vijay Kiran Kamuju
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 /* FIXME: #include <specstrings.h> */
32 /** ScriptStringAnalyse */
33 #define SSA_PASSWORD 0x00000001
34 #define SSA_TAB 0x00000002
35 #define SSA_CLIP 0x00000004
36 #define SSA_FIT 0x00000008
37 #define SSA_DZWG 0x00000010
38 #define SSA_FALLBACK 0x00000020
39 #define SSA_BREAK 0x00000040
40 #define SSA_GLYPHS 0x00000080
41 #define SSA_RTL 0x00000100
42 #define SSA_GCP 0x00000200
43 #define SSA_HOTKEY 0x00000400
44 #define SSA_METAFILE 0x00000800
45 #define SSA_LINK 0x00001000
46 #define SSA_HIDEHOTKEY 0x00002000
47 #define SSA_HOTKEYONLY 0x00002400
48 #define SSA_FULLMEASURE 0x04000000
49 #define SSA_LPKANSIFALLBACK 0x08000000
50 #define SSA_PIDX 0x10000000
51 #define SSA_LAYOUTRTL 0x20000000
52 #define SSA_DONTGLYPH 0x40000000
53 #define SSA_NOKASHIDA 0x80000000
55 /** StringIsComplex */
57 #define SIC_ASCIIDIGIT 2
61 #define SGCM_RTL 0x00000001
63 /** ScriptApplyDigitSubstitution */
64 #define SCRIPT_DIGITSUBSTITUTE_CONTEXT 0
65 #define SCRIPT_DIGITSUBSTITUTE_NONE 1
66 #define SCRIPT_DIGITSUBSTITUTE_NATIONAL 2
67 #define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL 3
69 #define SCRIPT_UNDEFINED 0
71 #define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200)
73 typedef enum tag_SCRIPT_JUSTIFY
{
74 SCRIPT_JUSTIFY_NONE
= 0,
75 SCRIPT_JUSTIFY_ARABIC_BLANK
= 1,
76 SCRIPT_JUSTIFY_CHARACTER
= 2,
77 SCRIPT_JUSTIFY_RESERVED1
= 3,
78 SCRIPT_JUSTIFY_BLANK
= 4,
79 SCRIPT_JUSTIFY_RESERVED2
= 5,
80 SCRIPT_JUSTIFY_RESERVED3
= 6,
81 SCRIPT_JUSTIFY_ARABIC_NORMAL
= 7,
82 SCRIPT_JUSTIFY_ARABIC_KASHIDA
= 8,
83 SCRIPT_JUSTIFY_ARABIC_ALEF
= 9,
84 SCRIPT_JUSTIFY_ARABIC_HA
= 10,
85 SCRIPT_JUSTIFY_ARABIC_RA
= 11,
86 SCRIPT_JUSTIFY_ARABIC_BA
= 12,
87 SCRIPT_JUSTIFY_ARABIC_BARA
= 13,
88 SCRIPT_JUSTIFY_ARABIC_SEEN
= 14,
89 SCRIPT_JUSTIFY_ARABIC_SEEN_M
= 15,
92 typedef struct tag_SCRIPT_CONTROL
{
93 DWORD uDefaultLanguage
:16;
94 DWORD fContextDigits
:1;
95 DWORD fInvertPreBoundDir
:1;
96 DWORD fInvertPostBoundDir
:1;
97 DWORD fLinkStringBefore
:1;
98 DWORD fLinkStringAfter
:1;
99 DWORD fNeutralOverride
:1;
100 DWORD fNumericOverride
:1;
101 DWORD fLegacyBidiClass
:1;
102 DWORD fMergeNeutralItems
:1;
110 DWORD fNeedsWordBreaking
:1;
111 DWORD fNeedsCaretInfo
:1;
114 DWORD fPrivateUseArea
:1;
115 DWORD fNeedsCharacterJustify
:1;
116 DWORD fInvalidGlyph
:1;
117 DWORD fInvalidLogAttr
:1;
119 DWORD fAmbiguousCharSet
:1;
120 DWORD fClusterSizeVaries
:1;
121 DWORD fRejectInvalid
:1;
124 typedef struct tag_SCRIPT_STATE
{
126 WORD fOverrideDirection
:1;
127 WORD fInhibitSymSwap
:1;
129 WORD fDigitSubstitute
:1;
130 WORD fInhibitLigate
:1;
132 WORD fArabicNumContext
:1;
133 WORD fGcpClusters
:1;
135 WORD fEngineReserved
:2;
138 typedef struct tag_SCRIPT_ANALYSIS
{
144 WORD fLogicalOrder
:1;
145 WORD fNoGlyphIndex
:1;
149 typedef struct tag_SCRIPT_ITEM
{
154 typedef struct tag_SCRIPT_DIGITSUBSTITUTE
{
155 DWORD NationalDigitLanguage
:16;
156 DWORD TraditionalDigitLanguage
:16;
157 DWORD DigitSubstitute
:8;
159 } SCRIPT_DIGITSUBSTITUTE
;
161 typedef struct tag_SCRIPT_FONTPROPERTIES
{
168 } SCRIPT_FONTPROPERTIES
;
170 typedef struct tag_SCRIPT_TABDEF
{
177 typedef struct tag_SCRIPT_VISATTR
{
178 WORD uJustification
:4;
179 WORD fClusterStart
:1;
183 WORD fShapeReserved
:8;
186 typedef struct tag_SCRIPT_LOGATTR
{
195 typedef void *SCRIPT_CACHE
;
196 typedef void *SCRIPT_STRING_ANALYSIS
;
198 #ifndef LSDEFS_DEFINED
199 typedef struct tagGOFFSET
{
205 typedef ULONG OPENTYPE_TAG
;
207 typedef struct tagOPENTYPE_FEATURE_RECORD
209 OPENTYPE_TAG tagFeature
;
211 } OPENTYPE_FEATURE_RECORD
;
213 typedef struct tagSCRIPT_GLYPHPROP
219 typedef struct tagSCRIPT_CHARPROP
221 WORD fCanGlyphAlone
:1;
225 typedef struct tagTEXTRANGE_PROPERTIES
227 OPENTYPE_FEATURE_RECORD
*potfRecords
;
229 } TEXTRANGE_PROPERTIES
;
231 /* Function Declarations */
236 ScriptApplyDigitSubstitution(
237 _In_reads_(1) const SCRIPT_DIGITSUBSTITUTE
* psds
,
238 _Out_writes_(1) SCRIPT_CONTROL
* psc
,
239 _Out_writes_(1) SCRIPT_STATE
* pss
);
244 ScriptApplyLogicalWidth(
245 _In_reads_(cChars
) const int *piDx
,
248 _In_reads_(cChars
) const WORD
*pwLogClust
,
249 _In_reads_(cGlyphs
) const SCRIPT_VISATTR
*psva
,
250 _In_reads_(cGlyphs
) const int *piAdvance
,
251 _In_reads_(1) const SCRIPT_ANALYSIS
*psa
,
252 _Inout_updates_opt_(1) ABC
*pABC
,
253 _Out_writes_all_(cGlyphs
) int *piJustify
);
258 ScriptRecordDigitSubstitution(
260 _Out_writes_(1) SCRIPT_DIGITSUBSTITUTE
*psds
);
266 _In_reads_(cInChars
) const WCHAR
*pwcInChars
,
269 _In_reads_opt_(1) const SCRIPT_CONTROL
*psControl
,
270 _In_reads_opt_(1) const SCRIPT_STATE
*psState
,
271 _Out_writes_to_(cMaxItems
, *pcItems
) SCRIPT_ITEM
*pItems
,
272 _Out_writes_(1) int *pcItems
);
279 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
280 _In_reads_(cChars
) const WCHAR
*pwcInChars
,
283 _Out_writes_(cChars
) WORD
*pwOutGlyphs
);
288 ScriptGetFontProperties(
290 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
291 _Out_writes_(1) SCRIPT_FONTPROPERTIES
*sfp
);
296 ScriptGetGlyphABCWidth(
298 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
300 _Out_writes_(1) ABC
*pABC
);
305 ScriptGetLogicalWidths(
306 _In_reads_(1) const SCRIPT_ANALYSIS
*psa
,
309 _In_reads_(cGlyphs
) const int *piGlyphWidth
,
310 _In_reads_(cChars
) const WORD
*pwLogClust
,
311 _In_reads_(cGlyphs
) const SCRIPT_VISATTR
*psva
,
312 _In_reads_(cChars
) int *piDx
);
318 _Outptr_result_buffer_(*piNumScripts
) const SCRIPT_PROPERTIES
***ppSp
,
319 _Out_
int *piNumScripts
);
326 _In_
const void *pString
,
332 _In_reads_opt_(1) SCRIPT_CONTROL
*psControl
,
333 _In_reads_opt_(1) SCRIPT_STATE
*psState
,
334 _In_reads_opt_(cString
) const int *piDx
,
335 _In_reads_opt_(1) SCRIPT_TABDEF
*pTabdef
,
336 _In_
const BYTE
*pbInClass
,
337 _Outptr_result_buffer_(1) SCRIPT_STRING_ANALYSIS
*pssa
);
342 ScriptStringValidate(
343 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
);
349 _Inout_updates_(1) SCRIPT_STRING_ANALYSIS
*pssa
);
355 _Inout_updates_(1) _At_(*psc
, _Post_null_
) SCRIPT_CACHE
*psc
);
361 _In_reads_(cInChars
) const WCHAR
*pwcInChars
,
369 _In_reads_(cGlyphs
) const SCRIPT_VISATTR
*psva
,
370 _In_reads_(cGlyphs
) const int *piAdvance
,
373 _In_
int iMinKashida
,
374 _Out_writes_all_(cGlyphs
) int *piJustify
);
381 _In_reads_(cRuns
) const BYTE
*pbLevel
,
382 _Out_writes_all_opt_(cRuns
) int *piVisualToLogical
,
383 _Out_writes_all_opt_(cRuns
) int *piLogicalToVisual
);
390 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
391 _In_reads_(cChars
) const WCHAR
*pwcChars
,
394 _Inout_updates_(1) SCRIPT_ANALYSIS
*psa
,
395 _Out_writes_to_(cMaxGlyphs
, *pcGlyphs
) WORD
*pwOutGlyphs
,
396 _Out_writes_all_(cChars
) WORD
*pwLogClust
,
397 _Out_writes_to_(cMaxGlyphs
, *pcGlyphs
) SCRIPT_VISATTR
*psva
,
398 _Out_writes_(1) int *pcGlyphs
);
405 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
406 _In_reads_(cGlyphs
) const WORD
*pwGlyphs
,
408 _In_reads_(cGlyphs
) const SCRIPT_VISATTR
*psva
,
409 _Inout_updates_(1) SCRIPT_ANALYSIS
*psa
,
410 _Out_writes_all_(cGlyphs
) int *piAdvance
,
411 _Out_writes_all_opt_(cGlyphs
) GOFFSET
*pGoffset
,
412 _Out_writes_(1) ABC
*pABC
);
418 _In_reads_(cChars
) const WCHAR
*pwcChars
,
420 _In_reads_(1) const SCRIPT_ANALYSIS
*psa
,
421 _Out_writes_all_(cChars
) SCRIPT_LOGATTR
*psla
);
426 ScriptCacheGetHeight(
428 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
429 _Out_writes_(1) LONG
*tmHeight
);
439 _In_reads_(cChars
) const WORD
*pwLogClust
,
440 _In_reads_(cGlyphs
) const SCRIPT_VISATTR
*psva
,
441 _In_reads_(cGlyphs
) const int *piAdvance
,
442 _In_reads_(1) const SCRIPT_ANALYSIS
*psa
,
452 _In_reads_(cChars
) const WORD
*pwLogClust
,
453 _In_reads_(cGlyphs
) const SCRIPT_VISATTR
*psva
,
454 _In_reads_(cGlyphs
) const int *piAdvance
,
455 _In_reads_(1) const SCRIPT_ANALYSIS
*psa
,
456 _Out_writes_(1) int *piCP
,
457 _Out_writes_(1) int *piTrailing
);
463 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
,
466 _Out_writes_(1) int *pX
);
472 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
,
474 _Out_writes_(1) int *piCh
,
475 _Out_writes_(1) int *piTrailing
);
480 ScriptStringGetLogicalWidths(
481 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
,
487 ScriptStringGetOrder(
488 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
,
489 _Out_ UINT
*puOrder
);
495 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
,
499 _In_reads_opt_(1) const RECT
*prc
,
502 _In_ BOOL fDisabled
);
509 _Inout_updates_(1) SCRIPT_CACHE
*psc
,
513 _In_reads_opt_(1) const RECT
*lprc
,
514 _In_reads_(1) const SCRIPT_ANALYSIS
*psa
,
515 _Reserved_
const WCHAR
*pwcReserved
,
516 _Reserved_
int iReserved
,
517 _In_reads_(cGlyphs
) const WORD
*pwGlyphs
,
519 _In_reads_(cGlyphs
) const int *piAdvance
,
520 _In_reads_opt_(cGlyphs
) const int *piJustify
,
521 _In_reads_(cGlyphs
) const GOFFSET
*pGoffset
);
525 ScriptString_pcOutChars(
526 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
);
528 const SCRIPT_LOGATTR
*
530 ScriptString_pLogAttr(
531 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
);
536 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa
);
542 #endif /* __USP10_H */