Typografické skripty

Stránka shromažďuje skripty, užitečné pro typografické úpravy textů.

Skripty pro bash

editovat

Znění skriptu je možno užít po jeho zkopírování do textového souboru s příponou .sh a jeho nastavení za spustitelný. Spuštění provedeme v linuxovém terminálu zadáním příkazu

  • sh názevsouboruskriptu názevzpracovávanéhosouboru

(nutno uzpůsobit pro nbsp a thinsp namísto vlnovek, opravit nefunkční prvky)

#!/bin/bash
# Skript pro provádění typografických náhrad v českých textech
# Uzpůsobeno pro původní existenci toliko dvou druhů mezer v dokumentech, obyčejné a nezlomitelné, zadané vlnovkou

VSTUP=$1

##################################################

# MEZERY PO JEDNOPÍSMENNÝCH PŘEDLOŽKÁCH
# Nahradí obyčejné mezery po jednopísmenných předložkách za vlnovku,
# jest-li předložka na začátku řádku, po mezeře běžné či vlnovce,
# nebo po některém ze znaků ([{‚„»"

for i in `seq 1 3`; do # zopakovati třikráte
  sed -i 's/^\([AaIiKkOoSsUuVvZz]\) /\1~/g' $VSTUP
    # nahrazení na začátcích řádků
  sed -i 's/\([(\[\{ "‚„»~]\)\([AaIiKkOoSsUuVvZz]\) /\1\2~/g' $VSTUP
    # nahrazení po daných znacích
done

##################################################

# VÝPUSTKY
# Nahradí tři tečky za výpustku

sed -i 's/\.\.\./…/g' $VSTUP

##################################################

# NÁHRADA SPOJOVNÍKŮ ZA POMLČKY
# Nahradí spojovník za pomlčku, je-li obklopen mezerami či stojí na začátku řádku a mezera následuje.
(Nutno doplnit pro spojovníky obalené pevnými mezerami)

sed -i 's/ - / – /g' $VSTUP # spojovník obklopen mezerami
sed -i 's/^- /– /g' $VSTUP # spojovník na začátku řádku, následovaný mezerami

##################################################

# UVOZOVKY
# Nahradí řetězec "text" za „text“

palce=\"
zuvozovky=kuvozovky=“

sed -i "s/$palce\([^$palce]*\)$palce/$zuvozovky\1$kuvozovky/g" $VSTUP

##################################################

# REDUKCE MEZER
# Zruší libovolný počet mezer před či za daným znakem, kupříkladu koncovou závorkou

znak="N"

sed -i "s/ \+$znak/$znak/g" $VSTUP # zrušení mezer před znakem
sed -i "s/$znak \+/$znak/g" $VSTUP # zrušení mezer po znakem

##################################################

# PŘIDÁNÍ MEZER
# Přidá mezery za znak (kupříkladu tečku), pokud chybí
# (nefunguje při opakováních, např. "nnn" → "n nn" místo kýženého "n n n ")

znak="n"

sed -i "s/$znak\([^ ]\)/$znak \1/g" $VSTUP

##################################################

# MEZERY V DATECH
# Náhrada obyčejné či chybějící mezery mezi číslem dne a měsícem (kupříkladu „27. ledna“) za nezlomitelnou.
 
msc[1]="leden";     msc[2]="ledna"
msc[3]="únor";      msc[4]="února"
msc[5]="březen";    msc[6]="března"
msc[7]="duben";     msc[8]="dubna"
msc[9]="květen";    msc[10]="května"
msc[11]="máj";      msc[12]="máje"
msc[13]="červen";   msc[14]="června"
msc[15]="červenec"; msc[16]="července"
msc[17]="srpen";    msc[18]="srpna"
msc[19]="září";     # genitiv totožný
msc[20]="říjen";    msc[21]="října"
msc[22]="listopad"; msc[23]="listopadu"
msc[24]="prosinec"; msc[24]="prosince"

for i in ${msc[*]}
 do
  sed -i "s/\([1-3]?[0-9]\.\)\($i\)/\1$nzm\2/g" $VSTUP
  sed -i "s/\([1-3]?[0-9]\.\) \($i\)/\1$nzm\2/g" $VSTUP
 done

##################################################

# SPOJENÍ SKUPIN ČÍSLIC
# Spojí nezalomitelnou mezerou skupiny číslic, oddělené doposavad běžnou mezerou.

sed -i "s/\([0-9]{3}\) \([0-9]{3}\)/\1$nzm$2/g" $VSTUP

#################################################

# REDUKCE VÍCENÁSOBNÝCH MEZER
# Vícenásobné mezery nahradí jedinou

sed -i "s/ \+/ /g" $VSTUP