Nejspíš jedna velká třída se spoustou funkcí, některé sdílené i mezi HTML a TeX pipelinami. Třída se dá poté overridovat, KSP si pomocí toho může například handlovat svoje fancy odkazy.
Nejspíš jedna velká třída se spoustou funkcí, některé sdílené i mezi HTML a TeX pipelinami. Třída se dá poté overridovat, KSP si pomocí toho může například handlovat svoje fancy odkazy.
Je hezké, že se spousta typů ošetří voláním generické funkce ve stylu generate_simple_inline_tag, ale není mi jasné, proč se jí vždycky explicitně předává název tagu získaný voláním self.tagname(e) a atributy získané z self.common_attributes(e). Nestačilo by, kdyby si tohle funkce generate_simple_inline_tag zjistila sama? Volající by to případně mohl overridovat nepovinným parametrem, kdyby potřeboval.
Nebylo by lepší, kdyby funkce typu self.stag rovnou zapisovaly do výstupu, místo aby vracely string? (Aha, jasně, teď někdy voláš writeln a někdy write... možná z toho udělat booleovský argument? Viz níže.) Možná by se také mohly jmenovat nějak intuitivněji. Třeba start_tag?
Podobně iup a idown bych raději pojmenoval méně zkratkovitě. Třeba indent_up a indent_down? (Přemýšlím, jestli rovnou nevyrobit funkce pro otevření a zavření "blokového" tagu, které se budou starat i o indentaci. Tím by se vyřešilo i to, že je někdy potřeba write a jindy writeln.)
U metod, které obecný OutputGenerator volá, ale čeká, že je nadefinují až potomci (třeba tagname), by bylo hezčí, kdyby je sam nadefinoval s nějakou prázdnou implementací (třeba ... nebo vyhození výjimky). Pak bude jasnější, jak vypadá rozhraní.
V escape_special_chars pro HTML děláš věci jako text = re.sub(re.compile(r"&"), "&", text). Jednak mi není jasné, proč regex explicitně kompiluješ. Ale hlavně nevím, proč vůbec regex, když by to zvládla metoda replace na stringu.
V HTML bych asi odlišoval escapování textu od escapování atributů. V textu není potřeba escapovat uvozovky.
V HTML bych neescapoval triviální hodnoty atributů (například rozměry obrázků).
Slovníky překládající typy na funkce bych vyrobil jednou v čase kompilace místo při každém vstupu do funkce.
První dojem: Líbí se mi to.
Zde je pár nápadů:
- Je hezké, že se spousta typů ošetří voláním generické funkce ve stylu `generate_simple_inline_tag`, ale není mi jasné, proč se jí vždycky explicitně předává název tagu získaný voláním `self.tagname(e)` a atributy získané z `self.common_attributes(e)`. Nestačilo by, kdyby si tohle funkce `generate_simple_inline_tag` zjistila sama? Volající by to případně mohl overridovat nepovinným parametrem, kdyby potřeboval.
- Nebylo by lepší, kdyby funkce typu `self.stag` rovnou zapisovaly do výstupu, místo aby vracely string? (Aha, jasně, teď někdy voláš `writeln` a někdy `write`... možná z toho udělat booleovský argument? Viz níže.) Možná by se také mohly jmenovat nějak intuitivněji. Třeba `start_tag`?
- Podobně `iup` a `idown` bych raději pojmenoval méně zkratkovitě. Třeba `indent_up` a `indent_down`? (Přemýšlím, jestli rovnou nevyrobit funkce pro otevření a zavření "blokového" tagu, které se budou starat i o indentaci. Tím by se vyřešilo i to, že je někdy potřeba `write` a jindy `writeln`.)
- U metod, které obecný `OutputGenerator` volá, ale čeká, že je nadefinují až potomci (třeba `tagname`), by bylo hezčí, kdyby je sam nadefinoval s nějakou prázdnou implementací (třeba `...` nebo vyhození výjimky). Pak bude jasnější, jak vypadá rozhraní.
- V `escape_special_chars` pro HTML děláš věci jako `text = re.sub(re.compile(r"&"), "&", text)`. Jednak mi není jasné, proč regex explicitně kompiluješ. Ale hlavně nevím, proč vůbec regex, když by to zvládla metoda `replace` na stringu.
- V HTML bych asi odlišoval escapování textu od escapování atributů. V textu není potřeba escapovat uvozovky.
- V HTML bych neescapoval triviální hodnoty atributů (například rozměry obrázků).
- Slovníky překládající typy na funkce bych vyrobil jednou v čase kompilace místo při každém vstupu do funkce.
U metod, které obecný OutputGenerator volá, ale čeká, že je nadefinují až potomci (třeba tagname), by bylo hezčí, kdyby je sam nadefinoval s nějakou prázdnou implementací (třeba ... nebo vyhození výjimky). Pak bude jasnější, jak vypadá rozhraní.
Taková metoda existuje? tagname, který zmiňuješ, má implementaci tady. Souhlasím, že by měl OutputGenerator implementovat všechny metody, které čeká.
iup, ido, stag...
Jojo, asi máš pravdu, já jsem původně myslel, že se budou používat častěji a mít tam celé názvy by byl pain, ale AutoComplete existuje... Předělám.
proč regex?
Z nějakého důvodu jsem si myslel, že to je rychlejší než stringový replace, ale teď na to koukám, že není, předělám.
simple... funkce
Teď mě ještě napadlo, že by bylo asi výhodnější, umět tagname, atributy, ale i obsah overridenout, ale může tam být default, pak půjde i čášt kódu zjednodušit. Zkusím se ještě zamyslet nad tím, jak tyhle základní funkce, spolu s write,stag, vylepšit.
Slovníky překládající typy na funkce bych vyrobil jednou v čase kompilace místo při každém vstupu do funkce.
Jasný, to zní líp.
V HTML bych asi odlišoval escapování textu od escapování atributů. V textu není potřeba escapovat uvozovky.
Jaká je za tímto motivace? Rychlost nebo čitelnost výsledného zdrojáku? Co je možná zajímavé dodat je, že normální uvozovky se vzhledem k chytrému uvozovkovátku v textu spíše neobjeví, takže se jich tolik neescapuje.
V HTML bych neescapoval triviální hodnoty atributů (například rozměry obrázků).
Stejná otázka, není mi moc jasné, proč z escapování dělat nějaké výjimky, nadměrné escapování nemůže uškodit, ne?
> U metod, které obecný OutputGenerator volá, ale čeká, že je nadefinují až potomci (třeba tagname), by bylo hezčí, kdyby je sam nadefinoval s nějakou prázdnou implementací (třeba ... nebo vyhození výjimky). Pak bude jasnější, jak vypadá rozhraní.
Taková metoda existuje? `tagname`, který zmiňuješ, má implementaci [tady](https://gitea.ks.matfyz.cz/KSP/formatitko/src/branch/master/src/formatitko/output_generator.py#L69). Souhlasím, že by měl OutputGenerator implementovat všechny metody, které čeká.
> iup, ido, stag...
Jojo, asi máš pravdu, já jsem původně myslel, že se budou používat častěji a mít tam celé názvy by byl pain, ale AutoComplete existuje... Předělám.
> proč regex?
Z nějakého důvodu jsem si myslel, že to je rychlejší než stringový replace, ale teď na to koukám, že není, předělám.
> simple... funkce
Teď mě ještě napadlo, že by bylo asi výhodnější, umět tagname, atributy, ale i obsah overridenout, ale může tam být default, pak půjde i čášt kódu zjednodušit. Zkusím se ještě zamyslet nad tím, jak tyhle základní funkce, spolu s `write`,`stag`, vylepšit.
> Slovníky překládající typy na funkce bych vyrobil jednou v čase kompilace místo při každém vstupu do funkce.
Jasný, to zní líp.
> V HTML bych asi odlišoval escapování textu od escapování atributů. V textu není potřeba escapovat uvozovky.
Jaká je za tímto motivace? Rychlost nebo čitelnost výsledného zdrojáku? Co je možná zajímavé dodat je, že normální uvozovky se vzhledem k chytrému uvozovkovátku v textu spíše neobjeví, takže se jich tolik neescapuje.
> V HTML bych neescapoval triviální hodnoty atributů (například rozměry obrázků).
Stejná otázka, není mi moc jasné, proč z escapování dělat nějaké výjimky, nadměrné escapování nemůže uškodit, ne?
Teď mě ještě napadlo, že by bylo asi výhodnější, umět tagname, atributy, ale i obsah overridenout, ale může tam být default, pak půjde i čášt kódu zjednodušit
> Teď mě ještě napadlo, že by bylo asi výhodnější, umět tagname, atributy, ale i obsah overridenout, ale může tam být default, pak půjde i čášt kódu zjednodušit
Provedeno v fe63458a51cb40cd3cf4bebbcd83ffd5185c7d21, co tomu říkáš @mj?
Stejná otázka, není mi moc jasné, proč z escapování dělat nějaké výjimky, nadměrné escapování nemůže uškodit, ne?
U obojího především čitelnost vygenerovaného HTML.
Co je možná zajímavé dodat je, že normální uvozovky se vzhledem k chytrému uvozovkovátku v textu spíše neobjeví, takže se jich tolik neescapuje.
To máš pravdu, tohle činí můj komentář podstatně méně zajímavým :)
Taková metoda existuje?
Pardon, tagname jsem přehlédl a další příklad teď nevidím.
> Stejná otázka, není mi moc jasné, proč z escapování dělat nějaké výjimky, nadměrné escapování nemůže uškodit, ne?
U obojího především čitelnost vygenerovaného HTML.
> Co je možná zajímavé dodat je, že normální uvozovky se vzhledem k chytrému uvozovkovátku v textu spíše neobjeví, takže se jich tolik neescapuje.
To máš pravdu, tohle činí můj komentář podstatně méně zajímavým :)
> Taková metoda existuje?
Pardon, tagname jsem přehlédl a další příklad teď nevidím.
Také z toho mám poměrně dobrý první dojem. HTML generátor vypadá použitelné, na TeXovém to bude chtít ještě zapracovat (pokud dobře chápu, tak momentálně ždný použitelný není).
Také z toho mám poměrně dobrý první dojem. HTML generátor vypadá použitelné, na TeXovém to bude chtít ještě zapracovat (pokud dobře chápu, tak momentálně ždný použitelný není).
Také z toho mám poměrně dobrý první dojem. HTML generátor vypadá použitelné, na TeXovém to bude chtít ještě zapracovat (pokud dobře chápu, tak momentálně ždný použitelný není).
Také z toho mám poměrně dobrý první dojem. HTML generátor vypadá použitelné, na TeXovém to bude chtít ještě zapracovat (pokud dobře chápu, tak momentálně ždný použitelný není).
Nejspíš jedna velká třída se spoustou funkcí, některé sdílené i mezi HTML a TeX pipelinami. Třída se dá poté overridovat, KSP si pomocí toho může například handlovat svoje fancy odkazy.
Také místo vracení stringů z rekurzivní funkce (což je pomalé) spíš vypisovat rovnou do file handlu, který by mohl být dostupný v
self
u.První dojem: Líbí se mi to.
Zde je pár nápadů:
Je hezké, že se spousta typů ošetří voláním generické funkce ve stylu
generate_simple_inline_tag
, ale není mi jasné, proč se jí vždycky explicitně předává název tagu získaný volánímself.tagname(e)
a atributy získané zself.common_attributes(e)
. Nestačilo by, kdyby si tohle funkcegenerate_simple_inline_tag
zjistila sama? Volající by to případně mohl overridovat nepovinným parametrem, kdyby potřeboval.Nebylo by lepší, kdyby funkce typu
self.stag
rovnou zapisovaly do výstupu, místo aby vracely string? (Aha, jasně, teď někdy volášwriteln
a někdywrite
... možná z toho udělat booleovský argument? Viz níže.) Možná by se také mohly jmenovat nějak intuitivněji. Třebastart_tag
?Podobně
iup
aidown
bych raději pojmenoval méně zkratkovitě. Třebaindent_up
aindent_down
? (Přemýšlím, jestli rovnou nevyrobit funkce pro otevření a zavření "blokového" tagu, které se budou starat i o indentaci. Tím by se vyřešilo i to, že je někdy potřebawrite
a jindywriteln
.)U metod, které obecný
OutputGenerator
volá, ale čeká, že je nadefinují až potomci (třebatagname
), by bylo hezčí, kdyby je sam nadefinoval s nějakou prázdnou implementací (třeba...
nebo vyhození výjimky). Pak bude jasnější, jak vypadá rozhraní.V
escape_special_chars
pro HTML děláš věci jakotext = re.sub(re.compile(r"&"), "&", text)
. Jednak mi není jasné, proč regex explicitně kompiluješ. Ale hlavně nevím, proč vůbec regex, když by to zvládla metodareplace
na stringu.V HTML bych asi odlišoval escapování textu od escapování atributů. V textu není potřeba escapovat uvozovky.
V HTML bych neescapoval triviální hodnoty atributů (například rozměry obrázků).
Slovníky překládající typy na funkce bych vyrobil jednou v čase kompilace místo při každém vstupu do funkce.
Taková metoda existuje?
tagname
, který zmiňuješ, má implementaci tady. Souhlasím, že by měl OutputGenerator implementovat všechny metody, které čeká.Jojo, asi máš pravdu, já jsem původně myslel, že se budou používat častěji a mít tam celé názvy by byl pain, ale AutoComplete existuje... Předělám.
Z nějakého důvodu jsem si myslel, že to je rychlejší než stringový replace, ale teď na to koukám, že není, předělám.
Teď mě ještě napadlo, že by bylo asi výhodnější, umět tagname, atributy, ale i obsah overridenout, ale může tam být default, pak půjde i čášt kódu zjednodušit. Zkusím se ještě zamyslet nad tím, jak tyhle základní funkce, spolu s
write
,stag
, vylepšit.Jasný, to zní líp.
Jaká je za tímto motivace? Rychlost nebo čitelnost výsledného zdrojáku? Co je možná zajímavé dodat je, že normální uvozovky se vzhledem k chytrému uvozovkovátku v textu spíše neobjeví, takže se jich tolik neescapuje.
Stejná otázka, není mi moc jasné, proč z escapování dělat nějaké výjimky, nadměrné escapování nemůže uškodit, ne?
Provedeno v
fe63458a51
, co tomu říkáš @mj?U obojího především čitelnost vygenerovaného HTML.
To máš pravdu, tohle činí můj komentář podstatně méně zajímavým :)
Pardon, tagname jsem přehlédl a další příklad teď nevidím.
Také z toho mám poměrně dobrý první dojem. HTML generátor vypadá použitelné, na TeXovém to bude chtít ještě zapracovat (pokud dobře chápu, tak momentálně ždný použitelný není).
Také z toho mám poměrně dobrý první dojem. HTML generátor vypadá použitelné, na TeXovém to bude chtít ještě zapracovat (pokud dobře chápu, tak momentálně ždný použitelný není).
Tak jest. LaTeXGenerator je intenzivně WIP záležitost.