Autor Zpráva
liborse
Profil
Zdravím,

na této diskuzi jsem našel více náznaků dané problematiky, ale nic zatím přesně nezodpovědělo můj dotaz, takže píši sem. V rámci svých projektů bych chtěl uživatelům zpříjemnit život tak, že by se pevná mezera doplňovala sama. Teď jsem to experimentálně zkusil a trochu se tím ničí blokové odstavce. Nahrazuji to takto (je to jen testovací, takže úroveň kódu neřešte):

	$text=str_replace("a ", "a ", $text);
	$text=str_replace("A ", "A ", $text);
	$text=str_replace("i ", "i ", $text);
	$text=str_replace("I ", "I ", $text);
	$text=str_replace("k ", "k ", $text);
	$text=str_replace("K ", "K ", $text);
	$text=str_replace("o ", "o ", $text);
	$text=str_replace("O ", "O ", $text);
	$text=str_replace("s ", "s ", $text);
	$text=str_replace("S ", "S ", $text);
	$text=str_replace("u ", "u ", $text);
	$text=str_replace("U ", "U ", $text);
	$text=str_replace("v ", "v ", $text);
	$text=str_replace("V ", "V ", $text);
	$text=str_replace("z ", "z ", $text);
	$text=str_replace("Z ", "Z ", $text);


Samozřejmě to nepostihuje celou tuto problematiku, ale dle mého názoru jako základ by to snad mohlo stačit. Nemůže tato funkce působit problémy? Zrovna mě nic nenapadá, ale co když ano. Osobně si myslím, že to řešení je ok, ale problém je v blokovém zarovnání, které používám. Jak to vnímáte vy? Rád bych věděl váš názor na toto:

1. Má podle vás taková funkce smysl a praktický přínos, nebo je lepší to psát ručně či to vůbec neřešit? Mám ale dojem, že typografie by se měla dodržovat i na webu.

2. Myslíte si, že je vhodné používat zarovnání do bloku a případně jaký máte názor na kombinaci blokového zarovnání a funkce doplňování nedělitelných mezer?
Bubák
Profil
Myslíte si, že je vhodné používat zarovnání do bloku...?
Krátký řádek zarovnat na praporek, delší řádek je možné zarovnat do bloku.
V podstadě souhlasím s tím, co jsem našel v diskusi na Interval.cz:
Autor komentáře: Michal Kubeček

Datum vložení: 14.12.2002 0:42:44

Hlavním kritériem by měla být šířka sloupce. Je-li dostatečná, aby se na řádek vešlo zhruba těch 60-65 znaků, které se obvykle doporučují pro papírovou sazbu, vypadá lépe zarovnání do bloku. Je-li sloupec příliš úzký, vypadá zarovnání do bloku naprosto tragicky a je nutné zarovnávat na praporek. Co do čitelnosti je samozřejmě vždy lepší zarovnání na praporek, ale u širších sloupců je rozdíl relativně malý, takže lze upřednostnit estetické hledisko.

zdroj: http://interval.cz/puvodni-diskuse/formatujeme-seznamy-a-vycty-v-css.html

problém je v blokovém zarovnání
Máte na mysli, že obyčejná pevná mezera nemění svou šířku?

Požná plácnu nesmysl, nebo i tři:
- mám dojem, že existuje i tvrdá mezera s proměnlivou šířkou
- zadává se číselnou entitou
- IE6 ji zobrazí jako "čtvereček"
liborse
Profil
Požná plácnu nesmysl, nebo i tři:
- mám dojem, že existuje i tvrdá mezera s proměnlivou šířkou
- zadává se číselnou entitou
- IE6 ji zobrazí jako "čtvereček"


