Caret 배치 및 적중 테스트 관리

복잡한 스크립트 언어는 ScriptShape를 통해 클러스터로 나뉩니다. 문자 다시 정렬은 항상 클러스터 경계 내에서 발생합니다. 클러스터 자체는 읽기 순서의 방향으로 진행되도록 보장됩니다.

논리 클러스터 배열의 클러스터 정보는 문자 모양 클러스터의 너비를 나타내는 논리 문자 간에 동일하게 공유하는 데 사용됩니다. 예를 들어 lam alef 문자 모양은 네 개의 영역으로 나뉩니다.

  • 라메의 앞반.
  • 램의 후행 절반.
  • 알프의 선두 절반.
  • 알프의 후행 절반.

클러스터 내에서 caret 배치에 대한 규칙은 스크립트에 따라 달라집니다. 아랍어 스크립트의 경우 기본 문자와 결합 표시 사이에 캐리트 위치가 설정되면 기본 문자 중간에 캐리트가 표시됩니다. 태국어 스크립트의 경우 캐럿을 클러스터 내에 배치할 수 없습니다. 따라서 사용자가 케어를 진행할 때 애플리케이션은 클러스터를 구성하는 모든 문자 모양을 지나서 진행해야 합니다.

ScriptXtoCPScriptCPtoX 함수는 caret 위치(코드 포인트 오프셋)와 x 위치(픽셀) 간에 변환됩니다. ScriptXtoCP 함수에는 각 스크립트의 caret 위치 규칙에 대한 지식이 있습니다.

  • 인도와 태국의 경우, 캐리트 위치는 클러스터 경계에 스냅됩니다.
  • 아랍어의 경우 캐리트 위치는 클러스터와 보간됩니다.
  • 히브리어의 경우 Usp10.dll 버전 1.420 이전 버전에서는 caret 위치가 클러스터와 보간됩니다. Usp10.dll 버전 1.420부터는 캐리트 위치가 클러스터 경계에 스냅됩니다.

ScriptXtoCPScriptCPtoX는 모두 실행 내에서만 작동합니다. 함수는 다음 표와 같이 이전 Uniscribe 호출에서 특정 매개 변수를 사용해야 합니다.

매개 변수 원본
Psa ScriptItemize에서 반환된 대로.
cGlyphspwLogClust
psva
ScriptShape에서 반환된 대로 입니다.
piAdvance ScriptPlace에서 반환한 대로 입니다.

 

애플리케이션은 ScriptCPtoX 또는 ScriptXtoCP에 정보를 전달하기 전에 지정된 caret 오프셋 또는 x 위치가 있는 실행을 설정해야 합니다. 애플리케이션이 너비 정보를 저장하지 않으면 각 실행을 표시한 후 적중 테스트 및 캐럿 배치를 수행할 수 있습니다. 또는 애플리케이션은 단락의 재처리 없이 현재 줄에 적중 테스트 및 캐럿 배치를 수행할 수 있는 충분한 정보를 캐시할 수 있습니다.

ScriptXtoCP 는 애플리케이션이 사용자가 클릭한 문자 또는 클러스터의 측면을 알 수 있도록 후행 에지 값을 반환합니다. 값은 0이거나 코드 포인트의 문자 또는 클러스터 너비입니다. 반환된 문자 위치는 사용자가 클릭한 문자의 위치입니다. 자세한 내용은 양방향 문자열에 Caret 표시를 참조하세요.

사용자가 일반적으로 캐리트를 클러스터에 배치하지 않으려는 태국어와 같은 언어의 경우 ScriptXtoCP 는 후행 사이드 플래그를 0 또는 클러스터 너비로 설정합니다. 사용자가 클러스터 내에서 편집할 수 있어야 하는 아랍어와 같은 언어의 경우 ScriptXtoCP 는 후행 사이드 플래그를 0 또는 1로 설정합니다.

화살표 키를 처리할 때 애플리케이션이 caret에 대한 유효한 위치를 설정할 수 있도록 Uniscribe는 ScriptBreak에서 반환된 논리적 특성에서 fCharStop 멤버의 유효한 케어 위치에 대한 정보를 제공합니다. TRUE 는 대부분의 문자에 대해 반환되고, 태국어와 같은 스크립트의 인터클러스터 문자에 대해 FALSE 가 반환됩니다. 애플리케이션은 SCRIPT_PROPERTIES 구조에서 fNeedsCaretInfo 값을 검사 올바른 캐리트 위치에 대한 검사 ScriptBreak를 호출해야 하는지 확인해야 합니다. fNeedsCaretInfo 값이 FALSE이면 모든 코드 포인트가 유효한 캐리트 위치입니다.

Uniscribe 사용