Udostępnij za pośrednictwem


Informacje o modelu obiektów tekstowych

Model obiektów tekstowych (TOM) definiuje zestaw interfejsów manipulowania tekstem, które są obsługiwane w różnym stopniu przez kilka rozwiązań tekstowych firmy Microsoft, w tym kontrolkę edycji sformatowanej. Ten temat zawiera ogólne omówienie rozwiązania TOM. Omówiono w nim następujące tematy.

Obiekty TOM w wersji 2

ToM w wersji 2 (TOM 2) rozszerza oryginalny model obiektu tekstowego; nowe interfejsy pochodzą ze starych. Zaktualizowany interfejs API TOM obejmuje obsługę nowych właściwości formatu znaków i akapitów, modelu tabeli, wielokrotnego zaznaczenia i obsługi obiektów wbudowanych na potrzeby obliczeń matematycznych i ruby.

Obiekt TOM 2 najwyższego poziomu jest definiowany przez interfejs ITextDocument2, który zawiera metody tworzenia i pobierania obiektów niższych w hierarchii obiektów. W przypadku prostego przetwarzania zwykłego tekstu można uzyskać obiekt ITextRange2 z obiektu ITextDocument2 i wykonać większość tych czynności. Jeśli musisz dodać formatowanie zaawansowanego tekstu, możesz uzyskać obiekty ITextFont2 i ITextPara2 z obiektu ITextRange2. ITextFont2 zapewnia programistyczny odpowiednik okna dialogowego format-czcionka w Microsoft Word, a ITextPara2 zapewnia odpowiednik okna dialogowego formatu akapitu w Wordzie.

Oprócz tych trzech obiektów niższego poziomu, TOM 2 ma obiekt zaznaczenia (ITextSelection2), który jest obiektem ITextRange2 z podświetleniem zaznaczenia i niektórymi metodami ukierunkowanymi na interfejs użytkownika.

Zakres i obiekty zaznaczenia obejmują metody zorientowane na ekran, które umożliwiają programom badanie tekstu widocznego na ekranie lub tekstu, który można przewijać na ekranie. Te możliwości ułatwiają na przykład dostęp do tekstu osobom z niedowidzącymi.

Każdy interfejs, który ma sufiks 2, dziedziczy po odpowiednim interfejsie bez sufiksu 2. Na przykład ITextDocument2 dziedziczy z ITextDocument.

Obiekty TOM 2 mają następującą hierarchię.

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

Obiekt ITextDocument2 opisuje jeden lub więcej ciągłych zakresów tekstu zwanych historiami. Scenariusze reprezentują różne części dokumentu, takie jak główny tekst dokumentu, nagłówki i stopki, przypisy dolne, adnotacje i podkładki do tekstu sformatowanego. Historia arkusza roboczego jest używana podczas tłumaczenia między wyrażeniami matematycznymi sformatowanymi liniowo a złożoną postacią. W przypadku zapisywania zawartości zakresu, który jest bieżącym źródłem kopiowania, jest również używany scenariusz w okienku tymczasowym, gdy zawartość ma zostać zmieniona.

Obiekt ITextRange2 jest definiowany przez przesunięcia pozycji początkowej i końcowej znaku oraz obiekt opowieści. Nie istnieje niezależnie od obiektu nadrzędnego, chociaż jego tekst można skopiować do schowka lub do innych obiektów docelowych. Obiekt zakresu tekstu różni się od arkusza kalkulacyjnego i innych obiektów zakresu, które są definiowane przez inne rodzaje przesunięć; na przykład położenie wiersza/kolumny lub grafiki (x, y). Obiekt zakresu tekstu może modyfikować się na różne sposoby, może zwracać duplikat samego siebie i można go polecenić, aby skopiować pozycje znaków początkowych i końcowych oraz wskaźnik historii do bieżącego zaznaczenia.

