SCRIPT_PROPERTIES 結構 (usp10.h)
包含每個腳本特殊處理的相關信息。
語法
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 雙向演算法規則用來寫入數位的其他字元。 例如,貨幣符號、千位分隔符和小數點會在數字相鄰或之間分類為數值。 下表定義了這個成員的可能值。
值 | 意義 |
---|---|
|
腳本只包含數位,以及 Unicode 雙向演算法規則用來寫入數位的其他字元。 |
|
腳本不只包含 Unicode 雙向演算法規則撰寫數位時所使用的數位和其他字元。 |
fComplex
值,指出需要特殊成形或配置之語言的複雜腳本。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
腳本需要特殊的成形或版面配置。 |
|
腳本不包含合併字元,而且不需要內容成形或重新排序。 |
fNeedsWordBreaking
值,指出語言的斷詞位置類型。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
此語言具有斷詞位置,需要應用程式呼叫 ScriptBreak ,且包含 由 fWordStop 成員標示在 SCRIPT_LOGATTR 中的字元位置。 |
|
Word 中斷位置是藉由掃描SCRIPT_LOGATTR中 fWhiteSpace 成員所標示的字元,或是SCRIPT_JUSTIFY_BLANK值標示的字元,或SCRIPT_JUSTIFY_ARABIC_BLANK來識別SCRIPT_VISATTR的 uJustification 成員。 |
fNeedsCaretInfo
值,指出語言例如泰文或印度文是否限制插入號放置至叢集界限。 下表中定義了可能的值。 若要判斷有效的插入號位置,應用程式會檢查 ScriptBreak 所擷取之邏輯屬性中的 fCharStop 值,或比較 ScriptShape 所擷取之 pwLogClust 陣列中的相鄰值。
值 | 意義 |
---|---|
|
語言會將插入號放置限制為叢集界限。 |
|
語言不會將插入號放置限制為叢集界限。 |
bCharSet
與腳本相關聯的具名字符集。 在建立適合顯示文本的字型期間,此字元集可作為LOGFONTlfCharSet成員的值。
對於未定義字元集的新腳本,應用程式通常應該將 bCharSet 設定為 DEFAULT_CHARSET。 請參閱成員 fAmbiguousCharSet 的描述。
fControl
值,指出文稿中是否只使用控制字元。 下表中定義了可能的值。 請注意,每個控制字元最後都不會出現在 SCRIPT_CONTROL 結構中。
值 | 意義 |
---|---|
|
只設定文稿中的控制字元。 |
|
請勿只在文稿中設定控制字元。 |
fPrivateUseArea
值,指出使用私人使用區域,這是針對 Unicode 範圍 U+E000 到 U+F8FF 私下定義的一組特殊字元。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
使用私人使用區域。 |
|
請勿使用私人使用區域。 |
fNeedsCharacterJustify
值,指出腳本理由的處理方式是增加字母之間的所有空格,而不只是單字之間的空格。 下表中定義了可能的值。 執行字元間對齊時,Uniscribe 只會在標示為 SCRIPT_VISATTR 之 uJustification 成員的 SCRIPT_JUSTIFY_CHARACTER 值之後,才插入額外的空間。
值 | 意義 |
---|---|
|
使用字元理由。 |
|
請勿使用字元理由。 |
fInvalidGlyph
值,指出 ScriptShape 是否產生無效的字元,讓腳本代表無效的序列。 下表中定義了可能的值。 應用程式可以藉由呼叫 ScriptGetFontProperties,取得特定字型無效字元的字元索引。
值 | 意義 |
---|---|
|
產生無效的字元來表示無效的序列。 |
|
請勿產生無效的字元來表示無效的序列。 |
fInvalidLogAttr
值,指出 ScriptBreak 是否在邏輯屬性緩衝區中設定 fInvalid 來標記腳本的無效組合。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
標記文本的無效組合。 |
|
請勿標記文本的無效組合。 |
fCDM
值,指出腳本是否包含 ScriptItemize 所分析的專案,包括合併 Diacritical 標記 (U+0300 到 U+36F) 。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
文稿包含包含合併讀音符號的專案。 |
|
文本不包含包含合併讀音符號的專案。 |
fAmbiguousCharSet
值,指出文稿是否包含多個字元集所支援的字元。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
文本包含多個字元集所支援的字元。 在此情況下,應該忽略這個結構的 bCharSet 成員,而 LOGFONT 的 lfCharSet 成員應該設定為 DEFAULT_CHARSET。 如需詳細資訊,請參閱<備註>一節。 |
|
文本不包含多個字元集所支援的字元。 |
fClusterSizeVaries
值,指出文稿,例如阿拉伯文,可能會使用內容成形,使字串在移除字元期間增加大小。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
使用可變叢集大小進行內容成形。 |
|
請勿使用變數叢集大小來進行內容成形。 |
fRejectInvalid
值,指出文稿例如泰文是否應該拒絕無效的序列,這些序列通常會造成編輯器程式,例如記事本,叫用並忽略按鍵。 下表中定義了可能的值。
值 | 意義 |
---|---|
|
拒絕無效的序列。 |
|
請勿拒絕無效的序列。 |
備註
此結構是由 ScriptGetProperties 函式 填入。
許多 Uniscribe 腳本不會直接對應至 8 位字元集。 當腳本中的部分字元由多個字元集支援時, 會設定 fAmbousCharSet 成員。 應用程式應該進行進一步的處理,以判斷在要求適合執行之字型時要使用的字元集。 例如,它可能會判斷執行是由多種語言所組成,並分割回合,讓每個語言使用不同的字型。
應用程式會在初始化期間使用下列程式代碼,以取得 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 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | usp10.h |