(usp10.h) SCRIPT_PROPERTIES 结构

包含有关每个脚本的特殊处理的信息。

语法

typedef struct {
  DWORD langid : 16;
  DWORD fNumeric : 1;
  DWORD fComplex : 1;
  DWORD fNeedsWordBreaking : 1;
  DWORD fNeedsCaretInfo : 1;
  DWORD bCharSet : 8;
  DWORD fControl : 1;
  DWORD fPrivateUseArea : 1;
  DWORD fNeedsCharacterJustify : 1;
  DWORD fInvalidGlyph : 1;
  DWORD fInvalidLogAttr : 1;
  DWORD fCDM : 1;
  DWORD fAmbiguousCharSet : 1;
  DWORD fClusterSizeVaries : 1;
  DWORD fRejectInvalid : 1;
} SCRIPT_PROPERTIES;

成员

langid

与脚本关联的语言的语言标识符。 当脚本用于多种语言时,此成员表示默认语言。 例如,西方脚本由 LANG_ENGLISH 尽管它也用于法语、德语和其他欧洲语言。

fNumeric

指示脚本是否仅包含数字以及 Unicode 双向算法规则写入数字时使用的其他字符的值。 例如,货币符号、千位分隔符和小数点在与数字相邻或数字之间时被分类为数字。 下表中定义了此成员的可能值。

含义
TRUE
该脚本仅包含 Unicode 双向算法规则在写入数字时使用的数字和其他字符。
FALSE
根据 Unicode 双向算法的规则,该脚本不只包含数字和写入数字时使用的其他字符。

fComplex

指示需要特殊形状或布局的语言的复杂脚本的值。 下表中定义了可能的值。

含义
TRUE
该脚本需要特殊的形状或布局。
FALSE
该脚本不包含组合字符,也不需要上下文调整或重新排序。

fNeedsWordBreaking

指示语言的分词位置类型的值。 下表中定义了可能的值。

含义
TRUE
该语言的分词位置要求应用程序调用 ScriptBreak,并在SCRIPT_LOGATTR中包含由 fWordStop 成员标记的字符位置。
FALSE
通过扫描SCRIPT_LOGATTR中由 fWhiteSpace 成员标记的字符,或扫描由SCRIPT_VISATTR的 uJustification 成员的值SCRIPT_JUSTIFY_BLANK或SCRIPT_JUSTIFY_ARABIC_BLANK标记的字形来标识Word中断位置。

fNeedsCaretInfo

指示语言(例如泰语或印度语)将脱字号放置限制为群集边界的值。 下表中定义了可能的值。 为了确定有效的插入点位置,应用程序检查 ScriptBreak 检索的逻辑属性中的 fCharStop 值,或比较 ScriptShape 检索的 pwLogClust 数组中的相邻值。

注意ScriptXtoCPScriptCPtoX 会自动应用插入点放置限制。
 
含义
TRUE
该语言将插入点位置限制为群集边界。
FALSE
该语言不会将插入点放置限制为群集边界。

bCharSet

与脚本关联的名义字符集。 在创建适合显示脚本的字体期间,此字符集可用作 LOGFONTlfCharSet 成员的值。

对于未定义字符集的新脚本,应用程序通常应将 bCharSet 设置为 DEFAULT_CHARSET。 请参阅成员 fAmbiguousCharSet 的说明。

fControl

指示脚本中是否仅使用控制字符的值。 下表中定义了可能的值。 请注意,每个控制字符最终不会以 SCRIPT_CONTROL 结构结束。

含义
TRUE
在脚本中仅设置控制字符。
FALSE
不要在脚本中仅设置控制字符。

fPrivateUseArea

指示使用专用区域的值,这是为 Unicode 范围 U+E000 到 U+F8FF 私下定义的一组特殊字符。 下表中定义了可能的值。

含义
TRUE
使用专用区域。
FALSE
请勿使用专用区域。

fNeedsCharacterJustify