Obiekt jawnej historii nie jest potrzebny, ponieważ obiekt ITextRange można zawsze utworzyć w celu reprezentowania dowolnego scenariusza. W szczególności obiekt ITextDocument może utworzyć obiekt ITextStoryRanges, aby wyliczyć historie w dokumencie pod względem zakresów z wartościami położenia znaku początkowego i końcowego, które opisują kompletne historie (takie jak 0 i tomForward).

W przypadku obiektuITextStoryRanges2 obiektnie jest wymagany, ponieważ każdy scenariusz jest opisywany przez obiekt ITextRange2. W szczególności obiekt ITextDocument2 może utworzyć obiekt ITextStoryRanges2, aby wyliczyć historie w dokumencie pod względem zakresów z wartościami położenia znaku początkowego i końcowego, które opisują pełne historie (takie jak, 0 i tomForward).

Interfejs ITextRow wraz z metodami ITextRange::Move i ITextRange::Expand umożliwia wstawianie, zapytania i modyfikację tabel.

Konwencje interfejsu TOM

Wszystkie metody TOM zwracają wartości HRESULT. Ogólnie rzecz biorąc, metody TOM zwracają następujące wartości standardowe.

  • E_OUTOFMEMORY
  • E_INVALIDARG
  • E_NOTIMPL
  • E_FILENOTFOUND
  • E_ACCESSDENIED
  • E_FAIL
  • CO_E_RELEASED
  • NOERROR (taki sam jak S_OK)
  • S_FALSE

Należy pamiętać, że jeśli wystąpienie edycji skojarzone z obiektem TOM, takim jak ITextRange zostanie usunięte, obiekt TOM stanie się bezużyteczny, a wszystkie jego metody zwracają CO_E_RELEASED.

Oprócz wartości zwracanych HRESULT wiele metod zawiera parametry out, które są wskaźnikami używanymi do zwracania wartości. Dla wszystkich interfejsów należy sprawdzić wszystkie parametry wskaźnika, aby upewnić się, że nie są onezerowe przed ich użyciem. Jeśli przekażesz wartość null do metody wymagającej prawidłowego wskaźnika, metoda zwróci E_INVALIDARG. Opcjonalne wskaźniki z wartościami null są ignorowane.

Użyj metod z prefiksami Get i Set, aby pobrać i ustawić właściwości. Zmienne logiczne używają tomFalse (0) dla FALSEi tomTrue (-1) dla TRUE.

Stałe TOM są definiowane w typie wyliczeniowym tomConstants i zaczynają się od prefiksu tom, na przykład tomWord.

Typ tomBool

Wiele metod TOM używa specjalnego typu zmiennej o nazwie "tomBool" dla atrybutów tekstu sformatowanego, które mają stany binarne. Typ tomBool różni się od typu logicznego, ponieważ może przyjmować cztery wartości: tomTrue, tomFalse, tomTogglei tomUndefined. Wartości tomTrue i tomFalse wskazują wartości true i false. Wartość tomToggle służy do przełączania właściwości. Wartość tomUndefined, która jest tradycyjnie nazywana NINCH, jest specjalną wartością braku danych wejściowych, bez zmian, która działa z długościami, zmiennoprzecinkami i COLORREFs. W przypadku ciągów tomUndefined (lub NINCH) jest reprezentowany przez ciąg o wartości null. W przypadku operacji ustawień właściwości użycie tomUndefined nie zmienia właściwości docelowej. W przypadku operacji pobierania właściwości tomUndefined oznacza, że znaki w zakresie mają różne wartości (daje szare pole wyboru w oknach dialogowych właściwości).

Budowanie Matematyczne i Spadek Matematyczny

Możesz użyć metody ITextRange2::BuildUpMath, aby przekonwertować wyrażenia matematyczne sformatowane liniowo na wbudowane wersje. Metoda ITextRange2::Linearize wykonuje odwrotną konwersję, nazywaną linearizacją lub redukowaniem, w celu przekształcenia bardziej złożonych wersji wyrażeń matematycznych na format liniowy. Funkcja kompilowania matematycznego jest przydatna, gdy trzeba wyeksportować zwykły tekst lub włączyć niektóre typy edycji.