Mno, to zní zajímavě, blbé je, že "IE6" to neumí. Bohužel pořád nelze ho ignorovat. Já narážel především na to, že při blokovém zarovnání není ani tak problém s pevnou mezerou, ale s rozdílnými velikostmi mezer, což mi dost vadí. Po přidání pevné mezery se to ještě zhorší. Kamarád, co se zabývá grafikou mi doporučil texty upravovat tak, že poměním slova a minimalizuju tak mezery. Mě to přijde ale jako krajně nespolehlivé, jelikož ač uvedu písmo, jeden prohlížeč ho vykreslí tak, druhý onak a pak se mohu jít klouzat. Částečně to řeším zadáváním přes px, ale zas tím odstřihnu lidi, kteří si text chtějí zvětšit (i když na FF to třeba jde ;) )...

Myslíte tedy, že tam tu funkci mám dát a nějak dát možnost ji vypnout? A pokud ano, tak globálně na celý projekt, nebo v rámci článků?

Děkuji za reakce.
Bubák
Profil
Požná plácnu nesmysl, nebo i tři:
S největší pravděpodobností jsem plácnul nesmysl, další dva se odvíjí z prvního. Nepodařilo se mi nic o pevné mezeře s proměnlivou šířkou najít.

Kamarád, co se zabývá grafikou mi doporučil
Webová stránkla není obrázek.
Mě to přijde ale jako krajně nespolehlivé
Přesně tak. Nikdy není dobré spoléhat na to, že uživatel má písmo Bflmpsvz a s předepsanou velikostí.
Mastodont
Profil
liborse
dle mého názoru jako základ by to snad mohlo stačit. Nemůže tato funkce působit problémy?
Podle mého názoru je to špatně a problémy to dělat bude například u textu lokomotiva na kolejích, protože tvůj kód nahrazuje mezeru za pevnou mezeru za každým A, nikoli jen za spojkou A. Takže dostaneš lokomotiva na kolejích, a to už je hodně dlouhé. Případně si to zkus na textu "turisti vystoupili na horu Sněžka a zde poobědvali" :-))
Alphard
Profil
Tohle není snad ani o PHP, hodilo by se to spíš do zrušené sekce Typografie.
Můj názor: typografii určitě ano, i za cenu drobných problémů. Radši trochu jinou šířku mezer než jednopísmennou předložku na konci každého třetího řádku. Pokud to podmínky umožňují, používám Texy!. Vyřeší i víc typografických problémů (třeba uvozovky), umožňuje i formátování a je-li to třeba, lze s ním validovat html vstupy.
Jan Tvrdík
Profil
liborse:
Případně se podívej jen na Typografický modul (pod GPL licencí).
liborse
Profil
Přemýšlel jsem že bych uživateli dal možnost uložit to standardně a nebo s vložením pevných mezer, ale jak to čtu, tak raději tu možnost nebudu zavádět. Chtěl jsem to mít typograficky správné.

Jinak o Texy! jsem přemýšlel (na jednom projektu ho mám), ale musel bych ho implementovat do mého redakčního systému a nevím, jak je to náročné. Navíc by se musel kamarádit s TinyMCE, což je docela obtížné (těžce jsem tam bojoval i s rozšířeným bbcode). Ještě nad tím popřemýšlíme. Díky za rady.
liborse
Profil
I když...

Podle mého názoru je to špatně a ...

A co takto:

    $text=str_replace("a ", " a ", $text);
    $text=str_replace(" A ", " A ", $text);
    $text=str_replace(" i ", " i ", $text);
    $text=str_replace(" I ", " I ", $text);
    $text=str_replace(" k ", " k ", $text);
    $text=str_replace(" K ", " K ", $text);
    $text=str_replace(" o ", " o ", $text);
    $text=str_replace(" O ", " O ", $text);
    $text=str_replace(" s ", " s ", $text);
    $text=str_replace(" S ", " S ", $text);
    $text=str_replace(" u ", " u ", $text);
    $text=str_replace(" U ", " U ", $text);
    $text=str_replace(" v ", " v ", $text);
    $text=str_replace(" V ", " V ", $text);
    $text=str_replace(" z ", " z ", $text);
    $text=str_replace(" Z ", " Z ", $text);
