phpFashion

Rubrika Texy!

Přidejte si značku {texy} do Latte

Knihovna Texy od verze 3.1.6 přidává podporu pro Latte 3 v podobě značky {texy}. Co umí a jak ji nasadit?

Značka {texy} představuje snadný způsob, jak v Latte šablonách psát přímo v syntaxi Texy:

{texy}
You Already Know the Syntax
----------

No kidding, you know Latte syntax already. **It is the same as PHP syntax.**
{/texy}

Stačí do Latte nainstalovat rozšíření a předat mu objekt Texy nakonfigurovaný podle potřeby:

$texy = new Texy\Texy;
$latte = new Latte\Engine;
$latte->addExtension(new Texy\Bridges\Latte\TexyExtension($texy));

Pokud je mezi značkami {texy}...{/texy} statický text, tak se přeloží pomocí Texy už během kompilace šablony a výsledek do ní uloží. Pokud je obsah dynamický (tj. jsou uvnitř Latte značky), zpracování pomocí Texy se provádí pokaždé při vykreslování šablony.

Pokud je žádoucí Latte značky uvnitř vypnout, dá se to udělat takto:

{texy syntax: off} ... {/texy}

Do rozšíření lze kromě objektu Texy předat také vlastní funkci a tak umožnit předávat ze šablony parametry. Kupříkladu chceme mít možnost předávat parametry locale a heading:

$processor = function (string $text, int $heading = 1, string $locale = 'cs'): string {
	$texy = new Texy\Texy;
	$texy->headingModule->top = $heading;
	$texy->typographyModule->locale = $locale;
	return $texy->process($text);
};

$latte = new Latte\Engine;
$latte->addExtension(new Texy\Bridges\Latte\TexyExtension($processor));

Parametry v šabloně předáme takto:

{texy locale: en, heading: 3}
...
{/texy}

Pokud chcete pomocí Texy formátovat text uložený v proměnné, můžete použít filtr:

{$description|texy}

Texy 3.0: do dokonalosti se nezasahuje

Něco jako když zahlédnete plakát ke koncertu kapely, kterou si vybavujete z mládí. Oni stále hrají? Nebo se dali dohromady po letech, protože potřebují peníze? Něco vyždímat na strunách nostalgie?

Texy je můj první open source projekt. Začal jsem ho psát před patnácti lety. Texy přežilo několik verzovacích systémů. Několik webových služeb hostujících repositáře. Několik kódování řetězců. Několik značkovacích jazyků pro tvorbu webových stránek. Několik mých životních vztahů. Několik měst, ve kterých jsem bydlel.

Texy je tady stále, protože neexistuje nic lepšího.

Takže jej patnáct let udržuji up-to-date. Začínali jsme v PHP 4, což byl ten nejhorší programovací jazyk na světě a tedy výzva, pak s úlevou přešli na PHP 5, o pár let později se ukryli do jmenného prostoru (Texy::Parser místo TexyParser, wow), sledovali, jak PHP přestávalo být nejhorším jazykem na světě, což otrávilo spoustu programátorů, kteří si našli náhradu v JavaScriptu, poté bůh stvořil PHP 7 a s ním typehinty (Texy::process(string $text): string megawow) a do módy přišla striktnost declare(strict_types=1) a tu my ctíme.

A proto je tu Texy 3.0.. Jde o úplně totéž, jako předchozí verze, ale má všechny vychytávky PHP 7.1. Je to úplně totéž proto, že do dokonalých věcí se nezasahuje.

Texy tu bylo, když jste se narodili. Programátorsky. Texy jednou bude formátovat váš epitaf. A mezi v a pokoji vloží nedělitelnou mezeru.


Texy2 pro PHP 4 - killer jedničky?

I letos jsou tomu právě tři roky, co se objevilo PHP verze 5. V soupeření s předchůdcem PHP 4 zatím moc úspěšné není. Zastoupení obou verzí je cca 17% vs. 83% ve prospěch čtverky. Mimochodem, z toho by šla vymyslet zajímavá matematická hádanka na téma pravděpodobnost, že? 🙂

Nové aplikace nemá smysl psát ve starém PHP4. Stejně tak i Texy2 jsem pojal jako čistě pětkovou knihovnu, plně využívající nový objektový model a lehce i výjimky. Nicméně mezi aplikací a knihovnou je rozdíl – knihovna nemá aplikaci omezovat. A proto chápu, že absence podpory pro PHP4 je velmi omezujícím faktorem Texy2.

