diff options
Diffstat (limited to 'Master/texmf-dist/doc/support/gustprog/porzadki.pl')
-rwxr-xr-x | Master/texmf-dist/doc/support/gustprog/porzadki.pl | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/support/gustprog/porzadki.pl b/Master/texmf-dist/doc/support/gustprog/porzadki.pl new file mode 100755 index 00000000000..793eede8a9d --- /dev/null +++ b/Master/texmf-dist/doc/support/gustprog/porzadki.pl @@ -0,0 +1,214 @@ +#! /usr/bin/perl + +# Autor: Piotr Kłosowski <pklosows@press.umcs.lublin.pl> Wersja +# pierwsza działaj±ca (0.1a): 1. lutego 1998 r. + +# Skrypt "porzadki" jest napisanym od nowa następc± awkowego skryptu +# "normtext.awk" z lata 96 r., który z kolei był rozwinięciem pomysłów +# Tomasza Przechlewskiego. + +# Filtr do robienia porz±dków w duchu TeX-a w plikach tekstowych +# (przede wszystkim znaki przestankowe i wstawianie niełamliwych spacji) +# Podstawowe zastosowanie to pomoc w konwersji tekstów napisanych w +# różnych edytorach. + +# Główne założenia i ograniczenia: +# - tekst jest podzielony na akapity pustymi wierszami, +# - tekst jest w języku polskim (kodowanie iso-latin2), +# - wnętrze akapitów z wyj±tkiem linijek zakończonych przez "\\" może ulegać +# przeformatowaniu (próba usunięcia przeniesień wyrazów) (uwaga na ew. +# znaki komentarza - "%"!) + +# ======================================================================== +# Stałe wykorzystywane w skrypcie + +$Odstep = "[\ \t~]"; +$NieOdstep = "[^\ \t~]"; +$Spojnik = "[aAiIoOuUwWzZ]"; +$Litera = "[a-zA-Z±ˇćĆęĘłŁńŃóÓ¶¦żŻĽ¬]"; +$NieLitera = "[^a-zA-Z±ˇćĆęĘłŁńŃóÓ¶¦żŻĽ¬]"; +$DuzaLitera = "[A-ZˇĆĘŁŃÓ¦Ż¬]"; +$MalaLitera = "[a-z±ćęłń󶿼]"; +$Cyfra = "[0-9]"; +$CyfraRzymska = "[IVXL]"; + +$PominSrodowisko ="(tabular|array|tabbing|figure|equation|eqenarray|verbatim)"; +# ======================================================================== +sub PolaczWiersze { +# usunięcie przeniesień + s/($Litera)-$Odstep*\n$Odstep*($MalaLitera)/$1$2/g; + s/($Litera)-$Odstep*\n$Odstep*-($Litera)/$1\\dywiz $2/g; + s/\n$Odstep+\n/\\\\\ \\\\\ /g; + tr/\n/\ /; +}; +# ======================================================================== +sub PoprawAkapit { + &PoprawNielamliwe; + &PoprawPrzestankowe; +}; +# ------------------------------------------------------------------------ +# Niełamliwe spacje +sub PoprawNielamliwe { + &NielamliweSpojniki; + &NielamliweInicjaly; + &NielamliweDaty; + &NielamliweBibliograf; + &NielamliweJednostki; + &NielamliweTytuly; + &NielamliweInne; + &NielamliweWyliczenia; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje przy słowach jednoliterowych (uwaga na cyfrę rzymsk± "I") +sub NielamliweSpojniki { + s/([\(,]|$Odstep+)($Spojnik)$Odstep+($Spojnik)$Odstep+/$1$2~$3~/g; + s/([\(,]|$Odstep+)($Spojnik)$Odstep+/$1$2~/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje przy inicjałach +sub NielamliweInicjaly { + s/($DuzaLitera)\.$Odstep*($DuzaLitera)\.$Odstep*($DuzaLitera$MalaLitera)/$1\.~$2\.~$3/g; + s/($DuzaLitera)\.$Odstep*($DuzaLitera$MalaLitera)/$1\.~$2/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje przy skrótach zwi±zanych z pisowni± daty +sub NielamliweDaty { + s/($Cyfra)$Odstep*(r|w)\./$1~$2\./g; + s/($NieLitera)(r|w)\.$Odstep*($Cyfra)/$1$2\.~$3/g; + s/($CyfraRzymska)$Odstep+w\./$1~w\./g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje przy skrótach występuj±cych w zapisie bibliograficznym +sub NielamliweBibliograf { + s/($NieLitera)([sStTzZ]|ss|SS|[vV]ol|[aA]rt)\.$Odstep*($Cyfra|$CyfraRzymska)/$1$2\.~$3/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje między liczb± a skrótem jednostki miary +$DuzoZer = "tys\\.|mln|mld"; +sub NielamliweJednostki { + s/($Cyfra)$Odstep*($DuzoZer)/$1~$2/g; + s/($Cyfra|$DuzoZer)$Odstep*([kdcm]?[glmsVAW])($NieLitera)/$1~$2$3/g; + s/($Cyfra|$DuzoZer)$Odstep*(zł|gr|ha|t|mies|godz|min|sek)($NieLitera)/$1~$2$3$4/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje po tytułach +sub NielamliweTytuly { + s/($NieLitera)(mgr|dr|prof\.|hab\.|bp|ks\.|o+\.|¶w\.|prez\.|przew\.|red\.|min\.|gen\.|płk|mjr|kpt\.)$Odstep+/$1$2~/g; +} +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe spacje przy innych skrótach +sub NielamliweInne { + s/($NieLitera)([Tt]ab\.|[Tt]abl\.|[Rr]y[cs]\.|[Rr]ozdz\.|[Nn]r)$Odstep*($Cyfra)/$1$2~$3/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# niełamliwe półfirety przy wyliczeniach +sub NielamliweWyliczenia { + s/^-+$Odstep*/---\\enspace\ /; + s/^($Cyfra+[\.\)\/])$Odstep+/$1\\enspace\ /; + s/^($Litera[\.\)\/])[\ \t]+/$1\\enspace\ /; +}; +# ------------------------------------------------------------------------ +# Znaki przestankowe +sub PoprawPrzestankowe { + &PrzestankowePolpauzy; + &PrzestankowePauzy; + &PrzestankoweDywizy; + &PrzestankoweCudzyslowy; + &PrzestankoweWielokropki; + &PrzestankoweOdstepy; + &PrzestankoweSymbole; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# półpauzy +sub PrzestankowePolpauzy { + s/($Cyfra)$Odstep*-$Odstep*($Cyfra)/$1--$2/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# pauzy +sub PrzestankowePauzy { + s/$Odstep+-$Odstep+/\ ---\ /g; + s/$Odstep+---/~---/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# dywizy +sub PrzestankoweDywizy { + s/($Litera)-($Litera)/$1\\dywiz $2/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# cudzysłowy +sub PrzestankoweCudzyslowy { + s/^\"/,,/; + s/($NieLitera)\"($Litera)/$1,,$2/g; + s/($Odstep)\"($NieOdstep)/$1,,$2/g; + s/\"$/''/; + s/($Litera)\"($NieLitera)/$1''$2/g; + s/($NieOdstep)\"($Odstep)/$1''$2/g; + s/\\,,/\\\"/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# wielokropki +sub PrzestankoweWielokropki { + s/\.{5,}/\\dotfill\{\}/g; + s/\.{3,4}/\\ldots{}/g; +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# odstępy przy znakach przestankowych (uwaga: ryzykowne - dużo wyj±tków) +sub PrzestankoweOdstepy { + s/$Odstep*([\.;:!?\)\]])/$1/g; + s/$Odstep*,([^,])/,$1/g; + s/([\.!?;:\)\]])($Litera)/$1 $2/g; + s/([^,]),($Litera)/$1, $2/g; + s/([\(\[])$Odstep*/$1/g; +# skróty - wyj±tki + s/m\.\ +in\./m\.in\./g; + s/p\.\ +n\.\ +e\./p\.n\.e\./g; + s/l\.\ +c\./l\.c\./g; + s/w\.\ +c\./w\.c\./g; +# duże liczby + 1 while (s/(.*\d\d)(\d\d\d)/$1\\,$2/ or s/(.*\d)(\d\d\d)\\,/$1\\,$2\\,/); +}; +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# uporz±dkowanie kolejno¶ci nawias klamrowy - znak przestankowy (!!!sprawa +# zwi±zana z grupowaniem texem - nie do załatwienia w tym prostym programie) +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# symbole niematematyczne +sub PrzestankoweSymbole { + s/([^\\])([\$\%])/$1\\$2/g; + s/([^\$\<])\<([^\$\<])/$1\$\<\$$2/g; + s/([^\$\>])\>([^\$\>])/$1\$\>\$$2/g; +} +# ======================================================================== +# Zmiany w kształcie akapitu - usunięcie przeniesień i wcięć od marginesu +# i przeformatowanie na szeroko¶ć <=70 zn (domy¶lna w AUCTeX-u) +sub PrzeformatujAkapit { + s/$Odstep*\\\\/\ \\\\/g; + $IloscSlow = split; + $DlugoscWiersza = length($_[0]); + for ($i=1; $i<$IloscSlow; $i++) { + $DlugoscWiersza += length($_[$i]) + 1; + if (($DlugoscWiersza>70) || ($_[$i-1]=~/\\\\/)) { + $_[$i-1] .= "\n"; + $DlugoscWiersza = length($_[$i]); + }; + }; + $_ = join (" ", @_, "\n"); + s/$Odstep\\\\/\\\\/g; + s/\n*\\\\\n\\\\\n/\n\n/g; + s/\n$Odstep+/\n/g; +}; +# ======================================================================== +# Główny program + +$/ = ""; +$\ = "\n"; + +while (<>) { + if (/\\begin{$PominSrodowisko}/../\\end{$PominSrodowisko}/) { + next; + }; + &PolaczWiersze; + &PoprawAkapit; + &PrzeformatujAkapit; +} continue { print; }; + +# Koniec skryptu "porzadki". |