TOM RTF

W programie TOM wymiana tekstu sformatowanego może odbywać się za pomocą zestawów jawnych wywołań metod lub transferów tekstu sformatowanego w formacie RTF (Rich Text Format). Ta sekcja zawiera tabele wyrazów kontrolek RTF dla właściwości akapitu i właściwości znaków.

Elementy sterujące akapitem RTF TOM

Słowo sterujące Znaczenie
\ fi n Wcięcie pierwszego wiersza (wartość domyślna to zero).
\zachować Zachowaj akapit nienaruszony.
\ keepn Kontynuuj z następnym akapitem.
\ li n Wcięcie lewe (wartość domyślna to zero).
n/a Brak numerowania wiersza.
\ nowidctlpar Wyłącz kontrolkę wdowy/sierocą.
\ pagebb Wstaw podział strony przed akapitem.
\ par Nowy akapit.
\pard Resetuje domyślne właściwości akapitu.
\Ql Wyrównane do lewej (wartość domyślna).
\Qr Wyrównane do prawej.
\ qj Uzasadniony.
\Qc Wyśrodkowany.
\ ri n Prawe wcięcie (wartość domyślna to zero).
\ s n Styl n.
\ sa n Spacja po (wartość domyślna to zero).
\ sb n Spacja przed (wartość domyślna to zero).
\ sl n Jeśli brakuje lub jeśli n=1000, odstęp jest określany przez najwyższy znak w linii (odstęp pojedynczego wiersza); jeśli n> zero, używany jest co najmniej ten rozmiar; jeśli n jest < zero, używany jest dokładnie |n|. Odstęp między wierszami jest wieloliniowy, jeśli używane jest \ slmult 1.
\ slmult m Następuje \ sl. m = zero: Odstępy między wierszami co najmniej lub dokładnie opisane przez \ sl n. m = 1: odstęp między wierszami = n/240 razy odstępy jednowierszowe.
\ tb n Pozycja tabulatora kolumnowego, w twipach, od lewego marginesu.
\ tldot Kropki prowadzące tabulacji
\ tleq Wypełniacz tabulatora: znak równości.
\ tlhyph Łączniki liderów kart.
\ tlth Gruba linia prowadząca tabulację.
\ tlul Podkreślenie lidera tabulacji.
\ tqc Wyśrodkowany tabulator.
\ tqdec Tabulator dziesiętny.
tqr Opróżnij kartę w prawo.
\ tx n Pozycja tabulatora, w jednostkach twip, z lewego marginesu.

 

Kontrolne wyrazy formatu znaków RTF TOM

Słowo sterujące Znaczenie
\ animacja n Ustawia typ animacji na n.
\ b Śmiały.
\Czapki Wszystkie wielkie litery.
\ cf n Kolor pierwszego planu (wartość domyślna to tomAutocolor).
\ cs n Styl znaku n.
\ dn n Położenie indeksu dolnego w półpunktach (wartość domyślna to 6).
\ embo Tłoczone.
\ f n Numer czcionki, n odnosi się do wpisu w tabeli czcionek.
\ fs n Rozmiar czcionki w połowie punktów (wartość domyślna to 24).
\ wyróżnij n Kolor tła (wartość domyślna to tomAutocolor).
\ i Italik.
\ impr Impressum.
\ lang n Przypisuje język do znaku. n jest liczbą odpowiadającą językowi. Wyraz \plain control resetuje właściwość języka do języka zdefiniowanego przez \ deflang n we właściwościach dokumentu.
\ nosupersub Wyłącza indeks górny lub indeks dolny.
\ outl Zarys.
równina Resetuje właściwości formatowania znaków do wartości domyślnej zdefiniowanej przez aplikację. Skojarzone właściwości formatowania znaków (opisane w sekcji Skojarzone właściwości znaków w specyfikacji RTF) są również resetowane.
\ scaps Kapitały małe.
\aloza Cień.
\strajk Przekreślenie.
\Sub Stosuje indeks dolny do tekstu i zmniejsza rozmiar czcionki zgodnie z informacjami o czcionkach.
\super Stosuje indeks górny do tekstu i zmniejsza rozmiar punktu zgodnie z informacjami o czcionkach.
\ ul Ciągłe podkreślenie. \ ul0 wyłącza wszystkie podkreślenia.
\ uld Podkreślone kropkami.
\ uldb Podwójne podkreślenie.
\ ulnone Zatrzymuje wszystkie podkreślenia.
\ ulw Podkreślnie wyrazu.
\ up n Położenie indeksu górnego w jednostkach półpunktowych (wartość domyślna to 6).
\ v Tekst ukryty.

 