DoubleThink
Profil *
Déle už přihlížet nevydržím.
Za prvé, malé a není předložka, je to spojka a ta může být kliďo na konci řádku.
Za druhé, HTML interpreti považují za mezeru i další znaky, například tabulátor nebo nový řádek.
A za třetí, takovou baterii příkazů by mohl použít jedině blázen nebo sebemrskač.

Takže raději něco v tomto smyslu:

$text = preg_replace('|(\s[ksvzouiKSVZOUIA])\s|', '$1 ', $text);
liborse
Profil
Za prvé, malé a není předložka, je to spojka a ta může být kliďo na konci řádku.

Jste si jist? Je to tak typograficky? Jistěže to není předložka, ale 2x se mi na konci řádku nelíbí. Ale budiž, jestli je to tak v pravidlech, tak ty mají přednost samozřejmě.

A za třetí, takovou baterii příkazů by mohl použít jedině blázen nebo sebemrskač.

No jistě - v textu jsem psal, že kód je jen orientační. ;) Vím, že je to prasárna, ale takový kód přesně vyjadřoval, co bych s tím udělal, jen ve více příkazech, berte to jen jako ilustraci. Snažím se takové konstrukce eliminovat, takže to berte s rezervou. Hlavní problém je tam asi v časové náročnosti, že? Protože to znovu prochází text, já to chápu.

Takže raději něco v tomto smyslu:

$text = preg_replace('|(\s[ksvzouiKSVZOUIA])\s|', '$1 ', $text);


K preg_replace jsem zatím moc nepřirostl, vůbec regulární výrazy mi dělají problém. :-( Už když jsem psal rozšíření funkce pro bbcode, bylo to dost zajímavé, ale nakonec jsem to i s preg_replace zvládl. Vím, že jsou na to i české stránky, ale i po hodinách studia s tím pořád mám problémy... Nechybí tam mezera?

Problém jsem nakonec vyřešil tak, že uživateli jsem nabídl nové tlačítko, přes které může pevnou mezeru vložit sám či si ji tam může dopsat ručně v kódu html, a je po problému. Vyhnu se tak možným konfliktům.

PS - jsem paranoidní, nebo mi někdo upravil za zády příspěvek? Opravoval jsem tam kód a zas se vrátila stará verze, bez mezery před a v kódu. :-D

Díky všem za podnětnou diskuzi.
DoubleThink
Profil *
v textu jsem psal, že kód je jen orientační.
Nic takového jako orientační kód v programování neexistuje. Buď se daný algoritmus použije nebo ne.

Nechybí tam mezera?
Ne. \s je obecný whitespace znak.

Opravoval jsem tam kód a zas se vrátila stará verze, bez mezery před a v kódu.
Asi cache.
Timy
Profil
Bubák
mám dojem, že existuje i tvrdá mezera s proměnlivou šířkou “ & „S největší pravděpodobností jsem plácnul nesmysl, další dva se odvíjí z prvního. Nepodařilo se mi nic o pevné mezeře s proměnlivou šířkou najít.
Nevím jestli jsi to myslel jen z pohledu HTML nebo obecně, tak pro jistotu: taková mezera existuje, nazývá se pevná mezera. Jestli je pro ni i nějaká HTML entita nevím.
Bubák
Profil
Timy
Měl jsem na mysli HTML.
liborse
Profil
DoubleThink: Ok, nikdo nejsme dokonalí. Já to myslel tak, že raději napíši fungující skript a ten pak ladím. Tento přístup se mi párkrát osvědčil. Chápu vaše rozčilení z toho kódu, ale raději jsem funkci nastínil v kódu, který umím, pak bych to zkusil převést do něčeho optimálního. Kdybyste viděl kódy některých mých spolužáků, asi byste jako já zamáčkl slzu. Já se programování učím stále za běhu, holt nejsem dokonalý. ;)
Bubák
Profil
Hlavní problém je tam asi v časové náročnosti, že?
Pokud tím proženeš stránku jen jednou před jejím uložením, tak dy to zas tolik nemuselo vadit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: