TOM(텍스트 개체 모델)은 다양한 편집 컨트롤을 포함하여 여러 Microsoft 텍스트 솔루션에서 다양한 각도로 지원되는 텍스트 조작 인터페이스 집합을 정의합니다. 이 항목에서는 TOM에 대한 개략적인 개요를 제공합니다. 다음 항목에 대해 설명합니다.
TOM 버전 2 오브젝트
TOM 버전 2(TOM 2)는 원래 텍스트 개체 모델을 확장합니다. 새 인터페이스는 이전 인터페이스에서 파생됩니다. 업데이트된 TOM API에는 새 문자 및 단락 서식 속성, 테이블 모델, 여러 선택 영역 및 수학 및 루비에 대한 인라인 개체 지원이 포함됩니다.
최상위 TOM 2 개체는 개체 계층 구조의 하위 개체를 만들고 검색하는 메서드가 있는 ITextDocument2 인터페이스에 의해 정의됩니다. 간단한 일반 텍스트 처리를 위해 ITextDocument2 개체에서 ITextRange2 개체를 가져와서 대부분의 작업을 수행할 수 있습니다. 서식 있는 텍스트 서식을 추가해야 하는 경우, ITextRange2 개체에서 ITextFont2 및 ITextPara2 개체를 가져올 수 있습니다. ITextFont2 Microsoft Word 서식 글꼴 대화 상자에 해당하는 프로그래밍을 제공하며, ITextPara2 Word 서식 단락 대화 상자와 동일합니다.
이러한 세 개의 하위 수준 개체 외에도 TOM 2에는 선택 영역이 강조 표시되고 일부 UI 지향 메서드가 있는 ITextRange2 개체인 선택 개체(iTextSelection2)가 있습니다.
범위 및 선택 객체에는 프로그램이 화면에서 직접 텍스트를 검사하거나 화면으로 스크롤할 수 있는 텍스트를 검사할 수 있게 하는 화면 지향 메서드가 포함되어 있습니다. 이러한 기능은 예를 들어 시각 장애가 있는 사용자가 텍스트에 액세스할 수 있도록 하는 데 도움이 됩니다.
접미사가 2개인 각 인터페이스는 2개의 접미사가 없는 해당 인터페이스에서 상속됩니다. 예를 들어 ITextDocument2는 ITextDocument에서 상속합니다.
TOM 2 개체에는 다음과 같은 계층 구조가 있습니다.
ITextDocument2 Top-level editing object
ITextRange2 Primary text interface: a range of text
ITextFont2 Character-attribute interface
ITextPara2 Paragraph-attribute interface
ITextRow Table interface
ITextSelection2 Screen highlighted text range
ITextRange2 Selection inherits all range methods
ITextDisplays Displays collection (not yet defined)
ITextStrings Rich-text strings collection
ITextStoryRanges2 Enumerator for stories in document
ITextDocument2 개체는 스토리라는 하나 이상의 연속된 텍스트 범위를 설명합니다. 스토리는 문서의 기본 텍스트, 머리글 및 바닥글, 각주, 주석 및 서식 있는 텍스트 스크래치 패드와 같은 문서의 다양한 부분을 나타냅니다. 선형 형식의 수학 식과 기본 제공 형식 간에 변환할 때 스크래치 패드 스토리가 사용됩니다. 스크래치 패드 스토리는 콘텐츠를 변경하려고 할 때 현재 복사 원본인 범위의 콘텐츠를 저장할 때도 사용됩니다.
ITextRange2 개체는 시작 및 끝 문자 위치 오프셋 및 스토리 개체에 의해 정의됩니다. 텍스트는 클립보드 또는 다른 대상에 복사할 수 있지만 부모 스토리 개체와 독립적으로 존재하지 않습니다. 텍스트 범위 개체는 다른 종류의 오프셋으로 정의된 스프레드시트 및 기타 범위 개체와 다릅니다. 예를 들어 행/열 또는 그래픽 위치(x, y)입니다. 텍스트 범위 개체는 다양한 방법으로 자신을 수정하고, 자체의 중복을 반환할 수 있으며, 시작 및 끝 문자 위치와 현재 선택 영역에 대한 텍스트 포인터를 복사하도록 명령할 수 있습니다.
지정된 스토리를 나타내기 위해 ITextRange 개체를 항상 만들 수 있으므로 명시적 스토리 개체가 필요하지 않습니다. 특히 ITextDocument 개체는 완전한 스토리(예: 0 및 tomForward)를 설명하는 시작 및 끝 문자 위치 값으로 문서의 스토리를 열거하는 ITextStoryRanges 개체를 만들 수 있습니다.
ITextStoryRanges2 개체에서는 각 스토리가 ITextRange2 개체에 의해 설명되므로 명시적 스토리 개체가 필요하지 않습니다. 특히 ITextDocument2 개체는 문서의 스토리를 시작 및 끝 문자 위치 값을 기준으로 정렬하여 열거할 수 있는 ITextStoryRanges2 개체를 생성할 수 있습니다. 이는 완전한 스토리를 설명하며, 예를 들어, 0 및 tomForward등의 값을 사용할 수 있습니다.
ITextRow 인터페이스와 ITextRange::Move 및 ITextRange::Expand 메서드는 테이블을 삽입, 쿼리 및 변경하는 기능을 제공합니다.
TOM 인터페이스 규칙
모든 TOM 메서드는 HRESULT 값을 반환합니다. 일반적으로 TOM 메서드는 다음 표준 값을 반환합니다.
- E_OUTOFMEMORY (메모리 부족 오류)
- E_INVALIDARG (잘못된 인수 오류)
- E_NOTIMPL
- E_FILENOTFOUND (파일을 찾을 수 없음)
- E_ACCESSDENIED (접근이 거부되었습니다)
- E_FAIL
- CO_E_RELEASED
- NOERROR(S_OK 동일)
- S_FALSE
ITextRange 같은 TOM 개체와 연결된 편집 인스턴스가 삭제되면 TOM 개체는 쓸모가 없으며 모든 메서드가 CO_E_RELEASED 반환됩니다.
HRESULT 반환 값 외에도 많은 메서드에는 값을 반환하는 데 사용되는 포인터인 out 매개 변수가 포함됩니다. 모든 인터페이스에서 포인터 매개 변수가 0이 아닌지 확인한 후에 사용해야 합니다. 유효한 포인터가 필요한 메서드에 null 값을 전달하면 메서드는 E_INVALIDARG 반환합니다. null 값이 있는 선택적 out 포인터는 무시됩니다.
속성을 가져오고 설정하려면 Get 및 Set 접두사가 있는 메서드를 사용하세요. 부울 변수는 tomFalse(0)을 FALSE의 값으로 사용하고, tomTrue(-1)를 TRUE의 값으로 사용합니다.
TOM 상수는 tomConstants 열거형 형식으로 정의되며 tom접두사(예: tomWord )로 시작합니다.
tomBool 형식
많은 TOM 메서드는 이진 상태가 있는 서식 있는 텍스트 특성에 대해 "tomBool"이라는 특수 형식의 변수를 사용합니다. tomBool 형식은 tomTrue, tomFalse, tomToggle및 tomUndefined4개의 값을 사용할 수 있으므로 부울 형식과 다릅니다. tomTrue 및 tomFalse 값은 true 및 false를 나타냅니다. tomToggle 값은 속성을 토글하는 데 사용됩니다. tomUndefined 값은 전통적으로 NINCH라고 불리며, long, float 및 COLORREF와 함께 작동하는 입력 없음, 변경 없음의 특별한 값입니다. 문자열의 경우 tomUndefined(또는 NINCH)는 null 문자열로 표시됩니다. 속성 설정 작업의 경우 tomUndefined 사용하면 대상 속성이 변경되지 않습니다. 속성 가져오기 작업의 경우 tomUndefined 범위의 문자 값이 다르다는 것을 의미합니다(속성 대화 상자에서 회색 확인란 제공).
수학 구축 및 축소
ITextRange2::BuildUpMath 메서드를 사용하여 선형 형식의 수학 식을 기본 제공 버전으로 변환할 수 있습니다. ITextRange2::Linearize 메서드는 선형화 또는 빌드 다운이라는 반대 변환을 수행하여 기본 제공 버전의 수학 식을 다시 선형 형식으로 변환합니다. 수학 빌드 다운 기능은 일반 텍스트를 내보내거나 특정 유형의 편집을 사용하도록 설정해야 하는 경우에 유용합니다.
TOM RTF
TOM에서 서식 있는 텍스트 교환은 명시적 메서드 호출 집합 또는 RTF(서식 있는 텍스트 형식)로 서식 있는 텍스트를 전송하여 수행할 수 있습니다. 이 섹션에서는 단락 속성 및 문자 속성에 대한 RTF 컨트롤 단어의 테이블을 제공합니다.
TOM RTF 단락 제어어
| 제어 단어 | 의미 |
|---|---|
| \ fi n | 첫 줄 들여쓰기(기본값은 0)입니다. |
| \유지 | 단락을 그대로 유지합니다. |
| 유지 | 다음 단락을 유지합니다. |
| \ li n | 왼쪽 들여쓰기(기본값 0). |
| \ noline | 줄 번호 매기기 없음 |
| \ nowidctlpar | 미망인/고아 제어를 끕니다. |
| \ pagebb | 단락 앞에 페이지 나누기. |
| \ par | 새 단락. |
| \ pard | 기본 단락 속성으로 다시 설정합니다. |
| \ ql | 왼쪽 맞춤(기본값). |
| \ qr | 오른쪽 맞춤. |
| \ qj | 정당화된. |
| \ qc | 중앙에 맞추어진. |
| \ ri n | 오른쪽 들여쓰기(기본값은 0). |
| \ s n | 스타일 n. |
| \ sa n | 간격(기본값은 0입니다). |
| \ sb n | 앞에 공백(기본값은 0)입니다. |
| \ sl n | 누락되거나 n=1000인 경우 줄 간격은 줄에서 가장 높은 문자(한 줄 간격)에 따라 결정됩니다. n> 0이면 적어도 이 크기가 사용됩니다. n< 0이면 정확히 |n| 가 사용됩니다. \ slmult 1이 뒤에 오면 줄 간격은 여러 줄 간격입니다. |
| \ slmult m | \ sl. m = 0: \ sl n에서 설명한 최소 또는 정확한 줄 간격과 같습니다. m = 1: 줄 간격은 n/240으로 한 줄 간격의 배수입니다. |
| \ tb n | 왼쪽 여백에서의 탭 위치, 트윕 단위입니다. |
| \ tldot | 탭 지시선 점 |
| \ tleq | 탭 지시선은 등호입니다. |
| \ tlhyph | 탭 지시선 하이픈 |
| \ tlth | 탭 리더의 굵은 선입니다. |
| \ tlul | 탭 지시선 밑줄입니다. |
| \ tqc | 가운데 맞춤 탭 |
| \ tqdec | 10진수 탭 |
| \ tqr | 오른쪽 플러시 탭 |
| \ tx n | 탭 위치는 왼쪽 여백에서 twips 단위로 측정됩니다. |
TOM RTF 문자 형식 컨트롤 단어
| 제어 단어 | 의미 |
|---|---|
| \ 애니메이션 n | 애니메이션 형식을 n 설정합니다. |
| \ b | 대담한. |
| \모자 | 모든 대문자. |
| \ cf n | 전경색(기본값은 tomAutocolor )입니다. |
| \ cs n | 문자 스타일 n. |
| \ dn n | 하위 첨자의 위치는 반 포인트 단위로 측정되며, 기본값은 6입니다. |
| \ embo | 양각. |
| \ f n | 글꼴 번호, n 글꼴 테이블의 항목을 참조합니다. |
| \ fs n | 글꼴 크기(기본값은 24 반포인트). |
| \ n 강조 표시 | 배경색(기본값은 tomAutocolor )입니다. |
| \ i | 이탤릭체. |
| \ impr | 인쇄물. |
| \ lang n | 문자에 언어를 적용합니다. n 언어에 해당하는 숫자입니다. \ 일반 컨트롤 단어는 문서 속성에서 \deflang n 정의한 언어로 언어 속성을 다시 설정합니다. |
| \ nosupersub | 위 첨자 또는 아래 첨자를 해제합니다. |
| \ outl | 개요. |
| 간단한 | 문자 서식 속성을 애플리케이션에서 정의한 기본값으로 다시 설정합니다. RTF 사양의 연결된 문자 속성 섹션에 설명된 연결된 문자 서식 속성도 다시 설정됩니다. |
| \ scaps | 작은 수도. |
| \ 숭어 | 그림자. |
| \파업 | 취소선입니다. |
| \하위 | 텍스트에 아래 첨자를 적용하고 글꼴 정보에 따라 점 크기를 줄입니다. |
| \슈퍼 | 텍스트에 위 첨자를 적용하고 글꼴 정보에 따라 점 크기를 줄입니다. |
| \ ul | 연속 밑줄입니다. \ ul0은 모든 밑줄을 끕니다. |
| \ uld | 점선 밑줄 |
| \ uldb | 이중 밑줄 |
| \ ulnone | 모든 밑줄을 중지합니다. |
| \ ulw | 단어 밑줄 |
| \ up n | 반 포인트 단위로 위 첨자 위치(기본값은 6). |
| \ v | 숨겨진 텍스트입니다. |
서식 있는 텍스트 찾기
TOM 메서드를 사용하여 텍스트 범위에 정의된 서식 있는 텍스트를 찾을 수 있습니다. "당신이 보는 것은 당신이 얻는 것입니다"(WYSIWYG) 워드 프로세서에서 처리되지 않았지만, 이러한 풍부한 텍스트를 정확하게 찾는 것은 종종 워드 프로세싱에 필요합니다. 일부 문자 서식 속성을 무시(또는 단락 서식 및/또는 개체 콘텐츠 포함)할 수 있는 서식 있는 텍스트 일치의 더 큰 도메인이 분명히 있지만 이러한 일반화는 이 섹션의 범위를 벗어냅니다.
이 기능의 한 가지 목적은 서식 있는 텍스트 찾기 대화 상자를 사용하여 문서에서 찾을 서식 있는 텍스트를 정의하는 것입니다. 대화 상자는 풍부한 편집 컨트롤을 사용하여 구현되고 TOM 메서드는 문서를 통해 검색을 수행하는 데 사용됩니다. 문서에서 원하는 서식 있는 텍스트를 찾기 대화 상자에 복사하거나 찾기 대화 상자에 직접 입력하여 서식을 지정할 수 있습니다.
다음 예제에서는 TOM 메서드를 사용하여 정확한 문자 서식의 조합이 포함된 텍스트를 찾는 방법을 보여 줍니다. 알고리즘은 일치 범위에서 pr1명명된 일반 텍스트를 검색합니다. 일반 텍스트가 발견되면, pr2라는 이름의 임시 범위가 이를 가리킵니다. 그런 다음 두 개의 삽입 지점 범위(prip1 및 prip2)를 사용하여 비교 범위의 문자 서식을 pr1의 서식과 비교해 나갑니다. 정확히 일치하면 입력 범위(ppr제공)가 평가판 범위의 텍스트를 가리키도록 업데이트되고 함수는 일치하는 범위의 문자 수를 반환합니다. 두 ITextFont 개체인 pf1 및 pf2문자 서식 비교에 사용됩니다. 그들은 삽입 지점 범위 prip1 및 prip2에 연결됩니다.
LONG FindRichText (
ITextRange **ppr, // Ptr to range to search
ITextRange *pr1) // Range with rich text to find
{
BSTR bstr; // pr1 plain-text to search for
LONG cch; // Text string count
LONG cch1, cch2; // tomCharFormat run char counts
LONG cchMatch = 0; // Nothing matched yet
LONG cp; // Handy char position
LONG cpFirst1; // pr1 cpFirst
LONG cpFirst2; // pr2 cpFirst
ITextFont * pf1, *pf // Fonts corresponding to IPs prip1 and prip2
ITextRange *pr2; // Range duplicate to search with
ITextRange *prip1, *prip // Insertion points to walk pr1, pr2
if (!ppr || !*ppr || !pr1)
return E_INVALIDARG;
// Initialize range and font objects used in search
if ((*ppr)->GetDuplicate(&pr2) != NOERROR ||
pr1->GetDuplicate(&prip1) != NOERROR ||
pr2->GetDuplicate(&prip2) != NOERROR ||
prip1->GetFont(&pf1) != NOERROR ||
prip2->GetFont(&pf2) != NOERROR ||
pr1->GetText(&bstr) != NOERROR )
{
return E_OUTOFMEMORY;
}
pr1->GetStart(&cpFirst1);
// Keep searching till rich text is matched or no more plain-text hits
while(!cchMatch && pr2->FindText(bstr, tomForward, 0, &cch) == NOERROR)
{
pr2->GetStart(&cpFirst2); // pr2 is a new trial range
prip1->SetRange(cpFirst1, cpFirst1); // Set up IPs to scan match
prip2->SetRange(cpFirst2, cpFirst2); // and trial ranges
while(cch > 0 &&
pf1->IsEqual(pf2, NULL) == NOERROR) // Walk match & trial ranges
{ // together comparing font
prip1->GetStart(&cch1); // properties
prip1->Move(tomCharFormat, 1, NULL);
prip1->GetStart(&cp);
cch1 = cp - cch1; // cch of next match font run
prip2->GetStart(&cch2);
prip2->Move(tomCharFormat, 1, NULL);
prip2->GetStart(&cp);
cch2 = cp - cch2; // cch of next trial font run
if(cch1 < cch) // There is more to compare
{
if(cch1 != cch2) // Different run lengths:
break; // no formatting match
cch = cch - cch1; // Matched format run
}
else if(cch2 < cch) // Trial range format run too
break; // short
else // Both match and trial runs
{ // reach at least to match
pr2->GetEnd(&cp); // text end: rich-text match
(*ppr)->SetRange(cpFirst2, cp) // Set input range to hit
cchMatch = cp - cpFirst2; // coordinates and return
break; // length of matched string
}
}
}
pr2->Release();
prip1->Release();
prip2->Release();
pf1->Release();
pf2->Release();
SysFreeString(bstr);
return cchMatch;
}
TOM 접근성
TOM은 ITextSelection 및 ITextRange 인터페이스를 통해 접근성 지원을 제공합니다. 이 섹션에서는 접근성에 유용한 방법과 프로그램에서 개체의 x, y 화면 위치를 결정하는 방법에 대해 설명합니다.
UI 기반 접근성 프로그램은 일반적으로 화면 및 마우스에서 작동하므로 일반적인 관심사는 현재 마우스 위치(화면 좌표)에 해당하는 ITextDocument 인터페이스를 찾는 것입니다. 다음 섹션에서는 적절한 인터페이스를 결정하는 두 가지 방법을 제공합니다.
- 실행 중인 개체 테이블을 통해
- 같은 프로세스 공간 내에 클라이언트가 있는 경우 창이 있는 서식 있는 편집 인스턴스에 대해 작동하는 EM_GETOLEINTERFACE 메시지를 통해 (마샬링 필요하지 않음)
자세한 내용은 Microsoft Active Accessibility 사양을 참조하세요. 화면 위치에서 개체를 가져온 후 ITextDocument 인터페이스에 사용하고 RangeFromPoint 메서드를 호출하여 화면 위치에 해당하는 cp에서 빈 범위 개체를 가져올 수 있습니다.
개체 테이블 실행의 인터페이스
ROT(실행 중인 개체 테이블)는 활성 상태인 개체 인스턴스를 알려줍니다. 이 테이블을 쿼리하면 개체가 이미 실행 중일 때 클라이언트를 개체에 연결하는 프로세스를 가속화할 수 있습니다. 프로그램이 실행 중인 개체 테이블을 통해 TOM 인터페이스에 액세스하려면 창이 있는 TOM 인스턴스가 모니커를 사용하여 ROT에 등록해야 합니다. 문자열 HWND에 포함된 16진수 값에서 모니커를 생성합니다. 다음 코드 샘플에서는 이 작업을 수행하는 방법을 보여줍니다.
// This TOM implementation code is executed when a new windowed
// instance starts up.
// Variables with leading underscores are members of this class.
HRESULT hr;
OLECHAR szBuf[10]; // Place to put moniker
MONIKER *pmk;
hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);
if (FAILED(hr))
{
//
// TODO: write error handler
//
}
CreateFileMoniker(szBuf, &pmk);
OleStdRegisterAsRunning(this, pmk, &_dwROTcookie);
....................
// Accessibility Client:
// Find hwnd for window pointed to by mouse cursor.
GetCursorPos(&pt);
hwnd = WindowFromPoint(pt);
// Look in ROT (running object table) for an object attached to hwnd
hr = StringCchPrintf(szBuff, 10, "%x", hwnd);
if (FAILED(hr))
{
//
// TODO: write error handler
//
}
CreateFileMoniker(szBuf, &pmk);
CreateBindContext(0, &pbc);
pmk->BindToObject(pbc, NULL, IID_ITextDocument, &pDoc);
pbc->Release();
if( pDoc )
{
pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
// ...now do whatever with the range pRange
}
창 메시지의 인터페이스
EM_GETOLEINTERFACE 메시지는 지정된 화면 위치에 있는 개체에 대한 IUnknown 인터페이스를 가져오는 또 다른 방법을 제공합니다. 실행 개체 테이블 의인터페이스에 설명된 대로, 화면 위치를 위한 HWND을 가져와 이 메시지를 해당 HWND에 보냅니다. EM_GETOLEINTERFACE 메시지는 서식 있는 편집기에서 사용되는 전용 메시지로, lParam주소를 가진 변수의 IRichEditOle 인터페이스에 대한 포인터를 반환합니다.
팁 포인터가 반환되는 경우(메시지를 보내기 전에 lParam이 null을 가리키는 개체를 설정해야 합니다) IUnknown::QueryInterface 메서드를 호출하여 ITextDocument 인터페이스를 가져올 수 있습니다. 다음 코드 샘플에서는 이 방법을 보여 줍니다.
HWND hwnd;
ITextDocument *pDoc;
ITextRange *pRange;
POINT pt;
IUnknown *pUnk = NULL;
GetCursorPos(&pt);
hwnd = WindowFromPoint(pt);
SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk);
if(pUnk &&
pUnk->QueryInterface(IID_ITextDocument, &pDoc) == NOERROR)
{
pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
// ... continue with rest of program
}
접근성 지향 메서드
일부 TOM 메서드는 화면 주위를 탐색하는 데 특히 유용하며, 다른 TOM 메서드는 관심 있는 장소에 도착할 때 수행할 수 있는 작업을 향상시킵니다. 다음 표에서는 가장 유용한 메서드를 설명합니다.
| 메서드 | 접근성을 높이는 방법 |
|---|---|
| GetSelection | 이 메서드는 텍스트 강조 표시 및 스크롤과 같은 다양한 보기 지향 용도로 사용할 수 있는 활성 선택을 가져옵니다. |
| RangeFromPoint | 활성 선택 영역에서 사용하는 경우 이 메서드는 특정 뷰와 연결된 범위를 가져옵니다. |
| 확장 | 텍스트 범위를 확대하여 포함된 부분 단위가 완전하게 포함되도록 합니다. 예를 들어 Expand(tomWindow) 범위 영역의 표시 부분을 포함하도록 범위를 확장합니다. |
| GetDuplicate | 활성 선택 영역에서 사용하는 경우 이 메서드는 특정 뷰와 연결된 범위를 가져옵니다. RangeFromPoint대한 설명을 참조하세요. |
| GetPoint | 텍스트 범위의 시작 또는 끝 문자 위치에 대한 화면 좌표를 가져옵니다. |
| scrollIntoView | 텍스트 범위를 보기로 스크롤합니다. |
| SetPoint | 지정된 지점까지의 텍스트를 선택합니다. |
문자 일치 집합
다양한 Move* 메서드의 변형 매개 변수는 MoveWhile 와 MoveUntil같은 ITextRange에서 명시적 문자열이나 문자 일치 집합 32비트 인덱스를 받을 수 있습니다. 인덱스는 유니코드 범위 또는 GetStringTypeEx 문자 집합으로 정의됩니다. n 및 길이 l(< 32768)부터 시작하는 유니코드 범위는 인덱스 n +(l << 16) + 0x80000000 지정됩니다. 예를 들어 기본 그리스어 문자는 CR_Greek = 0x805f0370 정의되고 인쇄 가능한 ASCII 문자는 CR_ASCIIPrint = 0x805e0020 정의됩니다. 또한 MoveWhile 및 MoveUntil 메서드를 사용하면 모든 GetStringTypeEx 문자 집합 또는 이러한 문자 집합 중 하나에 없는 문자 범위에서 문자 범위를 빠르게 바이패스할 수 있습니다.
GetStringTypeEx 집합은 Ctype1, Ctype2및 Ctype3값으로 지정되며 다음과 같이 정의됩니다.
| Cset | 의미 |
|---|---|
| Ctype1 | CT_CTYPE1 형식의 조합입니다. |
| Ctype2 + tomCType2 | 모든 CT_CTYPE2 형식입니다. |
| Ctype3 + tomCType3 | CT_CTYPE3 형식의 조합입니다. |
특히 Ctype1 다음의 조합일 수 있습니다.
| Ctype1 이름 | 값 | 의미 |
|---|---|---|
| C1_UPPER | 0x0001 | 대문자. |
| C1_LOWER | 0x0002 | 소문자. |
| C1_DIGIT | 0x0004 | 십진수. |
| C1_공간 | 0x0008 | 공백 문자 |
| C1_PUNCT | 0x0010 | 문장 부호. |
| C1_CNTRL | 0x0020 | 컨트롤 문자입니다. |
| C1_BLANK | 0x0040 | 빈 문자입니다. |
| C1_XDIGIT | 0x0080 | 16진수입니다. |
| C1_ALPHA | 0x0100 | 모든 언어 문자(알파벳, 음절문자 또는 표의문자). |
| C1_정의됨 | 0x0200 | 정의된 문자이지만 다른 C1_* 형식 중 하나가 아닙니다. |
Ctype2 형식은 유니코드 텍스트의 적절한 레이아웃을 지원합니다. 방향 특성은 유니코드로 표준화된 양방향 레이아웃 알고리즘이 정확한 결과를 생성하도록 할당됩니다. 이러한 형식은 상호 배타적입니다. 이러한 특성의 사용에 대한 자세한 내용은 유니코드 표준: 전 세계 문자 인코딩, 볼륨 1 및 2, Addison-Wesley 게시 회사: 1991, 1992를 참조하세요.
| CType2 이름 | 값 | 의미 |
|---|---|---|
| 강하다: | ||
| C2_왼쪽에서 오른쪽으로 | 0x1 | 왼쪽에서 오른쪽으로. |
| C2_오른쪽에서 왼쪽으로 | 0x2 | 오른쪽에서 왼쪽으로. |
| 약한: | ||
| C2_EUROPENUMBER | 0x3 | 유럽 숫자, 유럽 자릿수. |
| C2_EUROPESEPARATOR | 0x4 | 유럽 숫자 구분 기호입니다. |
| C2_EUROPETERMINATOR | 0x5 | 유럽 숫자 구분 기호. |
| C2_ARABICNUMBER | 0x6 | 아랍어 번호입니다. |
| C2_COMMONSEPARATOR | 0x7 | 일반 숫자 구분 기호입니다. |
| 중립의: | ||
| C2_BLOCKSEPARATOR | 0x8 | 블록 구분자. |
| C2_세그먼트구분기호 | 0x9 | 세그먼트 구분 기호. |
| C2_WHITESPACE | 0xA | 공백. |
| C2_OTHERNEUTRAL | 0xB | 기타 중립. |
| 해당 없음: | ||
| C2_NOTAPPLICABLE | 0x0 | 암시적 방향이 없습니다. |
Ctype3 형식은 일반 텍스트 처리 또는 표준 C 라이브러리 함수에 필요한 POSIX 형식에 대한 확장의 자리 표시자입니다.
| CType3 이름 | 값 | 의미 |
|---|---|---|
| C3_NONSPACING | 0x1 | 간격이 없는 표시입니다. |
| C3_DIACRITIC | 0x2 | 비간격 발음 구별 기호. |
| C3_VOWELMARK | 0x4 | 모음 비간격 표시. |
| C3_SYMBOL | 0x8 | 상징. |
| C3_가타카나 | 0x10 | 가타카나 문자입니다. |
| C3_HIRAGANA | 0x20 | 히라가나 문자. |
| C3_HALFWIDTH | 0x40 | 반자 문자입니다. |
| C3_FULLWIDTH | 0x80 | 전체 너비 문자입니다. |
| C3_이데오그래프 | 0x100 | 표기법 문자입니다. |
| C3_KASHIDA | 0x200 | 아랍어 카시다 문자입니다. |
| C3_ALPHA | 0x8000 | 모든 언어 문자(알파벳, 실라바리 및 표기법)입니다. |
| C3_NOTAPPLICABLE | 0x0 | 적용할 수 없습니다. |
EDK(개발 키트 편집)에는 유니코드 표준에 설명된 다음 범위에 대한 pVar 인덱스 정의가 포함될 수 있습니다.
| 문자 집합 | 유니코드 범위 | 문자 집합 | 유니코드 범위 |
|---|---|---|---|
| 아스키 | 0x0 — 0x7f | ANSI(미국 국가 표준 협회) | 0x0 — 0xff |
| ASCIIPrint | 0x20 — 0x7e | Latin1 | 0x20 — 0xff |
| Latin1Supp | 0xa0 - 0xff | LatinXA | 0x100 — 0x17f |
| LatinXB | 0x180 — 0x24f | IPAX | 0x250 — 0x2af |
| SpaceMod | 0x2b0 — 0x2ff | 결합 | 0x300 — 0x36f |
| 그리스어 | 0x370 — 0x3ff | BasicGreek | 0x370 — 0x3cf |
| GreekSymbols | 0x3d0 - 0x3ff | 키릴 문자체 | 0x400 — 0x4ff |
| 아르메니아어 | 0x530 — 0x58f | 히브리어 | 0x590 — 0x5ff |
| 기초 히브리어 | 0x5d0 - 0x5ea | 히브리어XA | 0x590 - 0x5cf |
| HebrewXB | 0x5eb — 0x5ff | 아랍어 | 0x600 - 0x6ff |
| BasicArabic | 0x600 — 0x652 | ArabicX | 0x653 — 0x6ff |
| 데바나가리 | 0x900 — 0x97f | 벵골어 | 0x980 — 0x9ff |
| 구르무키 시 | 0xa00 — 0xa7f | 구자라트어 | 0xa80 — 0xaff |
| 오디어 | 0xb00 — 0xb7f | 타밀어 | 0xb80 — 0xbff |
| 텔루가 주 | 0xc00 — 0xc7f | 칸나다어 | 0xc80 — 0xcff |
| 말라얄람어 | 0xd00 — 0xd7f | 태국어 | 0xe00 — 0xe7f |
| 라오어 | 0xe80 — 0xeff | GeorgianX | 0x10a0 — 0xa0cf |
| BascGeorgian | 0x10d0 — 0x10ff | 자모 | 0x1100 — 0x11ff |
| LatinXAdd | 0x1e00 — 0x1eff | GreekX | 0x1f00 - 0x1fff |
| GenPunct | 0x2000 — 0x206f | 위 첨자 | 0x2070 — 0x207f |
| 아래 첨자 | 0x2080 — 0x208f | SuperSubscript | 0x2070 — 0x209f |
| 통화 | 0x20a0 — 0x20cf | CombMarkSym | 0x20d0 — 0x20ff |
| LetterLike | 0x2100 — 0x214f | NumberForms | 0x2150 — 0x218f |
| 화살표 | 0x2190 — 0x21ff | MathOps | 0x2200 — 0x22ff |
| MiscTech | 0x2300 — 0x23ff | CtrlPictures | 0x2400 — 0x243f |
| 선택적 문자 인식 | 0x2440 — 0x245f | EnclAlphaNum | 0x2460 — x24ff |
| 상자 그리기 | 0x2500 — 0x257f | 블록 요소 | 0x2580 — 0x259f |
| GeometShapes | 0x25a0 — 0x25ff | 기타 기호 | 0x2600 - 0x26ff |
| 딩배트 | 0x2700 — 0x27bf | CJKSymPunct | 0x3000 — 0x303f |
| 히라가나 | 0x3040 — 0x309f | 가타카나 | 0x30a0 — 0x30ff |
| 보포모포 | 0x3100 — 0x312f | 한글자모 | 0x3130 — 0x318f |
| CJLMisc | 0x3190 — 0x319f | EnclCJK | 0x3200 — 0x32ff |
| CJKCompatibl | 0x3300 — 0x33ff | 한 | 0x3400 - 0xabff |
| 한글 | 0xac00 — 0xd7ff | UTF16Lead | 0xd800 — 0xdbff |
| UTF16Trail | 0xdc00 — 0xdfff | 개인 사용 | 0xe000 — 0xf800 |
| CJKCompIdeog | 0xf900 — 0xfaff | AlphaPres | 0xfb00 — 0xfb4f |
| 아라비아프레사 | 0xfb50 — 0xfdff | 콤 하프 마크 | 0xfe20 — 0xfe2f |
| CJKCompForm | 0xfe30 — 0xfe4f | SmallFormVar | 0xfe50 — 0xfe6f |
| ArabicPresB | 0xfe70 — 0xfefe | 하프풀폼 | 0xff00 — 0xffef |
| 특가 상품 | 0xfff0 — 0xfffd |