Znajdowanie tekstu z formatowaniem

Metody TOM umożliwiają znajdowanie tekstu sformatowanego, jak definiuje zakres tekstu. Znalezienie takiego wzbogaconego tekstu jest często potrzebne w przetwarzaniu tekstu, chociaż nigdy nie udało się tego osiągnąć w edytorze tekstu typu "to, co widzisz, jest tym, co dostajesz" (WYSIWYG). Istnieje wyraźnie większa domena dopasowywania tekstu sformatowanego, która umożliwia ignorowanie niektórych właściwości formatowania znaków (lub uwzględnianie formatowania akapitu i/lub zawartości obiektu), ale takie uogólnienia wykraczają poza zakres tej sekcji.

Jednym z celów tej funkcji jest użycie tekstu sformatowanego w oknie dialogowym Znajdowanie w celu zdefiniowania tekstu sformatowanego, który chcesz zlokalizować w dokumencie. Okno dialogowe zostanie zaimplementowane przy użyciu rozbudowanej kontrolki edycji, a metody TOM będą używane do przeprowadzania wyszukiwania w dokumencie. Możesz skopiować żądany sformatowany tekst z dokumentu do okna dialogowego Znajdź lub wprowadzić go i sformatować bezpośrednio w oknie dialogowym Znajdź.

W poniższym przykładzie pokazano, jak używać metod TOM do znajdowania tekstu zawierającego kombinacje dokładnego formatowania znaków. Algorytm wyszukuje zwykły tekst w zakresie dopasowania o nazwie pr1. Jeśli zostanie znaleziony zwykły tekst, jest wskazywany przez zakres próbny o nazwie pr2. Następnie dwa zakresy punktów wstawiania (prip1 i prip2) są używane do przemierzania zakresu próbnego, porównując jego formatowanie znaków z tym, które ma pr1. Jeśli są one dokładnie zgodne, zakres danych wejściowych (podany przez ppr) jest aktualizowany tak, aby wskazywał tekst zakresu próbnego, a funkcja zwraca liczbę znaków w dopasowanym zakresie. Dwa obiekty ITextFont, pf1 i pf2, są używane w porównaniu formatowania znaków. Są one dołączone do zakresów punktów wstawiania prip1 i 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;
}

Ułatwienia dostępu TOM

TOM zapewnia obsługę ułatwień dostępu za pośrednictwem interfejsów ITextSelection i ITextRange. W tej sekcji opisano metody, które są przydatne dla ułatwień dostępu, a także sposób, w jaki program może określić x, y położenie ekranu obiektu.

Ponieważ programy ułatwień dostępu oparte na interfejsie użytkownika zwykle działają z ekranem i myszą, typowym problemem jest znalezienie odpowiedniego interfejsu ITextDocument dla bieżącej lokalizacji myszy (we współrzędnych ekranu). W poniższych sekcjach przedstawiono dwa sposoby określania odpowiedniego interfejsu:

Aby uzyskać więcej informacji, zobacz specyfikację Microsoft Active Accessibility. Po uzyskaniu obiektu z pozycji ekranu można użyć interfejsu ITextDocument i wywołać metodę RangeFromPoint, aby uzyskać pusty obiekt zakresu w cp odpowiadającym pozycji ekranu.

Interfejs z uruchomionej tabeli obiektów

