Az SGML (Standard Generalized Markup Language) egy szövegleíró nyelv. Leginkább a HTML-hez lehetne hasonlítani, valójában a HTML is az SGML nyelvből származtatható. A szöveg tagolását, formázását tag-ekkel oldják meg a HTML-hez hasonlóan, azonban a HTML-től eltérően a tag-eket mi definiálhatjuk tetszés szerint, olyan nevet adhatunk nekik, amit logikusnak tartunk. Ezeket a tag definíciókat egy DTD dokumentumleíró fájlban kell megadni. A linuxos dokumentációk ma még a LinuxDoc DTD-t használják, bár már egy ideje fontolgatják linuxos körökben a DocBook DTD-re való áttérést, amely világszerte elterjedt a technikai dokumentációk leírására; ez sokkal logikusabb felépítésű és gazdagabb, mint a LinuxDoc DTD. Az áttérés számos technikai nehézséggel jár, ezért aki most akar bekapcsolódni a Linux Documentation Project-be, annak még a LinuxDoc DTD-vel is meg kell ismerkednie.
Az SGML formátum előnye, hogy sokféle más formátumra könnyen konvertálható. Így elég az SGML dokumentumot karbantartani, és változtatás esetén egyszerűen legenerálhatóak a különböző formátumú változatok. Az SGMLtools csomag ebben az átalakításban segít. Ez a dokumentumban az SGMLtools 1.0.9-es verziójára vonatkozik, ez a legutolsó verzió, amely a LinuxDoc DTD-re alapul. Az csomag 2.x verziói már a DocBook DTD-t támogatják. Sajnos mindkét sorozat fejlesztése abbamaradt, mert a SGMLtools projekt vezetője más elfoglaltságai miatt abbahagyta a fejlesztést. A program letölthető a projekt honlapjáról.
A linuxos HOWTO-kat általában plain text, HTML, DVI és PostScript formátumban terjesztik, így az én leírásom is ezekre fog koncentrálni. Nem tárgyalom viszont az SGMLtools olyan tulajdonságait, amelyek a dokumentációjából is megismerhetők.
A továbbiakban feltételezem, hogy az SGMLtools 1.0.9 telepítve van a gépedre. Sajnos valami oknál fogva (magyarok lustasága?) az így feltelepített SGMLtools egyáltalán nem ismeri, és nem támogatja a magyar nyelvet. Az alábbiakban megpróbálom összefoglalni, hogyan lehet ,,magyar-kompatíbilisé'' tenni a programot.
Az magyar nyelv karaktereinek helyes megjelenítéséhez a Latin-2 karakterkészlet szükséges, azonban az SGMLtools csak a Latin-1 karakterekkel hajlandó dolgozni. Viszonylag szerencsések vagyunk, mert sok más kelet-európai néppel ellentétben a magyar szövegek Latin-1 karakterekkel is olvashatóak, a különbség mindössze a hosszú `ö' és a hosszú `ü' megjelenítésében van, ezek helyett a Latin-1-es kódtáblában `o~' illetve `u^` szerepel. Megpróbálhattam volna átírni a programot, hogy ezentúl a Latin-2 kódtáblát is tudja használni, de a célom nem ez volt. Én minél gyorsabban használni szerettem volna az SGMLtools-t a HOWTO-k magyarítására, nem akartam belemélyedni egy több tízezer soros program átírásába. Néhány csúnya, de működőképes változtatást eszközöltem a program egyes fájljain, így rövid idő alatt célhoz értem.
Az első feladat az volt, hogy az SGMLtools elfogadja a magyar nyelvet, mint érvényes paramétert. Ez azért fontos, mert bizonyos szövegeket, amiket a HTML, plain text, stb. fájlokba beletesz a program, innen vesz. Rövid keresgélés után rábukkantam a /usr/lib/sgml-tools/SGMLtools/Lang.pm nevű fájlra, amit így módosítottam:
[... vágás ...]
@Languages = qw(
en english english
de deutsch german
nl nederlands dutch
fr français french
es espańol spanish
da dansk danish
no norsk norwegian
se svenska swedish
pt portuges portuguese
ca catalŕ catalan
it italiano italian
ro română romanian
hu magyar hungarian
);
[... vágás ...]
$translations = {
"Previous" => {
"nl" => "Terug",
"de" => "Zurück",
"es" => "Página anterior",
"fr" => "Page précédente",
"da" => "Forrige",
"no" => "Forrige",
"se" => "Föregĺende",
"pt" => "Página anterior",
"ca" => "Pŕgina anterior",
"it" => "Indietro",
"ro" => "Înapoi",
"hu" => "Előző"
},
"Next" => {
"nl" => "Verder",
"de" => "Weiter",
"es" => "Página siguiente",
"fr" => "Page suivante",
"da" => "Nćste",
"no" => "Neste",
"se" => "Nästa",
"pt" => "Página seguinte",
"ca" => "Pŕgina següent",
"it" => "Avanti",
"ro" => "Înainte",
"hu" => "Következő"
},
"Contents" => {
"nl" => "Inhoud",
"de" => "Inhalt",
"es" => "Índice general",
"fr" => "Table des matičres",
"da" => "Indhold",
"no" => "Innhold",
"se" => "Innehĺllsförteckning",
"pt" => "Índice",
"ca" => "Índex",
"it" => "Indice",
"ro" => "Cuprins",
"hu" => "Tartalom"
},
"Table of Contents" => {
"nl" => "Inhoudsopgave",
"de" => "Inhaltsverzeichnis",
"es" => "Índice general",
"fr" => "Table des matičres",
"da" => "Indholdsfortegnelse",
"no" => "Innholdsfortegnelse",
"se" => "Innehĺllsförteckning",
"pt" => "Índice geral",
"ca" => "Índex general",
"it" => "Indice Generale",
"ro" => "Cuprins",
"hu" => "Tartalomjegyzék"
}
};
[... vágás ...]
sgml2txt -f -c latin -l hu <fájlnév>.sgml
ISOlat1
<!ENTITY oacute SDATA "[oacute]"--=small o, acute accent-->
<!ENTITY Oacute SDATA "[Oacute]"--=capital O, acute accent-->
<!ENTITY odblac SDATA "[odblac]"--=small o, hungarumlaut accent-->
<!ENTITY Odblac SDATA "[Odblac]"--=capital O, hungarumlaut accent-->
<!ENTITY ocirc SDATA "[ocirc ]"--=small o, circumflex accent-->
<!ENTITY Ocirc SDATA "[Ocirc ]"--=capital O, circumflex accent-->
[... vágás ...]
<!ENTITY uacute SDATA "[uacute]"--=small u, acute accent-->
<!ENTITY Uacute SDATA "[Uacute]"--=capital U, acute accent-->
<!ENTITY udblac SDATA "[udblac]"--=small u, hungarumlaut accent-->
<!ENTITY Udblac SDATA "[Udblac]"--=capital U, hungarumlaut accent-->
<!ENTITY ucirc SDATA "[ucirc ]"--=small u, circumflex accent-->
<!ENTITY Ucirc SDATA "[Ucirc ]"--=capital U, circumflex accent-->
[... vágás ...]
Az alábbi fájlokat is módosítottam az /usr/lib/entity-map/0.1.0/ könyvtárban. Ezek egyike a plain text-ért felelős, de a többi kibővítése sem okozhat nagy bajt. Nem néztem részletesen utána...
ISOlat1.2ab
[oacute] o
[Oacute] O
[odblac] oe
[Odblac] Oe
[ocirc ] o
[Ocirc ] O
[... vágás ...]
[uacute] u
[Uacute] U
[udblac] ue
[Udblac] Ue
[ucirc ] u
[Ucirc ] U
[... vágás ...]ISOlat1.2as
Most már nem részletezem annyira, mert unalmas. Ezeket kell beilleszteni:
[odblac] {odblac}
[Odblac] {Odblac}
[udblac] {udblac}
[Udblac] {Udblac}
ISOlat1.2l1b
[odblac] ő
[Odblac] Ő
[udblac] ű
[Udblac] Ű
A HTML, mint a WWW-n megjelenő dokumentumok leíró nyelve, az egyik legfontosabb kimeneti formátum. Az /usr/lib/entity-map/0.1.0/ISOlat1.2html entity map az ékezetes karakterekre a HTML szabványokban rögzített írásmódot preferálja, tehát `á' = `á' stb. Sajnos azonban a magyar nyelvben előforduló {ő,ű} betűknek nincs kódjuk &blablabla; formában. Ha -- hibásan -- `õ' és `û' alakban írjuk őket, akkor egy Latin-2 fontra beállított browser egy fordított kérdőjellel, kockával, vagy valami hasonló karakterrel fogja ezeket megjeleníteni, teljesen jogosan, hiszen ez a két betű (`õ' és `û') nincs benne a Latin-2 karaktertáblában. Latin-1 fonttal megjelennek ugyan, de a hullámos `ö' és a kalapos `ü' gusztustalanul néz ki magyar szövegekben. Minden modern browser képes a 8 bites ékezetes karaktereket tartalmazó szöveg helyes megjelenítésére, ezért az ISOlat1.2html fájlban az összes magyar ékezetes betűt átírtam a parancs alakról a közvetlen alakra, és beillesztettem a következő sorokat:
[odblac] ő
[Odblac] Ő
[udblac] ű
[Udblac] Ű
A DVI és a PostScript fromátumokat a TeX programcsomag segítségével állítja elő az SGMLtools. A TeX egy rendkívül sokoldalú, bonyolult tördelőprogram; tipográfiailag kifogástalan, nyomdai minőségű dokumentumok előállítására is képes. A továbbiakban feltételezem, hogy telepítve van egy viszonylag friss teTeX disztribúció, amely minden rendes Linux disztribúció része.
Vegyük sorra, milyen változtatások szükségesek az SGMLtools-ban és a TeX-ben, hogy a magyar tipográfiai konvencióknak megfelelő dokumentumokat kapjunk:
[odblac] \H{o}
Módosítsuk így a következő sorokat:
[Odblac] \H{O}
[udblac] \H{u}
[Udblac] \H{U}
[otilde] \H{o}
[Otilde] \H{O}
[ucirc ] \H{u}
[Ucirc ] \H{U}
texconfig hyphen latex
parancsot, töröljük ki a komment jelet (%) a huhyph.tex elől, és mentsük a fájlt. Ezek után a TeX tudni fogja, hogy magyar nyelvű dokumentumok elválasztásához a huhyph.tex fájlt kell használnia.
`<tt>make dep</tt>'
,
akkor a új magyar.ldf
-ben definiált ,,aktív aposztróf'' bekavar, és a
</tt>
nem érvényesül. Ennek hatása az, hogy a dokumentum innentől
végig írógépbetűvel lesz szedve. Az ,,aktív aposztróf''-ra vonatkozó sorok ugyan
kikommentezhetőek, de ezzel elvesznének a magyar idézőjelek, mert ezt ezzel
oldották meg. Ismét bele kell nyúlnunk az
/usr/lib/sgml-tools/dist/sgmltool/latex2e/mapping fájlba, és a következő
,,hotfixet'' eszközölni:
<tt> "{}{\\ttfamily "
</tt> "}{}"
A beszúrt `{}' jelek (üres environment) gondoskodnak arról, hogy az ,,aktív aposztróf'' ne akadjon össze a fontformázó TeX paranccsal.
<ref> "{\\itshape \\ref{[ID]}. {[NAME]}\\/}
</ref>
Legyünk óvatosak, ha ilyen kifejezést látunk valahol:
DOS program switches are obtained with <tt>/switch</tt>, Linux
switches with <tt/-switch/ or <tt/--switch/.
Az idézet a Dos-Win-to-Linux-HOWTO.sgml-ből van, a hibás részt pirossal jelöltem. A probléma a következő: a `--' karaktersorozat a TeX-ben parancs, ezzel kell jelölni a nagykötőjelet (magyarban a gondolatjelet is), ez az úgynevezett en-dash karakter. Ha két `-' jelet szeretnénk egymás után írni, ami a szerző szándéka is volt ebben az esetben, akkor így tegyük:
A DOS alatt egy program kapcsolóit <tt>/kapcsoló</tt> formában
kell megadni, míg a Linux alatt a <tt/-kapcsoló/ vagy a
<tt/-/<tt/-kapcsoló/
használatos.
-rw-r--r-- root/root 4251 1999-10-24 12:28 usr/lib/sgml-tools/SGMLTools/Lang.pm -rw-r--r-- root/root 13586 1999-10-24 12:33 usr/lib/sgml-tools/dist/sgmltool/latex2e/mapping -r--r--r-- root/root 4557 1999-10-24 12:24 usr/lib/entity-map/0.1.0/ISOlat1 -r--r--r-- root/root 748 1999-10-22 15:04 usr/lib/entity-map/0.1.0/ISOlat1.2ab -r--r--r-- root/root 1144 1999-10-22 15:04 usr/lib/entity-map/0.1.0/ISOlat1.2as -r--r--r-- root/root 728 1999-10-22 15:04 usr/lib/entity-map/0.1.0/ISOlat1.2l1b -r--r--r-- root/root 1000 1999-10-22 15:04 usr/lib/entity-map/0.1.0/ISOlat1.2html -rw-r--r-- root/root 910 1999-10-24 15:02 usr/lib/entity-map/0.1.0/ISOlat1.2tex
Erre a dokumentumra nem vonatkozik semmilyen garancia. Nagyon igyekeztem, hogy hibátlan legyen, de mindenki csak a saját felelősségére használhatja az itt közölt információkat. Semmilyen esetben sem lehet engem felelőssé tenni az itt leírtak felhasználásából eredő károkért.
A visszajelzéseket örömmel veszem. Bármilyen kérdést, kérést, javaslatot szívesen meghallgatok.
Copyright (c) Tímár András, 1999.