다음을 통해 공유


텍스트 단위 UI 자동화

이 항목에서는 Microsoft UI 자동화 TextRange 컨트롤 패턴에서 지원하는 텍스트 단위에 대해 설명합니다. UI 자동화 공급자와 클라이언트는 텍스트 단위를 사용하여 텍스트 범위의 크기를 이동하거나 변경할 크기를 지정합니다.

텍스트 단위 API 요소

UI 자동화 API에는 텍스트 단위를 지정해야 하는 다음 메서드가 포함되어 있습니다.

TextUnit 열거형은 UI 자동화 텍스트 범위에서 지원하는 텍스트 단위를 정의합니다. 텍스트 단위를 지정하기 위해 ITextRangeProvider 또는 IUIAutomationTextRange 메서드를 호출할 때 TextUnit 열거형의 멤버가 지정됩니다. 텍스트 단위는 가장 작은 단위에서 가장 큰 단위로 다음과 같습니다.

특정 텍스트 기반 컨트롤이 지정된 텍스트 단위를 지원하지 않는 경우 공급자는 컨트롤에서 지원하는 다음 큰 텍스트 단위를 대체하여 응답해야 합니다. 예를 들어 TextUnit_Paragraph 지정되었지만 지원되지 않는 경우 메서드는 TextUnit_Page 또는 TextUnit_Document 대체할 수 있습니다.

원본 텍스트의 언어적 특성으로 인해 공급자가 지정된 텍스트 단위를 기반으로 텍스트 경계를 결정하기 어려울 수 있습니다. 텍스트 경계를 결정하는 데 도움이 되도록 공급자는 ScriptBreak와 같은 Uniscribe API 함수를 사용할 수 있습니다. 자세한 내용은 Uniscribe을 참조하세요.

엔드포인트 포용성

텍스트 단위 엔드포인트는 동일한 형식의 인접한 텍스트 범위에 대한 시작 엔드포인트 및 엔드 포인트로 사용될 수 있습니다. 한 텍스트 단위의 끝도 다른 텍스트 단위의 시작인 경우 엔드포인트가 포함된 범위는 시작 엔드포인트를 포함하는 인접 범위의 특성이나 개체를 공유하지 않습니다.

예를 들어 텍스트 스트림 "Hello world"에는 글꼴 두께 특성이 서로 다른 두 단어 단위(일반 및 굵게)가 포함됩니다. 이 경우 단어 단위 "Hello"의 엔드포인트와 단어 단위 "world"의 시작 엔드포인트가 같으므로 다음이 발생합니다.

  • "Hello" 범위는 단어 단위 "world"의 굵은 특성을 공유하지 않으며 글꼴 두께 텍스트 특성에 대한 혼합 특성 값을 반환하지 않습니다.
  • "world" 범위는 단일 글꼴 두께(굵게)를 하며 이전 단어 단위 "Hello"의 글꼴 두께를 공유하지 않습니다.

다음은 텍스트 스트림에 두 개의 단어 단위가 포함된 또 다른 예입니다. 그 중 하나는 링크 [Foo]() Bar입니다. 이 경우 단어 단위의 엔드포인트와 단어 단위 [Foo]() "Bar"의 시작 엔드포인트가 동일하므로 다음과 같습니다.

  • 링크는 "Foo"를 포함하는 텍스트 범위에 속합니다.
  • 링크는 텍스트 범위 "Foo"의 자식이며 ITextProvider로 묶입니다.
  • 텍스트 범위 "Bar"에는 자식이 없으며 ITextProvider묶입니다.

추가 참고 사항:

동일한 형식의 텍스트 범위가 있는 텍스트 단위 경계의 퇴행성(빈) 범위는 바로 인접한 텍스트 단위의 속성을 가정합니다.

동일한 형식의 텍스트 범위가 있는 텍스트 단위 경계의 퇴행성 범위에서 IUIAutomationTextRange::ExpandToEnclosingUnit을 호출하면 퇴화 범위가 다음 텍스트 단위로 확장됩니다.

텍스트 단위 설명

이 섹션에서는 UI 자동화 지원하는 각 텍스트 단위에 대해 설명합니다.

캐릭터

TextUnit_Character 단일 문자를 나타내는 텍스트의 언어 단위입니다. 문자의 언어 정의는 언어에 따라 다릅니다. 미국 영어의 경우 문자는 일반적으로 문장 부호, 숫자 또는 문자와 같은 공백이나 다른 문자로 테두리가 지정됩니다.