Uruchomiona tabela obiektów (ROT) informuje, jakie wystąpienia obiektów są aktywne. Wykonując zapytanie względem tej tabeli, można przyspieszyć proces łączenia klienta z obiektem, gdy obiekt jest już uruchomiony. Zanim programy będą mogły uzyskiwać dostęp do interfejsów TOM za pośrednictwem uruchomionej tabeli obiektów (ROT), wystąpienie TOM z oknem musi zarejestrować się w tabeli ROT przy użyciu monikera. Skonstruujesz moniker z ciągu zawierającego wartość szesnastkową HWND. Poniższy przykładowy kod pokazuje, jak to zrobić.

// 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
}

Interfejs z komunikatów okna

Komunikat EM_GETOLEINTERFACE umożliwia uzyskanie interfejsu IUnknown dla obiektu na danej pozycji ekranu. Jak opisano w Interface from Running Object Table, otrzymujesz HWND dla położenia ekranu, a następnie wysyłasz ten komunikat do tego HWND. Komunikat EM_GETOLEINTERFACE jest specyficzny dla edytorów typu "rich edit" i zwraca wskaźnik do interfejsu IRichEditOle umieszczonego w zmiennej wskazanej przez lParam.

Wskazówka Jeśli zostanie zwrócony wskaźnik (upewnij się, że obiekt, na który lParam wskazuje, jest ustawiony na null przed wysłaniem komunikatu), możesz wywołać metodę IUnknown::QueryInterface, aby uzyskać interfejs ITextDocument. Poniższy przykładowy kod ilustruje to podejście.

    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
    }

Metody zorientowane na ułatwienia dostępu

Niektóre metody TOM są szczególnie przydatne do poruszania się po ekranie, podczas gdy inne metody TOM zwiększają możliwości, które można zrobić po dotarciu do interesujących cię miejsc. W poniższej tabeli opisano najbardziej przydatne metody.

Metoda Sposób promowania ułatwień dostępu
PobierzWybor Ta metoda pobiera aktywny wybór, który może być używany w różnych celach zorientowanych na widok, takich jak wyróżnianie tekstu i przewijanie.
RangeFromPoint W przypadku użycia w aktywnym zaznaczeniu ta metoda gwarantuje uzyskanie zakresu skojarzonego z określonym widokiem.
Rozwiń Powiększa zakres tekstu, tak aby wszystkie zawarte w nim częściowe jednostki zostały całkowicie zawarte. Na przykład Expand(tomWindow) rozszerza zakres, aby uwzględnić widoczną część historii zakresu.
PobierzDuplikat W przypadku użycia w aktywnym zaznaczeniu ta metoda gwarantuje uzyskanie zakresu skojarzonego z określonym widokiem. Zobacz opis RangeFromPoint.
GetPoint Pobiera współrzędne ekranu dla pozycji znaku początkowego lub końcowego w zakresie tekstu.
ScrollIntoView Przewija zakres tekstu do widoku.
SetPoint Zaznacza tekst od określonego punktu aż do wskazanego miejsca.

 

Zestawy dopasowań znakowych

Wariant parametru w różnych metodach Move* w ITextRange, takich jak MoveWhile i MoveUntil, może przyjmować jawny ciąg znaków lub indeks 32-bitowy zgodny z zestawem dopasowania znaków. Indeksy są definiowane przez zakresy Unicode lub zestawy znaków GetStringTypeEx. Zakres Unicode rozpoczynający się od n i długości l (< 32768) jest podawany przez indeks n + (l << 16) + 0x80000000. Na przykład podstawowe greckie litery są definiowane przez CR_Greek = 0x805f0370 i drukowalne znaki ASCII są definiowane przez CR_ASCIIPrint = 0x805e0020. Ponadto metody MoveWhile i MoveUntil umożliwiają szybkie obejście zakresu znaków w dowolnym zestawie znaków GetStringTypeEx lub w zakresie znaków, które nie są w żadnym z tych zestawów znaków.

