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.
- obiektów TOM w wersji 2
- Konwencje Interfejsu TOM
- Typ tomBool
- Konstrukcja matematyczna i dekompozycja
- tom RTF
- wyszukiwanie tekstu sformatowanego
-
TOM ułatwień dostępu
- interfejs z uruchomionej tabeli obiektów
- interfejs z komunikatów okna
- metody zorientowane na ułatwienia dostępu
- zestawy dopasowań znaków
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:
- za pośrednictwem tabeli running-object
- Za pośrednictwem komunikatu EM_GETOLEINTERFACE, który działa w przypadku okiennych wystąpień edycji wzbogaconej, pod warunkiem, że klient znajduje się w tej samej przestrzeni procesów (nie jest wymagana żadna marshaling)
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 |