Rozhodl jsem se oprášit svůj PHP 5 → 4 převodník, při vší skromnosti zcela jedinečný programátorský zázrak 🙂 a pokusil se vygenerovat Texy2 pro PHP4. Převodník se pochlapil, úkol zvládl výborně a stačilo jen několik manuálních zásahů do kódu. Knihovnu jsem otestoval na cca 25.000 fragmentech a šlape naprosto skvěle.

Ba co víc! Objekty se nyní chovají „pětkově“, to znamená, že se nemusíte trápit s ampersandy:

// místo
$texy = & new Texy;

// stačí
$texy = new Texy;

Texy2 je zatím stále ve fázi beta. Na základě uživatelského feedbacku mám připravený asi tříbodový TODO seznam, který chci do ostré verze zapracovat, půjde však o hlubší zásahy do celkové koncepce, takže zatím vyčkávám, až bude tzv. „volný čas“. Nevíte, kde se dá sehnat? Dlouho jsem ho nikde neviděl, koupím, dobře zaplatím!


Parádní Texy nástroje

Mohli chodit s kamarády do hospody. Mohli dovádět s děvčaty. Mohli si vydělat slušné peníze. Ale oni řekli NE a raději psali open source.

S radostí se podělím o pár tipů na nástroje, díky kterým může být život s Texy ještě více sexy.

Texy editory

Když píšete text ve formuláři, může vás zajímat, jak bude vypadat po zformátování. Zobrazit náhled bez nutnosti znovunačíst celou stránku (resp. odeslat formulář) umí technologie AJAX. Ta dokáže webovou aplikaci učinit mnohem uživatelsky příjemnější.

Když se k tomu ještě přidá hezké a intuitivní prostředí, vznikne editor Texyla od autorů Petra Vaňka a Honzy Marka. Vyzkoušejte si ho! Vážně paráda.

Texy naruby

Přesněji řečeno „na Ruby“. Převod celé knihovny do jazyka Ruby má na svědomí Rane a projekt nese název Texier.

Přes webovou službu XML-RPC zprovoznil Texy pod platformou .NET Aleš Roubíček – Texy.net.

A teď úplně naruby

Nástroj pro zpětný převod z HTML do Texy se jmenuje … (chvíle napětí) … html2texy!. Toto řešení od Jakuba Roztočila je zajímavé v tom, že jde o XSL skript.

Neodpustím si upozornění: dokument zapsaný v Texy není ekvivalentem výsledné HTML stránky. Tedy není možné ve webové aplikaci ukládat do databáze HTML kód a ten před editací zpětně převést do Texy a nabídnout uživateli. Do databáze vždy ukládejte zdrojový text v Texy.

Znáte nějaká další udělátka pro Texy? Svěřte se v komentářích.


Texy2 – ještě více sexy!

Texy2 je obrovským skokem kupředu. Dokonalejší, šikovnější, maximálně přizpůsobitelné. A především – ještě více sexy! Programátoři webových aplikací si mohou spokojeně pochrochtávat ;)

A to dvojka původně vůbec vyjít neměla. Ale nepředbíhejme…

Jak se navrhuje software

Nejlepší analýzu programu uděláte tak, že ho naprogramujete. Teprve poté zjistíte, co od něj skutečně potřebujete. A teprve poté ho můžete napsat doopravdy a perfektně.

Toho jsem si byl vědom při psaní Texy 1. Nechtěl jsem sepisovat dokumentaci API, nepřekládal jsem web do jiných jazyků. Věděl jsem, že tohle je jen cvičení na to doopravdické Texy.

První verze byla porod, protože jsem musel rozlousknout hromadu oříšků. Vymyslet, jak to vůbec dělat. Není to legrace. Ono se třeba řekne: „Texy bude vkládat nedělitelné mezery mezi předložku a slovo“. A ono by se myslelo, že se na to napíše regulární výraz, který najde v lese a zamění za v lese.

Jenže, poradí si i s tímhle: v <strong>lese</strong>? Ano, sem nedělitelná mezera patří taky. Jakpak by ne? Že budeme filtrovat řetězce v ostrých závorkách? Fajn, ale co třeba tento vstup:

v <span title="3 > 2">lese</span>

Říkáte důmyslnější filtrování HTML značek? Moment, ale pokud se tam objeví kupříkladu značka <br>, tak už tam nedělitelná mezera nemá co pohledávat. Tedy žádné filtrování, ale analýza.

Nebo … nebo prostě co třeba tohle? 🙂

&#x76; <span title="les > obora"> &#x0020;
<!-- hehe --></span> &#32; &#x6C;ese

Stále jde o písmenko v následované mezerou a slovem lese. Tak, a teď si zkuste jen v hrubých rysech navrhnout ten regulární výraz ;)

Texy2 to samozřejmě umí. A jde jen o jednu z tisíce vlastností.

Nicméně preciznost převodu není hlavním tahákem Texy2. Kdepak, to je jen takový projev dozrávání starších myšlenek. Tou skutečnou bombou je maximální přizpůsobitelnost.

Texy je flexi + bilní

Nyní můžete snadno změnit chování jakéhokoliv prvku dokumentu. Potřebujete nad Texy2 postavit wiki? Tj. ovládat všechny odkazy na stránce? Mně na to stačilo jen několik řádků kódu.

Potřebujete generovat obsah podle titulků? Chcete vkládat flashové animace pomocí [* movie.swf *]? Chcete všem frázím "ahoj .(popis)" automaticky přidat CSS třídu? Můžete! A nesmírně snadno.

Některá řešení najdete přímo v distribuci, především však v dokumentaci, která zatím není 🙂 Existuje alespoň stručný changelog. Je mi líto, mám teď tak důležité úkoly, že na psaní manuálu není čas. Nicméně web Texy je včil koncipován tak, že vznik dokumentace nemusí záviset jen na mně.

Texy2 je tu

Texy2 nemělo vyjít. Zjistil jsem, že nemám žádnou motivaci uvolňovat svůj software jako open source. Nese to sebou řadu omezení, ve vatě nebudete (tedy v ČR), kdekdo otravuje s podporou, narážíte na idioty. Kdyby mě neukecala Žirafka & spol. na minulé HBWBH, asi bych si je syslil jen pro sebe.

Dnes vypuštěná revize s hezkým číslem 111 je první oficiální betaverzí Texy2. Stahujte, hrejte si, testujte.


Texy! proti komentářovému spamu

S komentářovým spamem se na La Trine prakticky nesetkávám. Lví podíl na tom má funkce náhled komentáře, jejímž vedlejším efektem je odrazení spamerů. Takže konkrétní podobu spamů příliš neznám, ale tipuji, že většinou půjde o pouhé shluky odkazů. Je to tak?

Pokud formátujete komentáře pomocí Texy!, pak by se vám mohla hodit následující finta. Texy všechny odkazy, na které při formátování narazí, zapisuje do sumáře. A je jedno, jestli byl odkaz zapsán HTML značkou <a href> nebo Texy syntaxí.

$texy = new Texy;
$html = $texy->process($text);

// seznam odkazů
$links = $texy->summary->links;

// pozor - pro verzi 1.2 a novější je to
$links = $texy->summary['links'];

print_r($link);

Takže po zformátování komentáře se mu můžeme podívat na zoubek a zjistit, zda-li nejde o spam. V praxi by nejspíš stačilo omezit počet odkazů v komentáři…

if (count($links) > LINK_LIMIT) ...

…případně stanovit nějaký rozumný poměr mezi délkou textu a počtem odkazů…

if (strlen($text) / count($links) < LINK_RATIO) ...

…nebo dokonce jednotlivé odkazy analyzovat.

foreach ($links as $url)
{
	if (...)
}

Ale to už je jen na vás 🙂


Revoluční WYSIWYG editor

Ještě včera večer jsem si stýskal Jirkovi Chomátovi, že už dlouho toužím po prohlížečovém editoru se zvýrazňováním syntaxe. Nic takového jsem na internetu nenašel a tudíž se mě zmocňoval pocit, že jde o technicky neřešitelný kousek. Ale už krátce po deváte jsem hrdě hlásil JohnymuB: „Heuréka!“

Texy! je sexy!
Je Texy sexy?