Zestawy GetStringTypeEx są określane przez wartości Ctype1, Ctype2i Ctype3i są zdefiniowane w następujący sposób.

Cset Znaczenie
Ctype1 Kombinacja typów CT_CTYPE1.
Ctype2 + tomCType2 Dowolny typ CT_CTYPE2.
Ctype3 + tomCType3 Kombinacja typów CT_CTYPE3.

 

W szczególności Ctype1 może być dowolną kombinacją poniższych.

Nazwa Ctype1 Wartość Znaczenie
C1_UPPER 0x0001 Wielkie litery.
C1_LOWER 0x0002 Małe litery.
C1_DIGIT 0x0004 Cyfry dziesiętne.
C1_SPACE 0x0008 Znaki spacji.
C1_PUNCT 0x0010 Interpunkcja.
C1_CNTRL 0x0020 Znaki sterujące.
C1_BLANK 0x0040 Puste znaki.
C1_XDIGIT 0x0080 Cyfry szesnastkowe.
C1_ALPHA 0x0100 Dowolny znak językowy (alfabetyczny, sylabaryczny lub ideograficzny).
C1_DEFINED 0x0200 Zdefiniowany znak, ale nie jeden z innych typów C1_*.

 

Typy Ctype2 obsługują prawidłowy układ tekstu Unicode. Atrybuty kierunku są przypisywane tak, aby algorytm układu dwukierunkowego ustandaryzowany przez Unicode zapewniał dokładne wyniki. Te typy wykluczają się wzajemnie. Aby uzyskać więcej informacji na temat używania tych atrybutów, zobacz Standard Unicode: Kodowanie znaków na całym świecie, woluminy 1 i 2, Addison-Wesley Publishing Company: 1991, 1992.

Nazwa CType2 Wartość Znaczenie
Silny:
C2_LEFTTORIGHT 0x1 Od lewej do prawej.
C2_RIGHTTOLEFT 0x2 Od prawej do lewej.
Słaby:
C2_EUROPENUMBER 0x3 Liczba europejska, cyfra europejska.
C2_EUROPESEPARATOR 0x4 Europejski separator liczbowy.
C2_EUROPETERMINATOR 0x5 Europejski terminator liczbowy.
C2_ARABICNUMBER 0x6 Liczba arabska.
C2_COMMONSEPARATOR 0x7 Wspólny separator liczbowy.
Neutralny:
C2_BLOCKSEPARATOR 0x8 Separator blokowy.
C2_SEGMENTSEPARATOR 0x9 Separator segmentowy.
C2_WHITESPACE 0xA Białe miejsce
C2_OTHERNEUTRAL 0xB Inne neutralne.
Nie dotyczy:
C2_NOTAPPLICABLE 0x0 Brak niejawnego kierunku.

 

Typy Ctype3 mają być symbolami zastępczymi rozszerzeń typów POSIX wymaganych do ogólnego przetwarzania tekstu lub standardowych funkcji biblioteki C.

Nazwa CType3 Wartość Znaczenie
C3_NONSPACING 0x1 Znak bez odstępu
C3_DIACRITIC 0x2 Znak diakrytyczny nie mający odstępu.
C3_VOWELMARK 0x4 Znak nieodstępujący samogłoskowy.
C3_SYMBOL 0x8 Symbol.
C3_KATAKANA 0x10 Znak Katakana.
C3_HIRAGANA 0x20 Znak Hiragana.
C3_HALFWIDTH 0x40 Znak o połowie szerokości.
C3_FULLWIDTH 0x80 Znak pełnej szerokości.
C3_IDEOGRAPH 0x100 Znak ideograficzny.
C3_KASHIDA 0x200 Arabski znak Kashida.
C3_ALPHA 0x8000 Wszystkie znaki językowe (alfabetyczne, sylabarne i ideograficzne).
C3_NOTAPPLICABLE 0x0 Nie dotyczy.

 

Zestaw Edit Development Kit (EDK) może zawierać pVar definicje indeksów dla następujących zakresów opisanych w standardzie Unicode.

