다음을 통해 공유


양방향 문자열에서 캐럿 표시

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

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

상황 시각적 캐럿 위치 설정
입력 입력한 마지막 문자의 후행 가장자리입니다.
붙여넣기 붙여넣은 마지막 문자의 후행 가장자리입니다.
캐리트 진행 마지막 문자의 후행 가장자리가 전달되었습니다.
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 범위를 벗어난 위치를 논리적으로 처리합니다. iCharPos<0에 대한 실행의 선행 가장자리와 iCharPos>= 길이에 대한 실행의 후행 가장자리를 반환합니다. 자세한 내용은 캐럿 배치 및 적중 테스트 관리를 참조하세요.

유니스크립트 사용