캐리지 리턴 및 유니코드 LTM(왼쪽에서 오른쪽 표시)과 같은 컨트롤 문자는 문자로 간주해서는 안 되지만 문자 텍스트 단위에 따라 정규화된 텍스트 범위에 포함될 수 있습니다.

문장 부호 및 공백과 같은 단어 나누기 문자를 문자로 간주해야 합니다.

형식

TextUnit_Format 텍스트의 서식 특성에 따라 텍스트 범위의 경계를 배치하는 데 사용됩니다. 예를 들어 텍스트 범위가 현재 단어의 단일 문자에 배치되어 있는 경우 IUIAutomationTextRange::ExpandToEnclosingUnit 호출에서 TextUnit_Format 지정하면 텍스트 범위가 확장되어 단일 문자와 동일한 특성을 모두 공유하는 모든 텍스트가 포함됩니다. 결과 텍스트 범위는 전체 단어를 포함하거나 포함하지 않을 수 있습니다. 또한 서식 텍스트 단위를 사용하면 이미지 또는 하이퍼링크와 같은 포함된 개체의 경계를 넘어 텍스트 범위가 확장되지 않습니다.

자신보다 작은 텍스트 단위를 포함하는 다른 텍스트 단위와 달리 TextUnit_Format 다른 단위보다 작거나 클 수 있습니다. 예를 들어 전체 문서가 동일한 텍스트 특성을 공유하고 포함된 개체가 없는 경우 텍스트 범위를 TextUnit_Format 확장하면 전체 문서를 포함하는 새 범위가 생성되고 텍스트 범위를 TextUnit_Word 확장하면 더 작은 범위가 만들어집니다.

Word

TextUnit_Word 하나의 전체 단어를 나타내는 텍스트의 언어 단위입니다. 단어의 언어 정의는 언어에 따라 다릅니다. 미국 영어의 경우 단어는 일반적으로 공백 또는 문장 부호 문자로 구분됩니다.

TextUnit_Word 사용하여 텍스트 범위의 경계를 설정하는 경우 결과 텍스트 범위에는 단어 끝에 있지만 다음 단어가 시작되기 전에 있는 단어 나누기 문자가 포함되어야 합니다.

TextUnit_Line 컨트롤의 뷰포트에 표시된 텍스트의 한 줄을 나타내는 텍스트 단위입니다. TextUnit_Line 사용하여 텍스트 범위의 경계를 설정하는 경우 공급자는 컨트롤 문자가 선을 끊거나 컨트롤의 뷰포트가 텍스트를 새 줄로 래핑하는 지점 바로 뒤의 경계를 설정해야 합니다. 경계는 새 줄이 시작되는 위치를 설정해야 합니다.

단락

TextUnit_Paragraph 전체 단락을 나타내는 텍스트의 언어 단위입니다. 단락은 단락의 첫 번째 문자 바로 앞에서 시작해야 하며 일반적으로 마지막 문자 바로 뒤에 끝나야 합니다. 텍스트 원본에 있는 항목이 달리 표시되지 않는 한 단락 뒤의 빈 줄은 단락에 병합되어야 합니다. 일반적으로 단락의 끝 경계는 TextUnit_Line 텍스트 단위의 끝 경계도 표시합니다.

페이지

TextUnit_Page 문서의 전체 텍스트 페이지를 나타냅니다. 페이지의 경계는 페이지가 시작되고 끝나는 바로 앞에 설정해야 합니다.

Document

TextUnit_Document 텍스트 컨트롤 패턴에서 지원하는 문서의 전체 내용을 나타냅니다. 문서가 포함된 텍스트 범위 외부에는 텍스트가 없어야 합니다. 페이지 경계를 넘어가는 주석 메모와 같이 문서에 삽입되는 모든 개체는 문서의 텍스트 내용에 속하지 않고 문서의 포함된 개체로 처리되어야 합니다.

기타 잠재적 범위

현재 TextRange 컨트롤 패턴 사양에서는 TextUnit 열거형에 새 텍스트 단위 값을 추가할 수 없으며 기존 텍스트 단위 값을 다시 정의할 수도 없습니다. 헤더 및 주석과 같은 다른 잠재적 범위를 노출하려면 공급자가 이러한 범위를 연결된 텍스트 범위가 있는 포함된 개체로 노출해야 합니다. 이렇게 하면 적절한 컨트롤 패턴에 대한 지원을 추가할 수도 있습니다. 이 솔루션은 새 텍스트 단위를 정의하는 것보다 더 유연하고 확장할 수 있습니다.

참조

TextPatternRangeEndpoint

ITextRangeProvider::GetChildren

개념

텍스트 콘텐츠에 대한 UI 자동화 지원

텍스트 기반 컨트롤 작업