Odovzdajte arabskú frázu يوضح ملف PDF metóde TextOut a otvorte si výsledok. Písmená idú zlým smerom a každé z nich sedí vo svojej izolovanej forme s viditeľnou medzerou pred nasledujúcim, ako keby niekto písal angličtinu odzadu a medzi každým znakom stlačil medzerník. Nevystrelila žiadna výnimka. Nevytlačilo sa žiadne varovanie. Výstup je jednoducho nesprávny, a to preto, lebo sa nikdy neudiali dve samostatné transformácie, od ktorých je arabčina závislá. Uvedomenie si toho, o aké dve transformácie ide a aké volanie ich vykonáva, je presne to zistenie, k čomu sa to najhlavnejšie z PDF výstupu u komplexných skriptov zlieva
HotPDF je natívny VCL PDF komponent pre Delphi a C++Builder, a prácu zameranú na formátovanie sprava doľava (RTL) robí za vás cez vyčlenené špeciálne volanie. Okrem toho sa ale na niekoľkých konkrétnych miestach radšej zastaví; a tieto špecifiká je dobré si uvedomiť vopred predtým než sa zaviažete prácou/nastavením vo vašom lokálnom formáte (locale). Tento text mapuje prechod konceptami so spomínanými otvorenými hranicami pre RTL zápis; za to ucelené technické nastavenie daného volania priamo pre použitie žije v referenčnom článku RtLTextOut
Prečo sa správny reťazec stále vytlačí nesprávne
Unicode udržuje text v logickom poradí, v takom poradí, v akom ho píšete na stroji a čítate nahlas. Vykresľovač (renderer) musí piktogramy (glyfy) umiestňovať na plátno (odovzdať zobrazeniu) ale v tom vizuálnom (odprezentovanom) poradí. Pre písma orientované zľava-doprava sa tieto formy/postupy kryjú, takže sa tým nikto vo svete (pri takto určenom výstupe) nezapododieva. Pre arabčinu s hebrejčinou, u tých taká samozrejmosť ale neplatí – vtedy, keď trebárs samotný jeden dlhý (komplexný/arabský atď.) riadok prepája rôzne prelínajúce sa štýly orientácie písma (záznam s formátovaním zmiešaných obojsmerných smerov), ako arabská napísaná veta prinášajúca medzi iným napr. latinský kód „PDF" prípadne hodnoty pre sumu na cene v čísliciach a i., tak o presnom postupe – ako by tieto vkladané fragmenty (časti znakov určené pre smer textu „do pravej strany") mali napasovať „vnoriť sa/dosadnúť do výstupu sprava – doľava v prislúchajúcom formátovaní," – tak o tom rozhoduje samotný algoritmus "Unicode Bidirectional Algorithm (UAX #9)". A táto takzvaná požiadavka pre „zmenu poradia v rozložení (reordering)" stelesňuje presne onen prvotný bod z dôležitých „krok-transformácií“, pričom jej neúspech pri/za vynechania s implementáciou obráti váš text vo výstupe dole hlavou naopak/zrkadlovo naruby
Tým druhým postupom pre "transformovanie" ostáva kontextuálne tvarovanie. Znak arabského písmena sa pri prechode po grafickej dráhe formuje i vyznie do vizuálnej/estetickej prezentácii na pohľad rozdielne zakaždým, v závislosti na formáte toho kde sa to "nachádza" počas slova: môže totiž "byť" umiestnená buď - úplne pri rozbehu/na začiatku, kdesi v zmesi uprostred obklopená po susedných bokoch od iných spájaných písmen, v závere odznievajúca pre končiaci bod či trebárs v plnej oddelenej (samostatnej "so seba stojacej"/nespojenej v texte) ukážkovej grafickej štruktúre odtrhnutia (standing alone form). V tomto aspekte ale pre kódovací údajový bod – samotný (codepoint) ostáva celý ten rozsah vždy od základu konštantný a zachovaný rovnaký; a jedine samotný glyf je ten čo sa adaptabilne "pozmení". Architektúra trasy pre odovzdané prečítanie prepojená bez prechodu, s odovzdaním odoslania pre každý jednotlivý „kód – bod" posunutý smerom k defaultnému základnému spájajúcemu glyfu generuje na konci výsledku úplne navlas ten samý nesúvislý / rozsekaný / vizuál pre znak s rozdelením/oddelením od osamotenej / vo svojej povahe opustenej tvarovanej medzerovanej prezentácie, rozvádzaný pri ukážke v otvorenom úvodnom odseku pre pochopenie. Hebrejčina v aplikovaní túto skomplikovanú úlohu preskočí úplne celú, zatiaľ čo jej zápis pre text do blokov spájacie tvary (k zoznamu) znakov nevyužíva, pre obojsmerné "skriptové zoraďovanie" (reordering) v texte zostáva táto podmienka aj pre hebrejčinu (formátovaním z prava) podmienkou s požiadavkou o preusporiadanie tak, či onak. Zato v arabskej podobe zostávajú na oboch pleciach obidva z úkonov nevyhnutne žiadanou záležitosťou – čím je arabčina na prvý/každý pohľad a omak najspoľahlivejším/tým primárnym preukazovateľom s reťazcom pre poctivé otestovanie a neúprosné odladenie pre chyby, a to nie hebrejská prezentácia textu vo výstupe
Vo svete bežného (klasického stolného) používania – na „počítačových systémoch (PC - v desktope)" tieto problémy a priradenia neriešite a ostávajú skryté. Totiž, zatiaľ čo (typický programom udelený pre vizuálnu aplikáciu) tzv. natívny vizuál VCL pre prvok – pod formulárom namaľuje napísaný/poskytnutý text „arabčiny" pod zadanie do boxu na plátne u `TEdit` , tak textové programy (na zásobníkoch/štruktúre), plne uschované pri správe operačného softvéru vo vašom operačnom systéme si nenápadne/hladko zmanažujú všetky prislúchajúce preradenia – u podielovej (spojovanej obojsmernej preusporiadanej orientácie) grafickej podoby vrátane jej znakov/tvarovaní. Práve toto je do poslednej bodky aj samotným skutočným pravým „spúšťačom", kedy ten absolútne bezchybne odprezentovaný ukázaný text reťazca pod vizuálnou tvárou z plochy okienka/na obrazovke vášho zariadenia pre výstup PDF, napokon tak "spackane – pokazene/dokaaličene" končí rozhádzaný s hrubou roztrúsenosťou u PDF. Dátový tok pre výpis v toku obsahu naozaj žiadny upraviteľný/tvarovateľný/živý formát upravovaného u „editable" textu neuschováva. Udržiava/uschováva len zafixované / určené a pevne umiestnené piktogramy s určenou vizualizáciou pre prejav, vďake čomu, od tohto miesta – akýkoľvek pripojený tvorca – program zodpovedný po export, na ktorý narazí s odchodom generujúc tento vizualizovaný PDF kanál do vlastných pliec dedí oboje spomínané a poprepájané formátovania k vytvoreniu textov do znakov (a to práve pre ten podiel i sprostredkovanej obojsmernosti textu / orientácie s tvarom textov do požadovaného znakového tvarovania vizuálov znakov), ktorý v systémoch OS mal na seba doteraz delegovaný softvér/súbor vášho PC- OS riešenia od pozadia na PC úlohách. `RtLTextOut` patrí medzi tie sľúbené poverené príkazy/operátor, cez ktoré takýto prenesený mandát zo zariadenia navraciate do seba/povolávate naspäť k operácii volaním vo svojich radoch a nástrojovej ponuky
Čo RtLTextOut tvaruje za vás
HotPDF ponecháva cestu s latinkou a cestu s komplexnými skriptmi pre prácu s textom ako dva oddelené spôsoby pre priradené volania s oddelenými aplikovanými metódami na funkcie vo vnútri kódov. `TextOut` zabezpečí "čistú potlač" (nakreslenie) s obyčajným zobrazením, pri tom istom danom obsahu o texte k akému ste si ho požiadali zanechať presne len tak (v takom slede znakov / poradia v riadkoch) ako mu to bolo odovzdané (čiže formátovane pod klasickým zápisom a poradením textu takzvaným štýlom v „left to right" orientácií vo vyznení na predpísanom kódovanom uložení). `RtLTextOut` v protiklade pridelí pre všetky tieto prístupovo aplikovateľné transformačné vlastnosti obidva (obidve „spúšťané cesty s priradeným formátovaním /transformáciami) za prítomného/odovzdaného textového materiálu, čím to presne celé prepája – od prvého prearanžovaného bidi-preusporiadania obsiahnutom na celkovom v celom koncepte predpísanom rozsahu siahajúc po celý riadok / a vrátane "analýz kontextového spojovania" od textových (joiningových spájaných formátovaní a priradení orientačným typom na "pravé" písma z prava do ľava RTL)" a hneď nato vzápätí potlačí/nakreslí tento záznam znakov na ploche k odovzdaniu vizualizácie v ucelenej úprave z formátu a prezentáciou pre čitateľa z východu. Následne otázka smerujúca ohľadne zvažovania prístupu vo výbere určenia a "zistení/nariadení " o akej presnej vizualizovanej forme z vyčlenených podpravidiel na formy vo skripte textu má byť reč, putuje a prichádza k realizácií/potvrdení do rozhodnutia, na presadzujúcej sa rovine presadenou cez znakovú súpravu s "charset-om" pri fontoch písma (do knižnice písma vo zvolenom fonde) namiesto snahy pri hľadaní, na vlastnej kódovej ceste a operátorskom podaní na hovor s volaniami pre spúšťače. Od takéhoto vyobrazeného rozpoloženia sa "smer z prava do ľava a naopak" priraďuje explicitne nastavenou vlastnosťou vo vyčlenenom nastavení z priradených vlastných prijatých voľbových preferencií určených a spárovaných z každého vo vyhradenom mieste pre miesto – volania z nástrojovej lišty príkazov u každej operácii (at every call site) miesto obsluhy automatizovaného prislúchajúceho / priradeného hádania podľa vnesených / aplikovaných vyhodnotení prislúchajúcej zhody nad danou množinou aplikovaných a zmapovaných rozpoznateľných predložených jednotlivých vstupujúcich kódových znakoch (character-ov z formátovania kódovania v Unicode). Samotné po častiach – argumentami dopĺňané a štruktúrovane odovzdané predpisy "nastavovania s argumentmi", zoznam pridelených (podľa normy a podielu vlastností na zápisov/písma na svete stanovených pre font-fonty ) prislúchajúcich stanovených / očakávaných na tabuľkovo podrobne prizvaných a kódovaných platných vlastností - pre určujúci charset pod priloženú kódovú znakovú ponuku u znakovej štruktúry pre množiny ("hodnotách od -charset value-s"), s tým vymenované registračné postupy k ucelenému fontovému zabezpečeniu a prenosne do aplikovanej plnohodnotnej zaručenej spúšťacej zostaviteľnej referencii/kódu aplikovateľného programového príkladu k fungovaniu v celom znení a skompletizované "pre bežný" kód sa pýši celistvou existenciou uschovanou bez akejkoľvek (neustálym prepletaním v článkoch o pozadiach a logike ohľadne kontextoch písma pre orientované prostredia a naopak od piktogramových šablón z knižnice v písme sprava) "záhady/zatemnenia vo forme neúplného materiálu a prístupovej / testovacej formy" u priloženom predloženom materiáli " k " – referenčnému článku/manuálu o - RtLTextOut; Zatiaľ – popritom čo tento čítaný prístupový dokument – "kus odprezentovaného materiálu / záznam v kódových pravidlách prislúchajúci vo svojej roli príspevku" (this piece) bude pre svoj obsah uschovávať a plniť – zatiaľ prebývať pri téme naozaj "len za sprievodnej pomoci/ a pod plnou/prislúchajúcou výbavou o záchranné prežívajúce / vysvetľujúce formátované kódované zmysly, od významu/poslania a formátovaných transformačných premien u bidi od pozadia s významami s premenami textov vo font-och z formátov", spolu s dôležite podaným rozhraničovacím bodom kde ich funkčný vplyv končí na hraniciach – z obmedzení – , s prebiehajúcimi osvedčenými ukážkami podotknutými postupmi ohľadne možnosti – dokazovania kódovej platnosti z overení, vďaka overeniam funkčnej uplatniteľnosti v platnom úspechu na fungujúci stav po spracovaní celistvosti
Jedno zásadné pravidlo o použití má tu svoj obrovský vplyv s dôležitosťou i z „takého nadhľadu", ako sa ukazuje k objasneniu i pred momentom: Odovzdávaný a preklápaný vnášaný (prijímaný a čítaný/odoslaný z vášho kódového toku / programu v zdrojových údajoch) "vstup" pre spracovanie (input) – "nesmie poprieť nutnosť" o svoje uloženie do (v ) plnohodnotnom priamom „logickom poradení / čítanom prístupe" , s tým dôvodným následkom na pamäti kedy u toho všetkého samotné „vyvolanie v podobe operácie pomocou `RtLTextOut`" vykonáva toto nutné kódové a textové preklopenie z bidi smerom od orientácie do opačnej tvárovej verzie celkom za (na ) seba, a pod "takým (nesprávnym pre prístup k odhadom a spoliehaniu v praxi) formátovaním z reťazcov / vstupov s už napol "ručne spraveným/prevráteným/predkloneným posunutým orientačným nastavením" by prešlo cez spracovanie v rozbúranom chaotickom nežiaduco a defektne "vyprodukovanom a obdržanom výstupe z konvertovania do tvarovania textov od (s dvojitým obratom z prehodenej dvojité obrátenej orientácie / double reversed) – pre priložený vysvetlený článkový "návod v referenčnom dokumente k téme / manuáli na referencii / reference article – (ako odkaz pred časom v materiáli už ohlásený) „. Odkaz v spomínanom zobrazení/pomenovaní článku z ponuky / odkaze tu z odkazu – "kráča v priamom priechode krôčikmi z postupu s odvracaním "od kódovej vloženej a usadenej pripravenej nevinne kladené pasce (s ohlásením hrozieb so stiahnutím do slepej kódovej pasce – "s hovorom u zneviditeľňujúcej "trap-y" ), v sprievodnom vyobrazenom uprataní po spŕške (k cleanup-u po zásahu z "double reversal-u" od nežiadúcich účinkov pod pochybení ) za odstránením kódovej "hromady / po-chybenia z obojsmerného toku". Vďakou na to/ čomu by tak naďalej ostala kódová (tá chybová prítomnosť o preklápajúcej/reverzibilnej nepredvídateľnosti – trap) zasadenou požiadavkou v zmienke – odkazoch, "patrí" u podstate prečo zostáva prežívať medzi fázami pri – skúškach z testovania (a prenesenom vžívaní u testoch vo fungovaní s odolnosťou pod útočným kódovaním so záchranou pri odolávaní k prieniku pred chybou na (to survive testing)). Dvojito prevalená (pod kódovým pre-obráteným a neúmyselným omylom "prevrátená z dvojité preklopenia z "obrátení/reversed") "pod čistým rýdzym arabským podaním textov, od orientácie obohatená " z „vymedzeného prečisteného zobrazeného/odprezentovaného kódovo formovaného čisto len a práve- čisto „arabskej verzie / pure-Arabic string", smie neprestajne odpozorovať dokonalo / vizuálne celistvým vzhľadom – do zachovanej bezproblémovosti navonok ukážkovým plne vizuálne bezporuchovým správne – platným obrysom pre prezentovanie znakov vo formátovanom sformovaní správneho orientačného čítania „a padne takmer vždy v rozklade s kódovým defektom pod úder", za podmienok z úkonov „keď vo (v predvedenom stvárňujúcom v predkladanej kódovej línií a riadku na spárovanie / spojenie vo veršovaní/texte)" v riadku ponesie "náklad u seba z obsiahnutej obojsmernej vloženiny textov u " – od „latinských zosieťovaných kódovo vkladaných znakov k textovým prvkami a spájaniu (obsiahnuté zapájané od vnútra na latin word)", "či vložiek z čísel s prístupovým kódovaním o rozsah na počet do formátu čísiel (numbers) , to vo výslednosti spôsobí defektné roztrieštenie z formovania, s príčinou z následkov „pri "vynútenom zamedzení a znefunkčnení pre " vkladané priradené prvky pod "vnášanými sériami k pridaným formátovaným úsekom na "hniezdení do vnorenia vnútra pre (neskúsené nenapadnuteľné a nevyvrátiteľne požiadavky na - nezastupiteľnú / určenú vnorenú vrstvenú textovú prácu ) z požiadavky" (nest the way UAX #9 dictates)". Chyba u tohto faktu, vôbec neleží pochovaná u „procese samotnej grafickej – operácii a spracovania od "zariadenia " ku prenosu znakov - tzn. kódovej vyobrazenosti (od the renderingu pre zobrazenie )"; chyba leží v „kŕmení vo (u podvrhnutí zadaného chodu cez – feeding the algorithm) z kódovej dátovej informácií so zásobovaním algoritmickej bidi spracujúcej logiky / z podvrhnutých údajov o texte na formovanie s uplatnením v čitateľskej zóne" , textu ktorého sa od prvopočiatku prednieslo – doručovalo (na kódové pozadie u požiadavky vo vstupoch v znení - v rozpracovanosti / "za preloženej podoby z prenosu pri úprave/ s usmernením s polovičný rozpracovaním") v kódovej zadefinovanej polovici vo vybavovaní u "už od pol cesty s formátovanou prítomnosťou z priradených rozpoložení o orientačných úprav " (half-processed)"
To na rovnakej kódovej podstate predložené „zmiešané prostredie obojsmerného charakteru na správanie (z (the same mixed-direction behavior) pod rozlíšenou formátovanou vizuálnou prekážkou", zaplieta / pletie posudzovateľov (a z radu s vizuálom k preskúšavaniu vo (v the reviewers) ) omnoho a početnejšie výraznejšie v úsudku a ohodnoteniach z nezdarov u procesoch/zlyhaniach ako by „sa zvykli pošmyknúť za omyly z pochopenej logike u samotných" spletencov z posúdenia so zlým formovaným – v – „(trips up code) kódoch z chýb (v kódovom riešení z vývojárskeho zázemia / kódovacích "výkrikov z chýb pri vývoji") ". Vo vnútri pod "riadkami písanej u / obkolesenej a spútanej od arabskej/sprava – doľava vedenej formálnej črty k orientácie vo formáte s „RTL (a right-to-left line)", pri usporadúvanom zapojenom podaní (k čísliciam - digits)" a k tomu zapojeným „vsadeným / pripojeným vnoreným (na vkladaných znakoch od prítomnosti – "embedded" – prepojeným do celku "od vložených elementov vo vnorených - (od) latinských slov – k latinke z (na the Latin words) zosúladenia sa k preklápaniu) " ostane prítomným i u nezmeneného požiadavku, "pre ponechanie zo stále / a rovnako platného/ z konštantného a pevne naviazaného zachovaného orientovaného správania naďalej pre zachovanú priradenú "zotrvačnosť" o čítaní/s plynulosťou a formálnosťou kódových prechodov o (čítať – prechádzať vizuálnou odozvou pre u čitateľov – v "read zľava na stranu v doľava (na - left to right – a nie k pravidlu z opaku u textu – pri zachovanom / right-to-left z obkolesujúceho formátu))" . Predložený posudzovateľ – (v rovine niekoho „ako posudzujúcej osoby bez/ "kto ešte so spracovaním do obojsmernej formálnej štruktúre z layoutu formátu za prítomnosti bidi nikdy osobne / bez kódovej formátovacej účasti nepracoval s – zosúladením vo formátovacom postupe pre (someone who has not worked with bidirectional layout)" preštuduje (pozrie na) poskytnutý / odovzdaný a vykreslený fakturačný doklad / vizuál u renderingu/pre odovzdanú vyrenderovanú (u "na - rendered / predloženom stvárnení do podkladu vo " rendered faktúre / vo (invoice) ), zbadá/pozrie prečítaným usúdením formou „z čísla účtu plynúcim k usmernenému pohybu (z badateľnej odchýlky) formálnosti z / v „v takzvanom (tzv.) „tom nesprávnom"" („wrong" ) "nasmerovaní formátovanej podobe k/pri z pohľadu v rozpoložení na u (od – plynúcom "the "wrong" way vo vzťahovačnom prístupe pre - relative to the Arabic – pre " v porovnávanom odhade pri u/ na arabskú orientáciu pod okolitým zosieťovaním z pozadia pri priraďovanom podklade (around it) , a zapíše podrobnú výtku na chybový stav o chybnej požiadavke za/a o chybe vo formálnej chybe / na zápis "a bug-u" pre (z podnetu). Takéto zistenie patrí, "u usporiadania ku podstatným spresneným pod (s kódovanou záležitosťou k vyžiadaniu zo "zabezpečenia/zaistenia v podobe u - špecifikačného - the spec-correct " – z vyvolania/k posúdeniu s uistením k (za) správne "korektným spresneným úkonom " o kódovom správnom požiadavku u „výsledku / rozuzlenia zo (na the result)". Odovzdaná vnesená vložená sprievodná kódová "prispôsobená pre-informovanosť u predloženej/ (od pútavého vysvetlenia u formátovacej požiadavky s "krátkym u/vo "sprievodnom ozname pod poznámkou u s a (A short note) – vo v - ) z vašich kódových akceptačných (za pre prijateľnosť s "v) podmienkach pre prispôsobených v u / za-kritériách v od ("your acceptance criteria"), s priloženou / z vytvorenej z pozície vo a ("written pred prvým " od prístupovým a s overovaním z predloženého/ z – the first " / pri z pod/ (native-speaker u "prijímanej kontroly s testovaním – pass") zachráni a ošetrí pred (to zachráni od - u saves u z u (that pred tým – od tohto z "okružného tohto "v " a od round trip") "
Kedy tvarovanie s pospájaním stačí a kedy zas nie
Na účely prislúchajúce a patriace s previazanou kódovou aplikáciou s prislúchaním na (u for) Arabské – a Hebrejské priradené požiadavky od ("v nabaľujúcom/ v pokračujúcom plynutí – running") textov s / pri formátoch do / na "running text" (prebiehajúcim textom) – k (v report-om z , (invoices u s) od / (contracts do z, / letters k "u s listom") - "predstavuje spomínané priradené opätovné usporiadavanie z preusporiadania pri k " od z ("u/za reordering v z " plus v formálnom podaním s "pridaním kontextuálneho pripájania z prispôsobovania v do spájaných formátov – (contextual joining )", úplne ucelenú s celou (tú pre z The whole – na u/k the whole ) job o kompletnej pracovnej uplatniteľnosti v požiadavke práce, a `RtLTextOut` ju vynosí pod plnou samostatnosťou do koncového bodu pre u / za (carries it alone). Vyhradená prislúchajúca kódová vo (v the v the boundary – v línii od u a na "na hranici z obmedzení – u boundary ") vyvstáva / ("vykukne von z v appears / obnaží sa vo/ na - pri ") a "keď o priradených požiadavkách u (v/ z / o typography / v " / a od typografie po s") pod ("asks for / a po "žiarliacej u vznesených prosbách pre v " viacej (z from) od v " (viac ako u more than ) pridanom na a z u („spájaní o z/od - the joining / pri v ( k pripojeniu u / spájanému zlučovaniu vo ) . Predložená kódová vizualizovaná od (HotPDF’s) uschovaná z prístupovej "na/pri (od z the) " do arabskej (za u the Arabic za ) pod ("z a pre od side" v pohľadu/do kódovej strany s/z) po/na za - prispôsobený kódový s priradeným - is ("kódovým" – u a an z opt-in na (do/z) opt-in / u (so) od "prislúchajúcim / kódovo priradeným za/do - producer-side pre do s prispôsobenou tvorcovou stránkou v pod / (od a shaper-tvarovača u tvarovacím spracovateľom/kódovým generátorom pre u u) :" od ("z a od set/ pri nastavení pre od " z u (na pre (Set `AutoShapeArabic := True` " a (and u / na u v ( a komponent the component/komponent a u/k pre/do) u (pre a za z pre prepis a v k pre prepisovanie u s (rewrites v k the) s pre od (s/z / (do logickým na u na/o a logical-order v z/ z / za) k pripojeniu na rad od na u (k z / z rad na /u " (run za) na (smerujúci do k (za/u z od " / do / pre k (to k ) " a the od (Unicode Presentation Forms " pre( / u od na v (z za pre pred (before u z k (the v z a) " z k bidi / v the bidirectional za na z a) na u / z " pass/ pod na " a pass) , do s od za / u ( takže k od (so v z o / za u " na ) z v a pre " na ) u z v joining u na (formy od (z na formáty pre ) za s (forms do u na z u z / " are od na computed / (s na "vypočítané za pre " proti od ) (z against z s od ) od na / pri logical " (na logickým za od na v z (neighbors o za " na do (susedom z u s o pre) (a v u a ) u na/od ligatúrne z za v / " (ligature na u "v) a (záhyby od za / u folds "v do u na z na) o v na pre / (sú v u na a ) pre do z u " are pre (na v z u baked v do (z u / za " pre s v za ) od v u z s " / do u (vpečené pre do od ) " na v / into o na z (do / za od the s za u na) z / od kódových v "od (codepoints z na) od " o v na na the z u do u PDF u za od u na na za ) od s z (actually za ) (od a u z (v z u u na z) vo od s a (carries/ nesie s / od / na v / do z na a ) " , na od " (za z / na s na / do / z (skôr na za od / z rather za u na) od / s u za (ako/v z ) na (v than u na u od) u na z u a za od v (odložené v na / od / pre (left s z u) na z od " z " na u pre s (for v) od / z v za a z (za u s / na prehliadač z u (viewer na) do s na pre u (z / aby v " v k s u s ) z na pre v (vyriešenie v od / k (vyriešil na / s to z resolve od za s ) . Pre " z v s k z (Prepínač z v (The switch u za) z od na (sa predvolene s u / Defaults od ) od z " na / pre do do to v za " za / off na od / v) od za (u na z (do od vypnutej (a z od / a " z u na a ) za u v the s na (výstup z na o ) v na s (je za na ) v / (stabilný na u za (byte-stable na od ) u / z / za z / keď s v o na za (od v when (u za to za na z ) na z/ za / od / v (od a u na o s) od za a " s v u s na z / od ) z na s (zostáva za z (v za it s na / a s stays s od u od (v s ) u v off za (vypnuté z s), od v o u z od s ) / s na (takže z u so od v) z na od z (z (z / s od a) u (jeho od s z " turning (zapnutie na s a ) na za (it u na v z a na / ) o na od u (on s / v a ) v / z u v a (je u s a (u za / od is za / z na ) o na a z a od (vedomé s (deliberate z s / na na (z v ) na od rozhodnutie na (z od a za u ) / na s (za z od o a / z (od / per na) u z ) s / na (pre u a v s (z / a z / v na / a z ) a s / z u) v od z za (dokumentový o za ) za v a pipeline (reťazec na a ) za u , na za nie za z o od / na s) u na od s (globálna za v ) v od / od na od ) s u (na na (z u z a / z upgrade u na). s Ten s v a od (a a istý za o na/ a na za) od v v / a za z z s za o opt-in na s od s za na s z od z od (model z u a) z a za s a / za o na na z / sa za v s / z s (sa (z na a u s extends (rozširuje u za) od a / s u / v a o s / na s u / z o (na s ) s z (ostatné z od s a u na a z / z u na / s u s) od / (spájacie a z a / o / ) na za z / s a z s a / za z (RTL u a / od v / s od z o na / o z na) u na s a (skripty s u a / u / s a) s u (ktoré s u a z ) v za s / s s / s HotPDF v s u a za s z / od na / tvaruje od s (shapes od s z ): od z (sýrske u od s , na a s N'Ko s u a za , a v od Adlam v z a a za s od / a a v (a z od a ) na z s (Hanifi z na a u z s a / Rohingya a o za s a u) , s z na a s u o s (z u pričom od / z za / na) z a na s (každý v a za s od / ) a na a s v u z s s (má s od s / na ) z a na a a v / svoj v / za od z u a s z u a s u s z z na za s a z / vlastný na z s z od s na / u na za (auto-shape za z od na s z u / z a z) v u na za (príznak u s na a / z (flag z a z ) s od a / , z od s / z na s u od (ktorý s a / na od / od s u) s a v o z od z s (zrkadlí a s v a s od z / u s / od / mirrors u s z ) v s s u od a / a od z (ten s z / s u a ) od za u z (arabský a z od s u a )
Voliteľné vlastnosti pre (OpenType) ustavujú u s prepojenia zase u a z iný s od za mechanizmus. v Ligatúry o z na s / z / na (Discretionary za u na a s ligatures v u / ) z a z na u s a z (a a a) v s a za / od / podobné za a v u s u / z / a / s s s / z v (vlastnosti o na u a z za od na z s (z / v a / na) s z od u s z od s / s / (jednej od z (na u a od z a ) / a z od z náhrady u za v / a za z s od / s z z / s s (single-substitution s z o u za z features na a z) s a za a s a (prechádzajú z s u o na s od ) s od a s z / (cez z u na a / a z ) a od na z z `GetSingleSubstituteGlyph(GID, 'liga')` a z v z / z od u / , z od a z / a u a s v (čo z a v z ) na u / a od z z z s / / od (rieši s za od z z ) / u a a za a (jednu od / o / u a z ) od s z u z (náhradu za a u z / ) od a od u (za od s u / u ) s / od a od z z s u s u z / z (druhou z v z / a / s u v (a at a time a s od z ) s za z / u ( – u s od a / ) a v od z v za (najprv z z od / od s a z s u ID od s z / s u z (z od s za s / za / / / vstupného / s u na s o na za (u od s) s a / / s u s u z / glyfu za o u a (input za v glyph u za o s ID z a) s od s z / v za z o (first u s / ) od a / , z a s / a / s od za (potom a / u z / s (z a z na / ) s z s z značka s / na v (s za / v u (tag za v ) u s / a s (z u / a ) s od a z / vlastnosti v o v s a / (u s feature a s za / tag z od s / v s z second za z ) u z a s o / (– v z s ) z v na u s / z a s v od za s / (vráti od s s ) v za od u z z a z na s z (vstupný u z za ) / a v (glyf z od u z u / ) u s z (nezmenený od a z u v a ) od u z z a / a u , a s / u (keď a v v od z o ) s a za z a z s / sa na a a z v od vlastnosť s a za a s a / (u v feature o za a ) / o za / v z u (neuplatní a s od v a o / / a a / za z (does v z s s u s not z u a a a z s od s s / / / apply s u z ) s u s a / od a ( . z s ) o u z o (To s / z u s ) u od (stačí u z / od s u a a ) na od u a v a z na s u / (na s / a z z ) s / riadenie v a / o a z za u z o s z s / známeho u / / v za v a (v u / z / a / a , za / / u v s ) a u (konečného / v z od (v / za / a u a / ) s a z o (zoznamu v z o u a z ) s od / a v ligatúr a s u v z u , a z u od (ktorý z z / u od ) s a a u (si a / z a ) u z z za udržiavate u od s u a a v / sami / u v s / . v / za a s u / u a / Nie z za s / je a u a a a o to v u z s z od v s plný s za a a za z / s a z (GSUB z z ) od s s z z a engine u a z u , v od z a a a z s / u s z od s / z o a z z (rozdiel a s za s z / od ) od s je z a o od (presne v o za u s a / ) z a z / o v z s s / a v v z tam z / s o a od s v , za a u v u kde v a a a z o s od u ambiciózne a z s s o s plány v za o z a s a z o / o z (pre a / z s u / ) a v v u (lokality za z v ) / a s z z (go a od wrong z a a a : u a / a ) v a / v o (tvarovací a od v s u z s ) za z v a (reťazec u / a z od a v , a od u / ktorý o / u od z a (zvláda s u u / u o z arabčinu u v o s a ) od a a bezchybne o u u s / z v a , a / od za s (preukázal s o a a ) od u a / u (zmenu s z a / u poradia z s s z a a v v u (reordering a u s s u ) od z / v s a za / u a a z v z u spájanie a / u od za / z v u / (joining o od / z u a a , u / s u s a / ) u v (nič v z a s a v viac s s od / od ) u s a z . v / a
Pokrytie naprieč skriptami
Arabčina precvičuje obe transformácie, čo je dôvod, prečo je to reťazec na testovanie, a prečo je preukázaná arabčina tým najsilnejším dôkazom toho, že reťazec (pipeline) funguje. Hebrejčina potrebuje preskupenie, ale nie spájanie, keďže jej písmená stoja samostatne; ak sa hebrejčina vykreslí správne, ale arabčina vyjde rozpojená, obojsmerná polovica je v poriadku a kontextová polovica sa nikdy nespustila. Perzština a urdčina jazdia na arabskom skripte a dedia jeho správanie, hoci preferencia urdčiny pre štýl Nastaliq je rozhodnutím o písme s dôsledkami pre čitateľnosť, ktorú by mal posúdiť rodený čitateľ
Thajčina sedí úplne na druhej strane čiary. Beží zľava doprava, takže nepotrebuje žiadnu obojsmernú prácu, a jej písmená sa nespájajú, takže nepotrebuje kontextuálnu analýzu; thajské reťazce prechádzajú obyčajnou cestou TextOut ako latinka. Čo thajčina má, sú poskladané značky - samohlásky a tónové značky nad a pod základnou spoluhláskou - a to, či tie sedia správne, závisí od toho, či si písmo buduje svoje kombinované značky tak, aby sa poskladali bez pomoci tvarovacieho enginu. Väčšina dedikovaných thajských písiem to robí. Testujte s presným písmom, ktoré vložíte, nie s napodobeninou
Dévanágarí a zvyšok indickej rodiny sú poctivým tvrdým dorazom. Ich samohláskové znaky sa preskupujú okolo zhlukov spoluhlások a ich spojené tvary (conjuncts) sa tvoria prostredníctvom reťazcov kontextovo závislých substitúcií, čo je plné GSUB územie, ďaleko za preskupovaním a spájaním. Ak je v pláne indická lokalita, spustite skutočný pilotný projekt na skutočných zákazníckych reťazcoch, predtým ako to sľúbite - fungujúca arabčina nie je dôkazom, že dévanágarí bude fungovať. CJK reťazce, vietnamčina so svojimi poskladanými diakritickými znamienkami a zmiešaný európsky text naberajú všetky bežnú cestu bez obojsmernej analýzy, a oplatí sa udržiavať tieto dve cesty fyzicky oddelené v kóde zostáv, jedna rutina pre RTL behy a jedna pre všetko ostatné, takže logika lokality je viditeľná v mieste volania namiesto toho, aby bola skrytá za príznakom, ktorý niekto zabudne nastaviť
Pokrytie piktogramami (glyfmi) je rozhodnuté ešte pred samotným spustením tvarovania
Tvarovanie vyberá glyfy z písma. Ak ich písmo nenesie, nie je z čoho vyberať, čo je dôvod, prečo klasické zlyhanie pri nasadení - bezchybné na stroji vývojára, prázdne štvorčeky na serveri zákazníka po tichom nahradení písma - je problémom s pokrytím, nie s tvarovaním. Praktický liek, ktorým je registrácia písma, ktoré dodávate, namiesto spoliehania sa na to, čo má počítač nainštalované, je krok za krokom prebratý v referenčnom článku. Konceptuálnou pointou je, že pokrytie musí byť preukázané ešte predtým, ako je vôbec zmysluplná akákoľvek otázka tvarovania, a to sa dá zistiť programovo, nielen vizuálnou kontrolou výstupu
// After RegisterUnicodeTTF, audit coverage for the
// codepoints your data actually uses
GID := Pdf.GetUnicodeGlyphForCodepoint($0628); // U+0628 ARABIC LETTER BEH
LogGlyphAudit($0628, GID);
Samotná registrácia nesie dve obmedzenia - základnú úroveň (spodnú hranicu) PDF 1.5 pre spracovanie vloženého kódovania Unicode a bity povolení na vloženie pre konkrétne písmo - obe sú popísané spolu s krokmi nastavenia v referenčnom článku RtLTextOut. To, čo sem patrí, je zvyk auditu: GetUnicodeGlyphForCodepoint je váš systém včasného varovania. Prejdite rozsahy kódových bodov, ktoré vaše dáta pri štarte služby skutočne využívajú, a zapíšte do denníka, aké ID glyfov sa vracajú. Akákoľvek medzera v pokrytí sa potom ukáže ako riadok v štartovacom logu počas nasadenia, a nie ako chýbajúce znaky na faktúre, ktorá už dorazila k zákazníkovi
Poradie čítania (smer) patrí k dokumentu, nie ku glyfom
Aj keď sú všetky glyfy nastavené správne, stále zostáva jedna vec nedokončená. Norma ISO 32000-1 §12.2 definuje preferenciu prehliadača (viewer preference) s názvom /Direction, ktorá uvádza celkové usporiadanie (smer) čítania pre dokument. Netýka sa to žiadnych piktogramov/glyfov. Robí to to, že prehliadaču hovorí, ako má usporiadať zobrazenie viacerých (dvoch) stránok rozložených vedľa seba, z ktorej strany by malo takéto zobrazenie rozbaľovať strany, a ktorým smerom by sa malo nakláňať (smerovať) celé čítacie rozhranie v aplikácii (UI). Nič z tohto ale nevidno na jednotlivej stránke, čo je presne ten dôvod, prečo sa na to tak často zabúda
// Declare right-to-left reading order at the document level
Pdf.Direction := RightToLeft; // adds vpDirection to ViewerPreferences
Nastavenie Direction je celou prácou: "setter" tejto vlastnosti len pridáva konštantu vpDirection do priradenej premennej ViewerPreferences vášho dokumentu, čím tento jeden jednoriadkový príkaz zavedie patričnú preferenciu s nastavením priamo do súboru. V situácii, pokiaľ ten váš text mieri von cez využitie funkcie RtLTextOut, máte to automaticky zdarma k dispozícii, keďže podané volanie v dôsledku toho už v pozadí ako bočný efekt otočí samotný smer u dokumentu – odkazujúci referenčný článok sa rovnako zaoberá prípadmi, kedy by zmiešaný obojsmerný dokument takýto zásah potreboval vrátiť (zvrátiť späť). Prípad, kde to tak pre zmenu musíte nastaviť manuálne z vlastnej ruky, je pri akomkoľvek "z-prava-do-ľava (right-to-left)" formátovanom dokumente tvorenom v akomkoľvek inom kontexte a prístupe (vyprodukovanom iným spôsobom), napríklad v takých prípadoch so zadefinovaným vstupom, aký ste vo svojom podaní stihli dopredu s predstihom vytvarovať (pred-tvarovali) formátovaním zhora (upstream), aby následne prešiel cez nákres/kreslenie štandardným obyčajným úkonom / dráhou. Pokiaľ by ste tento úkon vynechali, jedinečný izolovaný test - prezeranie pod single/jedinou "na stranu obmedzenou" (one-page/single-page) náhľadovou kontrolou, do ktorej pozeráte - vyzerá vizuálne (opticky) na zhodu a úplne navlas rovnako v obidvoch variantoch (je rovnako identický u "buď/alebo"); avšak následne, keď na to niekto (na výstup pošle/dá vytlačiť) u seba zadá obojstrannú tlač do brožúry z duplexu (dvojité/obojstranné), dvojstránkové strany vybehnú zo stroja vytlačené ako zrkadlovo preklopené naruby a príčinou bola chýbajúca len táto (už zabudnutá) jednoriadková absencia v kóde z obdobia pred týždňami
Overenie tvarovaného výstupu
Overujte z jedného konca na druhý (end to end), pretože stránka môže vyzerať správne a pritom byť nanič pre všetko nadväzujúce (downstream). Väčšinu problémov odhalia tri kontroly. Skopírujte text späť z Acrobatu a porovnajte kódové body so zdrojovým reťazcom. Spustite vyhľadávanie v dokumente pomocou prehliadača na slovo, ktoré vidíte na stránke. A otvorte výstup na stroji, ktorý nemá vaše vývojárske písma, teda na tom, ktorý s najväčšou pravdepodobnosťou odhalí substitúciu. Nič z toho nenahradí rodeného čitateľa prezerajúceho jeden skutočný dokument, ktorý zachytí veci, aké nezachytí žiaden syntetický korpus. Dostaňte túto recenziu do kalendára predtým, ako formát pôjde do produkcie
Vyberajte testovacie reťazce s úmyslom, namiesto recyklovania toho, čo poslal prekladateľ minulý rok. Použiteľné minimum pre jednu lokalitu: veta v čistom skripte, veta s vloženými názvami značiek v latinke, riadok nesúci číslice a menu a mená s diakritikou alebo kombinačnými znakmi. Skutočné mená zákazníkov narúšajú predpoklady, ktoré výplňový text necháva nedotknuté, takže nechajte regresnú sadu narásť o jeden reťazec zakaždým, keď prípad podpory odhalí vzor, aký ste predtým nevideli
Registrácia písma, vytváranie podmnožín a každodenné API pre kreslenie textu sú pokryté v článku o reportovom výstupe, písmach a obrázkoch s HotPDF. Keď musia rovnaké dokumenty spĺňať aj profily prístupnosti, pravidlá pre označovanie jazyka a štruktúry v článku o validácii PDF/A a PDF/UA sedia nad tu popísanou prácou na tvarovaní
API pre sprava-doľava (right-to-left) orientáciu formátovania pre texty ako aj funkcie na Unicode z rozhrania u (pre fonty pre u spravovanie s font API) popísané v odkazovanej práci nad/vyššie (popisované hore/vyššie/above), prichádzajú v balíku na prenos so (sa dodávajú / predávajú (s) distribučne v dodaní lode so od ) distribučným začlenením u a/s komponentom HotPDF určeným pod a/pre k/do vývoj v (for) platforme s "Delphi a taktiež v produkte u prostredí s (a za /) v pre prislúchajúci balík k - C++Builder"; a k tomu príslušná vyhradená pripnutá stránka v profile od (samotného - u produktu pre (na a the product page ) vo verejnom dosahu priraďuje (odkazuje prepojením/odkazom - s pre linkom / s the full) presmerovanie po linkoch z internetových prepojení do spájania pre sprístupnenie "plnotučnej - v kompletnej referenčnej zbierky - pre the z full u (v reference ) na zobrazenie od z (z dokumentačného zoznamu u text-output za pre výpis v the na za z reference)" / k (a the / z plným/na u full) k (k / za u k / u the / pre plnej plný k "a / z the " za (na z (za k na the plnú/kompletnú a v the text u z a u text - z v od ) textovú výstupnú na referenciu (text-output reference))