指示通过增加字母之间的所有空格(而不仅仅是单词之间的空格)来处理脚本理由的值。 下表中定义了可能的值。 执行字符间对齐时,Uniscribe 仅在标有SCRIPT_VISATTR的 uJustification 成员的SCRIPT_JUSTIFY_CHARACTER值的字形之后插入额外的空格。

含义
TRUE
使用字符对齐。
FALSE
不要使用字符对齐。

fInvalidGlyph

指示 ScriptShape 是否为脚本生成无效字形以表示无效序列的值。 下表中定义了可能的值。 应用程序可以通过调用 ScriptGetFontProperties 获取特定字体无效字形的字形索引。

含义
TRUE
生成表示无效序列的无效字形。
FALSE
请勿生成无效字形来表示无效序列。

fInvalidLogAttr

指示 ScriptBreak 是否通过在逻辑属性缓冲区中设置 fInvalid 来标记脚本无效组合的值。 下表中定义了可能的值。

含义
TRUE
为脚本标记无效的组合。
FALSE
不要为脚本标记无效的组合。

fCDM

指示脚本是否包含已由 ScriptItemize 分析的项的值,该值包括将音调符号 (U+0300 到 U+36F) 。 下表中定义了可能的值。

含义
TRUE
该脚本包含一个包含组合音调符号的项。
FALSE
该脚本不包含包含组合音调符号的项。

fAmbiguousCharSet

指示脚本是否包含多个字符集支持的字符的值。 下表中定义了可能的值。

含义
TRUE
该脚本包含多个字符集支持的字符。 在这种情况下,应忽略此结构的 bCharSet 成员,并且 LOGFONTlfCharSet 成员应设置为 DEFAULT_CHARSET。 有关详细信息,请参阅备注部分。
FALSE
该脚本不包含多个字符集支持的字符。

fClusterSizeVaries

指示脚本(如阿拉伯语)是否可能使用上下文调整的值,这会导致字符串在删除字符期间的大小增加。 下表中定义了可能的值。

含义
TRUE
使用可变群集大小进行上下文调整。
FALSE
请勿使用可变群集大小进行上下文调整。

fRejectInvalid

指示脚本(例如泰语)是否应拒绝通常会导致编辑器程序(如记事本)发出蜂鸣声并忽略击键的无效序列的值。 下表中定义了可能的值。

含义
TRUE
拒绝无效序列。
FALSE
不要拒绝无效序列。

注解

此结构由 ScriptGetProperties 函数填充。

许多 Uniscribe 脚本不直接对应于 8 位字符集。 当脚本中的某些字符受多个字符集支持时,将设置 fAmbiguousCharSet 成员。 应用程序应执行进一步处理,以确定在请求适合运行的字体时要使用的字符集。 例如,它可能确定运行包含多种语言,并拆分运行,以便为每种语言使用不同的字体。

应用程序在初始化期间使用以下代码获取指向 SCRIPT_PROPERTIES数组的 指针。

const SCRIPT_PROPERTIES **ppScriptProperties; // Array of pointers  
                                              // to properties 
int iMaxScript;
HRESULT hr;

hr = ScriptGetProperties(&ppScriptProperties, &iMaxScript);

然后,应用程序可以检查项的脚本的属性,如下一个示例所示。

hr = ScriptItemize(pwcInChars, cInChars, cMaxItems, psControl, psState, pItems, pcItems);
//...
if (ppScriptProperties[pItems[iItem].a.eScript]->fNeedsCaretInfo) 
    {
        // Use ScriptBreak to restrict the caret from entering clusters (for example). 
    }

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 usp10.h

另请参阅

语言标识符

SCRIPT_CONTROL

SCRIPT_LOGATTR

SCRIPT_VISATTR

ScriptBreak

ScriptCPtoX

ScriptGetFontProperties

ScriptGetProperties

ScriptItemize

ScriptShape

ScriptXtoCP

Uniscribe

Uniscribe 结构