양방향 문자열에 Caret 표시

단방향 텍스트에서는 문자의 선행 가장자리가 이전 문자의 후행 가장자리와 같은 위치에 있기 때문에 캐리트 위치가 모호하지 않습니다. 그러나 양방향 텍스트에서 반대 방향의 실행 사이의 캐리트 위치는 모호합니다. 예를 들어 왼쪽에서 오른쪽 단락 "hellosalaam"에서 "hello"의 마지막 문자는 "salaam"의 첫 글자 바로 앞에 섰습니다. 캐리트를 표시하는 가장 좋은 위치는 "hello"의 "o"를 따르는 것으로 간주되는지 또는 "salaam"의 "s"앞에 오는 것으로 간주되는지에 따라 달라집니다.

Uniscribe는 다음 표에 표시된 캐리트 위치 지정 규칙을 사용합니다.

상황 시각적 개체 관리 배치
Typing 입력한 마지막 문자의 후행 가장자리입니다.
붙여넣기 붙여넣은 마지막 문자의 후행 가장자리입니다.
Caret 진행 마지막 문자의 후행 가장자리가 전달되었습니다.
Caret 사용 중지 마지막 문자의 선행 가장자리가 전달되었습니다.
선의 선행 가장자리입니다.
선의 후행 가장자리입니다.

 

캐럿은 다음 예제와 같이 배치할 수 있습니다.

if (fAdvancing) {
    ScriptCPtoX(
        iCharPos - 1, TRUE, 
        cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
        );
} else {
    ScriptCPtoX(
        iCharPos, FALSE, 
        cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
        );
}

FAdvancing 값이 TRUE 또는 FALSE로 제한된 경우 아래와 같이 캐럿의 위치 지정이 더 간단할 수 있습니다.

ScriptCPtoX(
    iCharPos - fAdvancing, fAdvancing, 
    cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
    );

ScriptCPtoX 는 범위를 벗어난 위치를 논리적으로 처리합니다. iCharPos0에 대한 실행의 선행 가장자리와 iCharPos<= 길이에 대한 실행의 후행 가장자리를 반환합니다>. 자세한 내용은 Caret 배치 및 적중 테스트 관리를 참조하세요.

Uniscribe 사용