Tartományok

Horgonyok

A tartományokat két horgony, egy kezdőhorgony és egy záró horgony tagolja. Egy horgony két karakter közötti képzeletbeli pontban található. A kezdő horgony a horgonyt követő szöveghez, a záró horgony pedig a horgonyt megelőző szöveghez kapcsolódik. A kezdő és a záró horgony is létezhet ugyanazon a helyen. Ebben az esetben a tartomány nulla hosszúságú.

Kezdje például a következő szöveggel:

This is text.

Most alkalmazzon tartományt erre a szövegre a kezdő és a záró horgonyokkal a 0. pozícióban. Vizuálisan a következőképpen jelenik meg:

<anchor></anchor>This is text.

A horgonyok nem foglalnak helyet a szövegen belül. Ez egy nulla hosszúságú tartomány, és a szövege üres.

Most váltsa el a záró horgonyt +3 pozícióban. Vizuálisan a következőképpen jelenik meg:

<anchor>Thi</anchor>s is text.

A kezdő horgony közvetlenül a 0. pozícióban lévő karakter előtt van, a záró horgony pedig közvetlenül a 3. pozícióban lévő karakter után van elhelyezve, mert a záró horgony a jobb 3 helyre került. A szövegtartomány most "Thi".

Ezenkívül a kezdőhorgony nem használható a véghorgony követésére, és a véghorgony nem állítható elő a kezdőhorgony elé.

Horgony gravitációja

Minden horgony rendelkezik egy gravitációs beállítással, amely meghatározza, hogy a horgony hogyan reagál a szöveg beszúrásakor a szövegfolyamba a horgony pozíciójában. Ha a horgony helyzetében beszúrás történik, a horgony helyzetében kiigazítást kell végezni. A gravitáció határozza meg a horgony helyzetének beállítását.

Például:

It is <anchor></anchor>cold today.

Ha a "nagyon" szó a tartomány pozíciójába van beszúrva, a kezdő horgony a beszúrt szó előtt vagy után is elhelyezhető:

It is <anchor>very </anchor>cold today.

-Vagy-

It is very <anchor></anchor>cold today.

A horgony gravitációja határozza meg, hogy a horgony hogyan legyen áthelyezve, amikor a beszúrás a helyén történik. A gravitáció lehet hátra vagy előre.

Ha a horgony gravitációja hátrafelé halad, a horgony a beszúrási ponthoz képest hátrafelé halad, így a beszúrt szöveg követi a horgonyt:

It is <anchor>very </anchor>cold today.

Ha a horgony előrehaladt gravitációval rendelkezik, a horgony előrehalad a beszúráskor (a beszúrási ponthoz képest), hogy a beszúrt szöveg megelőzi a horgonyt:

It is very <anchor></anchor>cold today.

Klónok és biztonsági másolatok

A tartományobjektumok "másolása" kétféleképpen lehetséges. Az első egy klónozási létrehozása a tartományból ITfRange::Clonehasználatával. A második a tartomány biztonsági mentési készítése ITfContext::CreateRangeBackuphasználatával.

A klón egy olyan tartomány másolata, amely nem tartalmaz statikus adatokat. A tartomány horgonyai ki vannak másolva, de a klón továbbra is lefedi a szövegtartományt a környezeten belül. A klónok minden szempontból tartományobjektumok. Ez azt jelenti, hogy a klónozott tartomány szövege és tulajdonságai dinamikusak, és megváltoznak, ha a klónozás által lefedett tartomány szövege és/vagy tulajdonságai megváltoznak.

A biztonsági mentés a biztonsági mentés során statikus adatokként tárolja egy tartomány szövegét és tulajdonságait. A biztonsági másolat az eredeti tartományt is klónozza, hogy nyomon lehessen követni az eredeti tartomány méretének és pozíciójának változásait. Ez azt jelenti, hogy a biztonsági mentési tartomány szövege és tulajdonságai statikusak, és nem változnak, ha a biztonsági mentés által lefedett tartomány szövege és/vagy tulajdonságai megváltoznak.

Például a következő tartomány (pRange) a környezetben:

"This is some <pRange>text</pRange>."

Most készítsen klónt és biztonsági másolatot erről a tartományról:

ITfRange *pClone;
ITfRangeBackup *pBackup;

pRange->Clone(&pClone);
pContext->CreateRangeBackup(ec, pRange, &pBackup);

Most az objektumok a következőket tartalmazzák:

pRange  = "text"
pClone  = "text"
pBackup = "text"

Most módosítsa a pRange szövegét:

WCHAR wsz[] = L"other words";
pRange->SetText(ec, 0, wsz, lstrlenW(wsz));

Most az objektumok a következőket tartalmazzák:

Context = "This is some other words."
pRange  = "other words"
pClone  = "other words"
pBackup = "text"

A szöveg beállítása miatt a szöveg a környezeten belül módosult. Emellett a pRange és a pClone véghorgonya is megváltozott. A pClone mostantól "más szavakat" tartalmaz, mivel a szöveg a tartományon belül módosult, és ezeket a módosításokat az összes tartomány nyomon követi. Amikor a pRange és a pClone által lefedett szöveg is megváltozott, a pClone szövege is megváltozott.

A pBackup szövege nem változott az eredeti pRange-ről, mert a biztonsági másolatban lévő adatok (szöveg és tulajdonságok) nem kapcsolódnak a környezethez, és külön vannak tárolva. A biztonsági másolatban található klón valójában megváltozik, de az adatok statikusak.

A biztonsági mentés visszaállításakor a biztonsági mentés a biztonsági másolaton belüli klónra vagy egy másik tartományra is alkalmazható. Ha a biztonsági másolatot a biztonsági másolaton belüli klónra szeretné alkalmazni, adja át NULLITfRangeBackup::Visszaállítás az alábbi kód példában látható módon:

pBackup->Restore(ec, NULL);

Most az objektumok a következőket tartalmazzák:

Context = "This is some text."
pRange  = "text"
pClone  = "text"
pBackup = "text"

Ha egy másik tartományba szeretné visszaállítani a biztonsági mentést, adjon át egy mutatót a tartományobjektumnak ITfRangeBackup::Restoremeghívásakor. A biztonsági másolatot kapó szöveg és tulajdonságok az új tartományra lesznek alkalmazva. Ha például a fenti példát használja a visszaállítási hívás előtt, a pRange a következőképpen jelenik meg:

LONG lShifted;
pRange->ShiftEnd(ec, -2, &lShifted, NULL);

Most az objektumok a következőket tartalmazzák:

Context = "This is some other words."
pRange  = "other wor"
pClone  = "other words"
pBackup = "text"

Amikor a pRange véghorgonyát két helyről balra helyezték, a pClone véghorgonya nem változott.

Most állítsa vissza a biztonsági mentést a pRange használatával a következő kód példával:

pBackup->Restore(ec, pRange);

Most az objektumok a következőket tartalmazzák:

Context = "This is some textds."
pRange  = "text"
pClone  = "textds"
pBackup = "text"

A pRange által lefedett szöveg helyébe "szöveg" lépett, a pClone által lefedett szöveg egy része módosult, a pBackup módosításai pedig a pRange-nak megfelelően módosultak.