Zestaw znaków Zakres Unicode Zestaw znaków Zakres Unicode
ASCII 0x0 — 0x7f ANSI 0x0 — 0xff
ASCIIPrint 0x20 — 0x7e Łaciński 1 0x20 — 0xff
Latin1Podaj 0xa0 — 0xff LatinXA 0x100 — 0x17f
LatinXB 0x180 — 0x24f IPAX 0x250 — 0x2af
SpaceMod 0x2b0 — 0x2ff Łączenie 0x300 — 0x36f
Grecki 0x370 — 0x3ff BasicGreek 0x370 — 0x3cf
GreckieSymbole 0x3d0 — 0x3ff Cyrylica 0x400 — 0x4ff
Armeński 0x530 — 0x58f Hebrajski 0x590 — 0x5ff
BasicHebrew 0x5d0 — 0x5ea HebrajskiXA 0x590 — 0x5cf
HebrajskiXB 0x5eb — 0x5ff Arabski 0x600 — 0x6ff
BasicArabic 0x600 — 0x652 ArabicX 0x653 — 0x6ff
Dewangari 0x900 — 0x97f Bangla (dawniej Bengali) 0x980 — 0x9ff
Gurmukhi 0xa00 — 0xa7f Gudżarati 0xa80 — 0xaff
Odia (dawniej Oriya) 0xb00 — 0xb7f Tamilski 0xb80 — 0xbff
Teluga 0xc00 — 0xc7f Kannada 0xc80 — 0xcff
Malayalam 0xd00 — 0xd7f Tajski 0xe00 — 0xe7f
Język laotański 0xe80 — 0xeff GeorgianX 0x10a0 — 0xa0cf
BascGeorgian 0x10d0 — 0x10ff Jamo 0x1100 — 0x11ff
LatinXAdd 0x1e00 — 0x1eff GreckiX 0x1f00 — 0x1fff
GenPunct 0x2000 — 0x206f Indeks górny 0x2070 — 0x207f
Indeks dolny 0x2080 — 0x208f Nadsu- i Podskrypt 0x2070 — 0x209f
Waluta 0x20a0 — 0x20cf CombMarkSym 0x20d0 — 0x20ff
LetterLike 0x2100 — 0x214f NumberForms 0x2150 — 0x218f
Strzałki 0x2190 — 0x21ff MathOps 0x2200 — 0x22ff
MiscTech 0x2300 — 0x23ff CtrlPictures 0x2400 — 0x243f
OptCharRecog 0x2440 — 0x245f EnclAlphaNum 0x2460 — x24ff
Rysowanie Prostokątów 0x2500 — 0x257f BlockElement 0x2580 — 0x259f
GeometShapes 0x25a0 — 0x25ff Różne symbole 0x2600 — 0x26ff
Dingbatsy 0x2700 — 0x27bf CJKSymPunct 0x3000 — 0x303f
Hiragana 0x3040 — 0x309f Katakana 0x30a0 — 0x30ff
Bopomofo 0x3100 — 0x312f HangulJamo 0x3130 — 0x318f
CJLMisc 0x3190 — 0x319f EnclCJK 0x3200 — 0x32ff
CJKCompatibl 0x3300 — 0x33ff Han 0x3400 — 0xabff
Hangul 0xac00 — 0xd7ff UTF16Lead 0xd800 — 0xdbff
UTF16Trail 0xdc00–0xdfff Użycie prywatne 0xe000 — 0xf800
CJKCompIdeog 0xf900 — 0xfaff AlphaPres 0xfb00 — 0xfb4f
ArabicPresA 0xfb50 — 0xfdff CombHalfMark 0xfe20 — 0xfe2f
CJKCompForm 0xfe30 — 0xfe4f SmallFormVar 0xfe50 — 0xfe6f
ArabicPresB 0xfe70 — 0xfefe HalfFullForm 0xff00 — 0xffef
Specjały 0xfff0 — 0xfffd