Jak nejspíš tušíte, zvýrazňovat jsem chtěl právě Texy! syntaxi. Aby se úpravy textů stala ještě příjemnější, aby byla sexy 🙂 Ukázku technologie si můžete už teď prohlédnout. Zatím funguje pouze v IE verze 5.5 a 6 a podporována je jen část syntaxe (nicméně ta nejpoužívanější). Chyb si prosím nevšímejte, skutečně jde jen o náhled, kam se bude další vývoj ubírat.

Ironií osudu WYSIWYG

Pro některé příznivce může znít spojení slov WYSIWYG Texy! Editor jako aprílový žertík. Žádný paradox v tom ale není. To jen z alternativy se stává killer ;)



Najdete rozdíl?

Příběh první

Dobrý den,

chtěl bych vám říct, že se chystáme začlenit Texy do CMS, který naše společnost vyvíjí. Rád bych si s Vámi ujasnil podmínky licence. Pokud klientovi dodáme náš systém bez Texy! a teprve on si ho doinstaluje, bude to v souladu s GPL licencí? Náš systém je samozřejmě funkční i bez Texy!

Děkuji za odpověď a jsem s pozdravem

### #######
######## ### s.r.o.

(podle informace z webu stojí základní modul CMS od této firmy cca 20.000 Kč)

Příběh druhý

Ahoj DGX!

Píši si vlastní CMS. Velmi se mi líbí TEXY!. Takže tímto za něj velmi děkuji. :) Mám v plánu zabudovat ho do svého systému, a nebyl by pro mne problém ten systém uvolnit pod GPL licencí, ale rád bych tě nějak „podpořil“, tím myslím finančně. Chtěl bych se zeptat, kolik by stála licence (kterou sice zas tak nutně nepotřebuji, ale rád ty peníze na vývoj skutečně geniálního Texy věnuji). Mé finanční zdroje nejsou neomezené, ale pokud to jen trochu půjde, rád bych Tvoji snahu podpořil.
Díky!

Tomáš Vítek

(Tomáš mi poslal 1000 Kč, což je vůbec první dobrovolný příspěvek a tímto mu děkuji)

Co dodat?

To první „story“ mě vážně netrápí, takovým věcem se prostě směji. Navíc jde o ojedinělou záležitost. Což vlastně platí i pro druhý příběh, ale ten mě naopak velmi potešil. Jen zatím nevím, jak to vyřešit účetně… 🙂


Texy! tak a je to venku!

Texy is sexy Texy! už žije a má se čile k světu!

Když jsem si pročítal Vaše e-maily a ohlasy týkající se Texy!, uvědomil jsem si, že se zrodil zajímavý fenomén.
Texy! se stal symbolem, Godotem, na kterého spousta lidí čeká. Mnohdy netrpělivě. Některé weby s Texy! počítají jako cestou budoucího vývoje, jiné jej dokonce už nasadily. Četl jsem názor, že Texy! odstartuje revoluci v oblasti CMS a nahradí WYSIWYG editory. A naopak jiný chlapík se ptá, zda bude mít Texy! i WYSIWYG? „Cekam na to jako na smrt!“ zaznělo v komentářích.

Vzhledem k tomu, že o Texy! byl donedávna publikován jen jeden jediný článek a nikdo jej neviděl, je to výborné skóre 🙂

Texy! už je sexy

Takže odedneška je Texy! oficiálně venku. Zatím v betaverzi, je třeba vychytat chybičky, doladit syntax. Proto budu rád, když jej podrobíte náročným zkouškám.
V betaverzi je i samotný web. Chci vylepšit texty, stránku Syntax rozdělit na více menších a možná i přidat fórum.

O výběru licence jsem už dříve informoval, nakonec jsem zvolil duální model – GPL + komerční licence. Takže jej můžete zdarma používat pro svou potřebu (budu rád za link) a můžete jej zahrnout do svých GPL aplikací. A pokud jej chcete implementovat ve svém komerčním CMS, kontaktujte mě a domluvíme si podmínky zvláštní licence.

A abych nezapomněl: najde se někdo s výbornou znalostí angličtiny (případně jiného jazyka), který by mi za cenu zveřejnění jména s odkazem a z toho plynoucí věčné slávy pomohl s překladem? Díky 🙂

A ještě pár odkazů:


phpFashion © 2004, 2025 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.